-
Hola a todos!
Estos dias estuve entretenido con un GLCD modelo LGM12864B-NSW-BBS (128x64), y estuve buscando informacion al respecto de estos LCDs, grande fue mi sorpresa al no encontrar mucha informacion detallada, por el contrario hay mucha informacion dispersa y no muy concreta de como hechar a andar estos LCDs, por ello me decidi a postear lo que logre conseguir.
Para empezar recomiendo bajar el datasheet del controlador de KS0108B (pronto posteare el link de descarga directa) para entender mejor lo que se va a hacer.
Como es bien sabido todo LCD tiene un controlador que realiza la interface con el microcontrolador, estos controladores tienen una serie de instrucciones para hecharlos a andar, a diferencia de los LCDs de caracteres, los graficos (para este caso el KS0108B) no tienen muchas intrucciones y sus instrucciones estan orientadas a indicar una posicion, guardar la data en la ram (para que se visualice en pantalla), leer el registro de estado y leer la ram del controlador.
Se debe saber que la manera de manipular los GLCD es indicar la posicion del dato a mostrar (el dato a amostrar es 1 byte en forma horizontal), esta posicion consta de 2 parametros debido a que la pantalla del LCD se divide en 8 paginas horizontales (X address), 64 posiciones verticales (Y address), ademas se puede indicar en que posicion horizontal se colocara el dato (esto implica que se puede colocar el dato entre dos paginas horizontales, no necesariamente cada byte se coloca en una pagina, esto se hace indicando el bit de inicio que puede ir de 0 a 63, ya que 8 paginas de 8bits cada una: 8x8=64bits), lo cual da mas versatilidad al GLCD.
Hay que tener en cuenta que el KS0108B es un controlador para LCD de 64x64, es por ello que para el GLCD de 128x64 se utilizan dos controladores, los cuales cuentan con habilitaciones independientes: CSA y CSB respectivamente en el patillaje del GLCD, estos controladores comparten el pin de E (enable) con lo cual se validan los datos o instrucciones que se le den al controlador, los datos o intrucciones se especifican con el pin RS (RS=0 instruccion, RS=1 dato), luego con el pin R/W se indica una lectura o escritura en el LCD, luego se tienen los pines de datos D0:D7, y los pines para el contraste Vo y Vee, y no olvidar el backligth Va y Vk. Luego posteare una imagen con las conexiones correspondientes en proteus.
Estare posteando más dentro de un rato, voy a averiguar como subir imagenes y crear enlaces para mayor facilidad.. :-/ Saludos. :mrgreen:
-
Siguiendo con el tutorial, utilizaremos un PIC 16F877A con un cristal de 20MHz y la conexion con el GLCD es como se muestra en la imagen, y ademas haremos uso de una libreria GLCD.asm en la cual solo he colocado rutinas basicas, se espera recibir contribuciones para hacerla mas completa. Ambos archivos se adjuntan al pie del post.
(http://img81.imageshack.us/img81/6983/conexionglcdxo9.gif) (http://img81.imageshack.us/my.php?image=conexionglcdxo9.gif)
(http://img81.imageshack.us/img81/conexionglcdxo9.gif/1/w396.png) (http://g.imageshack.us/img81/conexionglcdxo9.gif/1/)
PD: Estare modificando los post en lo posible, acepto sugerencias.
El datasheet del controlador KS0108B (http://www.lcd-module.de/eng/pdf/zubehoer/ks0108b.pdf)
El diagrama del GLCD LGM12864B (http://www.longtech-display.com/PRODUTS/LCD%20MODULES/longtech%20pdf/LGM12864B.pdf)
-
Tal vez a ti te aparece la imagen, pero no a mi por ejemplo.
Si quieres subir imagenes, una buena idea es hacerlo en Imageshack o algun servidor por el estilo.
De esa forma las veremos todos. :mrgreen:
-
Bien ahora publicare el codigo de ejemplo, graficaremos la imagen que aparece en mi perfil (AC/DC.. una de mis bandas favoritas :mrgreen:) haremos que parpadee cada 250ms, por ahora lo haremos de una forma simple, colocando la data en tablas y pintando byte a byte en el LCD.
Importante: Cuando estamos trabajando con el GLCD y deshabilitamos CSA y CSB (ambos a uno) estos no se bloqueean del todo, pues si escribimos por ejemplo cualquier data, esta data se pintara en el GLCD pero se reflejara en la otra mitad del mismo.
;------------------------------------------------------
; Programa de prueba, manipulacion de LCD grafico
; utilizacion de libreria GLCD
; autor: enrique_86
; version: 1.0
; fecha: 17/11/08
;------------------------------------------------------
LIST P=16F877A
INCLUDE<P16F877A.INC>
INCLUDE<MACROPIC.INC>
;-------------------------------------------------------------------
__CONFIG _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _LVP_OFF
errorlevel -302 ;suprime el mensaje: "not in bank 0" message
;-------------------------------------------------------------------
CBLOCK 0x20
W_TEMP
contador
puntero
strlen
Xpag
FINAL_TABLA
ENDC
ORG 0000H
goto INICIO
ORG 0004H
INICIO
clrf PORTA
clrf PORTB
clrf PORTC
clrf PORTD
clrf PORTE
banco 1
bcf TRISC,3
movlw B'00000110'
movwf ADCON1 ; PORTA y PORTE como i/o digitales
clrf TRISA
clrf TRISC
banco 0
call initGRLCD
call SETA
call ClearGLCD
call SETB
call ClearGLCD
INFINITO
clrf Xpag
call SETA
movf Xpag,W
call SetX
movlw .0
call SetY
movlw .0
call SetLS
clrf puntero
mov strlen,.64
Lazo1
movlw LOW ACDC0+4
addwf puntero,0
movlw HIGH ACDC0
movwf PCLATH
btfsc STATUS,C
incf PCLATH,0
movwf FINAL_TABLA
call ACDC0
call EnviaCarGLCD
incf puntero,F
decfsz strlen,F
goto Lazo1
call SETB
movf Xpag,W
call SetX
movlw .0
call SetY
movlw .0
call SetLS
mov strlen,.64
Lazo2
movlw LOW ACDC0+4
addwf puntero,0
movlw HIGH ACDC0
movwf PCLATH
btfsc STATUS,C
incf PCLATH,0
movwf FINAL_TABLA
call ACDC0
call EnviaCarGLCD
incf puntero,F
decfsz strlen,F
goto Lazo2
incf Xpag,F
call SETA
movf Xpag,W
call SetX
movlw .0
call SetY
movlw .0
call SetLS
clrf puntero
mov strlen,.64
Lazo3
movlw LOW ACDC1+4
addwf puntero,0
movlw HIGH ACDC1
movwf PCLATH
btfsc STATUS,C
incf PCLATH,0
movwf FINAL_TABLA
call ACDC1
call EnviaCarGLCD
incf puntero,F
decfsz strlen,F
goto Lazo3
call SETB
movf Xpag,W
call SetX
movlw .0
call SetY
movlw .0
call SetLS
mov strlen,.64
Lazo4
movlw LOW ACDC1+4
addwf puntero,0
movlw HIGH ACDC1
movwf PCLATH
btfsc STATUS,C
incf PCLATH,0
movwf FINAL_TABLA
call ACDC1
call EnviaCarGLCD
incf puntero,F
decfsz strlen,F
goto Lazo4
incf Xpag,F
call SETA
movf Xpag,W
call SetX
movlw .0
call SetY
movlw .0
call SetLS
clrf puntero
mov strlen,.64
Lazo5
movlw LOW ACDC2+4
addwf puntero,0
movlw HIGH ACDC2
movwf PCLATH
btfsc STATUS,C
incf PCLATH,0
movwf FINAL_TABLA
call ACDC2
call EnviaCarGLCD
incf puntero,F
decfsz strlen,F
goto Lazo5
call SETB
movf Xpag,W
call SetX
movlw .0
call SetY
movlw .0
call SetLS
mov strlen,.64
Lazo6
movlw LOW ACDC2+4
addwf puntero,0
movlw HIGH ACDC2
movwf PCLATH
btfsc STATUS,C
incf PCLATH,0
movwf FINAL_TABLA
call ACDC2
call EnviaCarGLCD
incf puntero,F
decfsz strlen,F
goto Lazo6
incf Xpag,F
call SETA
movf Xpag,W
call SetX
movlw .0
call SetY
movlw .0
call SetLS
clrf puntero
mov strlen,.64
Lazo7
movlw LOW ACDC3+4
addwf puntero,0
movlw HIGH ACDC3
movwf PCLATH
btfsc STATUS,C
incf PCLATH,0
movwf FINAL_TABLA
call ACDC3
call EnviaCarGLCD
incf puntero,F
decfsz strlen,F
goto Lazo7
call SETB
movf Xpag,W
call SetX
movlw .0
call SetY
movlw .0
call SetLS
mov strlen,.64
Lazo8
movlw LOW ACDC3+4
addwf puntero,0
movlw HIGH ACDC3
movwf PCLATH
btfsc STATUS,C
incf PCLATH,0
movwf FINAL_TABLA
call ACDC3
call EnviaCarGLCD
incf puntero,F
decfsz strlen,F
goto Lazo8
incf Xpag,F
call SETA
movf Xpag,W
call SetX
movlw .0
call SetY
movlw .0
call SetLS
clrf puntero
mov strlen,.64
Lazo9
movlw LOW ACDC4+4
addwf puntero,0
movlw HIGH ACDC4
movwf PCLATH
btfsc STATUS,C
incf PCLATH,0
movwf FINAL_TABLA
call ACDC4
call EnviaCarGLCD
incf puntero,F
decfsz strlen,F
goto Lazo9
call SETB
movf Xpag,W
call SetX
movlw .0
call SetY
movlw .0
call SetLS
mov strlen,.64
Lazo10
movlw LOW ACDC4+4
addwf puntero,0
movlw HIGH ACDC4
movwf PCLATH
btfsc STATUS,C
incf PCLATH,0
movwf FINAL_TABLA
call ACDC4
call EnviaCarGLCD
incf puntero,F
decfsz strlen,F
goto Lazo10
incf Xpag,F
call SETA
movf Xpag,W
call SetX
movlw .0
call SetY
movlw .0
call SetLS
clrf puntero
mov strlen,.64
Lazo11
movlw LOW ACDC5+4
addwf puntero,0
movlw HIGH ACDC5
movwf PCLATH
btfsc STATUS,C
incf PCLATH,0
movwf FINAL_TABLA
call ACDC5
call EnviaCarGLCD
incf puntero,F
decfsz strlen,F
goto Lazo11
call SETB
movf Xpag,W
call SetX
movlw .0
call SetY
movlw .0
call SetLS
mov strlen,.64
Lazo12
movlw LOW ACDC5+4
addwf puntero,0
movlw HIGH ACDC5
movwf PCLATH
btfsc STATUS,C
incf PCLATH,0
movwf FINAL_TABLA
call ACDC5
call EnviaCarGLCD
incf puntero,F
decfsz strlen,F
goto Lazo12
incf Xpag,F
call SETA
movf Xpag,W
call SetX
movlw .0
call SetY
movlw .0
call SetLS
clrf puntero
mov strlen,.64
Lazo13
movlw LOW ACDC6+4
addwf puntero,0
movlw HIGH ACDC6
movwf PCLATH
btfsc STATUS,C
incf PCLATH,0
movwf FINAL_TABLA
call ACDC6
call EnviaCarGLCD
incf puntero,F
decfsz strlen,F
goto Lazo13
call SETB
movf Xpag,W
call SetX
movlw .0
call SetY
movlw .0
call SetLS
mov strlen,.64
Lazo14
movlw LOW ACDC6+4
addwf puntero,0
movlw HIGH ACDC6
movwf PCLATH
btfsc STATUS,C
incf PCLATH,0
movwf FINAL_TABLA
call ACDC6
call EnviaCarGLCD
incf puntero,F
decfsz strlen,F
goto Lazo14
incf Xpag,F
call SETA
movf Xpag,W
call SetX
movlw .0
call SetY
movlw .0
call SetLS
clrf puntero
mov strlen,.64
Lazo15
movlw LOW ACDC7+4
addwf puntero,0
movlw HIGH ACDC7
movwf PCLATH
btfsc STATUS,C
incf PCLATH,0
movwf FINAL_TABLA
call ACDC7
call EnviaCarGLCD
incf puntero,F
decfsz strlen,F
goto Lazo15
call SETB
movf Xpag,W
call SetX
movlw .0
call SetY
movlw .0
call SetLS
mov strlen,.64
Lazo16
movlw LOW ACDC7+4
addwf puntero,0
movlw HIGH ACDC7
movwf PCLATH
btfsc STATUS,C
incf PCLATH,0
movwf FINAL_TABLA
call ACDC7
call EnviaCarGLCD
incf puntero,F
decfsz strlen,F
goto Lazo16
bsf PORTA,0
delay_ms .250
call SETBOTH
call ClearGLCD
bcf PORTA,0
delay_ms .250
goto INFINITO
;===================================================================
ACDC0
movf FINAL_TABLA
movwf PCLATH
movf puntero,0
addwf PCL,F
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F
dt 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F
dt 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x20,0x3A,0x3A,0x25,0x3F,0x31,0x2E,0x2E
dt 0x31,0x3F,0x31,0x2E,0x2E,0x2E,0x3F,0x20,0x3B,0x35,0x2E,0x3F,0x3C,0x3F,0x20,0x3D
dt 0x3B,0x37,0x20,0x3F,0x3C,0x3F,0x20,0x3A,0x3A,0x25,0x3F,0x31,0x2E,0x2E,0x31,0x3F
dt 0x30,0x2F,0x2F,0x2F,0x3F,0x30,0x2F,0x2F,0x2F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F
dt 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F
dt 0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
ACDC1
movf FINAL_TABLA
movwf PCLATH
movf puntero,0
addwf PCL,F
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xF8,0xF8
dt 0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x78,0x38,0x18,0x08,0x18,0x38,0x78,0xF8
dt 0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x78,0x38,0x18,0x08,0x18,0x38
dt 0x78,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0x78,0x78
dt 0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0xF8,0x78,0x38,0x18,0x08,0x08,0x08
dt 0x08,0x08,0x08,0x08,0x08,0x08,0x18,0x38,0x78,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8
dt 0xF8,0xF8,0xF8,0xF8,0x78,0x38,0x18,0x08,0x18,0x38,0x78,0xF8,0xF8,0xF8,0xF8,0xF8
dt 0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
ACDC2
movf FINAL_TABLA
movwf PCLATH
movf puntero,0
addwf PCL,F
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF
dt 0xFF,0xFF,0xFF,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0xC0,0x80,0x00,0x00,0x00,0x00
dt 0x01,0x03,0x07,0x0F,0xFF,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0xC0,0x80,0x00,0x00
dt 0x00,0x00,0x01,0x03,0x07,0x0F,0x1F,0xBF,0xFF,0xFF,0xFF,0x3F,0x07,0x01,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF8,0xFE,0xFE,0xFC,0xF8,0xF0,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0xC0,0x80,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0xFF,0x0F
dt 0x07,0x03,0x01,0x00,0x00,0x00,0xC0,0x80,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F
dt 0x1F,0xBF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
ACDC3
movf FINAL_TABLA
movwf PCLATH
movf puntero,0
addwf PCL,F
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF
dt 0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFE
dt 0xFC,0xF8,0xF0,0xF8,0xFC,0xFE,0xFF,0x7F,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x08,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x8F,0xCF,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,0xF0,0xF8,0xFC,0xFE
dt 0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
ACDC4
movf FINAL_TABLA
movwf PCLATH
movf puntero,0
addwf PCL,F
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF
dt 0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xC0,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x7F,0xFF,0xFF
dt 0xFF,0x7F,0x3F,0x7F,0xBF,0x8F,0x83,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xF0,0xF8,0xFC,0xFF,0xFF,0xFF,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x7F,0xFF,0xFF,0xFF,0x7F,0x3F,0x7F,0xFF,0xFF
dt 0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
ACDC5
movf FINAL_TABLA
movwf PCLATH
movf puntero,0
addwf PCL,F
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xDF
dt 0x8F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83,0xC7,0x83,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x03,0x04,0x88,0xD0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x01
dt 0x00,0x00,0x00,0x00,0x80,0xC1,0xE3,0x77,0x0F,0x01,0x00,0x00,0x00,0x00,0x00,0x00
dt 0xC0,0xE0,0xF0,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x1F,0x0F,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xFF,0xFC
dt 0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x80,0xC1
dt 0xE3,0xF7,0xFF,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
ACDC6
movf FINAL_TABLA
movwf PCLATH
movf puntero,0
addwf PCL,F
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F
dt 0x1F,0x1F,0x1E,0x1C,0x18,0x10,0x18,0x1C,0x1E,0x1F,0x1F,0x1F,0x1F,0x1F,0x1E,0x1C
dt 0x18,0x10,0x18,0x1C,0x1E,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1E,0x1C,0x18,0x10
dt 0x18,0x1C,0x1E,0x1F,0x1F,0x1F,0x13,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x1E,0x1F
dt 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1E,0x1C,0x18,0x10,0x10,0x10
dt 0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x1C,0x1E,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F
dt 0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x1E,0x1C,0x18,0x10,0x18,0x1C,0x1E,0x1F,0x1F,0x1F
dt 0x1F,0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
ACDC7
movf FINAL_TABLA
movwf PCLATH
movf puntero,0
addwf PCL,F
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC
dt 0xFC,0xFC,0xFC,0x0C,0xB4,0xB4,0x0C,0xFC,0x04,0xFC,0x04,0xEC,0xDC,0xBC,0x04,0xFC
dt 0xF4,0xF4,0x04,0xF4,0xF4,0xFC,0xFC,0xFC,0xFC,0x04,0xEC,0xDC,0xBC,0x04,0xFC,0x8C
dt 0x74,0x74,0x8C,0xFC,0x04,0xFC,0x6C,0x54,0x54,0xB4,0xFC,0x8C,0x54,0x54,0x74,0xFC
dt 0xFC,0xFC,0xFC,0x04,0xD4,0xD4,0xEC,0xFC,0x8C,0x74,0x74,0x8C,0xFC,0x84,0x7C,0x7C
dt 0x7C,0xFC,0x84,0x7C,0x7C,0x7C,0xFC,0x84,0x7C,0x7C,0x84,0xFC,0xF4,0xF4,0x04,0xF4
dt 0xF4,0xFC,0x04,0xFC,0x8C,0x74,0x74,0x8C,0xFC,0x04,0xEC,0xDC,0xBC,0x04,0xFC,0xFC
dt 0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
;===================================================================
INCLUDE<retardo.asm>
INCLUDE<GLCD.asm>
END
Nota: Ovbiamente tienen que colocar sus propias rutinas de retardo, ya que las rutinas que he colocado no son de mi autoria (derechos de autor reservados), pero bueno, al compilarlo y simularlo en Proteus no se podra observar el parpadeo, ya que al deshabilitar CSA y CSB (ponerlos a uno) en la simulacion si se bloquean ambos controladores :?, pero obtendran algo como esto :-) :
(http://img221.imageshack.us/img221/6543/acdced7.png) (http://img221.imageshack.us/my.php?image=acdced7.png)
PD: Me podrian ayudar? como se coloca las barras laterales para no mostrar todo el texto del codigo?? grax :mrgreen:
-
Importante:
Ahora bien, ya hemos podido graficar algo en el GLCD, pero debe haberles causado sorpresa la cantidad de datos que se necesitan, pues bien, analicemos: tenemos un LCD de 128x64, eso nos da 8192 bits que dividido entre 8 serian 1024bytes es decir 1Kb de datos por pantalla, imaginate si queremos hacer una animacion de unos 40 cuadros (o pantallas) esto seria en total 40*1K=40K de datos! :?, si implementaramos esto en un modesto PIC de la familia 16 nuestra memoria de programa quedaria corta e incluso si pensaramos en la eeprom sucederia lo mismo, bien la solucion a esto es implementar algoritmos de compresion de imagenes o solo modificar los datos que varian en la animacion o bien utilizar una memoria de datos externa como una FRAM y manipularlo por un bus SPI o I2C, pero esto ya escapa de las manos de un pic de la familia 16 y del assembler, ya que es mas facil implementar estos codigos para GLCD en C18 (familia 18), en el CCS, o en el C30 (dspics).
Pero bien si buscan realizar una aplicacion sencilla por ejemplo una barra que muestre el estado de la temperatura, o cosas por estilo aun podemos recurrir al assembler para manejar los datos, siempre y cuando tengamos el respectivo cuidado al manejar las tablas y las paginas en la memoria de programa.
Espero que esta pequeña contribucion les sea de utilidad, cualquier duda, sugerencia, comentario o critica constructiva es bien recibida. Saludos. :mrgreen:
PD: Espero comentarios y sugerencias para mejorar los post y darles un mejor acabado como he visto en otros hilos :-)
-
Para meter en el recuadro código utiliza los modificadores [ code ] [ /code ] (sin espacio dentro de los corchetes)
-
Gracias por la ayuda a los moderadores! :mrgreen:
Asi si da gusto postear :-).. Saludos
-
Y da gusto a los moderadores ayudar a que avances en un tema tan bueno!! :mrgreen:
-
Bien si se han estado preguntando como rayos saque las tablas para obtener ese dibujo, les podre decir que el paint es aun una herramienta util, pues lo dibuje en paint, obviamente guardando la imagen como monocroma y en sus atributos especifique que sea de 128x64 pixeles. Pero eso solo es el principio del proceso, ahora bien una ves obtenida la imagen, utilice una herramienta adicional :mrgreen: Si alguno de ustedes a trabajado con el mikroC sabrá que este entorno tiene una herramienta que nos facilita el trabajo cuando se trata de GLCDs, estoy hablando del GLCD bitmap editor, con esta herramienta cargamos la imagen generada anteriormente y este nos arroja el array de datos correspondientes(16x64) para nuestra imagen, tome este array y luego lo acomode en excel para que me transforme el array y me los convierta en formato hexadecimal separado por comas y listo para un copy y page jeje :mrgreen:
(http://img375.imageshack.us/img375/9450/dsc00588yr7.jpg) (http://img375.imageshack.us/my.php?image=dsc00588yr7.jpg)
Luego solo se separa el array en tablas mas pequeñas para que puedan ser utilizadas en el assembler de MPLAB, yo las separe en 8 tablas de 128 (en total 1024 Bytes),las 8 tablas corresponden cada pagina vertical (X address) y todas las posiciones verticales: 64x2 (Y address), es decir una tabla corresponde a la pagina 0 para ambos contorladores del GLCD.
Lo siguiente es realizar una aplicacion mas dinamica, voy a estar pensando en que podria ser, quizas mostrar la hora y fecha en el GLCD con un RTC, bueno hasta entonces leere sus comentarios. Saludos :-)
PD: Acepto sugerencias :-/
-
Seria interesante poder hacer figuras geométricas, por ejemplo, al hacer una llamada a la subrutina "Generar_Triangulo" a la que hemos ingresado como dato 3 puntos (x,y) en la pantalla debe dibujarse un triangulo, luego una subrutina "Generar_Círculo" como dato debe ingresarse la coordenada (x,y) del punto central y el radio r, y asi sucesivamente crear mas subrutinas para diferentes figuras. Tambien puedes conectarle al pic un keyboard y al escribir debe aparecer en el GLCD el texto, tambien seria interesante crear subrutinas para cambiar el tipo de letra y el tamaño, bueno hay hay muchas cosas que se pueden hacer.
Javicho.
-
guau buenísimo trabajo Enrique y yo que pensaba que me iba a tomar mucho tiempo aprender sobre GLCD's, con tu ayuda veo mejor las cosas y hasta ya las comprendo.
excelente aporte, muchas gracias :-/ :-/ :-/
-
:-/ felicidades buen tutorial! , haber si te haces uno con el simbolo clásico de THE WHO. :-)
-
Hola Enrique!!!! gracias por aportar tan buén material!!!! :-/ , sigo leyendo tus avances :-/
Norberto
-
Hola a todos!, bueno me causo un poco de sorpresa que esten leyendo este modesto post :shock:, pero bueno estos dias he estado un poco ocupado en el trabajo por lo que no he podido postear nada pero ya estoy avanzando en algo que espero les agrade, y les sea de utilidad.
Bueno acerca de la formacion de las figuras geometricas, suena muy interesante pero se me ocurre eso dejarlo al C, ya que para ello seria mas facil implementar multiplicaciones y algoritmos mas complicados, jeje pero no lo descarto del todo algo se me ocurrira..
Acerca del simbolo clasico del grupo the who, para mi buen amigo micro_cadaver lo colocare mas adelante, (cuando averigue cual es su simbolo clasico :?) jijijiji
Bueno este fin de semana espero estar subiendo el post, cuando termine de poner a punto mi PC que esta teniendo un ligero problema :?.. Un saludo a todos! :mrgreen:
-
aca te la dejo como tarea :D
(http://s16000.gridserver.com/discoclub/TheWho.jpg)
-
Bueno despues de una breve ausencia, vuelvo para postear algo que estuve haciendo en mis ratos libres, cumpliendo la tarea para mi buen amigo micro_cadaver, le dejo un post con el simbolo de the who, jeje. :mrgreen:
En el siguiente ejemplo vamos a mostrar como visualizar numeros en el GLCD, para ello es necesario mejorar el acceso a tablas en la memoria de programa del pic, y eso lo consegui gracias al excelente post de maunix acerca de manejo de tablas (puedes revisar el post aqui (http://www.todopic.com.ar/foros/index.php?topic=12918.0)), hice algunas modificaciones de las rutinas pero son minimas y creo que se pueden seguir facilmente.
Como ya habran leido el controlador KS0108B no tiene la opcion de dibujar letras o numeros como otros controladores, asi que todo grafico, letra o numero que queramos hacer hay que construirlo desde cero. Para esto me ayude del paint y de la herramienta del mikroC (GLCD bitmap editor), construi una plantilla de los numeros del uno al nueve y los coloque en tablas separadas para mostrarlas independientemente y en cualqueir lugar, tomando cuidado del tamaño que les di.
Aqui coloco el codigo:
;------------------------------------------------------
; Programa de prueba, manipulacion de LCD grafico
; utilizacion de libreria GLCD
; Autor: Enrique_86
; version: 1.0
; fecha: 25/11/08
;------------------------------------------------------
LIST P=16F877A
INCLUDE<P16F877A.INC>
INCLUDE<MACROPIC.INC>
_mensaje macro NombreMensaje
movlw LOW NombreMensaje
movwf MENSAJEADDRESS+0
movlw HIGH NombreMensaje
movwf MENSAJEADDRESS+1
movlw .48
movwf OFFSETEND
pagesel _MENSAJESTART
call _MENSAJESTART
endm
_mensaje2 macro NombreMensaje,LargoMensaje
movlw LOW NombreMensaje
movwf MENSAJEADDRESS+0
movlw HIGH NombreMensaje
movwf MENSAJEADDRESS+1
movlw LargoMensaje
movwf OFFSETEND ;Leera 3 bytes (del 0 al 2)
pagesel _MENSAJESTART
call _MENSAJESTART2
endm
;-------------------------------------------------------------------
__CONFIG _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _LVP_OFF
errorlevel -302 ;suprime el mensaje: "not in bank 0" message
;-------------------------------------------------------------------
CBLOCK 0x20
W_TEMP
Numero
unidades
decenas
contador
puntero
strlen
strlen2
Xpag
Yadr
LS
MENSAJEADDRESS
MENSAJEADDRESS_L
OFFSET
OFFSETEND
ENDC
ORG 0000H
goto INICIO
ORG 0004H
INICIO
clrf PORTA
clrf PORTB
clrf PORTC
clrf PORTD
clrf PORTE
banco 1
bcf TRISC,3
movlw B'00000110'
movwf ADCON1 ; PORTA y PORTE como i/o digitales
clrf TRISA
clrf TRISC
banco 0
call initGRLCD
call SETA
call ClearGLCD
call SETB
call ClearGLCD
call SETA
clrf Yadr
clrf Xpag
clrf LS
clrf Numero
mov unidades,.0
mov decenas,.1
INFINITO
call SETA
mov Xpag,.2
mov Yadr,.47
movr Numero,decenas
call Number
call SETB
mov Xpag,.2
mov Yadr,.0
movr Numero,unidades
call Number
delay_s .1
decf unidades,F
cjne unidades,.255,INFINITO
mov unidades,.9
decf decenas
cjne decenas,.255,INFINITO
mov decenas,.1
mov unidades,.0
call SETA
mov Xpag,.0
mov Yadr,.0
_mensaje2 THE_WHO_0,.255
mov Xpag,.4
mov Yadr,.0
_mensaje2 THE_WHO_1,.255
call SETB
mov Xpag,.0
mov Yadr,.0
call SetLS
_mensaje2 THE_WHO_2,.255
mov Xpag,.4
mov Yadr,.0
call SetLS
_mensaje2 THE_WHO_3,.255
delay_s .3
call ClearGLCD
call SETA
call ClearGLCD
goto INFINITO
;===================================================================
Number
cje Numero,.0,N0
cje Numero,.1,N1
cje Numero,.2,N2
cje Numero,.3,N3
cje Numero,.4,N4
cje Numero,.5,N5
cje Numero,.6,N6
cje Numero,.7,N7
cje Numero,.8,N8
cje Numero,.9,N9
return
N0: _mensaje MENSAJE0
return
N1: _mensaje MENSAJE1
return
N2: _mensaje MENSAJE2
return
N3: _mensaje MENSAJE3
return
N4: _mensaje MENSAJE4
return
N5: _mensaje MENSAJE5
return
N6: _mensaje MENSAJE6
return
N7: _mensaje MENSAJE7
return
N8: _mensaje MENSAJE8
return
N9: _mensaje MENSAJE9
return
;===================================================================
_MENSAJESTART:
clrf OFFSET
movf OFFSET,w
addwf MENSAJEADDRESS+0,f
btfsc STATUS,C
incf MENSAJEADDRESS+1,f
_MENSAJE_L01
movf Xpag,W
call SetX
movf Yadr,W
call SetY
movf LS,W
call SetLS
_MENSAJEBUCLE
pagesel MENSAJES
call MENSAJES
call EnviaCarGLCD
bcf STATUS,Z
incf MENSAJEADDRESS+0,f
btfsc STATUS,Z
incf MENSAJEADDRESS+1,f
pagesel _MENSAJEBUCLE
incf OFFSET,f
movlw .16
subwf OFFSET,W
btfsc STATUS,Z
goto IncXpag
movlw .32
subwf OFFSET,W
btfsc STATUS,Z
goto IncXpag
bcf STATUS,Z
movf OFFSET,w
subwf OFFSETEND,w
btfss STATUS,Z
goto _MENSAJEBUCLE
movlw 0x02
subwf Xpag,F
return
IncXpag
incf Xpag,F
goto _MENSAJE_L01
;===================================================================
_MENSAJESTART2:
clrf OFFSET
movf OFFSET,w
addwf MENSAJEADDRESS+0,f
btfsc STATUS,C
incf MENSAJEADDRESS+1,f
_MENSAJE_L02
movf Xpag,W
call SetX
movf Yadr,W
call SetY
;movf LS,W
;call SetLS
_MENSAJEBUCLE2
pagesel MENSAJES
call MENSAJES
call EnviaCarGLCD
bcf STATUS,Z
incf MENSAJEADDRESS+0,f
btfsc STATUS,Z
incf MENSAJEADDRESS+1,f
pagesel _MENSAJEBUCLE2
incf OFFSET,f
movlw .64
subwf OFFSET,W
btfsc STATUS,Z
goto IncXpag2
movlw .128
subwf OFFSET,W
btfsc STATUS,Z
goto IncXpag2
movlw .192
subwf OFFSET,W
btfsc STATUS,Z
goto IncXpag2
movf OFFSET,w
subwf OFFSETEND,w
btfss STATUS,Z
goto _MENSAJEBUCLE2
movlw 0x03
subwf Xpag,F
clrf OFFSET
return
IncXpag2
incf Xpag,F
goto _MENSAJE_L02
;===================================================================
INCLUDE<retardo.asm>
INCLUDE<GLCD.asm>
MENSAJES:
movf MENSAJEADDRESS+1,w
movwf PCLATH ;Guardo byte 0 del
movf MENSAJEADDRESS+0,w
movwf PCL
MENSAJE0: dt 0x00,0xF0,0xF8,0xFE,0xFF,0x1F,0x0F,0x07,0x07,0x0F,0x1F,0xFF,0xFE,0xF8,0xF0,0x00
dt 0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00
dt 0x00,0x0F,0x1F,0x7F,0xFF,0xF8,0xF0,0xE0,0xE0,0xF0,0xF8,0xFF,0x7F,0x1F,0x0F,0x00
MENSAJE1: dt 0x00,0xC0,0xE0,0xE0,0xF8,0xFE,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xFF,0xFF,0xFF,0xFF,0xF0,0xF0,0xF0,0xF0,0xF0,0x00
MENSAJE2: dt 0x00,0xF0,0xF8,0xFC,0x1C,0x0E,0x0F,0x0F,0x0F,0x0F,0x1F,0xFE,0xFE,0xFC,0xF0,0x00
dt 0x00,0x00,0xC0,0xE0,0xF0,0xF0,0xF8,0x78,0x38,0x38,0x3C,0x3F,0x1F,0x0F,0x03,0x00
dt 0x00,0xFF,0xFF,0xFF,0xFF,0xF1,0xF0,0xF0,0xF0,0xF0,0xF0,0xFC,0xFC,0xFC,0xFC,0x00
MENSAJE3: dt 0x00,0x0F,0x0F,0x0F,0x0F,0x07,0x07,0x07,0x07,0x07,0x8F,0xFF,0xFF,0xFE,0xFC,0x00
dt 0x00,0x00,0x00,0x00,0x1E,0x1E,0x1E,0x1E,0x1E,0x3F,0x7F,0xFF,0xF3,0xE1,0xC0,0x00
dt 0x00,0xF8,0xF8,0xF8,0xF8,0xE0,0xE0,0xE0,0xF0,0xF8,0xFC,0xFF,0x7F,0x3F,0x1F,0x00
MENSAJE4: dt 0x00,0x00,0x00,0x80,0xC0,0xF0,0xFC,0x3E,0x0F,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00
dt 0x00,0xF8,0xFE,0xFF,0xCF,0xC3,0xC0,0xC0,0xC0,0xFF,0xFF,0xFF,0xFF,0xC0,0xC0,0x00
dt 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,0xFF,0xFF,0xFF,0x01,0x01,0x00
MENSAJE5: dt 0x00,0xFF,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x00
dt 0x00,0x0F,0x0F,0x0F,0x0F,0x0E,0x0E,0x0E,0x0E,0x0E,0x1E,0x7E,0xFE,0xFC,0xF0,0x00
dt 0x00,0x3C,0x7C,0xFC,0xFC,0xF0,0xE0,0xE0,0xE0,0xE0,0xF0,0xF8,0xFF,0x7F,0x1F,0x00
MENSAJE6: dt 0x00,0x80,0xF0,0xFC,0xFC,0x7E,0x1F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00
dt 0x00,0xFF,0xFF,0xFF,0xFF,0x1E,0x0E,0x0E,0x0E,0x0E,0x1E,0xFE,0xFE,0xFC,0xF0,0x00
dt 0x00,0x1F,0x3F,0x7F,0x7F,0xF0,0xE0,0xE0,0xE0,0xE0,0xF0,0x7F,0x7F,0x3F,0x1F,0x00
MENSAJE7: dt 0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0xCF,0xFF,0xFF,0xFF,0x3F,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xFC,0xFF,0x3F,0x0F,0x03,0x00,0x00,0x00
dt 0x00,0x00,0xC0,0xF0,0xFC,0xFF,0x3F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00
MENSAJE8: dt 0x00,0xF0,0xFC,0xFE,0x1F,0x0F,0x07,0x07,0x07,0x07,0x0F,0x1F,0xFE,0xFC,0xF0,0x00
dt 0x00,0xC1,0xE3,0xF7,0x7F,0x3E,0x1C,0x1C,0x1C,0x1C,0x3E,0x7F,0xF7,0xE3,0xC1,0x00
dt 0x00,0x0F,0x3F,0x7F,0xF8,0xF0,0xE0,0xE0,0xE0,0xE0,0xF0,0xF8,0x7F,0x3F,0x0F,0x00
MENSAJE9: dt 0x00,0xE0,0xF8,0xFE,0x1E,0x0F,0x07,0x07,0x07,0x0F,0x1E,0xFE,0xFC,0xF0,0xC0,0x00
dt 0x00,0x01,0x03,0x0F,0x0F,0x1E,0x1C,0x1C,0x1C,0x1E,0x0F,0xFF,0xFF,0xFF,0xFF,0x00
dt 0x00,0x00,0xE0,0xE0,0xE0,0xE0,0xE0,0xF0,0xF8,0xFE,0x7F,0x3F,0x0F,0x03,0x00,0x00
THE_WHO_0:
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0xF8,0xFE,0xFF,0xFF
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0xDF,0xDF,0xDF
dt 0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0x9F,0x9F,0x9F,0x8F,0x8F,0x8F,0x8F,0x8F,0x0F,0x0F
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x10,0x07,0x07,0x07
dt 0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x07,0x07,0x07,0xFF,0xFF,0xFF,0xFF,0xE0,0x70
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x07,0x01,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x07,0x07,0x07,0x07,0x07,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x00,0x00
THE_WHO_1:
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xE0,0x80,0x00,0x00,0x00,0x3E,0xFE,0xFE
dt 0xFE,0xFC,0xC0,0xE0,0xF8,0xFE,0xFE,0xFE,0xFE,0xF8,0xE0,0xC0,0xFC,0xFE,0xFE,0xFE
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xF8,0xE0,0xC3,0x1F
dt 0x7F,0xFF,0xFF,0xFF,0x7F,0x1F,0x07,0x03,0x1F,0x7F,0xFF,0xFF,0xFF,0x7F,0x1F,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x1F,0x3F,0x7F
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
dt 0xFE,0xFE,0xFE,0xFE,0xFC,0xFC,0xFC,0xF8,0xF8,0xF0,0xF0,0xF0,0xF0,0xF0,0xE0,0xE0
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x03,0x07,0x0F,0x0F,0x1F,0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
THE_WHO_2:
dt 0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x1F,0x1F,0x1F,0x3F,0x3F,0x7F,0x7F,0x3F
dt 0xBF,0xBF,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
dt 0xFF,0xFF,0xFF,0xFE,0xFC,0xF0,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0xF8,0xF8,0xF8,0xF0,0xE0,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x3C,0x1E,0xFF
dt 0xFF,0xFF,0xFF,0x1E,0x3D,0x01,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xE0,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFE,0xFF,0xFF,0x33,0x33,0x3F,0x3F,0x3E,0x1C,0xFF
dt 0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x03,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x07,0x0F,0x0F,0x0C,0x0C,0x0F,0x0F,0x07,0x03,0xFF
dt 0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
THE_WHO_3:
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0x1C,0x0E,0xFE,0xFE,0xFE,0xFC,0xF8,0x80,0xC0,0xE0,0xFF
dt 0x7F,0xFF,0xFF,0xE0,0xC0,0x00,0x00,0x00,0x80,0xF0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x01,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xC0
dt 0x80,0xC0,0xFF,0xFF,0x7F,0x00,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0xE0,0xE0,0xE0,0xE0,0xE0,0xE0,0xF0,0xF0,0xF0,0xF8,0xF8,0xF8,0xFC,0xFC,0xFD,0xFD
dt 0xFD,0xFD,0xFD,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
dt 0xFF,0xFF,0x7F,0x1F,0x0F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
dt 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x1F,0x1F,0x0F,0x07,0x03
dt 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
dt 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
;===================================================================
END
Corriendo el programa obtendran una cuenta regresiva del 10 al 0 y luego de ello se visualizara a The who, algo asi:
(http://img219.imageshack.us/img219/9364/thewhowv4.png)
Espero que esto les sea de utilidad, y en cuanto pueda subire mas ejemplos.. Saludos. :-)
PD: adjunto las plantillas de los numeros por si lo quisieran modificar.
-
Enrique, te quedo chevere :-/
dime cuanto ocupa cada imagen? se podria utilizar una memoria SD para jalar de ahi las imagenes y poder hacer un banco de archivos para un proyecto particular como un jueguito o algo asi.
saludos!
-
buenísimo el trabajo enrique, ahora que puedo me pongo al día con esto y se los mostraré también, con este tutorial ya estoy en onda :-/ :-/
-
Estos codigos pueden tomarse en cuenta para cualquier otro PIC, como por ejmplo el 16F84 :shock: :shock:
Salu2
-
Respondiendo a la pregunta de micro_cadaver, cada imagen en pantalla completa para el GLCD que estamos viendo pesa 1KB, pero a veces no es necesario pintar toda la pantalla por lo que la imagen puede pesar menos.
Respondiendo a Kardia, si se podrian tomar en cuenta para otro pic, pero teneindo en cuenta que tengan los suficientes pines para manejar el GLCD y que tenga la memoria suficiente para almacenar los graficos que quieras hacer, supongo que un 16f84 te quedaria corto para implementar cosas como las que estamos viendo aqui. Saludos
-
hola enrique gracias por responder, dime y piensas migrar el código a C, supongo que ahi será más sencillo el manejar las tablas. sobre todo por el peso de las imágenes (máximo 1kb)
-
Saludos:
El lcd lo compraste en Perú? se puede saber a cuanto? Alguien sabe donde comprar uno a un precio comodo?
Javicho.
-
hola enrique gracias por responder, dime y piensas migrar el código a C, supongo que ahi será más sencillo el manejar las tablas. sobre todo por el peso de las imágenes (máximo 1kb)
Hola Micro_cadaver
Si en un futuro se piensa migrar a C, por ahora he dejado un poco abandonado este hilo por cuestiones de tiempo :? pero espero retomarlo pronto. Saludos :mrgreen:
-
Saludos:
El lcd lo compraste en Perú? se puede saber a cuanto? Alguien sabe donde comprar uno a un precio comodo?
Javicho.
Hola Javicho, bueno el LCD con el que trabaje digamos que lo encontre, pero estoy seguro que en paruro lo venden, solo es cuestion de buscar bien y deben estar algo de 20 dolares. Saludos. :-)
-
Hola Enrique_86:
Hay varios que venden en paruro pero son de segunda mano, necesito nuevos pero a un precio razonable, solo encontré en una tienda nuevos y en stock pero a $26 aprox. y es mucho, por eso sigo buscando alguna tienda que tenga en stock y a un mejor precio.
Javicho.
-
excelente tutorial te mereces un diez todo muy bien detallado gracias¡¡ :-/ :mrgreen:
-
hola si alguien tiene la libreria y la quiere subir MACROPIC.INC le agradecere ya que en este post no estan mas
-
Ante todo muy buenos días a todos, desde hace un tiempo atras a estado tratando de encender aunquesea un puntito en la pantalla de una GLCD y no e podido hacer nada, e estalo leyendo y hay cosas que no tentiendo, bueno si alguien pudiera tomarse la molestia de explicarme cual el la secuencia para pintar un puntico tan siquiera en esa pantalla, me explico mejor, que tengo que hacer primero a quien habilito que comando envio luego que mas hago cuales son esos pasas para que se dibuje un solo punto.......
-
1ro- conexionado correcto, revisar control de contraste, backlight (si es que tiene) y asegurar el reset.
2do- desde el micro enviar a los módulos el comando DISPLAY ON, es decir habilitando el CS1 y el CS2, RS en 0, RW en 0, le envias por el bus la data 0X3F.
3ro- dar un pulso al ENABLE del glcd
luego de esto ya puedes seguir con las secuencias de escritura.
saludos :-/
-
Hola chicos, pasó Mucho tiempo de este post, pero bueno, uno buscando encuentra de todo, y me interesó mucho el tema de los lcd gráficos, manejo los lcd de caracteres, pero estos jamás....
Ahora bien, estos GLCD, no tienen alguna función para meter caracteres entre el gráfico, o hay que "dibujarlos" ???? Y por otro lado, agradezco al tutorial que brindaron, dado que NUNCA ENCONTRE NADA DE COMO MANEJAR UN GLCD, no se si "se guardan la información", o que, pero no he visto nada, y menos en Assembler, que es lo que manejo por ahora, ya que C, todavía me falta muchisimo.....
Muchas Gracias...
-
Hola PALIO_TD98, si ya hace mucho de este post, lo inicie y lo deje un poco descuidado, pero bueno, sobre tu consulta, depende del tipo de GLCD que tengas, hay algunos que tienen un controlador el cual cuenta con la opcion de insertar caracteres preestablecidos, pero los comunes por lo general tienes que dibujar todo.. te recomiendo que averigues que controlador lleva tu GLCD y que opciones te da. Saludos.
-
hola si alguien tiene la libreria y la quiere subir MACROPIC.INC le agradecere ya que en este post no estan mas
Aqui la tienes. Saludos.
-
hola que tal me parece interesante relaizarlo en asm ,pero lo que me interesa es realizar un pequeño menu con 4 opciones ,es para un proyecto de domotica,me podrian ayudar?
-
Hola chicos, me hize de una GLCD 160x80, le envio caracteres y este los recibe muy bien, el problema es que despues de enviar caracteres para "inicializar el glcd", (maneja 20 caracteres en diez renglones, en modo texto obviamente). el texto que se le envia aparece con caracteres basura, El proveedor recomienda llenar todos los buffers de 0x00 y despues regresar el apuntador o cursor a la posicion 0x00, dado que al escribir todo esto se termina en la ultima posicion que esta fuera de la RAM.
Entonces yo la rutina para limpiar la pantalla y despues enviar los caracteres en mi codigo fuente y nada: vacio
el proveedor recomienda :
--------- este ciclo va despues de la inicializacion TABLA1
variable X=C8h (200 caracteres)
ciclo3 pone E=1
manda 00 al puerto (display)
pone E=0
rutina de tiempo
decrementa en uno variable X
si variable X es diferente de cero regresa a ciclo3
** pone RS=1
pone E=1
manda 0A al puerto (instruccion RAM ADD LOWER)
pone E=0
pone RS=0
pone E=1
manda XX al puerto (direccion 00 a C7)
pone E=0
pone RS=0
------- aqui continua el ciclo2 que envia la TABLA2 al display
y yo hize el codigo siguiente en asm con un PIC18F4550
;**************LIMPIA PANTALLA Y COLOCA CURSOR**********
movlw 0XC8
movwf 0X0B
ciclo3 bsf pine
movlw 0x00
movwf LATD
bcf pine
rcall retarm
decfsz 0X0B,1
bra ciclo3
bsf pinrs
bsf pine
movlw 0X0A
movwf LATD
bcf pine
bcf pinrs
bsf pine
movlw 0x00
movwf LATD
bcf pine
bcf pinrs
;*****************F I N *********************
Alguien sabra que le pasa ????
-
Buenas a todos! 8), me anduvieron pidiendo los archivos que faltaban para compilar el proyecto, aqui los subo para que lo puedan descargar y asi colaboren con el post! Saludos a todos los que lleguen a este post y estén practicando con el codigo, si tienen alguna mejora y/o aporte no duden en añadirlo, el foro es para todos los que buscamos ampliar y compartir nuestro conocimiento. Saludos! :mrgreen:
-
((:-)) hola Enrique_86 su aporte sobre las lcds graficas me a sido de mucha ayuda para un proyecto que estoy realizando para la Universidad por este motivo le AGRADEZCO MUCHO ((:-)) Por otra parte quiero pedirle una ayuda la cual es: DESEO QUE LAS IMAGENES SEAN MANEJADAS POR UNA SOLA TABLA Y NO CON LAS 8 TABLAS QUE USTED MANEJA LE AGRADECERIA MUCHO YA QUE NO TENGO MUCHO CONOCIMIENTO SOBRE EL TEMA