CdeF

Arduino, Ligando um display paralelo

Arduino Leonardo

Aqui vai minha primeira contribuição para o mundo micro processado o Arduino, um mundo novo que abre a as portas da automação de forma mais simples que outros circuitos programáveis como os PIC eProns e etc, pelo seu enfoque educativo facilidade uso e de programação e um mundo de informações para buscar na rede. Nesta primeira viajem vamos aprender a ligar um LCD 2x16 reciclado, pois é, quer entrar na robótica automação, tem de saber usar o ferro de solda, sugador, alicate etc e usar sucata!

 Reaproveitandoum LCD 2x16

Era um LCD de um Bina que já tinha sido aproveitado para meu antigo projeto um case-mod, mas como a minha MoBo, não tem serial, e muito menos paralela estava em desuso a muito. 

Fazendo ponteiras

Como não tinha os Jumpers que facilitam muito as montagem experimentais na protoboard utilizei aqueles cabinhos de gabinetes velhos e os pinos de conexão dos Jumpers de uma antiquíssima placa de modem uma UsRobotics de 33kbps ISA, para fazer as pontas dos cabos e com a solda isolada por tirinhas de fita isolante, ficou melhor que a da China, e Leds e push-buttons já prontos para experimentos, custo zero e 100 ecológico!

 Ligando lcd 2x16

Como é um LCD Paralelo compatível com o TS1620A, e sem a interface serial (STV1602) tenho que ligar ele diretamente e neste processo quase todos os pinos digitais (I/O) vão ficar ocupados, optei pela ligação econômica que utiliza menos 4 pinos, porem mais lenta no carregamento do display mas imperceptível, para o tipo de aplicações que vamos fazer e sobram I/O's suficientes para a maioria dos experimentos.

Como este é um LCD sem Backlight,  assim como alguns roubados de telefones públicos, vão ter duas ligações a menos, os pinos 16(Gnd) e o 15, Drive do Led do backlight que em alguns displays já tem um resistor em serie, se não tiver tem de coloque um de 220R antes de ligar ao 5V, e opcionalmente pode ser controlado por um potenciômetro ou pelo próprio Arduino.

Da direita para a esquerda pinos 1-2-3-4-5-6-7-8-9-10-11-12-13-14, normalmente vem marcado no próprio display, ou melhor, procure o datasheet.

1- Gnd

2- V+ (5v)

3- Contraste, ponte com um resistor de 82R e Gnd

 Ligando lcd 2x16

4-  (RS)  - D7 Arduino

5-  (RW) - Gnd

6-  (EN) -  D8 Arduino

7-  (DB0)

8-  (DB1)

9-  (DB2)

10- (DB3)

11- (DB4) - D9   Arduino

12- (DB5) - D10 Arduino

13- (DB6) - D11 Arduino

14- (DB7) - D12 Arduino

Liguei um push bottom entre o Gnd e o Pino 6 (D6) do Arduino, só para testar a IF ELSE. Neste circuito não coloquei o resistor de 10M ligado do D6 ao Gnd,  que serve para evitar flutuações e interferências, faça o mesmo e experimente retirar a linha "digitalWrite(PINO6, HIGH);"

Ficou maluco não é?  As vezes conta, para, começa do zero. E  que quando configuramos uma I/O digital no Arduino como entrada esta linha de comando liga um resistor interno de 20M, para deixar a entrada em alta impedância, e evitar flutuações. Mas a boa pratica, é sempre ligar um resistor de 10M como Gnd, quando uma I/O for configurada como entrada.

sketch
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int PINO13 = 13; //inicia as variaveis (led on board)
int BOTAOLIGA = 0;     // variavel que armazena o status do pino 6
int PINO6 = 6;
int VAR1 = 0;
void setup() {  
  Serial.begin(9600);
  pinMode(PINO13, OUTPUT);  //Define os modos das saidas
  pinMode(PINO6, INPUT);
  digitalWrite(PINO6, HIGH); // Liga o resistor interno do pino 6
  lcd.begin(16, 2);      //Inicia o LCD reciclado 
  lcd.print("www.CdeF.com.br!"); 
}
void loop() 
 {
  BOTAOLIGA = digitalRead(PINO6); //Le o status do pino 6
  if (BOTAOLIGA == HIGH) {     
    Serial.println("PARADO = ");  //condicional que testa se o
    VAR1 = 0;  //Botao do pino 6 e zera a variavel VAR1
  } 
  else {         // Se nao pressionado continua por aqui
    digitalWrite(PINO13, HIGH); //lida o led do p13
    delay(500); // atrazo de 0,5 segundos
    VAR1 ++;   //He a mesma coisa que VAR1 = ++ VAR1;
    Serial.print("teste = "); //imprime no serialmonitor sem quebra de linha
    Serial.println(VAR1); // valor de VAR1 na tela   
    digitalWrite(PINO13, LOW);//apaga o led do pino 13
    lcd.setCursor(7, 1); //define LCD coluna 7 linha 2
    lcd.print(VAR1);    //imprime VAR1 em coluna 7 linha 2
    delay(100);               // atraso de 0,5 segundos
  }

}

 
Sketch

 

Joomla SEF URLs by Artio

GeraLinks - Agregador de links

Patrocinadores