quarta-feira, 4 de setembro de 2019

Leitura de uma entrada analógica(AN0) do microcontrolador PIC18F4520 e escrevendo o valor no LCD, afim de monitorar a entrada de valores.

Olá pessoal, nessa interface da figura abaixo, montada no proteus, usando o microcontrolador PIC18F4520, temos um potenciômetro (POT-HG no Proteus), que simula a entrada de 0 a 5V no pino AN0 do microcontrolador e um LCD (LM16 no Proteus) que mostrará o valor lido de 0 a 5V,  convertido pelo conversor interno analógico/digital de 10 Bits, para um número de 0 a 1023. 
Assim se o potenciômetro for zerado (zero volts) o LCD mostrará 0 e se o potenciômetro estiver no máximo (cinco volts) o LCD mostrará 1023.

Interface de simulação montada no PROTEUS


A programação para fazer a leitura e escrever no LCD pode ser vista abaixo na figura, nela o número gerado pela conversão, deve ser convertido para texto antes de ser enviado para o LCD e podemos ver isso no comando de conversão, que converte o número inteiro em string.
Nessa programação feita no MIKROC e necessário habitar a biblioteca do LCD, CONVERÇÃO, ADC.

//definição dos pinos de ligação do LCD
sbit LCD_RS at Rc0_bit;
sbit LCD_EN at Rc1_bit;
sbit LCD_D4 at Rc2_bit;
sbit LCD_D5 at Rc3_bit;
sbit LCD_D6 at Rc4_bit;
sbit LCD_D7 at Rc5_bit;

sbit LCD_RS_Direction at TRISc0_bit;
sbit LCD_EN_Direction at TRISc1_bit;
sbit LCD_D4_Direction at TRISc2_bit;
sbit LCD_D5_Direction at TRISc3_bit;
sbit LCD_D6_Direction at TRISc4_bit;
sbit LCD_D7_Direction at TRISc5_bit;
// fim das configurações dos pinos

char text[6];
unsigned int leituraADC=0;
void main()
{
  adcon1=15;  //define todas as entradas e saídas como digitais
  trisc=0;//define o portc com saída
  trisb=255;//define o portb como entrada
  portc=0;//desliga todas as saídas do portc

  Lcd_Init();//inicializa o lcd
  Lcd_Cmd(_LCD_CLEAR);//limpa o display
  
  Lcd_Cmd(_LCD_CURSOR_OFF);//desliga o cursor, 
  ADC_init();//inicializa o leitor analogico
  while(1)
  {
    leituraADC = ADC_Read(0);
    WordtoStr(leituraADC,text);
    LCD_out(1,1,"O valor lido e:");
    delay_ms(10);
    LCD_out(2,1,text);
    Delay_ms(100);
  }
}

Espero que ajude de alguma forma em algum projeto que seja necessária a leitura analógica e escrita no LCD, tais como sensores de temperatura. Qualquer dúvida poste o comentário ou encaminhe um e-mail.


Fazendo um contagem de acionamentos de um botão no LCD com PIC18F4520.

Olá pessoal, nessa interface de simulação do Proteus fiz com o PIC18F4520 fiz um contagem de acionamentos do Botão no LCD .
A programação feita no MikroC pro PIC e nela podemos ver como ler um botão, converte o número em carácter e escreve-ló no LCD.

Interface montada no proteus para fazer a simulação do programa

Programação executada no MIKROC pro PIC:

//definição dos pinos de ligação do LCD de acordo com a ligação feita na interface
sbit LCD_RS at Rc0_bit;
sbit LCD_EN at Rc1_bit;
sbit LCD_D4 at Rc2_bit;
sbit LCD_D5 at Rc3_bit;
sbit LCD_D6 at Rc4_bit;
sbit LCD_D7 at Rc5_bit;
sbit LCD_RS_Direction at TRISc0_bit;
sbit LCD_EN_Direction at TRISc1_bit;
sbit LCD_D4_Direction at TRISc2_bit;
sbit LCD_D5_Direction at TRISc3_bit;
sbit LCD_D6_Direction at TRISc4_bit;
sbit LCD_D7_Direction at TRISc5_bit;
// fim das configurações dos pinos

//Variáveis utilizadas para contagem(conta) e conversão de número para texto(txt)

int conta=0;
char txt[7];

void main()

{ 
adcon1=15;  //define todas as entradas e saídas como digitais  
trisc=0;//define o portc com saída 
trisb=255;//define o portb como entrada 
portc=0;//desliga todas as saídas do portc

Lcd_Init();//inicializa o lcd  

Lcd_Cmd(_LCD_CLEAR);//limpa o display  
Lcd_Cmd(_LCD_CURSOR_OFF);//desliga o cursor, para nao ficar piscando

   while(1)

   {    
     if(rb3_bit==1) 
     {    
        conta=conta+1;     
        delay_ms(500);  //tempo para incrementar a contagem

        IntToStr(conta, txt); //converte a contagem(numeral) em texto


         Lcd_Out(1,1,"Contando:      ");//escreve o texto na primeira linha posição 1     

        delay_ms(10);//da um tempo para a informação ser escrita

          Lcd_Out(2,1,"               ");//escreve o espaços em branco na primeira linha posição 1

         delay_ms(10);//da um tempo para a informação ser escrita

         Lcd_Out(2,1,txt);//escreve o texto na segunda linha posição 6     

        delay_ms(10);//da um tempo para a informação ser escrita
      }   

     if(rb3_bit==0)
     {     
         conta=0;//zera a contagem

          Lcd_Out(1,1,"A contagem sera");//escreve o texto na primeira linha posição 1    

         delay_ms(10);//da um tempo para a informação ser escrita

         Lcd_Out(2,1,"zerada!");//escreve o texto na primeira linha posição 1    

        delay_ms(300);//da um tempo para a informação ser escrita

     } 

  }
}


Espero que ajude, qualquer dúvida por favor mande mensagem, estou a disposição. Qualquer dúvida poste o comentário ou encaminhe um e-mail.