(EN PROCESO DE TRADUCCIÓN Y AMPLIACIÓN --> FALTA EL ESQUEMA)

EJERCICIO Display LCD de 8 bits

Descripción del ejercicio

Este ejercicio pretende realizar la acción más sencilla que se puede llevar a cabo con un display LCD: mostrar un mensaje de bienvenida. En nuestro caso disponemos de un display LCD retroiluminado con control de contraste. Por lo tanto utilizaremos un potenciómetro para controlar el contraste.

Los display LCD están basados la mayoría de las veces en un estandar industrial establecido por Hitachi. De acuerdo con dicho estandar hay un grupo de PIN-es dedicados a enviar los datos y las posiciones de la pantalla que ocuparán dichos datos. Es posible elegir utilizar 4 u 8 PIN-es para enviar los datos. Además hay tres PIN-es que son necesarios para sincronizar las comunicaciones con el display.on towards the display.

El problema de este ejemplo es que estamos utilizando casi todos los PIN-es de la placa Arduino para manejar el display, con lo que no los podremos utilizar con otros fines, pero hemos decidido desarrollarlo así para que sea más sencillo.

Ejemplo de conexionado al puerto serie de un display LCD compatible con el estandar Hitachi 44780

(FALTA: IMAGEN DEL ESQUEMA)

Esquema

Imágen de una placa protoboard con un potenciómetro y el display

Elementos necesarios

  • Un display LCD compatible con el standard Hitachi HD44780 (PDF).
  • Un potenciómetro de 10 K Ohmios
  • Una placa protoboard.
  • Cables para realizar las conexiones.

Código fuente

/* LCD Hola

 * --------
 *
 * Este es el primer ejemplo de cómo utilizar un display LCD
 * configurado para transferir los datos con 8 bits.
 * En el ejemplo se utilizan todos los PIN-es de la
 * placa Arduino, pero nos permite mostrar fácilmente
 * los datos en el display 
 *
 * Eston son los pines que hay que tener en cuenta:
 * 
 * - DI, RW, DB0..DB7, Enable (11 en total)
 *
 * El conjunto de PIN-es de los display LCD es estandar y 
 * existe numerosa documentación al respecto que se puede
 * buscar en internet
 *
 * (cleft) 2005 DojoDave for K3
 *
 */

 int DI = 12;                                 // PIN-es del LCD
 int RW = 11;
 int DB[] = {3, 4, 5, 6, 7, 8, 9, 10};
 int Enable = 2;

 void LcdCommandWrite(int value) {
  int i = 0;                                  // Escribe un comando en el LCD. Para ello descompone
  for (i=DB[0]; i <= DI; i++) {               // en bits el código del comando y los escribe
    digitalWrite(i,value & 01);               // en los PIN-es correspondientes.
    value >>= 1;
  }
  digitalWrite(Enable,LOW);                   // Envía el pulso de activación (enable) del LCD
  delayMicroseconds(1);
  digitalWrite(Enable,HIGH);
  delayMicroseconds(1);                       // Pausa de 1 ms de acuerdo con las especificaciones
  digitalWrite(Enable,LOW);
  delayMicroseconds(1);                       // Pausa de 1 ms de acuerdo con las especificaciones
 }

 void LcdDataWrite(int value) {               // Escribe un comando en el LCD. Para ello descompone
  int i = 0;                                  // en bits el código del comando y los escribe
  digitalWrite(DI, HIGH);                     // en los PIN-es correspondientes, después de haber,
  digitalWrite(RW, LOW);                      // configurado el display para escritura.
  for (i=DB[0]; i <= DB[7]; i++) {
    digitalWrite(i,value & 01);
    value >>= 1;
  }
  digitalWrite(Enable,LOW);
  delayMicroseconds(1);                       // Envía el pulso de activación 
  digitalWrite(Enable,HIGH);
  delayMicroseconds(1);                       // Pausa de 1 ms de acuerdo con las especificaciones
  digitalWrite(Enable,LOW);
  delayMicroseconds(1);                       // Pausa de 1 ms de acuerdo con las especificaciones
 }

void setup (void) {

 int i = 0;
 for (i=Enable; i <= DI; i++) {               // Configura los PIN-es como salida digital
   pinMode(i,OUTPUT);
 }
 delay(100);
                                              // Inicilailiza el LCD tras una pausa
                                              // El LCD precisa de esta operación
 LcdCommandWrite(0x30);                       // Función ajustar: 8-bit interface, 1 display lines, 5x7 font
 delay(64);                      
 LcdCommandWrite(0x30);                       // Función ajustar: 8-bit interface, 1 display lines, 5x7 font
 delay(50);                      
 LcdCommandWrite(0x30);                       // Función ajustar: 8-bit interface, 1 display lines, 5x7 font
 delay(20);                      
 LcdCommandWrite(0x06);                       // Ajustar el modo de entrada: Incrementar la posición 
                                              // automáticamente, sin desplazamiento
 delay(20);                      
 LcdCommandWrite(0x0E);                       // Control del display: encender el display, cursor activado,
                                              // sin parpadeo
 delay(20);                      
 LcdCommandWrite(0x01);                       // Limpiar el display, colocar el cursos en la posición "0"
 delay(100);                      
 LcdCommandWrite(0x80);                       // Control del display: encender el display, cursor activado,
                                              // sin parpadeo
 delay(20);                      

}

void loop (void) {

  LcdCommandWrite(0x02);                       // Colocar el cursor en la posición "0" 
  delay(10);                     
  LcdDataWrite('H');                           // Escribir el mensaje de bienvenida
  LcdDataWrite('o');
  LcdDataWrite('l');
  LcdDataWrite('a');
  LcdDataWrite(' ');
  LcdDataWrite('C');
  LcdDataWrite('a');
  LcdDataWrite('r');
  LcdDataWrite('a');
  LcdDataWrite('c');
  LcdDataWrite('o');
  LcdDataWrite('l');
  LcdDataWrite('a');
  delay(500);

}

Referencias

  • Castellano:

 - Display-s LCD basados en el controlador Hitachi HD44780
 - LCD-> Como instalar un lcd generico con el chip Hitachi HD44780

  • Ingles:

 - Chip Hitachi HD44780 (PDF)
 - HD44780-Based LCD Modules