Inicializar LCD con controlador T6963C

Muchas gracias, voy a ver si lo consigo hacer. Por otra parte, tengo problemas para escribir en una eeprom i2c. He revisado los pines que contacten, he simulado el programa en Proteus y si que escribe, pero en la realidad puedo confirmar que lee, pero no escribe. ¿Puede ser debido a que la eeprom es demasiado lenta y no lo puede hacer?
 
Sacate la duda mirando en la hoja de datos del chip.
No tengo mucha experiencia con el bus i2c.
Usá el buscador del foro y casi seguro encontrarás algo.
 
Hola a todos. Una pregunta., alguien sabe que comandos enviar para invertir la pantalla en un LCD de 240x128 de WINSTAR con controlador T6963c. ósea invertir a modo de que los textos y gráficos que están pintados pasen a no pintado y lo no pintado a pintado. Gracias a todos. Federico de Bs.As Argentina.
 
No sé si habrá una forma más rápida, pero el método "muscular" sería ir desde
la posición cero hasta la última haciendo:

1.- leer y quedar en el lugar
2.- escribir el complemento de lo leido
3.- avanzar una posición

Como alterna lectura con escritura de a un registro por vez, no se puede
hacer en el modo "por bloques".

El tiempo de refresco para 240x180 debe andar en un segundo o poco menos.
Para que no se note el "pantallazo" conviene desactivar el modo gráfico, reescribir
la memoria, y luego restablecer el modo gráfico.

Saludos
 
Última edición:
buen dia mi problema es que no muestra nada el lcd hay veces que enciende dos lineas, hay otras que solo aparece "/" en diferentes posiciones del display y quisiera ver si me pueden ayudar a encontrar mi error, el codigo es el siguiente por cierto
gracias por su tiepo.

PHP:
#include <16F84A.h>
#use delay(clock=4000000)
#fuses XT, NOPROTECT, NOPUT, NOWDT
#include <lcd420.c>
#define use_portb_lcd,RTCC_INTERNAL
#use fast_io(a)
#use fast_io(b)
#byte port_a=5
#byte port_b=6
int b0,b1,b2,b3,b4,b5,b6,b7,temp;
void main()
{
while(1)
   {
   set_tris_a(0x00);
   set_tris_b(0xff);
   output_low(PIN_A0);
   delay_ms(50);
   output_high(PIN_A0);
   delay_ms(50);
   output_low(PIN_A0);
   delay_ms(50);
  if (input(PIN_B0))
  {b0=1;}
  else
  {b0=0;}
  if (input(PIN_B1))
  {b1=2;}
  else
  {b1=0;}
  if (input(PIN_B2))
  {b2=4;}
  else
  {b2=0;}
  if (input(PIN_B3))
  {b3=8;}
  else
  {b3=0;}
  if(input(PIN_B4))
  {b4=1;}
  else
  {b4=0;}
  if (input(PIN_B5))
  {b5=16;}
  else
  {b5=0;}
  if(input(PIN_B6))
  {b6=32;}
  else
  {b6=0;}
  if(input(PIN_B7))
  {b7=64;}
  else
  {b7=0;}
  temp=((b0+b1+b2+b3+b4+b5+b6+b7)*2.4)/(0.005);
   output_high(PIN_A0);
   delay_ms(200);
   set_tris_b(0x00);
   lcd_init();
   lcd_gotoxy(8,1);
   printf(lcd_putc,"FERGART");
   lcd_gotoxy(1,2);
   printf(lcd_putc,"Sensor digital");
   lcd_gotoxy(1,3);
   printf(lcd_putc,"Temperatura: %d",temp);
   delay_ms(100);
}
}
 
Última edición por un moderador:
Hola, gracias por contestar.
El tema de hacer lo de leer el píxel e invertirlo (a parte de que se torna algo lento) tiene un problema mas y es que tengo imágenes con movimiento en mi GLCD.
Yo tengo a k un equipo que tiene este GLCD, usa un PIC18F4620 y tiene un Jumper que al cambiarlo invierte toda la pantalla instantáneamente parecería que le manda un comando directamente.
Yo estoy usando un PIC18F4685 a 32mhz y ya tengo un programa completamente funcional, solo que quería agregarle la inversión de imagen.
La otra que me queda es de alguna manera leer el comando que manda el otro equipo.
Pero estoy seguro q lo hace con un comando.
Desde ya muchas gracias.
 
Hola, yo tengo un glcd t6963cfg de 240x128. Resulta que quiero mostrar una sola letra (por ejemplo la "A") y en el lugar que yo quiera de la pantalla y la pantalla muestra 8 veces la misma letra y en cualquier lado. Subo el archivo con la libreria (escrita en C) para que la prueben (si quieren). Estoy usando el compilador CCS.

Buenas buenas, me he basado en este programa que hizo este user, bueno, no he logrado que me prenda ni un pixelcito en la pantalla, pero quiza encontre el problema a este programa, en la rutina en datasheet en auto write ahi bien dice que debes enviar el comando 0xB2, el mismo AUTO_DATA_RESET, pero antes debes enviar el check status de ST3, y ahi lo que se esta enviando es el checkstatus para ST0 y ST1, porque se esta enviando a la funcion comando y el unico que realiza ese check es la funcion autoescritura.

Bueno pero en mi caso, lo que quiero es hacer asi sea encender un pixel, no lo he logrado. Basandome en este codigo no se si sea porque no le este enviando los comandos para escribir o no se que sera, pero el check status para recibir comandos si estoy seguro q el t6963 me lo esta recbiendo.


Segun entiendo no estoy seguro en el datasheet del display que ando manejando, los comandos para mostrar en pantalla son los de data auto write y data write, o no se si me falte aparte de enviar esos algun otro como para mostrar, o no se si de pronto sea hardware.

http://img828.imageshack.us/img828/2430/img1225w.jpg
 
Hola buenos días.

Lo primero dar las gracias a todos los que han participado en este foro para darnos toda la información que tenemos.

Por lo que veo estoy mucho más retrasado que todos ustedes en el montaje de un glcd pero bueno haber que consigo.

Llevo ya varios días intentando poner en marcha un glcd PB240128A-PA(1.0) y por el momento lo he logrado conectar a LPT1 y tanto con lcdstudio como lcdhype he logrado que me muestre información en pantalla también me pasa que me muestra una sola letra 8 veces cuando solo tengo escrita una, por lo que he podido ver el controlador que utiliza es el T6963c o eso creo por lo menos por la disposición de los cables la información que me sale en la parte trasera de la pantalla es:
- Kl sn102 94v-o 3009
- Powertip PB240128A-PA(1.0)
- PG240128wrmagaco9q I C 9 0001 9929 A ROMs

- El micro que lleva es AVANT SDN 8080G y tambien AVANT SAP1024B

Las patillas están todas en una sola linea y lo curioso es que comienzan por la K:

- K A 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

K: GND (While)
A: 18 Ohm 5v+ (red)
1: Power supply (GND)
2: Power supply (+)
3: Vo Contrast Adjust
4: C/D Command / data select
5: RD Data read
6: WR Data Write
7: DB0 Data bus line
8: DB1 Data bus line
9: DB2 Data bus line
10: DB3 Data bus line
11: DB4 Data bus line
12: DB5 Data bus line
13: DB6 Data bus line
14: DB7 Data bus line
15: CE Chip enable
16: RST Reset
17: Vee Negative output
18: MD2 Select number of columns
19: FS1 Font selection
20: NC No connection

Esa es toda la información que he sacado, lo que me gustaría poder controlar la pantalla con un micro en estos momentos tengo el 16f84a, 16f626a y 16f873, en este mis mo hilo he visto que teniais preparado con el proteus un esquema para el 16f876a, algun alma caritativa tiene por hay los planos para poderme hacer un circuito y conectar esta pantalla?

Ya el siguiente paso es aprender a programarla para sacarle partido.
He probado en XP con Lcdhype y Lcdstudio y en Ubuntu con lcd4linux.

Les dejo unos enlaces con fotos de la pantalla.

http://img687.imageshack.us/i/05102010025.jpg/
http://img832.imageshack.us/i/05102010024.jpg/
http://img689.imageshack.us/i/05102010028.jpg/
http://img841.imageshack.us/i/05102010023b.jpg/
http://img824.imageshack.us/i/30092010018.jpg/
http://img713.imageshack.us/i/03082010033.jpg/
http://img708.imageshack.us/i/03082010028.jpg/



Muchas gracias.

Fernando.
 
Última edición:
Hola compañero....
Mira esta foto... es el montaje REAL que a mi me funciono
Hay que aclara:
VEE-> la pantalla tiene un conversor interno que te ENTREGA<-12V
Este voltaje negativo sirve para al Vo el cual se encarga de fijar el contraste de la pantalla
Si tu pantalla tiene Backlight ... hay dos terminales A K que cumplen con la funcion de dar mas luz o menos... utliza un Potenciometro y listo..
En el proteus estos terminales no existen..pero en la pantalla si..
espero que te sirva estos... saludos.. ami me fue de gran utilidad este y en genera todos los foros de lelectronica...
 

Adjuntos

  • Dibujopantalla.PNG
    Dibujopantalla.PNG
    39.5 KB · Visitas: 113
Hola Danrod, muchas gracias por el esquema.

Veo que estas utilizando un Pic diferente al que yo tengo, mirare el patillaje para adaptarlo al mio.

Me podrías enviar el esquema completo?

Muchas gracias.

Fernando.

Rectifico, creo que ya tengo montado el glcd, ahora me falta algún programa para poder probarlo, alguien me puede hechar una mano y pasarme algún programa de "Hola Mundo" para ver si funciona?

De programación no tengo ni idea.

Gracias.
 
Última edición:
muchachos, 2 cosas extrañas que me pasa al utilizar la GLCD no se si auds les ocurre:
1) si escribo de forma consecutiva sea en modo grafico o en modo texto, este me dibuja hasta 30 caracteres diferentes, de ahi para alla no me los escribe, como si el comando whrite increment no llevara la siguiente posicion de la lcd y no escribe mas.
2) si escribo los caracteres standard del 6963c mas del 63 es decir del 0x40 en adelante, este tambien me ocurre lo del caso 1.

De resto si respeto esas dos condiciones, la GLCD me funciona bien

Un saludo
 
....mira en este mismo post..sherar tiene esa rutinas... ami me funcionaron muy bien....


Pruebalas..eso si si tienes la 240X128.. si simulas en el proteus.. el cursor luego de cierta posición te salta ..es decir sale incorrectamente.... pero en la realidad funcionan bien..
SALUDOS...
 
ok danrod, me voy a cambiar al codigo de asherar para analizarlo, quiza sea porque quize empezar desde cero leyendo todo el datasheet de mi glcd y haciendo las funciones con comandos a mi manera, pero pues me encontre con esos dos inconvenientes, voy a empezar a a usar la libreria t6963c como las que tienen esos codigos a ver como me va, muchas gracias por tu respuesta.


un saludo
PD: si, mi GLCD es de 240x128 y lo trabaje en ccs

Danrod, veo que cambiaste el codigo de asherar a ccs, pero no se porque no se si te sale tambien, me da un error en la libreria del t6963c.h, (adjunto la imagen), no logro enteder por qué ocurre?

http://img149.imageshack.us/img149/518/errohz.png
un saludo
 
Última edición:
...@thamaphyr...

....mira si las utilice...recuerdo que el las desarrollo enMikroelectronica...un compilador.....recuerdo que las cambie al CSS..que era prácticamente lo mismo...fijate en uno de los mensajes...https://www.forosdeelectronica.com/f24/inicializar-lcd-concontrolador-t6963c-11700/index3.html
Arranque y texto ....Arranque_Text_CCS.rar
En estas rutinas se maneja el modo texto perfectamente... en esa ocasion me daba golpes en la cabeza por que el proteus no pasaba de cierta posicion del cursor... y EN LA REALIDAD funsiona bien....
..Pruebas esas rutinas..
el error te da porq que estas utlizando archivos de mikroelectronica en CCS....
Saludos.....

muchachos, 2 cosas extrañas que me pasa al utilizar la GLCD no se si auds les ocurre:
1) si escribo de forma consecutiva sea en modo grafico o en modo texto, este me dibuja hasta 30 caracteres diferentes, de ahi para alla no me los escribe, como si el comando whrite increment no llevara la siguiente posicion de la lcd y no escribe mas.
2) si escribo los caracteres standard del 6963c mas del 63 es decir del 0x40 en adelante, este tambien me ocurre lo del caso 1.

De resto si respeto esas dos condiciones, la GLCD me funciona bien

Un saludo


Mira...no me habia fijado en tu mensaje........
Pero CREO que me paso lo mismo..lo solucione haciendo esto...
Código:
const int16 G_BASE = 0x0300;     // para memoria gráfica
const int16 T_BASE = 0x0000;     // para memoria de texto

Saludos.........

Hola Danrod, muchas gracias por el esquema.

Veo que estas utilizando un Pic diferente al que yo tengo, mirare el patillaje para adaptarlo al mio.

Me podrías enviar el esquema completo?

Muchas gracias.

Fernando.

Rectifico, creo que ya tengo montado el glcd, ahora me falta algún programa para poder probarlo, alguien me puede hechar una mano y pasarme algún programa de "Hola Mundo" para ver si funciona?

De programación no tengo ni idea.

Gracias.
...Mira empieza por C... por mikroelectronica o CCS...
en este post encontraras el manejo por ambos compiladores.....
Cuando empece con el manejo de la pantalla no sabia nada.... edite las rutinas de Sherar...y funcionan bien...saludos.....
 
Última edición:
Che, me alegro que les sirva mi humilde recopilación. Conste que yo lo único que hice fue pasarlas a una forma un poco más legible, intentando ser didácticas.
Pero son cosas que bajé de por ahí.
...
No quiero que me caigan con reclamos de copyright !!!
 
trankilo asherar, estoy seguro que nadie se quejara por copyright, esto es educativo, ademas desde que se le haya echado mano al codigo deja de ser copyright. Siento la demora por responder, he estado un tin ocupado y no he podido continuar, pero tan pronto tenga algo, lo posteo. Muchas gracias por tu ayuda danrod
un saludo
 
Hola,
Por lo que veo, han conectado sin inconvenientes el backlight del GLCD. En mi caso (Winstar W240128B) no he podido hacer que se encienda. En los pines A y K coloqué la tensión que aconsejaban y no lo logro. Alguien tuvo algún inconveniente parecido?.
Gracias.
Saluidos,
Ariel.
 
Hola Ariel.
A mi me pasaba lo mismo hasta que probé de conectar la polaridad contraria.
(Nunca se olviden de la resistencia limitadora !!!)
Como se trata de diodos en inverso, en el peor de los casos no debería prender.

Tampoco le pongan 200 kV !!! :LOL:
 
Última edición:
hola amigos estoy trantado de hacer una especie de tarjeta electronica con un lcd de 20x4 y el pic 16f877 con pic basic pro. su funcionamiento es de que al energizar el pic comienza a trabajar el lcd con un mensaje de instruccion para que oprimas un unico boton para ir saltando "la pagina" al presionar el boton por primera vez comienza la primera pagina que se muestra en el lcd y no cambiara el mensaje hasta volver a presionar el boton, sin embargo no puedo salir de la primera parte y es que simulo lo que tengo en el pic simulator ide y mi pic se va a modo sleep antes de que se tenga que oprimir el boton por segunda vez. les dejo el codigo como lo estoy haciendo espero alguien me pueda ayudar o decirme en que estoy mal, agradesco la atencion.

Define LCD_DREG PORTB
Define LCD_DBIT 4
Define LCD_RSREG PORTB
Define LCD_RSBIT 1
Define LCD_EREG PORTB
Define LCD_EBIT 2
boton var portd.0
TRISB=0
trisd=%00000001
pause 500

inicio:
portd.1=0
PAUSE 500
LCDOUT $FE, 1 ' Limpiar LCD
LCDOUT $FE, 1, "Hola hermosa, para " 'Escribir en la primera línea
Lcdout $fe, $C0, "Continuar leyendo " 'Escribir en la segunda línea
lcdout $fe, $94, "presiona el boton."
pause 1000

if boton=1 then
portd.1=1
boton=0
LCDOUT $FE, 1
LCDOUT $FE, 1, "texto"
Lcdout $fe, $C0, "texto" 'Escribir en la segunda línea
lcdout $fe, $94, "texto"
lcdout $fe, $d4, "texto"
PAUSE 1000
endif

portd.1=0

if boton=1 then
portd.1=1
boton=0
LCDOUT $FE, 1
LCDOUT $FE, 1, "texto2"
Lcdout $fe, $C0, "texto2" 'Escribir en la segunda línea
lcdout $fe, $94, "texto2"
lcdout $fe, $d4, "texto2"
PAUSE 1000
endif

end



el texto2 es lo que ya no me muestra, el micro se pone en sleep segun el pic simulator ide.
 
Buenas, despues de un tiempo vuelvo con el tema del GLCD. Esta vez escribi codigo en assembler pensando que podria "ver" errores mas facilmente pero no es asi, sigue pasando lo mismo, sea lo que sea que envie lo repite exactamente 8 veces. Mi GLCD es de 240 por 128 pixels, un modulo winstar WG240128, controlador T6963cfg (con memoria LY62256SL) y utilizo un pic 16f877. Aqui esta el codigo para quien se anime a darle una mirada:

PHP:
 list p=16f877
 include <p16f877.inc>
 radix hex
;******NOTA!!!******
; PORTB0 ---> GLCD DB0
; PORTB1 ---> GLCD DB1
; PORTB2 ---> GLCD DB2
; PORTB3 ---> GLCD DB3
; PORTB4 ---> GLCD DB4
; PORTB5 ---> GLCD DB5
; PORTB6 ---> GLCD DB6
; PORTB7 ---> GLCD DB7
;
; PORTC4 ---> GLCD CD
; PORTC5 ---> GLCD /RD
; PORTC6 ---> GLCD /WR
; PORTC7 ---> GLCD /CE
;
; PORTA0 ---> GLCD RESET
;
; GLCD FS1 ---> 0V (font 8x8)
; GLCD MD2 ---> +5V (column. = 32)
 cblock 0x20
byte_alto, byte_bajo
loop_h, loop_l
temp
delay
 endc
 org 0x00
 goto inicio
 org 0x05
inicio
 bsf  STATUS, RP0  ;cambio al banco 1
 bcf  STATUS, RP1
 bcf  RCSTA,SPEN  ;Puerto serie deshabilitado
 clrf OPTION_REG
 bsf  OPTION_REG,7 ;Resistencias pull-up del PORTB deshabilitadas
 movlw 0x06   ;Configuro PORTA como puerto ed E/S digitales
 movwf ADCON1
 clrf TRISA   ;Configuro a PORTA como salidas
 clrf TRISC   ;Configuro a PORTC como salidas
 bcf  STATUS, RP0  ;cambio a banco 0
aqui
 call GLCD_INI
 call limpiar_grafico
 call limpiar_texto
 clrf byte_bajo
 movlw 0x10
 movwf byte_alto
 call add_point  ;ubico el puntero en la posicion inicial del area de grafico en la pantalla
 movlw 0x2d  ;pixels que quiero mostrar
 call enviar_dato
 movlw 0xc4   ;0xc4 es el comando para escribir en
       ;memoria sin incrementar la posicion
       ;del address pointer
 call enviar_comando
 movlw 0x08
 movwf byte_bajo
 movlw 0x10
 movwf byte_alto
 call add_point  ;ubico el puntero en la posicion inicial
       ;del area de grafico en la pantalla
 movlw 0x41  ;pixels que quiero mostrar
 call enviar_dato
 movlw 0xc4   ;0xc4 (11000100) es el comando para escribir en memoria
       ;sin incrementar la posicion del address pointer
 call enviar_comando
bucle
goto bucle
GLCD_INI
;Rutina de inicializacion del controlador del GLCD
 bcf  PORTA,0
 nop      ;Resteo el GLCD por mas de 80ns
 bsf  PORTA,0
;Configuro el inicio de la memoria de grafico en la direccion 0x0000
 clrf byte_bajo
 clrf byte_alto
 call enviar_dos_datos
 movlw 0x42   ;0x42 es el comando para setear el inicio del area de grafico
 call enviar_comando
;Configuro el area de la memoria de grafico: 240 pixels / 8 bits (1 byte)= 30 bytes
;escojo 32 (0x0020) para facilitar operaciones logicas, tiene que coincidir con el tamaño de la pantalla
 movlw 0x20
 movwf byte_bajo
 clrf byte_alto
 call enviar_dos_datos
 movlw 0x43   ;0x43 es el comando para setear el area de graficos
 call enviar_comando
;Configuro el inicio de la memoria de texto: el area grafico es 32 byte * 128 lineas = 4096 (0x1000)
 clrf byte_bajo
 movlw 0x10
 movwf byte_alto
 call enviar_dos_datos
 movlw 0x40   ;0x40 es el comando para setear el inicio del area de texto
 call enviar_comando
;Configuro el area de la memoria de texto: 240 pixels / 8 bits (1 byte)= 30 bytes
;escojo 32 (0x0020) para facilitar operaciones logicas, tiene que coincidir con el tamaño de la pantalla
 movlw 0x20
 movwf byte_bajo
 clrf byte_alto
 call enviar_dos_datos
 movlw 0x41  ;0x41 es el comando para setear el area de texto
 call enviar_comando
;Configuro el modo como: CG=0 (uso caracteres internos), MD2=0 , MD0=0, MD0=0 para modo OR
modo_set
 movlw b'10000000'
 call enviar_comando
;Configuro el modo como: GRPH=1, TEXT=1, CUR=0, BLK=0 para texo y graficos a la vez sin cursor
display_set
 movlw b'10011100'
 call enviar_comando
;Configuro el offset register
 movlw 0x02
 movwf byte_bajo
 clrf byte_alto
 call enviar_dos_datos
 movlw 0x22   ;0x22 es el comando para la direccion
       ;del offset register
 call enviar_comando
 return
check_estado
;Comprueba el estado STA0/STA1, si ambos son 1 al mismo tiempo el
;controlador esta listo para recibir datos/comandos
 banksel TRISB
 movlw 0xff
 movwf TRISB   ;Configuro PORTB como entradas
 banksel PORTC
 movlw b'01010000'
 movwf PORTC   ;Configuro /CE=0, /WR=1, /RD=0 y CD=1 para leer estdo del GLCD
 nop
check1
 btfss PORTB,0   ;Pregunto si el bit de STA0 es 1
 goto check1   ;si no es 1 vulevo a preguntar hasta que lo sea
check1a
 btfss PORTB,1   ;Pregunto si el bit de STA1 es 1
 goto check1a   ;si no es 1 vulevo a preguntar por el primero
 movlw b'11110000'
 movwf PORTC   ;Configuro /CE=1, /WR=1, /RD=1 y CD=1
 nop
 banksel TRISB
 clrf TRISB   ;Configuro PORTB como salidas
 banksel PORTB
 return
enviar_dato
;Guarda en temp el dato a enviar, configura los pines de control (/CE, /WR, /RD y CD) y luego envia temp al PORTB
 movwf temp
 movlw b'11100000'
 movwf PORTC   ;Configuro /CE=1, /WR=1, /RD=1 y CD=0
 movf temp,W
 movwf PORTB
 nop
 movlw b'00100000'
 movwf PORTC   ;Configuro /CE=0, /WR=0, /RD=1 y CD=0 para escribir un dato al GLCD
 nop
 movlw b'11100000'
 movwf PORTC   ;Configuro /CE=1, /WR=1, /RD=1 y CD=0
 nop
 movlw b'11110000'
 movwf PORTC   ;Configuro /CE=1, /WR=1, /RD=1 y CD=1
 nop
 return
enviar_dos_datos
;Comprueba el estado STA0/STA1 para despues enviar los datos en byte_bajo y byte_alto
 call check_estado
 movf byte_bajo,W
 call enviar_dato
 call check_estado
 movf byte_alto,W
 call enviar_dato
 return
enviar_comando
;Guarda el comando en el registro temp, comprueba el estado
;STA0/STA1 y despues envia temp por el PORTB
 movwf temp
 call check_estado
 movf temp,W
 movwf PORTB
 nop
 movlw b'00110000'
 movwf PORTC   ;Configuro /CE=0, /WR=0, /RD=1 y CD=1
 nop
 movlw b'11110000'
 movwf PORTC   ;Configuro /CE=1, /WR=1, /RD=1 y CD=1
 nop
 return
limpiar_grafico
;La memoria del GLCD es de 240 pixels / 8 bits = 30 (elijo 32 para facilitar calculos)
;de ancho y 128 pixels de alto, o sea 32 * 128 = 4096 bits (0x10000) de memoria
 clrf byte_bajo
 clrf byte_alto
 call add_point
 movlw 0xb0   ;0xb0 es el comando para setear el modo de auto escritura
 call enviar_comando
 movlw 0x10
 movwf loop_l   ;filas 128 pixels / 8 bits = 16
lazo1
 movlw 0x00
 movwf loop_h   ;columnas 240 pixels / 8 bits = 30 (elijo 32)
lazo2
 clrw
 ;movlw 0x00
 call auto_escribir
 decfsz loop_h,F
 goto lazo2
 decfsz loop_l,F
 goto lazo1
 call check_estado_sta3
 movlw 0xb2   ;0xb2 es el comando para resetear el modo de auto escritura/lectura
 call enviar_comando
 return
limpiar_texto
;La memoria del GLCD es de 240 pixels / 8 bits = 30 (elijo 32 para facilitar calculos)
;de ancho y 128 pixels de alto, o sea 32 * 128 = 4096 bits (0x10000) de memoria
 clrf byte_bajo
 movlw 0x10
 movwf byte_alto
 call add_point
 movlw 0xb0   ;0xb0 es el comando para setear el modo de auto escritura
 call enviar_comando
 movlw 0x10
 movwf loop_l   ;filas 128 pixels / 8 bits = 16
lazo1a
 movlw 0x00
 movwf loop_h   ;columnas 240 pixels / 8 bits = 30 (elijo 32)
lazo2a
 clrw
 ;movlw 0x00
 call auto_escribir
 decfsz loop_h,F
 goto lazo2a
 decfsz loop_l,F
 goto lazo1a
 call check_estado_sta3
 movlw 0xb2   ;0xb2 es el comando para resetear el modo de auto escritura/lectura
 call enviar_comando
 return
check_estado_sta3
;Sub rutina que comprueba el estado del bit STA3 (Auto mode data write capability)
 banksel TRISB
 movlw 0xff
 movwf TRISB   ;Configuro PORTB como entradas
 banksel PORTB
 movlw b'01010000'
 movwf PORTC   ;Configuro /CE=0, /WR=1, /RD=0 y CD=1 para leer estdo del GLCD
 nop
check_sta3
 btfss PORTB,3   ;Pregunto si el bit de STA3 es 1
 goto check_sta3  ;si no es 1 vulevo a preguntar hasta que lo sea
 movlw b'11110000'
 movwf PORTC   ;Configuro /CE=1, /WR=1, /RD=1 y CD=1
 nop
 banksel TRISB
 clrf TRISB   ;Configuro PORTB como salidas
 banksel PORTB 
 return
add_point
;Configuro el address pointer en la ubicacion dada por byte_bajo (low address) y byte_alto (high address)
 call check_estado
 movf byte_bajo,W
 call enviar_dato
 call check_estado
 movf byte_alto,W
 call enviar_dato
 movlw 0x24   ;0x24 es el comando para el address pointer
 call enviar_comando
 return
auto_escribir
;Rutina que escribe en memoria con "auto write mode" el valor en el registro temp
 movwf temp
 call check_estado_sta3
 movf temp,W
 call enviar_dato
 return
retardo
 movlw 0xff
 movwf loop_l
la1a
 movlw 0xff
 movwf loop_h   ;columnas 240 pixels / 8 bits = 30 (elijo 32)
la2a
 decfsz loop_h,F
 goto la2a
 decfsz loop_l,F
 goto la1a
return
fin 
 END
 
;PORT_B0...PORT_B7 GLCD_D0...GLCD_D7
;PORT_C4 GLCD_CD
;PORT_C5 GLCD_/RD
;PORT_C6 GLCD_/WR
;PORT_C7 GLCD_/CE

El codigo deberia inicializar el modulo con la posicion de memoria grafica en 0000h, posicion de memoria texto en 1000h y el area de graficos y textos iguales 0020h. Limpio toda la pantalla. Envio una "M" y una "a" y termina todo. Solo es una prueba, nada definitivo.
 
Atrás
Arriba