23 de septiembre de 2014

Custom Glyphs Character LCD Raspberry Pi

Con el Character LCD que se ha usado en los ejemplos, nos permite crear hasta ocho(8) glifos (símbolos) que podemos mostrar en el LCD.

El character LCD que vende adafruit RGB backlight positive LCD 16x2 + extras solo muestra texto en Ingles/Japones como se muestra en la siguiente tabla:


La segunda tabla que se muestra en el datasheets del HD44780 es de otra versión de este LCD. Asi que, si queremos mostrar un carácter que no este en la tabla A00 hay que crearlo. Para esto el LCD nos da la opción de crear un simbolo con el "Character Generator RAM (CGRAM)", en esta memoria podemos crear los nuevos caracteres, para una matriz de 5x8 hasta 8 caracteres y la matriz 5x10 hasta 4 caracteres, nos centraremos en la creación de caracteres de 5x8 puntos.

Para realizar esto nos basamos en lo que nos dice el datasheets del LCD.


En resumen:
  • Se necesitan 8 lineas de 5 bits, para generar un carácter, los otros tres bits no se usan.
  • Para mostrarlo en pantalla se usa la representación del carácter 0x0 hasta 0x7 (solo 3 bits).
  • En el data datasheets indica que la dirección de escritura  0x40  con dirección inicial 0, es decir 0x40 + 0 hasta 0x40 + 0x7 iría el primer carácter.  Si escribimos los 8 caracteres no tenemos que especificar la dirección de cada uno sino que esta se autoincrementa.

En el código que se ha  usado se adiciono una función para guardar (solo mientras el lcd esta prendido, cuando se apague se pierden los datos, es una ram) el nuevo carcater en el codigo especifico, solo hay que enviarle el numero de carácter y un array con los 8 bytes que representan el carácter.

Archivo: Adafruit_CharLCD.java
public void customGlyphs(int characterCode,int[] customGlyphs) throws IOException{
       
        int cgramaddr = LCD_SETCGRAMADDR;
        if( (displayfunction & LCD_5x8DOTS) == LCD_5x8DOTS){
            cgramaddr |= characterCode * 8;
            if(characterCode > 8){
                throw new RuntimeException("Character code invalid, only [0,7] not"+characterCode);
            }
        }else if((displayfunction & LCD_5x10DOTS) == LCD_5x10DOTS){
            cgramaddr |= characterCode * 10;
            if(characterCode > 4){
                throw new RuntimeException("Character code invalid, only [0,4] not"+characterCode);
            }
        }
        write8(cgramaddr);
        for(int cg : customGlyphs){
            write8(cg,true);
        }
    }

Ejemplo:

int[] customGlyphs_smile = {0x00,0x00,0x0a,0x00,0x11,0x0e,0x00,0x00}; // :)
lcd.customGlyphs(2,customGlyphs_smile);



Para generar un carácter podemos usar el siguiente script:



#43210binariohexadecimaldecimal



Nos permite generar los caracteres, de forma visual y obtener el código para nuestro programa, solo seleccionamos la cantidad de puntos (5x8), y este nos genera una tabla donde podemos dibujar el glifo que necesitamos.

Generamos el array con el glifo, y procedemos a usarlo en el LCD.

Ejemplo:


int[] customGlyphs_smile = {0x00,0x00,0x0a,0x00,0x11,0x0e,0x00,0x00}; // :)
lcd.customGlyphs(2,customGlyphs_smile); 
....
lcd.message("Mi smile "+ (char)2 );
....



Codigo fuente:

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


Fuente:

No hay comentarios:

Publicar un comentario