quarta-feira, 12 de junho de 2013

[4] - LPCXpresso LPC1769 - Trabalhando com Exemplos.



Click here for LPCXpresso users forum. 




Olá pessoal!

Já apresentamos a interface da nossa IDE, agora vamos aprender como importar para nosso workspace os códigos exemplo inclusos na IDE para serem utilizados como base para o desenvolvimento de varias placas LPC.
Para trabalhar com esses projetos, selecione "Import project(s)" no painel Quickstart no canto inferior esquerdo da tela.

Figura 1.



A seguinte tela surgirá, conforme figura 2. Na área "Project archive (.zip)" clique em Browse para buscar o arquivo ".zip" contento os projetos exemplos.

Figura 2.

Ao clicar aparecerá a janela de busca. No meu caso o caminho para o diretório onde está os arquivos para importar foi: 

C:\nxp\LPCXpresso_5.2.4_2122\lpcxpresso\Examples\NXP\LPC1000\LPC17xx

 A figura 3 mostra qual arquivo é destinado a LPC1769. Selecione e clique em Abrir.

Figura 3.

Com o arquivo selecionado, clique em Next. 

Figura 4.

Selecione todos os exemplos e clique em Finish, como mostra a figura 5.

Figura 5.

O processo de importação se iniciará. Aguarde alguns instantes.

Figura 6.

Pronto, em Project Explorer é possível ver todos os projetos importados, no meu caso o projeto ADC já estava expandido. Como mostra Figura 7.

Figura 7.


Bom pessoal, ficamos por aqui neste tutorial. Nos próximos tutoriais vou explicar o que é o CMSIS, quais os arquivos necessários para um novo projeto e iniciaremos o estudo dos exemplos.

Abraço a todos!
Até o próximo.



3 comentários:

  1. BOM DIA EDSON,
    ESTOU PENSANDO EM FAZER UM MEDIDOR DE RPM COM 3 BOTOES
    1 LIGA E DESLIGA
    2 FAZ UMA INTERRUPÇAO (pausar o valor maximo tela)
    3 altera de rpm para radianos
    VC PODERIA ME DAR UMA AJUDA?

    ResponderExcluir
    Respostas
    1. Bom, eu não conheço esse Edson, mas vamos a resposta.
      Amigo posso ajuda-lo sim, mas em relação ao hardware já está definido? qual sensor vai usar? qual microcontrolador? essa tela eh um LCD alfanumérico ou TFT?

      Ou são nessas decisões que quer ajuda?

      e a grande pergunta: quer medir o RPM de que? de um motor qualquer ou de uma roda de bicicleta?

      Abraço Marcos,

      Aguardo Contato.

      Excluir
    2. seria um sensor de efeito hall para um motor de bancada

      usarei o lpc1769

      o lcd 2x16 alpha numerico

      tentei fazer assim
      /*
      ===============================================================================
      Name : main.c
      Author :
      Version :
      Copyright : Copyright (C)
      Description : main definition
      ===============================================================================
      */

      #ifdef __USE_CMSIS
      #include "LPC17xx.h"
      #endif

      #include
      #include
      #include //biblioteca padrão entrada ou saida

      __CRP const unsigned int CRP_WORD = CRP_NO_CRP; //Sem proteção contra leitura

      #include "LCD_Lib.h" //Inclui as bibliotecas do autor.
      #include "SysTick_Lib.h"

      //teste

      void Config_EINT0() // interrupçao
      {
      LPC_PINCON->PINSEL4 = ((LPC_PINCON->PINSEL4&~(0b11<<20)) | (0b01<<20)); //J-51 porta2.10
      NVIC_DisableIRQ(EINT0_IRQn);
      LPC_SC->EXTMODE |= 1<<0;

      LPC_SC->EXTPOLAR |= 1<<0;

      NVIC_SetPriority(EINT0_IRQn,1);

      LPC_SC->EXTINT |= 1<<0;
      NVIC_EnableIRQ(EINT0_IRQn);
      }


      //void EINT0_IRQHandler();//interrupçao

      void Config_QEI(); //PROTÓTIPO DE FUNÇÃO


      //UTILIZA LCD 2X16 COMO STREAM DE SAÍDA DA FUNÇÃO PRINTF
      extern int __sys_write (int iFileHandle, char *pcBuffer, int iLength);


      void QEI_IRQHandler()
      {
      double v_angular; // VELOCIDADE RPM

      double v_radianos; // VELOCIDADE RAD

      int v_maxima = 0; // SERIA A VARIÁVEL GLOBAL

      //RESOLUÇÃO DO ENCODER = 1 PULSOS/REVOLUÇÃO
      //PCLK_QEI = 100.000.000Hz
      //CAPMOD = 1:1


      v_angular = (3000000000*(float)LPC_QEI->QEICAP)/((float)LPC_QEI->QEILOAD);

      v_radianos = (v_angular/0.159);




      /*
      if (v_angular>v_maxima) //SERIA ISSO PROFESSOR?/ HELP-ME PLEASE
      { // LIGUEI O B1 MAS NAO OBTIVE EXITO AINDA
      v_maxima = v_angular;

      }

      */





      LCD_LIMPA_TELA(); //LIMPA A TELA E COLOCA O CURSOR NA LINHA 1 E COLUNA 1
      printf("%06.2f = RPM", v_angular);

      LCD_DESLOCA_POSICAO(2,1); //DESLOCA O CURSOR PARA LINHA 1 E COLUNA 1
      printf("%06.2f = RAD", v_radianos);

      LPC_QEI->QEICLR = 1<<1; //LIMPA O FLAG BIT TIM_int.


      }


      int main(void)

      {

      SystemInit(); //CONFIGURA OS RECURSOS BÁSICOS DO MICROCONTROLADOR. C_CLK = 100MHz
      NVIC_SetPriorityGrouping(0b010); // DETERMINA O VALOR DO PRIGROUP = 0b010

      //CONFIGURA O SysTick Timer para habilitar o uso da função delay_us();
      Config_SysTick_us();

      LCD_INICIA (0x28, 0x0c, 0x06); //INICIALIZA DO DISPLAY LCD2X16

      Config_QEI(); //Configura o módulo QEI



      while(1)
      {

      }



      return 0;
      }

      void Config_QEI()
      {
      //ATIVA O MÓDULO QEI
      LPC_SC->PCONP |= 1<<18;

      //PCLK_QEI = C_CLK = 100MHz
      LPC_SC->PCLKSEL1 = ((LPC_SC->PCLKSEL1&~(0b11<<0)) | (0b01<<0));

      //CONFIGURA OS PINOS P1.20 E P1.23 PARA A FUNÇÃO PhA E PhB, RESPECTIVAMENTE
      //LPC_PINCON->PINSEL3=((LPC_PINCON->PINSEL3&~(0B11<<8|0b11<<14)) | (0b01<<8|0b01<<14));

      LPC_PINCON->PINSEL3=((LPC_PINCON->PINSEL3&~(0B11<<8))|(0b01<<8));



      // SENSOR DE CONTATO MECANINO
      //RESOLUÇÃO DO ENCODER = 1 PULSO/ROTAÇÃO
      //PCLK_QEI = 100.000.000Hz

      //SELECIONA O MODO DE UMA FASE SEM INVERSÃO NA LOGICA INCREMENTO
      LPC_QEI->QEICONF =0;// 1<<1;


      //VALOR MÁXIMO DE INCREMENTO DO CONTADOR DE POSIÇÃO
      LPC_QEI->QEIMAXPOS = 1;//8191; //RESOLUÇÃO DO ENCODER = 2048. 2048*4-1=8191.


      //V_MAX = 6.000 RPM
      //RESOLUÇÃO DO ENCODER = 2048 PULSOS/ROTAÇÃO
      //PCLK QEI = 100.000.000Hz


      //FILTER = 60*100.000.000/(4*6.000*2048) ~~ 122
      LPC_QEI->FILTER = 122;

      //DETERMINA O PERÍODO DE TEMPO USADO PARA O CÁLCULO DA VELOCIDADE
      //PERÍODO = 1s
      LPC_QEI->QEILOAD = 100000000;


      //LIMPA O FLAG BIT DE INTERRUPÇÃO ASSOCIADA A IDENTIFICAÇÃO DO PULSO DE UM CLOCK
      LPC_QEI->QEICLR = 1<<1;

      //HABILITA A GERAÇÃO DE INTERRUPÇAO POR ESTOURO DO TEMPORIZADOR DE VELOCIDADE
      LPC_QEI->QEIIES = 1<<1;

      NVIC_SetPriority(QEI_IRQn,22); //DEFINE A PRIORIDADE DA INTERRUPÇÃO QEI
      NVIC_EnableIRQ(QEI_IRQn); //HABILITA A INTERRUPÇÃO QEI NO NVCI
      }

      mas a velocidade fica oscilando nao fica estavel

      obrigado

      Excluir