Acabou de chegar o LCD serial da Tato.ind.br que eu pedi a somente dois dias. Eles enviarm rápido e sem problemas. O display é bem comum (ESCRITO ATRÁS ESTÁ: TECH1602B-RN-GBS-8) ele tem 2 x 16 posições e pode ser encontrado facilmente nas lojas da Santa Efigênia em Sampa sem o módulo serial que é fabricado pela Tato.
Soldado atrás do display está o módulo serial baseado em um chip PIC16F628A, o módulo apresenta as seguintes conexões:
1. +5V
2. TTL (para conexão com arduino ou outros)
3. RS232 (para conexão com porta serial do pc)
4. GND
A conexão com a placa arduino 2009 é feita com o pino TTL do módulo ligado a porta TX (digital 1) ou com outra porta digital, dependeno da biblioteca utilizada. A alimentação é de 5 v logo é possível conectar diretamente ao na porta de alimentação de 5v e ground da própria placa arduino.
Para comunicação serial eu utilizei os exemplos do site arduino.cc:
http://www.arduino.cc/playground/Learning/SparkFunSerLCD
Existem duas opções, utilizar a comunicação serial direta pela porta TX ou definir outra porta digital qualquer com o uso da biblioteca SoftwareSerial.h . Com o uso desta biblioteca é possível liberar as portas TX e RX do arduino para outras funções.
Segue abaixo o exemplo do código que utilizei para apresentar no display o resultado do contador Milis, que conta o tempo em milissegundos desde que a placa arduino foi iniciada
Segue o código com a biblioteca SoftwareSerial:
-------------------------------------------------------------------------------------------------
#include
#define txPin 2 // define o pino digital 2 como TX
SoftwareSerial LCD = SoftwareSerial(0, txPin); // cria a instância LCD
// referencia - http://www.arduino.cc/playground/Learning/SparkFunSerLCD
void setup()
{
pinMode(txPin, OUTPUT); // define como output
LCD.begin(2400); // define 2400 de taxa de transferência para o LCD
clearLCD(); // veja abaixo o código para limpar o lcd no início
clearCURSOR(); // veja abaixo o código para tirar o cursor
}
void loop()
{
selectLineOne(); // define a posição do inicio do milis na linha 1
delay(100);
LCD.print(millis()); // apresenta p milis no lcd
selectLineTwo(); // define a posição do inicio do milis na linha 2
delay(100);
LCD.print("Mostrando MILIS"); // escreve na linha 2
delay(100);
}
void selectLineOne(){ //puts the cursor at line 0 char 0.
LCD.print(0xFE, BYTE); //codigo para inserão de comandos
LCD.print(134, BYTE); // posição na linha 1
}
void selectLineTwo(){ //puts the cursor at line 0 char 0.
LCD.print(0xFE, BYTE); //command flag
LCD.print(192, BYTE); //position
}
void clearCURSOR(){
LCD.print(0xFE, BYTE); //command flag
LCD.print(0xC, BYTE); //clear command.
}
void clearLCD(){
LCD.print(0xFE, BYTE); //command flag
LCD.print(0x01, BYTE); //clear command.
}
void serCommand(){ //a general function to call the command flag for issuing all other commands
LCD.print(0xFE, BYTE);
}
--------------------------------------------------------------------------------------------
Esquema da fiação: