Memoria GGRam LCD alfanumérica

#1
Bueno, leyendo en internet me he econtrado que la LCD cuenta con 8 espacios de memoria libres para que uno pueda mostrar 8 caractéres especiales, por decirlo de alguna forma permite crear a uno 8 caracteres en la matriz de 5x8 leds con la que cuenta cada posición de la LCD.
Esto para crear, por ejemplo, la letra "ñ", ya que el código ASCII no la tiene en cuenta; y muchos otros más.
Ahora, he visto varias formas de hacerlo, pero no se si es que son en otra forma de programar (yo utiliza MPlab, con el compilador C18 y lenguaje en C) o qué, pero no entiendo realmente cómo programar cada uno de los espacios disponibles.
Se que cada caracter cuenta con 5 bits (de las 5 columnas) por cada uno de las 8 filas (y que cada una de ellas cuenta con una posición en hexadecimal) a la que se le asigna un valor dependiendo de qué bits (osea, de qué columna) queremos activar por fila.
Eso lo entiendo, ahora lo no se es cómo hacerlo dentro del programa.
Alguien puede ayudarme ???
 
#2
Hola:

Para crear un nuevo simbolo es necesario cargar 8 datos por cada símbolo de esta manera.

- Creas un array con los datos... que para uno solo serian 8.

char NUEVO[8] = {0b00011111, 0b00011111, 0b00011111, 0b00011111,
0b00011111, 0b00011111, 0b00011111, 0b00011111};

- el primer dato del array es la parte de arriba del caracter
- los '1' unos, son los 5 bits que representan a un caracter del display, se confecciona el caracteter modificando estos bits con '0' y '1'.

- Usas un bucle para cargar el dato en la CGRAM del LCD

// Indicas al LCD que vas a escribir en la CGRAM (ver cualquier datasheet de LCD)
for(1=0 ; i<8 ; i++)
{
WriteCGRAM(Direccion, NUEVO);
}

- Para usar el nuevo caracter escribes normalmente en el LCD pero
con con valores en decimal entre 0-7 que representan los 8 caracteres disponibles.
- Para este ejemplo escribes '0' en decimal en el LCD para que aparesca el caracter.

Espero te ayude.

Saludos
 
#3
Gracias (y)

Y, ahora tengo otro problema:

Se supone que con el comando WriteCmdXLCD(SHIFT_DISP_*) (donde * puede ser LEFT o RIGHT) el texto que está en la pantalla debería desplazarse lateralmente, pero al simularlo en ISIS no hace nada.
Esto es problema del programa, de la librería, o de qué ???
 
#4
Gracias (y)

Y, ahora tengo otro problema:

Se supone que con el comando WriteCmdXLCD(SHIFT_DISP_*) (donde * puede ser LEFT o RIGHT) el texto que está en la pantalla debería desplazarse lateralmente, pero al simularlo en ISIS no hace nada.
Esto es problema del programa, de la librería, o de qué ???
Igual, ese efecto no me funciona bien en el ISIS, pero si va bien en un LCD real... sugiero que pruebes en un LCD real...
 
#6
Antes de probarlo tengo una duda: esto hace mover toda la "LCD" o se puede diferenciar para que una líena se mueva y la otra no o cada una para un lado diferente, etc. ???
 
Arriba