Inicializar LCD con controlador T6963C

Fijate Rubén que la forma de cableado del GLCD que ponen en el mikroC es diferente a la del programa que posteé yo antes. Otros esquemas de la ayuda también muestran algunos errores (como el reset en el ejemplo del ADC).
Yo armé una biblioteca propia para mi display basado en la hoja del T6963C, y modificando las rutinas del código C posteado antes, para adaptarlas al C de mikroC. Están disponibles en la zona de descargas de mi página.
Buscar: Biblioteca para Pic16F873/6/A ... y bajarse el archivo Bib_0y1.zip.

Mira Gracias por el aporte
la vedad intente utlizarlas simulando en proteus pero.. me rindo......
Pero...... es posible q cargaras o me reenviaras una aplicacion en la que utlices tus librerias para graficos (cargados en memoria )y textos en cadenas de caracteres............. las tengo trasncritas a ccs compiler y una vez las termine de entender me comprometo a reenviarles
muchas Gracias Alejandro
Espero no molestarlo
 
Hola:

Con respecto al código que pides para el T6963C voy a ver si te separo algo
medio corto como para que no te compliques con cosas que no tengan que
ver con el display. Voy a tardar un poco (dame un par de días).

Ahora estoy trabajando con otro display, controlado por el KS0108.
El paquete de rutinas lo bajé de U-control (ver).
Fue desarrollado para CCS pero yo lo probé con mikro-C y con MPLAB y
anda perfecto con los dos.
Es bastante distinto ya que los fonts del modo texto hay que generarlos,
cargarlos en el micro y gestionarlos todo uno mismo.
Con paciencia y con saliva ... al final todo funciona.

Saludos

PD: Pido disculpas por los enlaces rotos. Esto es porque el sitio que tenía
en geocities fue cerrado junto con todos los sitios gratuitos.
La nueva dirección web está en mi firma. Toda la estructura de la página
de descargas es la misma.

---------------------------------------------------------------------------------------------

Listo!.
Acá dejo una aplicación sencilla. Está en mi página de descargas:
http://asherar.co.cc/DSD/descargas/index.htm
Las rutinas de las bibliotecas B0 y T1 permiten configurar, arrancar y escribir
cadenas de texto.
El proyecto es para mikroC, por lo que si se prueba en otro compilador,
la rutina Delay_ms se debe implementar.
Compila perfecto aunque no lo he probado en el GLCD.
Espero que les sea útil.

Saludos !

PD: Todos mis programas llevan un "bug-intencional" a modo de "virus-didáctico"
así que nadie espere hacerlos funcionar a la primera.
 
Última edición:
Gracias a vos que me puse a revivir el display ese.
Lo tenía medio desatendido.
Ahora me andan los dos.

Fijate si no:

http://www.youtube.com/watch?v=c1XlTA4sxLM

Saludos, y que les aproveche, en aquel lado del mundo...(y)

--------------------------------------------------------------------------Es cierto funciona en proteus y en mi pantalla tambienBuen dia Alejandro:Excelente APORTE!!!!Ahora si las entiendo!!!Sin embargo me genera error cuando ingreso mas de 1 cadena de textos.... y No entiendo por que:void glcd_config(unsigned short x_Size, unsigned short y_Size, unsigned short Ancho_de_caracter){ _H_PIXEL = Ancho_de_caracter; _NRO_DE_COLUMNAS = (x_Size+4)/Ancho_de_caracter; _NRO_DE_FILAS = (y_Size+4)/8;.......(x_Size+4)????(y_Size+4)????Mi pantalla es de 240X128240(x_pixeles)/6(Pix_ancho/caracter)= 40 caracteres/filaY son 16 filas.......Pero solamente me esta mostrando 32 caracteres y una vez intento agregar una cadena de texto en otra fila envia error al compilar... sin enmbargo la logica de las rutinas esta bien (no entiendo por q sumar+4)Tengo una inquietud adicional... solamente se pueden textos de 5X7 y 7X7...no es pòsible tener textos de menor tamaño como 3X5??? ¿para tener estos textos es necesario utilizar modo grafico y como?.Muchas gracias por responder a mi mensajePd: En el adjunto tengo los archivos modificados (descargados de tu pag. espero no te molestes)...con una simulacion de proteus....Gracias por responderMuy amable alejandro
 

Adjuntos

  • Arranque_Texto_mod.rar
    83.2 KB · Visitas: 150
Lo de sumar +4 (la mitad de 8, el ancho máximo de caracter) es para el redondeo de la
división entre enteros. Es como sumar 0.5 para redondeo simétrico.
No sé qué pasa para pantallas más grandes. Creo que el programa original era para 240x128.

Lo de las cadenas de textos que dan error puede ser que sea porque el compilador no puede
guardarlas en la memoria que tiene disponible, o que uno ha llegado al límite de la memoria.
Yo me he encontrado ese tipo de cosas también. Aún no le encontré la vuelta.

Gracias por las reformas. Viste que no era demasiado complicado.

PD: Por favor, puntuá un poco el texto que no se entiende nada. :D
 
Última edición:
Lo de sumar +4 (la mitad de 8, el ancho máximo de caracter) es para el redondeo de la
división entre enteros. Es como sumar 0.5 para redondeo simétrico.
No sé qué pasa para pantallas más grandes. Creo que el programa original era para 240x128.

Lo de las cadenas de textos que dan error puede ser que sea porque el compilador no puede
guardarlas en la memoria que tiene disponible, o que uno ha llegado al límite de la memoria.
Yo me he encontrado ese tipo de cosas también. Aún no le encontré la vuelta.

Gracias por las reformas. Viste que no era demasiado complicado.

PD: Por favor, puntuá un poco el texto que no se entiende nada. :D

ok entiendoSin embargo sigo con la inquietud............... no entiendo por que si mi pantalla es de 240 pixeles entonces deberia mostrar 40 carateres y me muestra 32Lo otro es que si sabes la manera de mostrar carateres 3X5 pixeles??muchas gracias por responder
 
Una pantalla con 240 pixels puede mostrar 40 caracteres de 6 pixels de ancho,
o 30 caracteres de 8 .
Si tu font es de 6, hay que revisar las rutinas que calculan la cantidad de columnas.
Debe haber alguna macana ahí, que en mi display de 128x128 no se llega a manifiestar.

Para caracteres de otras dimensiones habría que buscar en internet algún
programa para generar fonts.
De lo contrario hay que armarse de paciencia y de una hoja cuadriculada.
En los displays basados en el T6963 los bytes se codifican horizontalmente.
Se puede usar el font que trae incorporado, o cargarle un font propio.
Fijate en la hoja de datos del micro (Ref. 1) o en la nota de aplicación (Ref. 2).

P. ej: Una forma de hacer la A en 8x8 para el T6963 sería:

00011100 = (0x1C)
00100010 = (0x22)
01000001 = (0x41)
01111111 = (0x7F)
01000001 = (0x41)
01000001 = (0x41)
01000001 = (0x41)
00000000 = (0x00)

Para 3x5 no queda mucho espacio. Te van a quedar irreconocibles.
Será cuestión de probar a ver qué sale.

Saludos

Ref. 1.- Hoja de datos del T6963C
Ref. 2.- Application Notes for the T6963C LCD Graphics Controller Chip
 
Última edición:
Una pantalla con 240 pixels puede mostrar 40 caracteres de 6 pixels de ancho,
o 30 caracteres de 8 .
Si tu font es de 6, hay que revisar las rutinas que calculan la cantidad de columnas.
Debe haber alguna macana ahí, que en mi display de 128x128 no se llega a manifiestar.

Para caracteres de otras dimensiones habría que buscar en internet algún
programa para generar fonts.
De lo contrario hay que armarse de paciencia y de una hoja cuadriculada.
En los displays basados en el T6963 los bytes se codifican horizontalmente.
Se puede usar el font que trae incorporado, o cargarle un font propio.
Fijate en la hoja de datos del micro (Ref. 1) o en la nota de aplicación (Ref. 2).

P. ej: Una forma de hacer la A en 8x8 para el T6963 sería:

00011100 = (0x1C)
00100010 = (0x22)
01000001 = (0x41)
01111111 = (0x7F)
01000001 = (0x41)
01000001 = (0x41)
01000001 = (0x41)
00000000 = (0x00)

Para 3x5 no queda mucho espacio. Te van a quedar irreconocibles.
Será cuestión de probar a ver qué sale.

Saludos

Ref. 1.- Hoja de datos del T6963C
Ref. 2.- Application Notes for the T6963C LCD Graphics Controller Chip

Buen dia Alejandro:Efectivamente tu lo habias dicho....eran errores del compilador.Sin embargo, tengo problemas con el cursor, despues de la columna 16 vuelve a comenzar la fila, es decir:glcd_put_cursor(16,2) muestra el cursor en la fila 2 columna 1 ???Para hacerme entender mejor, agrega esto a tu codigo: . . for (i=1; i
 
Hola danrod.

El cursor se configura mediante el modo texto.
Por favor, fijate que el seteo por hard del ancho del caracter
coincida con el seteo por software.

Nota:
Verás que tanto el modo gráfico como el modo texto tienen la misma cantidad
de columnas. Esto es por la misma razón que el caracter se define por filas.

Ahora: Ojo al piojo !
Cuando configuras para usar el font de 6 pixel de ancho, al escribir bytes en
la memoria gráfica, ésta se va llenando con tiras de 8 pixels en forma horizontal,
y los 2 últimos pixels de cada byte dibujado se subreescriben con la tira
siguiente.
Esto es porque la posición del primer pixel del byte a escribir se calcula usando el
nro de columnas de ancho=6 que calculamos al configurar.

Por lo tanto, aunque veas que dibuja 8 pixels por vez, el ancho útil de byte en
modo gráfico son los 6 pixels seteados.
No se si fui claro :unsure:

Saludos
 
Última edición:
Nuevamente ...............Efectivamente tu lo habias dicho....eran errores del compilador.Sin embargo, tengo problemas con el cursor, despues de la columna 16 vuelve a comenzar la fila, es decir:glcd_put_cursor(16,2) muestra el cursor en la fila 2 columna 1 ??? Para hacerme entender mejor, agrega esto a tu codigo: for (i=1; i < 020; i++) { glcd_put_cursor(i,2); // Posiciona el cursor Delay_ms(500); }Un favor particular, quiero mostrar pixeles y hago lo siguiente: glcd_activar(_GRAF); glcd_paint_pixel(25, 50, 1);pero no muestra el pixel???No tienes quizas una aplicacion del modo grafico de tus rutinas.. quisiera poder mostrar un rectangulo y una pequeña imagen en cualquier sitio de la pantalla.Te agradezco por la colaboracion.Muchas Gracias por responder a los mensajes.....Mira, lños caaracteres 3X5 pixeles... se reconocen muy bien.. Encontre en el Ucontrol "CCS - Libreria de gráficos para GLCD K0108 De Ucontrol - Versión para GLCD con chip SED1565" la tabla de caracteres 3X5 pixeles. Me gustaria poder realizar una rutina similar para la presentacion de cadenas de caracters a 3X5. Soy nuevo en CCS, pero lo intentare. Por favor de casualidad tienes un ejemplo del manejo grafico de tus rutinas....(entendi las de texto, aunque tengo problemas con el cursor).Muchas gracias Alejandro.Posdarta: disculpa por mennjaes anteriores pero tenia problemas con el ENTER del teclado..jeje

danrod dijo:
Nuevamente ...............Efectivamente tu lo habias dicho....eran errores del compilador.Sin embargo, tengo problemas con el cursor, despues de la columna 16 vuelve a comenzar la fila, es decir:glcd_put_cursor(16,2) muestra el cursor en la fila 2 columna 1 ??? Para hacerme entender mejor, agrega esto a tu codigo: for (i=1; i < 020; i++) { glcd_put_cursor(i,2); // Posiciona el cursor Delay_ms(500); }Un favor particular, quiero mostrar pixeles y hago lo siguiente: glcd_activar(_GRAF); glcd_paint_pixel(25, 50, 1);pero no muestra el pixel???No tienes quizas una aplicacion del modo grafico de tus rutinas.. quisiera poder mostrar un rectangulo y una pequeña imagen en cualquier sitio de la pantalla.Te agradezco por la colaboracion.Muchas Gracias por responder a los mensajes.....Mira, lños caaracteres 3X5 pixeles... se reconocen muy bien.. Encontre en el Ucontrol "CCS - Libreria de gráficos para GLCD K0108 De Ucontrol - Versión para GLCD con chip SED1565" la tabla de caracteres 3X5 pixeles. Me gustaria poder realizar una rutina similar para la presentacion de cadenas de caracters a 3X5. Soy nuevo en CCS, pero lo intentare. Por favor de casualidad tienes un ejemplo del manejo grafico de tus rutinas....(entendi las de texto, aunque tengo problemas con el cursor).Muchas gracias Alejandro.Posdarta: disculpa por mennjaes anteriores pero tenia problemas con el ENTER del teclado..jeje

Mira el adjunto imagenes de la calculadora texas instruments..... utlizan 5X7 y 3x5 pix/caracterGracias por responder
 

Adjuntos

  • PANTALLAZO01.bmp
    4.1 KB · Visitas: 118
  • PANTALLAZO1.BMP
    90.1 KB · Visitas: 44
Última edición:
Hola:

La parte gráfica es igual que para la de texto, sólo que:

* En lugar la dirección de un "char" se envía el contenido del byte con los 8 pixels horizontales,

* La dirección destino se calcula a partir de la dirección base de la memoria gráfica,

* Hay una fila por cada pixel a lo largo de la vertical.

La clave para dibujar un píxel es leer de la memoria el byte que lo contiene y modificar sólo el bit correspondiente al pixel.
Luego se reescribe el byte modificado en el mismo lugar que se lo leyó. Para eso hay que leer sin incrementar la posición de memoria.

Ahora ando en otra cosa que me consume todo el tiempo. En unos días veré si me desocupo y hago algo. También me dió ganas de probar con los fonts de 3x5.

Saludos :cool:
 
Buen Dia Alejandro
Intentare haver si puedo........ tambien intentare hacer algo con e font 3X5
Si configure el font por software/hardware 6X8 pixeles pero el cursor no supera la columna 16.....
 
Pero utilizo 240X128 y altere tu codigo...
Mira en breve te envio tus rutinas en CCS (funcionan bien) y te daras cuenta......
Te enviare la simulacion con la pantalla 240X128 y notaras el cursor que llega hasta la columna 16 .......
Gracias por responder

Como te puedes dar cuenta, he trabajado con tus rutinas.... para modo texto me he guiado y disculpa si te molesta (por las modificaciones)... las transribi a CCS compiler y funcionan correctamente... Sinembargo.. El cursor deberia recorrer toda la fila y solamemnte recorre hasta la columna 16????En todo caso pienso que se debe alterar la rutina de Put_cur ..Lo del modo grafico no lo entiendo, ayudame con una aplicacion en miKroC y yo me encargo del CCS (soy nuevo en esto pero estoy aprendiendo..jeje).Se que para mostrar pixeles a 3X5 pìxeles se requiere utlizar el modo grafico.... quizas podriamos hacer algo. Una vez tengamos algo arreglare las rutinas del CCS para que las puedas tener en MiKroC y CCS; colgandolas en tu pag (quedaria algo muy completo!!)Existe la posibilidad de configurar el modo grafico utilizando las dimensiones de la pantalla, es decir, 240X128 pixeles y poder mostrar un pixel en cualquier posicion de memoria sin tener que utlizar el modo texto??? como por ejempo put_pixel(100_pixel,120_pixel,1_color)???Algo adicional, encontre una rutina para teclado 4X4 en CCS, utiliza todo el puerto B y necesito utlizar la parte baja del mismo para una memoria serial...... Quizas tu me podrias ayudar con esta inquietud ¿Como se puede crear un PUERTO_X que utilice la parte alta del puerto B y la parte baja del puerto A como un nuevo puerto? que sea nombrado como PUERTO_X y TRIS_X en CCS???
 

Adjuntos

  • Arranque_Text_CCS.rar
    69.3 KB · Visitas: 172
Última edición:
No me molesta en absoluto que modificaras mis rutinas.
Además yo las bajé de otro sitio y las adapté a mis necesicades.

Lamento que ahora no puedo ponerle tiempo a esto. Para atacar el problema que
me cuentas debería ponerme a revisar todo tranquilo, lo que me llevaría una tarde
de las largas.

Lo que te puedo decir es que:

1.- Lo de los puertos se puede hacer, lo que pasa es que va a ser un poco más
lento que si usaras los 8 bits del mismo registro. Pero no creo que mucho.

2.- El T6963C trae un font incorporado de 8x8 y memoria para cargarle un font
hecho por el usuario, pero el KS0108 no trae nada, ni font ni memoria, por lo que
hay que armarle un font y guardarlo en la memoria del micro!!!

3.- La incompatibilidad entre ambos se debe a que en el T6963C los bytes
gráficos codifican líneas horizontales, y en el KS0108 lineas verticales.

4.- Yo en realidad uso el MPLAB, el mikroC lo usé por comodidad para el C.

Ve adelantándote y en unos días te alcanzo.

Saludos

Lo único que veo por ahora del tema del cursor es que llamás al revés los argumentos:

La llamada es:

void glcd_put_cursor(int XC, int YC);

y vos ponés:

for (i=1; i<40; i++)
///AQUI DEBERIA MOSTRAR EL CURSOR RECORRIENDO TODA LA FILA
{
glcd_put_cursor(1,i);// Posiciona el cursor
Delay_ms(500);
}
Así, lo que hace es dejar la columna X fija en 1, e incrementar la fila desde
0 a 40 (recorre la columna X=1).

Espero algún video de cómo funciona :D
 
Última edición:
"
void glcd_put_cursor(int XC, int YC);

y vos ponés:

Así, lo que hace es dejar la columna X fija en 1, e incrementar la fila desde
0 a 40 (recorre la columna X=1). "

En las rutinas d CCS estan configuradas para que funcionen tal cual como estan escritas... (fila estable-columna variable) me confundi un poco pero puedes intercambiar y notaras que se altera la fila........... i No es por eso.... ya lo intente. Puedes probar con tus rutinas de MiKroC......... Es mas puedes cambien en CCS y probar en proteus......
Muchas Gracias por responder.....
Intentare hacer algo con el modo grafico..........
 
No me molesta en absoluto que modificaras mis rutinas.
Además yo las bajé de otro sitio y las adapté a mis necesicades.

Lamento que ahora no puedo ponerle tiempo a esto. Para atacar el problema que
me cuentas debería ponerme a revisar todo tranquilo, lo que me llevaría una tarde
de las largas.

Lo que te puedo decir es que:

1.- Lo de los puertos se puede hacer, lo que pasa es que va a ser un poco más
lento que si usaras los 8 bits del mismo registro. Pero no creo que mucho.

2.- El T6963C trae un font incorporado de 8x8 y memoria para cargarle un font
hecho por el usuario, pero el KS0108 no trae nada, ni font ni memoria, por lo que
hay que armarle un font y guardarlo en la memoria del micro!!!

3.- La incompatibilidad entre ambos se debe a que en el T6963C los bytes
gráficos codifican líneas horizontales, y en el KS0108 lineas verticales.

4.- Yo en realidad uso el MPLAB, el mikroC lo usé por comodidad para el C.

Ve adelantándote y en unos días te alcanzo.

Saludos

Lo único que veo por ahora del tema del cursor es que llamás al revés los argumentos:

La llamada es:

void glcd_put_cursor(int XC, int YC);

y vos ponés:

Así, lo que hace es dejar la columna X fija en 1, e incrementar la fila desde
0 a 40 (recorre la columna X=1).

Espero algún video de cómo funciona :D


Alejandro, he tenido algo de lios en la protoboard.... una vez solucionado espero mostrarte un video..........

Mira lo que enontre en español..................
http://www.ele.uva.es/~jesman/BigSeti/seti2/Miscelanea/ManualLCDGrafico.pdf
 
Última edición:
Buen dia alejandro:
En funcionamiento el programa corre CORRECTAMENTE, no se porque en la simulacion con proteus tienen errores.... en todo caso NO EXISTEN problemas con el cursor!!!!!!!!!!!!!!!!!:LOL:
Pido por favor si tienes alguna aplicacion con tus rutinas utlizando el modo grafico
De antemano gracias............:apreton::aplauso::aplauso:
 
Atrás
Arriba