Lo de la página de Berty no es más que un ejemplo para que veas el funcionamiento del LCD. En cambio, la rutinas en C son una librería para el control y el otro un ejemplo donde se hace uso de esa librería.
Si te fijas, el de berty escribe la fecha repetidamente:
Codigo:
adata movlw 1FH ;date
movwf afisaj
call lcdta
movlw 05H ;date
movwf afisaj
call lcdta
movlw 07H ;date
movwf afisaj
call lcdta
Lo que hace el programa es inicializar y demás, se posiciona y luego escribe la fecha una y otra vez.
De ahí puedes usar todo excepto la parte que está aquí pegada, modificando un poco, claro. Por ejemplo te creas una función init, que es la misma pero termina con un return, creo que era. Así luego, en tu programa sólo harás call init. Y así con el resto. Te crea tu librería que luego incluyes en tu programa.
Lo de los puntos... a ver... Imagina esto:
||||||||||
||||||||||
||||||||||
Cada | es un byte. Así es como es la matriz del LCD. Osea, cada | son 8 pixels, verticales. Así si quieres por ejmplo crear el caracter ":" sería 00100100 por ejemplo. Mejor así no?
Tu direccionas y luego escribes. El puntero se va incrementando sólo.
Y por tanto, si quieres escribir texto, tendrás que crea tú las letras. Eso es lo que hago en mis tablas.
La cosa es que si no sabes C se complica para explicarte, pero a ver..
Yo mando la orden de escribir la A, que en ascii es el 40. Mi función lo que hace es convertir ese cuarenta en los puntos que deben de encenderse y apagarse.
Yo he escogido para cada símbolo 8x5pixels, osea |||||, Bien, pues la A será 0x7e,0x11,0x11,0x11,0x7e. Toma un cuaderno de esos de cuadrículas, y monta toma un cadrado de 8x5 cadraditos. Y ahora rellena cada cuadrado que tenga un 1 y verás que sale... la A.
La función lo que hace es direccionar sobre esa tabla, tomando la trama para ese caracter y lo envía al LCD.
En cuanto a lo del controlador, sí, es ese.
Lo mejor, bajo mi opinión es que conectes el LCD, cargues el programa de berty, compruebes que funciona y en base a él te montes tu propia librería.
Aquí:
Codigo:
movlw 40H ;x ini
movwf afisaj
call lccmd
movlw 80H ;y ini
movwf afisaj
call lccmd
Si te fijas, usa el byte afisaj para envío.
La función lccmd supongo que será la que usa para comunicación y envío de lo que está en afisaj.
A ver...
Mira, tenemos las siguientes señales en el lcd, pines vamos:
*sclk (señal de reloj, sincronismo)
*sda (datos)
*dc (no m"acuerdo)
*cs (tampoco m"acuerdo. Chip Select, supongo)
*res (esto puede ser una resistencia, pero tampoco me acuerdo
. Es broma. Reset)
Mira el data para más detalles
Bien, mirando las rutinas en C la cosa sería así:
1) Para enviar un comando:
dc a 0
cs a 0
y ahora envío en serie del comando.
sclk a 0 (esta es la señal de reloj) Se pone a cero y envío de un bit
a)si el bit es 0 sda a 0
b)si el bit es 1 sda a 1
sclk a 1
Esto se repite 8 veces, una por bit del byte que compone el comando. El envío se hace empezando por el bit MSB
2) Para enviar un dato:
dc a 1
El resto igual, pero claro, lo que se envía ahora es un dato, algo que será mostrado (los 1 serán puntos negros, los 0 blancos)
Los comandos para direccionar en la pantalla son:
X-> 1xxx xxxx (donde las x son el número en binario para el eje X. Columna)
Y-> 0100 0yyy (lo mismo, para el eje Y. Filas)
Para inicializar el LCD:
todas la señales a 0.
esperas 200us
dc a 1
cs a 1
esperas 10 ms
res a 0
esperas 250ms
res a 1
envías el comando 0x21
envías el comando 0x90
envías el comando 0x13
envías el comando 0x20
envías el comando 0x09
esperas 50ms
te posicionas en (0,0)
limpias la pantalla, osea escribes 0 en todas las posiciones. Recuerda que el puntero se incrementa sólo.
esperas 10ms
envías el comando 0x0c
...y listo. Uffff
En el archivo .c puedes ver con detalle que es cada comando que se envía. O en el data.
Los tiempos no son exactamente los que vienen en el data, quiero recordar. Los aumentamos por seguridad. De todos modos puedes cambiar y pobrar. Pero así funciona.
Y esto es todo. Recuerda que la comunicación con el display tiene sus tiempos mínimos, osea, que según el cristal que uses debes ver esto.
Si mal no recuerdo creo era de 2us por nivel de clk
Saludos!