Autor Tema: Tutorial Manejo de GLCD con assembler, controlador KS0108B  (Leído 20694 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Enrique_86

  • PIC12
  • **
  • Mensajes: 62
Tutorial Manejo de GLCD con assembler, controlador KS0108B
« en: 19 de Noviembre de 2008, 13:20:20 »
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:
« Última modificación: 19 de Noviembre de 2008, 13:30:54 por Enrique_86 »
...enrique  :-)

Desconectado Enrique_86

  • PIC12
  • **
  • Mensajes: 62
Conexion del Hardware
« Respuesta #1 en: 19 de Noviembre de 2008, 13:38:58 »
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.



PD: Estare modificando los post en lo posible, acepto sugerencias.

El datasheet del controlador KS0108B
El diagrama del GLCD LGM12864B
« Última modificación: 19 de Noviembre de 2008, 15:10:52 por Enrique_86 »
...enrique  :-)

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Tutorial Manejo de GLCD con assembler, controlador KS0108B
« Respuesta #2 en: 19 de Noviembre de 2008, 13:42:32 »
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:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Enrique_86

  • PIC12
  • **
  • Mensajes: 62
Codigo de ejemplo
« Respuesta #3 en: 19 de Noviembre de 2008, 14:48:12 »
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.

Código: [Seleccionar]
;------------------------------------------------------
; 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 :-) :


PD: Me podrian ayudar? como se coloca las barras laterales para no mostrar todo el texto del codigo?? grax  :mrgreen:
« Última modificación: 19 de Noviembre de 2008, 18:57:33 por Enrique_86 »
...enrique  :-)

Desconectado Enrique_86

  • PIC12
  • **
  • Mensajes: 62
Para tener en cuenta
« Respuesta #4 en: 19 de Noviembre de 2008, 15:05:30 »
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  :-)
« Última modificación: 14 de Diciembre de 2008, 16:46:43 por Enrique_86 »
...enrique  :-)

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Re: Tutorial Manejo de GLCD con assembler, controlador KS0108B
« Respuesta #5 en: 19 de Noviembre de 2008, 15:14:43 »
Para meter en el recuadro código utiliza los modificadores [ code ] [ /code ]  (sin espacio dentro de los corchetes)

Desconectado Enrique_86

  • PIC12
  • **
  • Mensajes: 62
Re: Tutorial Manejo de GLCD con assembler, controlador KS0108B
« Respuesta #6 en: 19 de Noviembre de 2008, 15:21:21 »
Gracias por la ayuda a los moderadores! :mrgreen:
Asi si da gusto postear  :-).. Saludos
...enrique  :-)

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Tutorial Manejo de GLCD con assembler, controlador KS0108B
« Respuesta #7 en: 19 de Noviembre de 2008, 15:45:21 »
Y da gusto a los moderadores ayudar a que avances en un tema tan bueno!! :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Enrique_86

  • PIC12
  • **
  • Mensajes: 62
Obtencion de la imagen
« Respuesta #8 en: 19 de Noviembre de 2008, 19:30:26 »
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:


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  :-/
« Última modificación: 19 de Noviembre de 2008, 19:49:38 por Enrique_86 »
...enrique  :-)

Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: Tutorial Manejo de GLCD con assembler, controlador KS0108B
« Respuesta #9 en: 20 de Noviembre de 2008, 01:00:13 »
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.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Tutorial Manejo de GLCD con assembler, controlador KS0108B
« Respuesta #10 en: 20 de Noviembre de 2008, 20:26:33 »
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 :-/ :-/ :-/
.

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Tutorial Manejo de GLCD con assembler, controlador KS0108B
« Respuesta #11 en: 25 de Noviembre de 2008, 15:44:10 »
 :-/ felicidades buen tutorial! , haber si te haces uno con el simbolo clásico de THE WHO.  :-)

a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Tutorial Manejo de GLCD con assembler, controlador KS0108B
« Respuesta #12 en: 26 de Noviembre de 2008, 20:45:10 »
Hola Enrique!!!! gracias por aportar tan buén material!!!! :-/ , sigo leyendo tus avances  :-/

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado Enrique_86

  • PIC12
  • **
  • Mensajes: 62
Un poco de paciencia
« Respuesta #13 en: 27 de Noviembre de 2008, 02:09:47 »
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:
...enrique  :-)

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Tutorial Manejo de GLCD con assembler, controlador KS0108B
« Respuesta #14 en: 27 de Noviembre de 2008, 11:46:53 »
aca te la dejo como tarea  :D
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com


 

anything