Este el el PDF que vamos a usar:
http://www.lcd-module.de/eng/pdf/zubehoer/st7920_chinese.pdfEl datasheet es de un driver de LCD, uno acostumbra a ver el LCD como una pieza, pero en realidad tiene ese integrado que es el driver el cual conecta cada uno los sementos del LCD y ademas provee una interfaz. Por eso cuando ves el datasheet y te encontras con los pines , ves que son 136..
Pero esto no nos afecta. Si manejaste un LCD 2x16 es muy parecido, en un LCD 2x16 lo que haces es primero "
inicializar" el LCD. Luego para empezar a escribir en el LCD debes definir la direccion de la RAM donde vas a comenzar a escribir y luego proceder a escribir que solo va incrementandose la direccion de la memoria RAM dentro del LCD.
Luego el IC driver lee esa RAM y lo muestra en el LCD.
Entonces lo unico que hacemos al manejar un LCD es escribir una RAM y luego el driver se encarga de Actualizar el LCD con lo que nosotros pusimos.
La mayor diferencia es que en un LCD 2x16 uno escribe una de esas 32 posiciones, mientras que en un GLCD se hace punto a punto (pixel a pxiel). Hay otras salvedades.
-----------------------------------------------------------------------------
INTERFAZEntonces comenzamos, primero necesitamos saber como podemos conectarlo Leyendo al comienzo de la pagina 10 dice:
ST7920 supports 3 kinds of bus interface to MPU. 8 bits parallel, 4 bits parallel and clock synchronized serial interface
Dice que soporta 3 formas de interfaz, 8 bits, 4 bits y serial ( SPI) ocurre que casi siempre esto se selecciona con algunos pines del driver, los cuales no son accesibles y que dependen de quien armo el modulo del LCD y como lo conectó, por ejemplo en la libreria que vos pasaste usa una interfaz de 8bits. Vos vas a tener que revisar que la placa que tenes que conecciones te dan para determinar cual tenes ( o es 8bits o es SPI )
Esos son los pines de datos. Vamos a ver con un poco mas de detalle la comunicacion. Si vamos a la pagina 25 tenemos el interfaz paralelo ( 8 y 4 bits) Si observas en los graficos tenemos para los 8 bits, necesitamos 8 pines para datos, mas 3 de control ( E, RS y RW ). Si vamos a la descripcion de los pines tenemos que:
RS : Register Select
0 -> Escritura de Instruccion, Lectura de flag de ocupado, Lectura del contador de direccion
1 -> Escritura, Lectura de datos
RW:
0 -> Escritura
1 -> Lectura
E: Habilita disparador
Lo bueno de esos graficos es que te muestran en el tiempo como seria una comunicacion. Por ejemplo al principio RS esta en 0 ( una instruccion ), se ponen los 8 bits de la instruccion y se le da un pulso al pin E. Tal ves supongamos que estaba leyendo algo, ya que RW estaba en 0. Luego decide escribir un dato RS=1, RW=1 se pone el dato y se da un pulso en E.
-----------------------------------------------------------------------
INSTRUCCIONESVamos a saber que instrucciones tenemos, para decirle que escriba o decirle en que direccion comienze a contar, esto lo tenemos en la pagina 16. Alli comienza con todas las instrucciones, son bastantes, si lees algunas tenes: Limpiar, Volver al comienzo, Escribir RAM, Leer RAM, Se direccion de la DDRAM, Display on/off (aca tenes el cursor, que parpadee y poder apagar el display)
Esa tabla resume bastante las instrucciones y tambien te dice que valor deben tomar RS y RW
A partir de la pagina 19 comienza bien detallado las instrucciones, por ejemplo en DISPLAY STATUS, te dice que es cada bit, que funcion cumple en esa instruccion. Algunos son fijos y otros podes modificarlo para acomodar a lo que te gusta.
--------------------------------------------------------------------------------------
INICIALIZACIONDijimos que esto era igual que un LCD 2x16. Y que debiamos inicializarlo, Pero como? Que debemos enviarle?
En la pagina 28 el PDF nos da la inicializacion para 8bits.
Observa que apenas se alimenta el modulo, uno debe esperar 40ms antes de enviar el primer comando/instruccion, donde tiene las X no importa el valor que se le envie, lo importante es respetar los tiempos y los valores.
Una ves inicializado el LCD procedes a Setear la direccion de DDRAM y escribir.
-------------------------------------------------------------------------
Ahora ya podes entender masomenos que es lo del datasheet.
Miremos tu libreria. La inicializacion que es la funcion glcd_init_graph cumple con lo que dice el datasheet, tal ves posea algunas instrucciones mas.
Veamos si envia una instruccion:
void glcd_instruction(unsigned char x){
glcd_check_busy(); //must be satisfied before sending instruction
output_low(rs); // LOW RS and LOW RW will put the lcd to
output_low(rw); // Write instruction mode
output_b(x); // 8bit data to bus
output_high(e); // enable
delay_us(1);
output_low(e); // disable
}
Revisa si esta ocupado, pone RS a 0 y RW a 0, es decir lectura e instruccion.
Luego pone la instruccion en el puertoB, los 8 bits.
Finalmente da un pulso en el pin E.
Que es exactamente lo que nos mostraba el grafico cuando vimos como era la interfaz.
Luego tenes muchas mas funciones dentro de la libreria, Lo que a veces usan es crear una RAM igual en el micro de esa forma cuando se cambia algo, se cambia en el micro, y luego tenes que llevarlo al LCD.
---------------------------------------------------
Una ultima gota mas de explicacion. Ya deberias tener una idea de como manejarte con el LCD, pero al comienzo hable sobre que el LCD tiene una memoria interna, lo que escribimos es realmente esa memoria que yo le llame simplente RAM. Pero si leiste el datasheet te encontras con VARIAS memorias GDRAM, IRAM, CGRAM, DDRAM, (CGROM aunque no es una RAM).
el GDRAM es la memoria que se lee y se muestra en el LCD por eso esta memoria va a tener 64 filas de 128 columnas, cada pixel es 1bit. Esto lo podes ver en la pagina 15. Entonces por cada fila podes enviar hasta 16bytes. los cuales esos bits van a encender y apagar cada pixel de esa primer fila. En ves de enviar Caracteres completos envias pixel a pixel. Esto es lo mas comun que vas a usar, entonces si queres usar una letra por ejemplo, vas a tener que dibujar la letra pixel a pixel.
Como se hace para escribir en un punto en especifico? Se debe seleccionar la direccion vertical primero y luego la horizontal, explicado en la pagina 12
Que pasa con las otras RAM/ROM?
CGROM = Es una memoria donde se guardan letras y numeros para que puedan ser usados en la DDRAM algunos de 16x16 pixel y otros de 8x8.
CGRAM = A veces se necesita algun caracter especial, entonces aca uno puede crear el caracter especial y luego usarlo.
IRAM = Lo mismo que la CGROM nomas que aca son iconos
Lo que no logro comprender porque no esta explicado, es ... Donde se muestra la DDRAM, ya que supuestamente son 2 lineas y podrias usar letras que se encuentran dentro de la ROM del driver.