Go Down

Topic: Problemas para escribir caracteres LCD HD44780 (Read 5672 times) previous topic - next topic

darcktower

Nov 06, 2011, 11:43 pm Last Edit: Nov 08, 2011, 09:46 am by darcktower Reason: 1
Buenas a todos.

Estoy empezando con el mundo arduino aunque no venga de nuevo puesto que he trabajado con micros y en lenguaje ensamblador asi que me suenan las cosas y el lcd ya ni te cuento hasta que aprobé el examen...


La cuestion es que tengo un Arduino Uno.

Estoy intentando escribir en la pantalla pero nada parece como si no le llegaran bien los 4 bit DB.

Lo he intentado con los ejhemplos de la web arduino (Hello World)...
Lo he intenado con las libresias Liquidcrystal y LCD4Bit. Pero nada aunque consigo modificar el contraste y demas.. No consigo escribir nada.

Dependiendo del programa cargado se escriben todos los pixeles de la linea superior o de las dos...

Al final he cargado este programa con un led en el pin 13 para ver que se ejecuta bien el programa.

Code: [Select]
#include <LiquidCrystal.h>

// Connections:
// rs (LCD pin 4) to Arduino pin 12
// rw (LCD pin 5) to Arduino pin 11
// enable (LCD pin 6) to Arduino pin 10
// LED to Arduino pin 13
// LCD pins d4, d5, d6, d7 to Arduino pins 2, 3, 4, 5
LiquidCrystal lcd(12, 11, 10, 2, 3, 4, 5);



void setup()
{
 pinMode(13, OUTPUT); //utilizaremos el LED para saber que el programa funciona

 
 lcd.begin(16,2);              // columns, rows.  use 16,2 for a 16x2 LCD, etc.
 
 
 // if you have a 4 row LCD, uncomment these lines to write to the bottom rows
 // and change the lcd.begin() statement above.
 //lcd.setCursor(0,2);         // set cursor to column 0, row 2
 //lcd.print("Row 3");
 //lcd.setCursor(0,3);         // set cursor to column 0, row 3
 //lcd.print("Row 4");
}

void loop()
{ lcd.clear();                  // start with a blank screen
 lcd.setCursor(0,0);   // set cursor to column 0, row 0 (the first row)
 digitalWrite(13, HIGH); //encendemos el LED (luego lo apagaremos)
 lcd.print("Hello, World");    // change this text to whatever you like. keep it clean.
 delay(3000);
 digitalWrite(13, LOW); //encendemos el LED (luego lo apagaremos)
 lcd.setCursor(0,1);           // set cursor to column 0, row 1
 lcd.print("hacktronics.com");
 delay(3000);
}
/* ------------------------------------------------------------------------------- */


Y el led si que se enciende y se apaga pero en la pantalla solo se escriben todos los pixeles de la linea superior al hacer lcd.clear . Y luego se borran al apagarse el led.

Se supone que el lcd es este Blue 1602 HD44780 LCD Vease compatible con Hitachi HD44780 driver.

Algo que le pueda hacer... Puede que no sea compatible? Programo algo mal?

Gracias por adelantado.

fm

Asi, a primera vista no veo nada raro. Mira a ver como tienes conectados los cables al LCD. Es posible que alguno este mal conectado o no se corresponda con lo que has puesto al crear el LCD en tu programa. Un pequeño esquemático ayudaría.
   

chiva


fm

Por cierto no veo donde tienes inicializada la variable "backLight". Tal cual esta el código no debería compilar.
   

darcktower

http://arduino.cc/en/uploads/Tutorial/LCD_bb.png

La esquemeatica que he seguido es esa y el contraste si que lo puedo cambiar es cuestion de cableado y eso funciona. Las conexiones las he probado en distintos pines y las he revisado una y otra vez. Lo unico que se  me ocurre es que la placa board este mal o algun cable pero lo dudo la verdad...

El backlight lo borre del codigo y me compilaba bien.

Alguna otra idea. Solo se me ocurre grabar un video para que veais como se comporta no se si ayudaría...?

darcktower

Pues las conexiones me dan continuidad las he comprobado con un multimetro y no hay ningun corto....

Lo unico que se me ocurre es que el display no sea compatible con el HD44780 pero me pareceria muy muy raro puesto que lo compre dentro de un pack de arduino...

fm

   

darcktower

#7
Nov 08, 2011, 09:58 am Last Edit: Nov 08, 2011, 10:01 am by darcktower Reason: 1
Hola fm Si el potenciometro lo ajusto desde no ver ningun pixel hasta ver todos los de la linea de arriba pero entre medio no sale ningun caracter. Os Subo una foto con el conexionado y el programa anteriormente posteado.



Ya estoy empezando a pensar que no es compatible con el HD44780 Porque detras de la pantalla solo aparece como referencia TM162A-3 Y mirando esa referencia solo aparece en paginas chinas y dice que su controlador es el siguiente S6A0069. Ya no se que pensar. Aunque me parece muy raro que no sea compatible...

Alguien con esa pantalla que le funcione?

fm

#8
Nov 08, 2011, 10:22 am Last Edit: Nov 08, 2011, 10:28 am by fm Reason: 1
Parece que no se esta inicializabdo bien. Prueba con otros pines (6,7,8,9) para los datos. No me he fijado bien pero prueba a poner una resistencia de 1k en el backlight. Algunos LCDs son quisquillosos.
   

darcktower

#9
Nov 08, 2011, 10:26 am Last Edit: Nov 08, 2011, 10:32 am by darcktower Reason: 1
Me pongo a ello... Nada lo mismo... Pero me he dado cuenta que si bajo el contrasete la orden de clear lcd si la ejecuta porquela pantalla se pone en blanco y luego vuelven los pixeles a la primera fila...

fm

Prueba con la resistencia de 1K en el backlight (serie en el pin 16 del LCD).

Ya no se me ocurre nada más.
   

darcktower

Gracias FM pero no solo consigo atenuar la luz de iluminacion los pixeles siguen haciendo lo mismo.

Alguien tiene la pantalla TM162A-3 y le funciona?

chris14tra

Hola, ya se que el tema es un poco viejo. Pero a lo mejor les vale de algo. A mi me pasó lo mismo y el problema era el caracter 'o'. Probé a poner solo un caracter y me funcionaba el lcd. Fuí añadiendo y al llegar al caracter 'o' de "Hello, World" la linea superior se me quedaba como en las imágenes de este hilo. Probé con "Hell0 W0rd" y sin problemas. Debe de ser la librería del LCD y la codificación en bytes.

Saludos.

Go Up