Touch Screen GLCD 160x80, desarrollo con ASM + PIC18F4550

Gracias Olinqi, veamos que resulta de todo esto, por mi parte estoy más que dispuesto a apoyar en lo que se pueda... al parecer tengo que entrarle a todo eso del CCS Saludos
 
Si amigo si programas en ASM el CCS se te facilitara, no analice tu código antes por eso puse esa tabla pero creo que la que necesitamos es hacer a mano pixel por pixel las letras jajaja perdon por la equivocacion ya me pongo a hacerla y la posteo.

P,D. estaría mal si voy subiendo el código en CCS aquí o en otro?

Saludos cordiales.
 
Si amigo si programas en ASM el CCS se te facilitara, no analice tu código antes por eso puse esa tabla pero creo que la que necesitamos es hacer a mano pixel por pixel las letras jajaja perdon por la equivocacion ya me pongo a hacerla y la posteo

Es cierto, un día de estos empezaré a ver que onda con esos lenguajes... si no te fijes, yo igual ando trabajando en esa tabla; y como le decía a Nietzche podríamos incluso hasta crear caracteres personalizados y diversas fuentes (a costa de más memoria pero bahh, venden EEPROM's I2C de 64KB por $30 jaja)

P,D. estaría mal si voy subiendo el código en CCS aquí o en otro?

Compártelo por aqui mismo, así se tiene más a la mano la info y programas sobre este GLCD.
Buen día
 
muy bien, tengo curiosidad por la rutina del touch... Pero vamos primero está la tésis
luego te paso la rutina del touch ya logre leer coordenadas con el adc del pic es mucho mas facil que sacar graficos... Y el electroluminicente ya tengo un circuito ya logre trabajar con ambos luego paso el código y el esquema del electroluminicente



En la imagen muestro un teclado el problema que tengo es como presentar en la parte de arriba la tecla que estoy oprimiendo ya tengo lo del touch solucionado
 

Adjuntos

  • GLCD.rar
    636.8 KB · Visitas: 29
Última edición por un moderador:
Muchas gracias, cada día se ve gente interesada por esta pantalla, pArece que vino un "lote chino" a vender aqui a Mexico y esta muy bien, respecto al alfabeto olinqui, enrealidad son 7 bytes que debemos de tener para cada caracter, porque? Porque debemos de enviar puntos por puntos para que asi se formen caracteres. Esto es datos de 5 x 7 bits, osea 5 bits de ancho por 7 de alto, fomando así 35 bits o lo que es lo mismo 7 bytes en total ya que en realidad no se ocupan tooodos los bits de un byte, lo que yo quiero preguntarle a Daniel es como usa el formato de cada caracter ? Empiezas arriba a la derecha? O en la segunda columna ? Ne explico? Para yo tambien hacerlos, ahora ya casi termino la rutina de la touch en asm, usa 4 canales c/d y una interrupcion externa, en la semana ya lo subo, saludos.



Comparemos librerias touch para que asi el cliente "eliga" o se puedan modificar o incluso hacer mini rutinas que detecten errores o la rutina para checar la presion ejercida en el touch. respecto a pasar la libreria a CCS he trabajado en varios foros y en http://www.ccsinfo.com/forum/viewtopic.php?p=99735 esta esta libreria, la unica situacion es que falta la rutina que va al principio porque si la intentan incluir en CCS les tira un error, chequenle porfas no? Me parece que es la declaracion de variables, no he tenido tiempo de checar la libreria con la ya conocida 128x64, peo pienso que ahí esta la respuesta.
 
Última edición:
Hola nietzche si ya estuve peleándome con esa librería pero la verdad es que no soy tan ducho en CCS y luego de analizarla y modificarla un montón me pareció más fácil empezar de cero y una vez entendidos en la operación básica y las rutinas correspondientes pretendo ir armando la librería de a poco asta llegar al touch.

Estoy muy atrasado en el trabajo con respecto a ustedes en ASM pero espero poderle dedicar más tiempo en esta semana y tener algunos avances.

Por lo pronto comparto este código para escribir en modo carácter.

Código:
 #include <18F4550.h> 
 #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN 
 #use delay(clock=48000000) 
 #include "usb_bootloader.h"
 //Referencia de asicnacion de Pines

 // RS  =RC0
 // R/W =RE0
 // E   =RE1
 // CS  =RC2
 // Res =RE2
//****************************************************************************

byte CONST Inicio[19] = {0x00 // INST: MODE CONTROL
                         0x38 // Set:  Dsp on,Master,cursor ON char BLink,Mode CHAR,Built-in ROM CHAR
                         0x01 // INST: CHARACTER PITCH (-1)
                         0x77 // Set:  8 bits vertical CHAR, 8 bits horizontal x CHR => 20 chr x 10 rngl
                         0x02 // INST: NUM CHAR (-1)
                         0x13 // Set:  20 char  horizontalmente
                         0x03 // INST: DISPLAY DUTY (-1)
                         0x4F // Set:  80 (valor de puntos verticalmente)
                         0x04 // INST: CURSOR POsITION (-1)
                         0x07 // Set:  en el bit 8 (vertical)
                         0x08 // INST: DSP START ADD LOWER
                         0x00 // Set:  posicion 0
                         0x09 // INST: DSP START ADD UPPER
                         0x00 // Set:  posicion 0
                         0x0A // INST: RAM ADD LOWER
                         0x00 // Set:  posicion 0
                         0x0B // INST: RAM ADD UPPER
                         0x00 // Set:  posicion 0
                         0x0C // INST: WRITE DATA TO RAM
                             };
  
byte int8 Puntero[19] = {0x00,0x38,0x01,0x77,0x02,0x13,0x03,0x4F,0x04,0x07
                           0x08,0x00,0x09,0x00,0x0A,0x53,0x0B,0x00,0x0C};  
//                                                  /\  
//                                              Modifica posicion del puntero.

byte CONST Texto[14] = {0x50,0x52,0x55,0x45,0x42,0x41,0x00,0x00,0x4D,0x45,0x52,0x4C,0x49,0x4E};
  
byte CONST Borrar[200] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};



 

void main(void)
{
 output_low(pin_E0);         // R/W apagar “RE0 a 0
 output_low(pin_C2);         // CS apagar “RC2 a 0
 output_high(pin_C0);         // RS encendido “RC0 a 1 

byte Var1=0;

 //////////////////Tabla  de inicialización////////////////////////////////////

      for (Var1=0;Var1<19;Var1++)
            {
         output_high(pin_E1);       // E  encender “RE1 a 1
         OUTPUT_D(Inicio[Var1]);     // Digito unidades envio al puerto B
         output_toggle(PIN_E1);     // E Cambia el estado y apagalo “RE1 a 0
         delay_ms(1);              // Retardo Para evitar Datos
         output_toggle(PIN_C0);     // RS cambia el estado del pin RC0 y lo apago
         output_toggle(PIN_E1);     // E Cambia el estado y enciendelo “RE1 a 1
               }
 
 output_low(pin_C0);         // Apaga RS “RC0 a 0
 
 //////////////////Tabla  de Borrado////////////////////////////////////
          
          
 for (Var1=0;Var1<200;Var1++)
            {
         output_high(pin_E1);       // E  encender “RE1 a 1
         OUTPUT_D(Borrar[Var1]);     // Digito unidades envio al puerto B
         output_toggle(PIN_E1);     // E Cambia el estado y apagalo “RE1 a 0
         delay_ms(1);              // Retardo Para evitar Datos
//         output_toggle(PIN_C0);     // RS cambia el estado del pin RC0 y lo apago
         output_toggle(PIN_E1);     // E Cambia el estado y enciendelo “RE1 a 1
            }
 
  output_low(pin_E1);         // apagar   E  “RE0 a 0 

//////////////////Tabla  de Puntero////////////////////////////////////

 output_high(pin_C0);         // RS encendido “RC0 a 1 
      for (Var1=0;Var1<19;Var1++)
            {
         output_high(pin_E1);       // E  encender “RE1 a 1
         OUTPUT_D(Puntero[Var1]);     // Digito unidades envio al puerto B
         output_toggle(PIN_E1);     // E Cambia el estado y apagalo “RE1 a 0
         delay_ms(1);              // Retardo Para evitar Datos
         output_toggle(PIN_C0);     // RS cambia el estado del pin RC0 y lo apago
         output_toggle(PIN_E1);     // E Cambia el estado y enciendelo “RE1 a 1
               }
 output_low(pin_C0);         // Apaga RS “RC0 a 0

//////////////////Tabla  de Texto////////////////////////////////////

for (Var1=0;Var1<14;Var1++)
            {
         output_high(pin_E1);       // E  encender “RE1 a 1
         OUTPUT_D(Texto[Var1]);     // Digito unidades envio al puerto B
         output_toggle(PIN_E1);     // E Cambia el estado y apagalo “RE1 a 0
         delay_ms(1);              // Retardo Para evitar Datos
         output_toggle(PIN_E1);     // E Cambia el estado y enciendelo “RE1 a 1
               }
 }

Y este otro en modo gráfico aun que con errores ya que se me repite la imagen y aún no descubro por que, no e tenido mucho tiempo para trabajar en esto pero como dije le daré más tiempo en esta semana.

Código:
 #include <18F4550.h> 
 #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN 
 #use delay(clock=48000000) 
 #include "usb_bootloader.h"
 //Referencia de asicnacion de Pines

 // RS  =RC0
 // R/W =RE0
 // E   =RE1
 // CS  =RC2
 // Res =RE2
//****************************************************************************

byte CONST Inicio[19] = {0x00 // INST: MODE CONTROL
                         0x32 // Set:  Dsp on,Master,cursor ON char BLink,Mode CHAR,Built-in ROM CHAR
                         0x01 // INST: CHARACTER PITCH (-1)
                         0x77 // Set:  8 bits vertical CHAR, 8 bits horizontal x CHR => 20 chr x 10 rngl
                         0x02 // INST: NUM CHAR (-1)
                         0x13 // Set:  20 char  horizontalmente
                         0x03 // INST: DISPLAY DUTY (-1)
                         0x4F // Set:  80 (valor de puntos verticalmente)
                         0x04 // INST: CURSOR POsITION (-1)
                         0x07 // Set:  en el bit 8 (vertical)
                         0x08 // INST: DSP START ADD LOWER
                         0x00 // Set:  posicion 0
                         0x09 // INST: DSP START ADD UPPER
                         0x00 // Set:  posicion 0
                         0x0A // INST: RAM ADD LOWER
                         0x00 // Set:  posicion 0
                         0x0B // INST: RAM ADD UPPER
                         0x00 // Set:  posicion 0
                         0x0C // INST: WRITE DATA TO RAM
                             };


byte CONST Grafico[1600] = {

 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
 0xFF,0xFF,0xFF,0xFF,0xBF,0xCF,0xE7,0xE7
 0xF0,0xFC,0xFC,0x3F,0x1F,0x8F,0xCF,0x7F
 0xBE,0xFF,0x3D,0xFE,0x7B,0xF9,0xF7,0xBD
 0x9F,0xB7,0xDB,0xE3,0xFE,0xFB,0x7D,0xFE
 0xEF,0x77,0xB7,0x3F,0x9E,0x7E,0xDC,0xFD
 0xB9,0xF8,0xF3,0xDB,0xAF,0xBF,0xDF,0xF1
 0xF8,0x7F,0xBE,0xFE,0xEF,0x77,0xB3,0x5F
 0xAE,0xBE,0xFD,0x7D,0xFA,0xFC,0x75,0xE7
 0xBF,0xDF,0xE7,0xF4,0xF6,0x78,0x3F,0x7F
 0x1F,0x0F,0xBB,0x7F,0xBE,0xFF,0x7D,0xFE
 0x7B,0xFD,0x37,0xF7,0xDC,0x6E,0x1F,0x10
 0x87,0xC3,0xA3,0x70,0xE8,0x3C,0x3B,0xB8
 0xDF,0x71,0xBE,0xE1,0xFD,0xC4,0x3B,0xEB
 0xDF,0xF7,0xDD,0xFB,0xF7,0x7B,0xBF,0xBE
 0xEF,0xB7,0xDB,0xBF,0xDF,0x7F,0xDE,0xFD
 0xDD,0xFE,0xFB,0xCD,0xDF,0xC3,0xE3,0xFB
 0xF8,0xFC,0x7F,0xBF,0x1F,0xCF,0xE7,0xBF
 0xDF,0x7F,0x0E,0xFE,0x3D,0xFE,0xFB,0xDE
 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
 0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
 0x00,0x00,0x00,0x00,0x00,0x00,0x00  0x00
 };
  

  

void main(void)
{
 output_low(pin_E0);                 // R/W apagar “RE0 a 0
 output_low(pin_C2);                 // CS apagar “RC2 a 0
 output_high(pin_C0);                // RS encendido “RC0 a 1 
byte Var1=0;

 //////////////////Tabla  de inicialización////////////////////////////////////

      for (Var1=0;Var1<19;Var1++)
            {
         output_high(pin_E1);         // E  encender “RE1 a 1
         OUTPUT_D(Inicio[Var1]);      // Digito unidades envio al puerto B
         output_toggle(PIN_E1);       // E Cambia el estado y apagalo “RE1 a 0
         delay_ms(1);                 // Retardo Para evitar Datos
         output_toggle(PIN_C0);       // RS cambia el estado del pin RC0 y lo apago
         output_toggle(PIN_E1);       // E Cambia el estado y enciendelo “RE1 a 1

 }
 
 output_low(pin_C0);                  // Apaga RS “RC0 a 0
 output_low(pin_E1);                  // Apaga E  “RE0 a 0  
 
 //////////////////Tabla  de Grafico////////////////////////////////////

for (Var1=0;Var1<1600;Var1++)
            {
         output_high(pin_E1);         // E  encender “RE1 a 1
         OUTPUT_D(Grafico[Var1]);     // Digito unidades envio al puerto B
         output_toggle(PIN_E1);       // E Cambia el estado y apagalo “RE1 a 0
         delay_ms(1);                 // Retardo Para evitar Datos
         output_toggle(PIN_E1);       // E Cambia el estado y enciendelo “RE1 a 1


 }


         }

Dejo unas imágenes del GLCD y si quieren el PCB se los paso o incluso si están en el DF que intuyo que así es se los puedo hacer ya hice el marco de serigrafia para grabarlos.



Ver el archivo adjunto 76038

Ver el archivo adjunto 76037


Utilizo el Bootloader del CCS para cargar el código al micro por eso llamo la librería "usb_bootloader.h"

Agradeseria si me pudieran pasar el esquema del backlight para modificar el PCB y pasarselos completo ya que en el de la imagen no lo tiene implementado pero le deje la opcion en el bloque de coneccion inferior de color verde.
 
Realmente como descanza uno al hacer trabajos en C, la diferencia es enoooormeee, gracias por el aportaso, ahora te cuento que daniel y yo hemos trabjaado en el bcklight y no lo hemos conseguido, el distribuidor no pasó el esquema, aunque dio un CI pero no lo encontramos por ningun lado, aqui esta el esquema original que en realidad es un simple CI SOIC http://www.infinitumpage.mx/GIOSYS/SP4423CN.pdf a mi me habia funcionado un esquema pero no llegue a probatlo en la glcd, en problema fue encontrar la bobina porque esta un poco rara, checa aca: http://www.nerdkits.com/videos/backlight/ si lo puedes hacer nos cuentas, la onda cuadrada la sacas del pic, Si baja la frecuencia tambien baja el brilllo.

Y sere curioso?, como funciona ese bootloader ?????
 
Última edición:
Puedes probar esta libreria haber si sirve porfa?, la modifique para CCS y no me tiro error
 

Adjuntos

  • LC7981.rar
    3 KB · Visitas: 6
Última edición:
Realmente como descanza uno al hacer trabajos en C, la diferencia es enoooormeee, gracias por el aportaso, ahora te cuento que daniel y yo hemos trabjaado en el bcklight y no lo hemos conseguido, el distribuidor no pasó el esquema, aunque dio un CI pero no lo encontramos por ningun lado, aqui esta el esquema original que en realidad es un simple CI SOIC http://www.infinitumpage.mx/GIOSYS/SP4423CN.pdf a mi me habia funcionado un esquema pero no llegue a probatlo en la glcd, en problema fue encontrar la bobina porque esta un poco rara, checa aca: http://www.nerdkits.com/videos/backlight/ si lo puedes hacer nos cuentas, la onda cuadrada la sacas del pic, Si baja la frecuencia tambien baja el brilllo.

Y sere curioso?, como funciona ese bootloader ?????

para el electroluminicente ocupa un 555 y un transformador es bastante facil
 
Hola a todos, nietzche estaba diseñando un bcklight pero no se me prendía el foco en la cabeza de como elevar el voltaje, la idea de anular la fuerza contra electromotriz en una bobina de Inductancia - Choque es genial ya que con los picos de tensión solo se necesita ajustar la frecuencia y controlamos el nivel de carga de los capacitores y con esto el voltaje, bueno hoy compro lo que me falta y armo el circuito para probarlo y espero por la noche me de tiempo de darle un rato al código y probar tu librería esta madrugada ya no me alcanzo jejeje, estuve analizando un poco el circuito del link que posteaste y creo que la inductancia es un choque con núcleo de ferrita busque una y la tenia en stock y lo demás lo encontré en AG.

Lo del Boodloader es bien simple solo tienes que cargar el firware que viene en los ejemplos del CCS declararlo en el código y asignar un pin con un push button para entrar en modo bootloader, esto es presionando primero el de modo y luego el master clear, cuando win lo detecta te pide un controlador que esta en la carpeta PICC\Drivers le das esa ruta y te lo instala como un COM virtual en mi caso COM6,
luego de eso en el CCS compiler le das en Tools/Serial port monitor/File y por ultimo Download Software y con esto manda el código al pic, lo bueno de esto es que con la declaración del bootloader CCS ajusta en automático la dirección de memoria de tu código para que no sobrescriba el firware.

Adjunto lo necesario para el Bootloader.

Saludos cordiales.
 

Adjuntos

  • Bootloader de CCS_V104.rar
    131.4 KB · Visitas: 14
Visual, gracias por el aporte

Muchas gracias, cada día se ve gente interesada por esta pantalla, pArece que vino un "lote chino" a vender aqui a Mexico y esta muy bien, respecto al alfabeto olinqui, enrealidad son 7 bytes que debemos de tener para cada caracter, porque? Porque debemos de enviar puntos por puntos para que asi se formen caracteres. Esto es datos de 5 x 7 bits, osea 5 bits de ancho por 7 de alto, fomando así 35 bits o lo que es lo mismo 7 bytes en total ya que en realidad no se ocupan tooodos los bits de un byte, lo que yo quiero preguntarle a Daniel es como usa el formato de cada caracter ? Empiezas arriba a la derecha? O en la segunda columna ? Ne explico? Para yo tambien hacerlos, ahora ya casi termino la rutina de la touch en asm, usa 4 canales c/d y una interrupcion externa, en la semana ya lo subo, saludos.

parece que así es, en muchos localitos he visto que las venden.

El formato de llenado es de arriba a la derecha, como dicen el el datasheet en la esquina superior izquierda del GLCD tenemos el bit 0 del 1er byte, es decir los bytes están invertidos. No se si esa era la duda

Lo del Boodloader es bien simple solo tienes que cargar el firware que viene en los ejemplos del CCS declararlo en el código y asignar un pin con un push button para entrar en modo bootloader, esto es presionando primero el de modo y luego el master clear, cuando win lo detecta te pide un controlador que esta en la carpeta PICC\Drivers le das esa ruta y te lo instala como un COM virtual en mi caso COM6,
luego de eso en el CCS compiler le das en Tools/Serial port monitor/File y por ultimo Download Software y con esto manda el código al pic, lo bueno de esto es que con la declaración del bootloader CCS ajusta en automático la dirección de memoria de tu código para que no sobrescriba el firware

Definitivamente tengo que actualizarme en este rollo del C jaja... no he podido experimentar con el backlight, espero si, en esta semana igualmente yo consiga el material para hecharlo a andar
 
perfecto, les cuento que mi cuate me dio el circuito del backlight, que le dije a ustes, y aleluya, prende, fijense que parece que entrega mucha corriente, estaria bien un diseÑo con un diodo schottky o algo que limite el amperaje bajo, porque me dio un buen toquesote. respecto a las letras daniel voy a aportar, y tambien una minirutina para la touch, ahora que no me funciono mi tesis, la voy a rediseÑar toda, la duda que tengo es a visual: conectaste una resistencia al pin del glcd para que te de la interrupcion cuando se toque ???
 
Hola nietzche donde conseguiste la inductancia por que lo acabo de terminar pero no trabaja pienso que puede ser eso, puedes poner una foto del circuito armado?

Gracias y saludos.
 
Para leer el touch nada mas ocupe una resistencia pullup a la terminal y- y con el adc tomas el valor de esta coordenada . En mi caso no era necesario ocupar interrupciones solo con prueba de bit fue suficiente . Tienes que hacer combinaciones entre los bits de pic para realizar la lectura de y,x no es necesasrio ocupar mas componentes solo con el pic 16f877 o cualquier otro q tenga adc lo puedes hacer..


Alguien sabe si el color azul del electroluminicente es el correcto por q si le aumento la frecuencia me cambia a blanco..
 

Adjuntos

  • EL.rar
    636.8 KB · Visitas: 27
Alguien sabe si el color azul del electroluminicente es el correcto por q si le aumento la frecuencia me cambia a blanco.

Cuando expermenté con el electrolumincente me dió un color blanco, y si bajaba la frecuencia solamente se iba bajando su intensidad. Lo extraño es que en los demos el electroluminicente enciende de color amarillo regular
 
visual una resistencia a Y- ?, solamente?, para que sirve esa resistencia ?.

Mi idea es que cuando el usuario toque la pantalla el programa se interrumpa, porque puede estar haciendo otras cosas el micro o simplemente este "durmiendo". Entonces en tu conexion siempre esta escaneando la GLCD?.

En la foto adjunta se muestra cuando el micro esta en espera a que la pantalla sea tocada.

La bobina la consigues enfrente del 24 al fondo, luego subo las fotos porque no tengo conmigo los mosfets.
 

Adjuntos

  • touch.JPG
    touch.JPG
    23.9 KB · Visitas: 12
Última edición:
Para leer el touch nada mas ocupe una resistencia pullup a la terminal y- y con el adc tomas el valor de esta coordenada . En mi caso no era necesario ocupar interrupciones solo con prueba de bit fue suficiente

¿Como que prueba de bit?... para conseguir generar la interrupción se me ocurre utilizar un comparador de voltaje cuya salida sea conectada al PIC. Habría que ver lo de la referencia de voltaje adecuada para que cada que se toque el touch el comparador conmute su salida y genere la int
 
Lo olvidaba, con respecto al código del amigo Olinqui, me parece que se puede optimizar más la parte donde aparecen los 0x00's, supongo que es para el borrado del GLCD, en ves de mandar toda esa tabla se puede implementar un ciclo "For" para el borrado no?...

Muy bien visual, podre conectar el bit con el que haces la btfsc y ponerlo simultaneamente en RB0 que es la interrupcion externa

Adelantandome a Visual, supongo que si se puede, pero ya no será necesario el "testeo" por medio de btfsc, la simple interrupción invocará al código de lectura del touch
 
Atrás
Arriba