17 de septiembre de 2014

Character LCD con Raspberry Pi


Un "Character LCD" es una matriz de puntos en una pantalla de cristal liquido (dot matrix liquid crystal display). Estos LCD permiten mostrar caracteres alfanuméricos con una simple interfase la cual se puede conectar a un microcontrolador (para este caso un Raspberry Pi).

En esta demo se van a usar un Character LCD 16x2, Raspberry Pi y un controlador escrito en Java Micro Edition Embedded, mas algunos accesorios.

Lista completa de Componentes*:
*Este demo esta construido con los productos que venden directamente Adafruit o sus distribuidores, ver nota al final de la pagina.

Armado (Cableado)


Primero se empezara colocando los dispositivos en la protoboard como se muestra en la siguiente imagen:


Luego se realizara el cableado de la siguiente forma:
  • Conecte el RPi 5.0V  a la linea (vcc) de la protoboard, y de este conecte:
    • Un cable al pin derecho del potenciometro.
    • Un cable al pin 2 del LCD (VDD).
    • Un cable al pin 15 del LCD (LED+).
  • Conecte el RPi GND a linea de tierra de la protoboard, y de este conecte:
    • Un cable al pin izquierdo del potenciometro.
    • Un cable al pin 1 del LCD (VSS).
    • Un cable al pin 5 del LCD (R/W).
  • Conecte el pin del medio del potenciometro al pin 3 del LCD (V0/contrast).
  • Conecte el pin 27 del RPi al pin   4 del LCD (RS).
  • Conecte el pin 22 del RPi al pin   6 del LCD (E/clock enable).
  • Conecte el pin 25 del RPi al pin 11 del LCD (DB4).
  • Conecte el pin 24 del RPi al pin 12 del LCD (DB5).
  • Conecte el pin 23 del RPi al pin 13 del LCD (DB6).
  • Conecte el pin 18 del RPi al pin 14 del LCD (DB7).
  • Conecte el pin   4 del RPi al pin 16 del LCD (-R/red).
  • Conecte el pin 17 del RPi al pin 17 del LCD (-G/green).
  • Conecte el pin 7 / CE1 del RPi al pin 18 del LCD (-B/blue).
La conexion solo usa 4 bits para la transferencia de datos DB4 a DB7. Por tal motivo queda 4 pines del LCD sin conectar. No se esta conectando directamente el Raspberry Pi, sino que se hace por medio de T-Cobbler y su respectivo cable de 40 pin.

En el prototipo se ve así:


En la realidad se ve así:





Nota: Cuando este realizando la prueba de funcionamiento no olvide ajustar el potenciometro para ajustar el contraste del LCD, de lo contrario es posible que la luz de fondo se encienda y no vean caracteres en la pantalla.

 

Controlador (Sotfware JMEE)


Instalación

Se necesita tener instalado el ambiente de desarrollo para Java Micro Edition Embedded; para saber como se instala ver este entrada: Instalación Java ME Embedded


Luego de la instalación del ambiente podemos descargar el código del repositorio:

git clone https://github.com/andresvelezperez/raspberry-pi.git


Uso

Cuando se ha descargado el código, se procede a abrir el proyecto con Netbeans, procedemos a abrir la clase rpi.main.Main, en esta clase observaremos los ejemplos que podemos correr, por defecto esta habilitado un ejemplo base:


exampleCharLCD = new char_lcd();
//exampleCharLCD = new char_lcd_rgb();
//exampleCharLCD = new char_lcd_rgb_pwm();

Si usamos el ejemplo "char_lcd_rgb()" con el Character LCD 16x2 RGB backlight, podemos variar la luz de fondo del LCD; El ejemplo char_lcd_pwm(),  deberia de mostrar una amplia gama de colores pero no es posible en un Raspberry Pi, no tiene GPIO con PWM, y la emulación por código en Java no es muy eficiente además de un alto consumo de CPU.

Si se ha seguido el manual al pie de la letra, los ejemplos han de funcionar bien, en caso de no usar los GPIO del Raspberry Pi como se indico anteriormente, se debe abrir la clase de cada ejemplo y cambiar los parámetros, es decir indicar cuales GPIO fueron usados. Se debe reemplazar los usados.

Archivo: char_lcd_rgb.java o char_lcd.java
//# Raspberry Pi configuration:
int lcd_rs = 27; //# Change this to pin 21 on older revision Raspberry Pi's
int lcd_en = 22;
int lcd_d4 = 25;
int lcd_d5 = 24;
int lcd_d6 = 23;
int lcd_d7 = 18;
int lcd_red = 4;
int lcd_green = 17;
int lcd_blue = 7; //# Pin 7 is CE1

Para configurar la cantidad de lineas que soporta el LCD se debe de cambiar los parámetros por uno de estas opciones:  16x1, 16x2 y 16x4

Archivo: char_lcd_rgb.java
//# Define LCD column and row size for 16x2 LCD.
int lcd_columns = 16;
int lcd_rows = 2;

Para visualizar un mensaje con luz de fondo rojo seria de la siguiente forma:

//# El color esta en RGB, pero debido a la falta de PWM, solo funciona 1.0f o 0.0f en cada color.
lcd.set_color(1.0f, 0.0f, 0.0f);
lcd.clear();
lcd.message("Linea 1\nLinea 2");

*PWM: modulación por ancho de pulsos (pulse-width modulation).


La clase que hace de controlador es Adafruit_CharLCD, en esta clase están los métodos con los cuales es posible realizar la comunicación entre el Raspberry Pi y el Character LCD, el LCD debe ser compatible con Hitachi HD44780 LCD controller, en caso de que no sea compatible hay que escribir un nuevo controlador.

La clase principal proporciona los siguientes métodos:
  • home(): posiciona el cursor al inicio.
  • clear(): limpia el LCD
  • set_cursos(col,row): posiciona el cursor en la columna y linea indicada.
  • show_cursos(show): muestra el cursor en pantalla.
  • move_left() y move_right(): mueve el texto en el LCD, a la izquierda o a la derecha.
  • message(text): el mensaje a mostrar.
  • set_backlight(backlight) para el caso de la clase Adafruit_CharLCD.java activa o desactiva la luz de fondo, para mostrar un color particular usar la clase Adafruit_RGBCharLCD.java y usar el método set_color(R,G,B).

Nota: Esta es una implementación en Java ME Embedded del código que esta disponible por parte de Adfruit, el código original esta escrito en Python. Para ver el tutorial y código en Python dirigirse a la pagina de Adafruit.
El código es Open Source.




Raspberry Pi is a trademark of the Raspberry Pi Foundation, http://www.raspberrypi.org

Adafruit, http://www.adafruit.com

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners. http://www.oracle.com

No hay comentarios:

Publicar un comentario