Inicializar LCD con controlador T6963C

Hola a toda la comunidad,

Tengo un problema con una LCD gráfica de 240 x 160 pixels y su controlador. Quisiera saber si alguien ha trabajado con el controlador ST7529 o bien lo conoce. Es el que lleva mi LCD que no debe ser standard y quisiera saber si alguien dispone de información sobre éste panel; creo que no dispone de su propia fuente de caracteres interna.

El tema es si utilizar un micro de 8 bits junto con la LCD de la que dispongo que tendré que programar sus caracteres uno a uno o si utilizo uno de 32 bits que lleva su controlador interno y puedo controlar el LCD con garantías.

gracias por la atención

Un saludo a todos.
 
Hola a todos, despues de un tiempo sigo con el mismo problema, cada ves peor! Resulta que sigue enviando las 8 letras entonces probe cambiando el comando que autoincrementa el puntero (del propio controlador, no en mi software) por el comando que decrementa y el comando que no mueve el puntero y sigue dando el mismo error. Ya revise mil veces la hoja de datos del t6963cfg y por un tiempo pense que podria ser una interrupcion del controlador que este dando ese error. Creo que en ese caso no podria saber si es esa la causa del error, asi que voy a seguir probando con mi codigo.
 
picproblema dijo:
Hola a todos, despues de un tiempo sigo con el mismo problema, cada ves peor! Resulta que sigue enviando las 8 letras entonces probe cambiando el comando que autoincrementa el puntero (del propio controlador, no en mi software) por el comando que decrementa y el comando que no mueve el puntero y sigue dando el mismo error. Ya revise mil veces la hoja de datos del t6963cfg y por un tiempo pense que podria ser una interrupcion del controlador que este dando ese error. Creo que en ese caso no podria saber si es esa la causa del error, asi que voy a seguir probando con mi codigo.

Se me ocurren 2 cosas:
Proba de aumentar el retraso entre seteo de bits, en las rutinas de control.
Por ejemplo poniendo un BUFER=1 - BUFER, donde BUFER es una variable que no hace nada. Solo es para perder tiempo. Digo de cambiar el valor cada vez para que si el compilador es muy inteligente, al optimizar
no saque la instrucción.

Ej:

Código:
void CheckEstado(){
int estado = 0, BUFER;
TRISC = salidas;
do{
   CE = 1;
   BUFER=1- BUFER;

   TRISD = entradas;
   BUFER=1- BUFER;

   CD = 1;
   BUFER=1- BUFER;

   WR = 1;
   BUFER=1- BUFER;

   CE = 0;
   BUFER=1- BUFER;

   RD = 0;
   BUFER=1- BUFER;

   estado = PORTD;
   BUFER=1- BUFER;

}while ((estado & 0x03) != 0x03);

RD = 1;
CE = 1;
TRISD = salidas;
}

La otra cosa que quedaría es cambiar de compilador. No porque ese no sirva, sino que tal vez con otro
"debugger" diferente salte el error.

Yo tengo experiencia con el 873 y el 876A. Tengo un 877 y un GLCD de 128x64 esperando turno.
Encima estoy a tope con mis trabajos, si no ya ponía las manos en la masa.
Coraje! Ya sale!
 
Hola Alejandro Sherar, tanto tiempo. Mira, probe el retardo y no sirvio de nada :( Tambien revise si la placa del modulo estaba en concordancia con la datasheet del controlador y si lo esta, nada esta mal...La verdad que eso de cambiar de compilador lo habia pensado, pero no se si me dara resultados debido a que el razonamiento para el codigo seria el mismo (es mas solo cambiarian algunas instrucciones y en el peor caso tendria que escribir todo desde cero y aprender nuevas instruccioes....). El problema se que lo debo encarar en las rutinas de enviar comando (relacionado con mi post anterior) y chekear estado...Como siempre, voy a seguir probando la programacion de la "libreria".
 
El problema con los errores es que uno piensa que hizo una cosa bien y por eso no la revisa.
O pasa por al lado y no lo ve. Y justo ahi está el error.
No sé que decirte. Por eso mejor no digo nada.
 
Que tal Alejandro Sherar. Jejejjee es cierto lo que me decis, y lo mas probable es que el error se tan evidente que no lo veo o que la solucion sea mas facil de lo que pienso, en fin, no voy a dejar de intentar hacer andar esta pantalla, pero ya no voy a dedicar taaaaanto tiempo, tambien necesito respiro para despejar la mente, cualqeuier novedad lo posteo, saludos a todos!
 
Hola a todos, vuelvo con comentarios sobre mi "libreria" para la glcd. Por un lado resulta ser que si en la funcion EnviarComando quito la linea CE = 1 en la pantalla no salen las letras! (o sea, no sale nada).
Por otro lado, si utilizo la funcion AutoEscribir (con sus comandos para auto escribr y auto resetear) salen las ocho letras, pero si a dicha funcion le quito su linea CE = 1, las 8 letras siguen saliendo.
Algo raro paso cuando desconecte el LSB de los datos y rapidamente lo conecte (solo para ver que pasaba ) y es que en la pantalla aparecieron 7 letras . Bueno, eso es todo, nada "nuevo" pero ya dije que si hacia algo lo posteaba. Adjunto la libreria, que es un poquito diferente a la de antes.
 

Adjuntos

  • glcd_t6963cfg_393.c
    6.2 KB · Visitas: 84
Probe grabar el pic con LVP (en ves de NOLVP) y en la pantalla sale cualquier cosa (ruido). No se si tiene algo que ver con la fuente de alimentacion, pero si muevo dos cables (font select y mode 2) que van directo a lineas de alimentacion (una a positivo y otro a negativo) la pantalla hace cosas erraticas pero con la partcularidad de que salen caracteres/pixels de a ocho (o sea el problema principal) pero creo porque el pic esta ya enviando la "libreria" al modulo del glcd. Alguien con alguna idea de que se trate? porque yo no.
Tambien cambien de lugar la linea de PORTB = dato (o comando) y la puse debajo de CE=0 en las rutinas de enviar datos o comandos y salen 16 lineas de 8 caracteres (antes ya me habia pasado y lo postee aqui).
 
Hola Alejandro.

Disculpá que te moleste, peroviendo algunos foros, encontré charlas y comentarios sobre GLCD, en los cuales vos respondías bastante. Lo que me hizo pensar que me podrías dar una mano con el problemita que tengo.

El problema es el siguiente, encontré un LCD gráfico de 240x128 píxeles monocromático en una fotocopiadora rota y se me ocurrió utilizarlo para mejorar un osciloscopio que armé. Bueno, comencé con investigar el circuito y los componentes del LCD. Después de mucho renegar, encontré los datasheet de todos los integrados y me topé con lo que me está limitando en este momento continuar. El uPD72030 que es un controlador de display que permite, mediante diferentes tipos de instrucciones, memorias RAM y ROM, manejar la pantalla como si fuese un monitor, es decir, posee muchas funciones de control gráfico píxel po píxel, y muchas más para el manejo de caracteres.

Teniendo toda la información y el estudio, traduccción y lectura de todo lo conseguido, comencé a programar la inicialización del LCD y alguna que otra cosita más. Entonces me topé con el inconveniente de que no me responde nada y mucho no entiendo qué es lo prioritario en las instrucciones a manejar, para que el LCD responda simplemente píxel por píxel.

Bueno, espero que leas mi duda y me puedas dar una mano. Tengo todo lo necesario para pasarte, si te hace falta, para que me des algún indicio o por donde encarar el problema. Desde ya muchas gracias.

Gabriel, desde Córdoba.... jej
 
Problemas, ... mi segundo nombre !

La hoja de datos del uP72030 no creo que nos diga mucho de cómo maneja el display.

Me costó encontrarla. Todos los enlaces me daban en chino.
No se si será que es obsoleto o que pronto vamos a tener que aprender el idioma. :LOL:

Estamos en contacto ...
 
Buenas. Gracias por ponerte en el trabajo de buscar el datasheet....

Si, me había pasado lo msmo, todo en chino y muy difícil de conseguir...

Te paso lo que yo conseguí, porque me parece que el que me enviaste es un modelo mucho mayor y más avanzado. El de mi LCD es mas pequeño, tiene menos patas...

http://www.icpdf.com/partnoview.asp?id=1607469_573440

Acá te sale en el enlace para bajar. En el cuadro que dice PDF (todo lo otro está en chino), al lado derecho hay dos flechas. La segunda flecha posee el PDF del uPD72030

Nos vemos. Saludos!
 
Ah bueno, esto ya es otra cosa ... !

Lo que veo que falta es un poco de información de cómo se envían los comandos al micro.
En hojas de datos de otros LCD te viene cómo poner el dato, cuando clockear, etc.
No tenés algo de eso ?
Lo más cercano (y no mucho) es la hoja 2, donde dice qué es y qué hace cada patilla.

Ya probaste de poner /CS en 0 y clockear en /WR con algún valor en el bus de datos ?

Ojo con la patilla TEST que debe ir fija en cero.

Hay cosas interesantes como las salidas de sincronizacion IOW1, IOW2, MEMW,
etc., porque te dicen qué está haciendo adentro el micro.

(Voy a tener que cambiar mi avatar a éste :mad: que parece chino)
 
Última edición:
Hola:

Vamos primero con esto, a ver si lo podemos interpretar:

  • Comandos de Inicialización

    SYNC

    1 0 0 1 0 1 1 0 (Es la cadena que distingue el comando SYNC)

    Parámetros
    • Dirección de columna (bytes) (=2 bytes)
    (L)
    (H)
    • División de tiempo (1 byte) ( Esto será la duración de FRM ? = FRaMe ? )
    • 0 0 0 0 0 0 B1 B0 (1 byte)
    • Ciclo STB (1 byte) ( Esto será la duración del ciclo de STand By ? )

    Función. Este comando especifica el tamaño del panel LCD y los tiempos de generación de señales de control (FRM y STB) al controlador del LCD. El número total de píxeles en una fila puede ser más del doble del número del tiempo de divisiones.

    B0 especifica si la conexión para la extensión es usada.

    B0 = 0 Matriz Simple
    B0 = 1 Matriz Doble

    B1 = 0 DRAM no usada
    B1= 1 DRAM usada

Mis comentarios:
No me parece que los registros ingresen información mezclada, como ser 6 bits para una cosa y los dos últimos aparte.
Pero si el registro se debe usar completo para cada parámetro, queda saber cómo indicar de qué parámetro se trata.
En ese caso:
la dirección de la columna es un nro de 2 bytes: el Low y el High, que habrá que ingresar de uno por vez.
la división de tiempo es un nro de 1 byte
el byte "0 0 0 0 0 0 B1 B0" especifica el uso de extensión
y el ciclo de Stand By se indica con otro byte

...

En otros LCD la cosa es así:
se pone el registro identificador de comando y se da clock
se pone el registro identificador de dato/parámetro y se da clock
etc. ...
Esto en líneas generales, porque también se debe esperar que el micro esté desocupado, etc.

Acá lo último que se me ocurre es hacer:

.- "checkear el status" hasta que se lea "wait state" (no sé cómo, tal vez leyendo /INT a ver cuándo está en cero)
.- cuando ya se pueda mandar comandos, empezar a mandar de a un byte, en este orden:
1.- 1 0 0 1 0 1 1 0 (Es la cadena que distingue el comando SYNC)
2.- Byte Bajo (L) de la Dirección de columna
3.- Byte Alto (H) de la Dirección de columna
4.- Byte de División de tiempo
5.- El byte 0 0 0 0 0 0 B1 B0
6.- Byte de duración de Ciclo STB
.- y ver que pasa ...

Decime cómo lo interpretás vos.

:mad: <- este soy yo, luego de volverme chino
 
Última edición:
Hola Alejandro.

La verdad que mil gracias por ocuparte en detalle sobre mi inconveniente.

Te cuento, más o menos lo que vos me decís es lo que intenté entender por mi cuenta y lo que me pareción comprender. Mi duda principal estaba en el FRM y el STB.

Cuando probé todo esto, al principio no me pasaba nada, hasta que noté que el pin de reset estaba negado por hard, lo que dejaba la lógica positiva funcionando. Correjido este inconveniente continué con intentar cargar todos los parámetros del comando SYNC. En el único momento que encontraba variaciones en el LCD es cuando, en el byte correspondiente al FRM, lo iva modificando desde un valor muy chico (0x02) a uno muy parecido al tamaño del Y del LCD (0x80). En los valores que cargaba, desde el más pequeño hasta un valor alrededor del 0x35 del FRM, se observa una barra completa en el superior de la pantalla (todos los píxeles encendidos) con filas encendidas en igual cantidad al número que ponía (es decir, si colocaba el 0x02, se pintaban dos filas completas. Si ponía el 0x03, tres, y asi sucesivamente). Superando este valor (0x35), el color se hacía prácticaente imperseptible, perosí diferenciable con el resto del LCD.

Otro efecto que percivo con la variación del valor cargado del FRM, es que luego de todo , la pantalla queda observándose un leve parapdeo como si fuese el barrido. Mientras más cercano al valor del tamaño de filas, menos se nota este parpadeo.

Con todo lo demás, no se nota ninguna variación. El tema, ahora, es que no sé cómo pedirle al LCD el STATUS del uPD72030, para asi enviarle correctamente los bytes y que los leea bien, sin perderlos.

Otra cosa que noté, es que recibe los datos, siempre y cuando espere 1ms, de lo contrario no funciona. Eso debe tener que ver con lo del STATUS del uPD72030. Pero también puede ser que sea porque he notado que el tiempo que está el WR puesto en low, es mayor al tiempo máximo que dice la Hoja de datos (15/fosc y la fosc=6MHz, lo que nos dice que no puede mayor a 2,5us).

Bueno, eso es más o menos lo que he logrado hasta el momento con lo que vi y con lo que me respondió. Muchas Gracias. Saludos
 
ah, me olvidaba.... el STB, es referido al tiempo de parpadeo del cursor para el manejo de textos cuando se utiliza el generador de caracteres interno, es decir, la ROM con los caracteres almacenados.

Eso es todo. Saludos y hasta el próximo post. Muchas gracias
 
El status lo podés averiguar haciendo pooling en el bit /INT. Cuando está en cero, es que
el micro ya no está ejecutando nada, y puede recibir comandos.
Fijate que eso dice en la hoja de datos que me pasaste, sólo que lo pone como que
"usted, si quiere, puede leer el bit /INT ..." pero no queda otra, salvo esperar tiempos
excesivamente largos.

Saludos
 
Paloky dijo:
He encontrado unas pruebas que realize con el display y el PIC16F876.
El programa está en Ensamblador ASM para PIC.

Saludos

Paloky hazme un favor. Puedes enviarme el conexionado de este circuito y si puedes decirme cual LCD del proteus utilizo para hacer la simulacion?

Muchas Gracias
 

Adjuntos

  • tipos_de_glcd_proteus_279.jpg
    tipos_de_glcd_proteus_279.jpg
    117.9 KB · Visitas: 62
Atrás
Arriba