collapse

* Links de Robótica

* Posts Recentes

URGENTE - display de 7 segmentos com backpack por Hugu
[Ontem às 20:02]


Preços e fabricantes de pcb por Sérgio_Sena
[Ontem às 10:20]


Palavras Cruzadas por Njay
[Ontem às 02:24]


Isaac Asimov - I, Robot por senso
[18 de Setembro de 2017, 03:41]


Apresentação por TigPT
[17 de Setembro de 2017, 07:31]


ic SL440 da Plessey? por senso
[16 de Setembro de 2017, 13:11]


Compra Colectiva RS-Amidata por brunus
[15 de Setembro de 2017, 22:31]


Ideias para construir um quadrúpede simples por zordlyon
[15 de Setembro de 2017, 10:18]


Preparar bancada de testes por jm_araujo
[14 de Setembro de 2017, 10:24]


Mitos: mudança da ilumação tradicional p/ iluminação a LEDs? por LVirtual
[14 de Setembro de 2017, 07:46]

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

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

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 927
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: 1.920
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.389
  • 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: 927
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.389
  • 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