Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
mateuscrv

[Resolvido] Leitura Analógica + LCD + Mikroc

Recommended Posts

Olá, bom dia.

Estou usando o PIC 18f4520, e preciso fazer um programinha simples para ler uma entrada analógica e mostrar no LCD. Peguei alguns exemplos na internet e junto com o que eu sei, fiz um programa básico aqui:

sbit LCD_RS at RB7_bit;
sbit LCD_EN at RB6_bit;
sbit LCD_D7 at RB2_bit;
sbit LCD_D6 at RB3_bit;
sbit LCD_D5 at RB4_bit;
sbit LCD_D4 at RB5_bit;
sbit LCD_RS_Direction at TRISB7_bit;
sbit LCD_EN_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB2_bit;
sbit LCD_D6_Direction at TRISB3_bit;
sbit LCD_D5_Direction at TRISB4_bit;
sbit LCD_D4_Direction at TRISB5_bit;

int anag=0;

void main()
{
trisa=255;
trisb=0;
trisc=255;
trisd=255;
trise=7;
porta=0;
portb=0;
portc=0;
portd=0;
porte=0;
adcon1=0b00001110;
cmcon=7;
Lcd_Init();
ADC_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
while(1)
{
anag = ADC_Read(0);
Lcd_Chr(1,1,0x30+(anag/10));
Lcd_Chr(1,2,0x30+(anag%10));
}
}

O que acontece: quando simulo no Proteus, começa os valores, 10, 20, 31... ai depois começa A3, %7 &4 $6, fica assim mostrando coisas estranhas e não os números da entrada. Gostaria que alguém me ajudasse a achar o erro, creio eu que deve ser na minha forma de pegar uma variável e mostrar no LCD.

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

Ola mateuscrv.

Isso acontece porque o LCD interpreta o valor que você quer gravar como se fosse um string (caractere), então ele mostra o caractere correspondente ao valor da variável (que não condiz com seu valor real) e isso resulta que no LCD vão aparecer caracteres estranhos (como aconteceu com você).

Para exibir o real valor de uma variável no display é simples, basta converter o valor para string e salvar dentro de uma matriz. O compilador faz isso para você através da instrução "wordtostr(a,x);" para variáveis de 16 bits e "floattostr(a,x);" (para variáveis float) onde sua variável a ser exibida é "a" e "x" é a matriz. então veja o exemplo:

main()
{ int a=20;
char x[6]; //Matriz onde sera salvo o resultado da conversão
lcd_init();
Lcd_Cmd(_LCD_CURSOR_OFF); //desliga cursor
Lcd_Cmd(_LCD_CLEAR); // limpa LCD
wordtosrt(a,x); // Converte o valor de "a" (20) Para caractere
lcd_out(1,1,x); // Exibe o valor no display
}

Mas cuidado pois como sua matriz tem 6 elementos ela vai ocupar 6 "espaços" no display (se você compilar o programa acima, vai ver que o numero 20 vai aparecer lá para a quinta coluna do display). O mesmo vale para valores "quebrados" (variáveis float), porém nessas eu lhe recomendo limitar o valor para não ter problemas com o display, para isso basta igualar a zero o elemento da matriz correspondente a posição á que você quer limitar (a virgula conta). então se quer limitar o numero 20,345 no quarto caractere basta inserir a instrução "x[5]=0;" abaixo da instrução de conversão e no display sairia "20,3". Neste caso você pode aumentar a matriz para até 15 elementos e exibir um numero de até 14 dígitos..... XD

Se quiser algo mais completo de uma olhada aqui>>http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/avr/help/conversions_library.htm#wordtostr

Se tiver duvidas é só perguntar.

Grato Luiz Gustavo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×