collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: biblioteca lcd  (Lida 2383 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
biblioteca lcd
« em: 30 de Junho de 2014, 13:15 »
Bom dia,
Estou a deixar de usar o arduino aos poucos, e neste momento escolhi usar o lcd. Inicialmente usei a biblioteca do Peter Fleury, mas para mim tem 1 desvantagem.
1º O codigo é bastante confuso para mim e usa 4 bits ou 8 bits no mesmo codigo
2º Usa mais um pino em relação arduino, o pino RW. Depende do tipo de aplicação que se queira fazer pode ser uma vantagem.

Então decidi  criar a minha biblioteca para o lcd  16x2  a 4 bits. Fui para o google, sacei diversas bibliotecas, começei por testar, comparar, a filtrar de maneira a perceber como funciona os lcd's.
A biblioteca ficou como queria, simples e a funcionar.  Apesar de não ser 100% da minha autoria, está tal e qual como queria. Consigo enviar mensagens para o lcd e usar o goto x y.

Agora estou com dificuldades em fazer o equivalente ao println no arduino, e ainda nao consegui encontrar nada por onde me pudesse guiar.
Uma das diferenças entre o print e o println no arduino é que no print quando passa do 100 para o 99 fica 990 enquanto no println fica 99 e é isso que nao consigo fazer no meu código.

Citar
void lcd_print(const char *text)
{
while (*text)
lcd_char(*text++);
}
void lcd_char(uint8_t carac)
{
   lcd_RS_port |= (1<<lcd_RS_bit);     
send_byte(carac); //envia os caracteres para o lcd
}
« Última modificação: 02 de Julho de 2014, 12:30 por dio123 »

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.189
Re: biblioteca lcd
« Responder #1 em: 30 de Junho de 2014, 14:21 »
Ao escreveres o valor tens de colocar um espaço à frente para que elimine o caratere que está no display.
O que o arduino deve fazer é apagar tudo e escrever de novo, penso eu.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: biblioteca lcd
« Responder #2 em: 30 de Junho de 2014, 14:24 »
Ou dado que lhe dizes o tamanho do lcd, usar sempre um buffer de 16 caracteres e escrever o ecrã todo.
Avr fanboy

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
Re: biblioteca lcd
« Responder #3 em: 02 de Julho de 2014, 14:56 »
Boa tarde,
Como não consegui acrescentar um espaço no final char buffer, encontrei uma alternativa
sprintf( buffer,"%3d", adc_value);

Agora estou a tentar mostrar no lcd o valor de pi, baseado nos exemplos que vi, na net,  mas não estou a conseguir. No entanto desconfio que nao seja do codigo.
Tentei varios exemplos e todos remetem para o mesmo problema, em vez de mostrar o valor da variavel aparece sempre o ?. Na simulação avr studio e a variavel buf fica com o texto e ? o que me leva a querer que o problema está no avr studio.

 sprintf (buf, "bouble=%f", pi);  e  sprintf(str, "Value of Pi = %f", M_PI);
 
codigo em anexo

Agradeço desde já pela ajuda.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: biblioteca lcd
« Responder #4 em: 02 de Julho de 2014, 17:55 »
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=110400

Tens de incluir a lib math.h e depois incluir o printf com suporte para virgula flutuante, no AS6 é só carregar numa caixa algures na configuração do projecto, se não usas AS6, no linker é meter isto:
-Wl,-u,vfprintf
Avr fanboy