Autor Tema: LCD gráfico con T6913C  (Leído 5597 veces)

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

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
LCD gráfico con T6913C
« en: 01 de Abril de 2011, 00:06:19 »
Hola amigos, les pido colaboración por lo siguiente, llevo ya varios días tratando de hacer funcionar esta pantalla, he consultado la mayoría de ejemplos de foro y me enredo con las librerías que ofrecen,
Quiero ponerla a funcionar de la manera más comprensible para mi y hasta ahora sólo logro encender el cursor,
Alguno de ustedes me puede ayudar a presentar siquiera una sola letra ?.

Este es el código que llevo adelantado.

Muchas gracias.

Código: [Seleccionar]
#include <C:\Archivos de programa\PICC\devices\16f876A.h>

#use delay(clock=4000000)
#fuses xt,put,brownout,nowdt

#byte porta=5 //Definicion de variables del pic
#byte portb=6
#byte portc=7

#define cd porta,0 //Definicion de bits
#define ce porta,1
#define rs porta,2
#define port_lcd portb

void enviar_a_lcd(short bit_cd, int dato);

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#zero_ram //Borrado de la memoria ram

void main() //Rutina principal
{
set_tris_a(0b000000); //Configuracion de entradas y salidas del puerto A
set_tris_b(0b00000000); //Configuracion de entradas y salidas del puerto B
port_b_pullups(true); //Habilitación de las resistencias pull-ups
porta = 0;
portb = 0;

setup_adc(adc_off);

///////////////////////////////////////////////////////////////////////////////
bit_clear(rs);  //reset a la pantalla
delay_ms(1);
bit_set(rs);

//enviar_a_lcd(1,0b10000100); //atributo texto
enviar_a_lcd(1,0b10010100); //lcd como texto
//enviar_a_lcd(0,0b00000000); //direccion alta
//enviar_a_lcd(0,0b00000000); //direccion baja
//enviar_a_lcd(1,0b01000000); //direccion del texo
//enviar_a_lcd(0,0b00000000); //codigo 0x00
//enviar_a_lcd(0,0b00000001); //columnas
//enviar_a_lcd(1,0b01000001); //area de texto
enviar_a_lcd(1,0b10000000); //se utiliza patrones internos cg-rom
//enviar_a_lcd(1,0b10011000); //lcd como grafico
enviar_a_lcd(1,0b10100111); //cursor de 8 lineas
enviar_a_lcd(1,0b10010011); //cursor parpadeo
enviar_a_lcd(0,0b00000000); //posicion vertical del cursos
enviar_a_lcd(0,0b00000000); //posicion horizontal del cursos
enviar_a_lcd(1,0b00100001); //configurar posicion del cursor

enviar_a_lcd(0,16); //caracter de la cg-rom
enviar_a_lcd(1,0xc0); //enviar dato

enviar_a_lcd(0,16); //caracter de la cg-rom
enviar_a_lcd(1,0xce); //enviar dato

//////////////////////////
while(true) //Rutina general
{

}
}
///////////////////////////////////////////////////////////////////////////////
void enviar_a_lcd(short bit_cd, int dato) //rutina que escribe dato en el lcd
{
if(bit_cd) {bit_set(cd);}
else {bit_clear(cd);}
bit_set(ce);
delay_us(100);
port_lcd = dato;
delay_us(100);
bit_clear(ce);

delay_ms(1);
}
///////////////////////////////////////////////////////////////////////////////




Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: LCD gráfico con T6913C
« Respuesta #1 en: 01 de Abril de 2011, 22:32:41 »
Hola

Yo he trabajado con una de 128x128 (aqui) ... pero no es el mismo controlador tuyo ... es el t6963C ... no se si será compatible .....

Saludos
El papel lo aguanta todo

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: LCD gráfico con T6913C
« Respuesta #2 en: 01 de Abril de 2011, 23:24:18 »
Hola Miguel gracias por responderme, si creo que sean compatibles pues la verdad yo estoy probando primero en proteus antes de comprar la pantalla, he tratado de seguir esa secuencia de comandos que he extractado de varios data-sheet pero no logro hacer que aparezca ni un solo caracter.

Saludos.

Desconectado irukza

  • PIC12
  • **
  • Mensajes: 87
Re: LCD gráfico con T6913C
« Respuesta #3 en: 02 de Abril de 2011, 20:06:13 »
Hola
Yo trabajo con un T6963C.
En la practica anda muy bien, pero en proteus, solo funciona bien con FS1 puesto a masa.
suerte

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: LCD gráfico con T6913C
« Respuesta #4 en: 02 de Abril de 2011, 21:14:14 »
Hola amigo, utilizas alguna librería o creaste todo el código ?
Lo has utilizado presentado los caracteres que trae por defecto en la CG-ROM ?

Saludos.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: LCD gráfico con T6913C
« Respuesta #5 en: 02 de Abril de 2011, 23:16:28 »
Hola.

Tengo una librería para el uso de esa GLCD y uso unas fuentes creadas en el LCD Font Creator. En estos días estoy algo ocupado .. pero a ver si saco un tiempo y posteo algo sobre ello.

Saludos
El papel lo aguanta todo

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: LCD gráfico con T6913C
« Respuesta #6 en: 03 de Abril de 2011, 21:10:13 »
Gracias Miguel

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: LCD gráfico con T6913C
« Respuesta #7 en: 01 de Agosto de 2011, 22:59:40 »
Hola amigos, les pido colaboración nuevamente con este tema, no he podido mostrar un sólo caracter ni prender siquiera un punto, he tratado de seguir las indicaciones del datasheet pera ha sido fallido, alguno de ustedes me puede dar una mano.

Muchas gracias

Código: [Seleccionar]
#include <16f876A.h>

#use delay(clock=4mhz)
#fuses xt,put,brownout,nowdt

#byte porta=5 //Definicion de variables del pic
#byte portb=6
#byte portc=7

#define cd porta,0 //Definicion de bits
#define ce porta,1
#define rs porta,2
#define rd porta,3
#define wr porta,5

#define port_lcd portb


void enviar_a_lcd(short bit_cd, int dato);

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#zero_ram //Borrado de la memoria ram

void main() //Rutina principal
{
set_tris_a(0b000000); //Configuracion de entradas y salidas del puerto A
set_tris_b(0b00000000); //Configuracion de entradas y salidas del puerto B
port_b_pullups(true); //Habilitación de las resistencias pull-ups
porta = 0;
portb = 0;

setup_adc(adc_off);

///////////////////////////////////////////////////////////////////////////////
bit_clear(rs);  //reset a la pantalla
delay_ms(10);
bit_set(rs);

enviar_a_lcd(1,0b10010100); //lcd como texto
enviar_a_lcd(1,0b10000100); //atributo texto
enviar_a_lcd(1,0b10000000); //se utiliza patrones internos cg-rom
enviar_a_lcd(1,0b10100111); //cursor de 8 lineas
enviar_a_lcd(1,0b10010011); //cursor parpadeo
enviar_a_lcd(0,0b00000100); //posicion vertical del cursos
enviar_a_lcd(0,0b00000100); //posicion horizontal del cursos
enviar_a_lcd(1,0b00100001); //configurar posicion del cursor

enviar_a_lcd(0,16); //caracter de la cg-rom
enviar_a_lcd(1,0xc0); //enviar dato


//////////////////////////
while(true) //Rutina general
{

}
}
///////////////////////////////////////////////////////////////////////////////
void enviar_a_lcd(short bit_cd, int dato) //rutina que escribe dato en el lcd
{

bit_set(rd);
bit_clear(wr);

delay_ms(5);

if(bit_cd) {bit_set(cd);}
else {bit_clear(cd);}
delay_us(100);
output_b(dato);
bit_set(ce);
delay_us(100);
bit_clear(ce);

delay_ms(5);
}
///////////////////////////////////////////////////////////////////////////////

Saludos.

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: LCD gráfico con T6913C
« Respuesta #8 en: 26 de Agosto de 2011, 19:17:13 »
No se si puede ser el problema pero te aconsejo usar la directiva #fast_io en los puertos que utilices.

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: LCD gráfico con T6913C
« Respuesta #9 en: 26 de Agosto de 2011, 22:52:52 »
Hola Pablo, he avanzado un poco pero tengo muchos vacíos, con este código pude mostrar un cero

Código: [Seleccionar]
enviar_a_lcd(0,40); //area de texto de cada caracter
enviar_a_lcd(0,0); //
enviar_a_lcd(1,0x41); //codigo para area de texo

enviar_a_lcd(0,0); //area de texto de cada caracter
enviar_a_lcd(0,0); //
enviar_a_lcd(1,0x40); //codigo para area de texo

enviar_a_lcd(0,40); //area de grafico por cada dato
enviar_a_lcd(0,0); //
enviar_a_lcd(1,0x42); //codigo para area de grafico

enviar_a_lcd(1,0b10010011); //cursor con parpadeo
//enviar_a_lcd(1,0b10011000); //pantalla solo grafico
enviar_a_lcd(1,0b10010100); //pantalla solo texo
enviar_a_lcd(1,0b10100111); //grosor del cursos

enviar_a_lcd(0,0);
enviar_a_lcd(0,0);
enviar_a_lcd(1,0x21); //configurar addres pointer set

enviar_a_lcd(0,0);
enviar_a_lcd(0,0);
enviar_a_lcd(1,0x22); //configurar posicion offset

enviar_a_lcd(0,2);
enviar_a_lcd(0,0);
enviar_a_lcd(1,0x24); //configurar addres pointer set

enviar_a_lcd(0,16); //dato para escribir
enviar_a_lcd(1,0xc0); //comando para escribir e incrementar

pero no comprendo bien como es que cambia la dirección, si le configuro lo siguiente:

Código: [Seleccionar]
enviar_a_lcd(0,2);
enviar_a_lcd(0,0);
enviar_a_lcd(1,0x24); //configurar addres pointer set

el cero aparece 2 a la derecha y en la línea cero; pero si le doy

Código: [Seleccionar]
enviar_a_lcd(0,2);
enviar_a_lcd(0,1);
enviar_a_lcd(1,0x24); //configurar addres pointer set

esperaría que apareciera en la columna 2 fila 1, pero se desaparece.

Saludos.

Desconectado nediamolbap

  • PIC10
  • *
  • Mensajes: 29
Re: LCD gráfico con T6913C
« Respuesta #10 en: 27 de Agosto de 2011, 03:48:26 »
saludos,

Adjunto una prueba con el 18F452 y un LCD 240x64 con controlador T6963C. ( el ejemplo lo encontre en el foro de CSS en este enlace ) No se  :huh: si se pueda tratar de cuadrar para que funcione con el controlador T6913C para el LCD de 128x128?? dicho esto para no tener que crear desde 0 la libreria. :)

« Última modificación: 27 de Agosto de 2011, 03:51:49 por nediamolbap »
Solo se fracasa, cuando se deja de intentar!.

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: LCD gráfico con T6913C
« Respuesta #11 en: 27 de Agosto de 2011, 09:15:13 »
Gracias amigo por el ejemplo.

Saludos

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: LCD gráfico con T6913C
« Respuesta #12 en: 25 de Noviembre de 2012, 23:36:44 »
Hola amigos, alguien me puede explicar un poco los comandos

Cursor pointer set:
Offset register set:
Addres Pointer Set:

La verdad he leído algunas explicaciones de la web pero no logro aterrizar con esto.

Mil gracias.

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: LCD gráfico con T6913C
« Respuesta #13 en: 27 de Noviembre de 2012, 16:37:58 »
Hola amigos, por fin logré entender un poco la distribución de memoria del T6963, hice esta tabla a prueba y error



este es el resultado



está en modo sólo texto, ahora quiero meterle el gráfico, a ver si alguien me ayuda con estas inquietudes

1. Es conveniente utilizar modo gráfico y texto simultáneamente o será mejor manejar todo como gráfico ?
2. Para gráfico he hecho pruebas enviando un byte pero sólo me toma 6 bits, si pongo el pin FS1 en 0 me toma los 8bit, que es lo más recomendable 6 u 8 bit.

Gracias.



Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: LCD gráfico con T6913C
« Respuesta #14 en: 02 de Diciembre de 2012, 10:19:27 »
Hola

Se que ha pasado tiempo  :oops: :oops: ... pero al fin la encontre!!!!!

La libreria esta modificada para trabajar con la pantalla de 128x128, reconoce la letra ñ y Ñ, ajusta el espacio de interespacio con algunas letras, maneja dos fuentes: una de 5x7 y otra de 3x3.

Para inicializarla:
Código: C#
  1. GDispInit();                                   
  2.         FontSize = 8;                                          
  3.         GDispSetMode(XOR_MODE|INT_CG_MODE);
  4.         GDispSetMode(TEXT_GRH_ON);             
  5.         GDispClrTxt();                                         
  6.         GDispClrGrh();

Para cargar la siguiente pantalla:



lo hago asi:

Código: C#
  1. strcpy(DataBufer,"Unicauca");
  2.                         GDispPixFontAt(22,1,DataBufer,2,Black);
  3.        
  4.                         strcpy(DataBufer,"DSC-CYTEMAC");
  5.                         GDispPixFontAt(33,17,DataBufer,1,Black);
  6.  
  7.                         strcpy(DataBufer,"2009");
  8.                         GDispPixFontAt(53,26,DataBufer,1,Black);
  9.  
  10.                         GDispDefIcon32X32(IconoMLO);
  11.                         GDispIcon32X32At(5,6,IconoMLO);
  12.  
  13.                         strcpy(DataBufer,"CONTROL DIGITAL DE TEMPERATURA");
  14.                         GDispPixFontSm(7,78,DataBufer,1,1);
  15.  
  16.                         strcpy(DataBufer,"Miguel Ordoñez");
  17.                         GDispPixFontAt(1,98,DataBufer,1,black);
  18.        
  19.                         strcpy(DataBufer,"Miguel Parra");
  20.                         GDispPixFontAt(1,108,DataBufer,1,1);
  21.  
  22.                         GDispRect(127,127,88,121,1,1);
  23.                         strcpy(DataBufer,"PRESIONE #");
  24.                         GDispPixFontSm(89,122,DataBufer,1,0);

Cada vez que se quiera escribir sobre la pantalla algo nuevo, es bueno "limpiar"  :)

Código: C#
  1. GDispClrGrh();
  2.                         GDispClrTxt();

Tambien permite trabajar las funciones de lineas y demas



Los iconos los cargo en otro archivo icons.h como constantes:

Código: C#
  1. const unsigned int8 IconoControlar[128] =
  2. {
  3. 0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFC,0x40,0x00,0x00,0x02,0x80,0x00,0x00,0x01,
  4. 0x8F,0xFF,0xFF,0xF1,0x90,0x00,0x00,0x09,0x90,0x20,0x00,0x09,0x90,0x20,0x00,0x09,
  5. 0x90,0x60,0x00,0x09,0x90,0x60,0x00,0x09,0x90,0x60,0x00,0x09,0x90,0x62,0x00,0x09,
  6. 0x90,0x62,0x00,0x09,0x90,0xA7,0x20,0x09,0x9F,0xA5,0x3F,0xF9,0x90,0x15,0xC0,0x09,
  7. 0x90,0x14,0x80,0x09,0x90,0x08,0x80,0x09,0x90,0x08,0x00,0x09,0x90,0x08,0x00,0x09,
  8. 0x90,0x08,0x00,0x09,0x90,0x00,0x00,0x09,0x90,0x00,0x00,0x09,0x8F,0xFF,0xFF,0xF1,
  9. 0x80,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0x80,0x03,0x9D,0xC1,0x80,0x02,0x95,0x41,
  10. 0x80,0x03,0x9D,0xC1,0x40,0x00,0x00,0x02,0x3F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00
  11. };

La funcion para cargar los iconos desde la EEPROM es:

Código: C#
  1. void GDispDefIcon32X32(unsigned int8 icon_id)//.........................Definir Icono en la GLCD leido desde 24LC256 -ver icons.h-
  2. {
  3.         unsigned int16 i, col, row;
  4.  
  5.         for(row=0; row<4; row++)
  6.         {
  7.                 for(col=0; col<4; col++)
  8.                 {
  9.                         for(i=0;i<8;i++)
  10.                         {
  11.                                 CGBuffer[i] = read_ext_eeprom(32*row + i*4 + col + (unsigned int16)icon_id*128);
  12.                         }
  13.                         GDispDefCGChar(col+4*row+icon_id*16,&CGBuffer[0]);
  14.                 }
  15.         }
  16. }

y para visualizarlo despues:
Código: C#
  1. void GDispIcon32X32At(unsigned int16 row, unsigned int16 col, unsigned int8 icon_id)//............................ Visualizar icono
  2. {
  3.         unsigned int8 id=0;
  4.         unsigned int16 row_cnt, col_cnt;
  5.  
  6.         id = id + icon_id*16;
  7.  
  8.         GDispGoto(row, col);
  9.         for(row_cnt = row; row_cnt < (row+4); row_cnt++)
  10.         {
  11.                 for(col_cnt = col; col_cnt < (col+4); col_cnt++)
  12.                 {
  13.                         GDispCGCharAt(row_cnt, col_cnt, id++);
  14.                 }
  15.         }
  16. }

bueno ... el resto es cacharrearle :) 

La libreria y demas las puedes descargar desde aqui. Espero que te sirvan ;-)

Saludos

PD// disculpa mi demora ... no he tenido mucho tiempo y ademas se me embolato!!!!
El papel lo aguanta todo


 

anything