Autor Tema: Libreria para GLCD 160x80 pixeles, modelo LJ41-00192B marca Samsung en CCS  (Leído 18897 veces)

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

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Hola amigos del foro, en esta ocasión comparto con ustedes una librería de mi propia creación, esta maneja un GLCD de 160x80 pixeles marca samsung, con controladores LC7981 marca Sanyo, es un GLCD excelente!, lo compre en México, en Republica del Salvador, para los que conozcan.

Les platico un poco acerca de este magnífico GLCD:

* Modo alfanumérico, como si fuera un LCD de 26x10 caracteres, un LCD tamaño monstruo!
* Modo gráfico, con 1600 pixeles, un tamaño de pantalla de 160 pixeles de ancho, por 80 pixeles de alto.
* Backlight electroluminiscente, este detalle no me agrado mucho, si bien la iluminación EL se ve mucho mejor, también es cierto que no es nada sencillo conectarle un circuito de control a la luz de fondo, aún no he conseguido el dichoso circuito que propone el comerciante de estos GLCD, así que agradecería si alguno pudiera hecharme un cable sobre este tema.
* Pantalla touchscreen resistiva de 4 hilos, desgraciadamente no he podido hechar a andar del todo bien este touch, si bien ya lo pude utilizar, lo cierto es que no he podido calibrarlo, por lo que me dibuja donde quiere. También agradecería muchísimo si alguien fuera tan amable de guiarme por el buen camino del touchscreen.

El datasheet de este GLCD lo pueden hallar en: Datasheet GLCD 160x80

Y en la página del comerciante, la cual es: http://www.infinitumpage.mx/GIOSYS/pagina2680.html pueden ver más información respecto al GLCD, el touchscreen y el backlight

Bueno, ahora pasemos a la librería.

Esta librería la he escrito yo mismo, en CCS, ya que tuve mucho tiempo parado mi GLCD por falta de una, y me di manos a la obra a escribirla, no es la mejor libreria que encontrarán, pero puede serles muy útil, la misma sirve para:

* Impresión de caracteres en modo alfanumerico al mismo estilo de putc("hola mundo"); para escribir en los LCD normales.
* Funciones para dibujar circulos, rectángulos, pixeles, barras y texto en modo gráfico, para estas funciones me apoye en la libreria ya existente para los GLCD de 128x64 que son más comunes.
* Dibujar imagenes completas de 160x80 pixeles, pasadas a monocromático y convertidas en código con el programa Image2Code, busquenlo por que es muy útil.
* Cuenta con un buffer interno que se puede activar en los PIC18, que son los que soportan arreglos de datos muy grandes, en este caso de 1600, y desactivar en el caso de PICs de gama media/baja, con este buffer se puede dibujar internamente a mayor velocidad y al final volcar su contenido en el GLCD para impresiones rápidas.

En fin, a grandes rasgos es lo que hace, a continuación les pongo un video que hice de la misma en funcionamiento:


Les anexo la libreria llamada glcd_160x80.h y el archivo de prueba, llamada main GLCD giosys.c, el cuál está hecho para un PIC16F877A, pero es facilmente transportable a otro pic, todas las funciones de usuario de la librería se encuentran detalladamente explicadas. Saludos y espero que le sirva a alguien.

Enlace rapidshare para descarga de libreria y programa de prueba: Libreria glcd_160x80 y programa de prueba
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Libreria para GLCD 160x80 pixeles, modelo LJ41-00192B marca Samsung en CCS
« Respuesta #1 en: 20 de Julio de 2012, 01:40:32 »
Bonito trabajo te ha quedado, gracias por compartirla.

Desconectado nietzche

  • PIC10
  • *
  • Mensajes: 14
Re: Libreria para GLCD 160x80 pixeles, modelo LJ41-00192B marca Samsung en CCS
« Respuesta #2 en: 28 de Julio de 2012, 03:55:32 »
Amigo como le podria hacer para conectar el touch, osea si se donde van las patillas pero quiero que me responda al presionar la pantalla y me genere una interrupcion al tocarla por el pin INT0, la necesito usando solo los 4 pines A/D, alguna idea ??

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Libreria para GLCD 160x80 pixeles, modelo LJ41-00192B marca Samsung en CCS
« Respuesta #3 en: 28 de Julio de 2012, 06:11:46 »
Te ha quedado muy bien!  ((:-))

Saludos!

Adjunto tu libreria al post por si se llega a caer el enlace.

Desconectado Olinqui

  • PIC10
  • *
  • Mensajes: 19
Re: Libreria para GLCD 160x80 pixeles, modelo LJ41-00192B marca Samsung en CCS
« Respuesta #4 en: 28 de Julio de 2012, 20:08:04 »
Hola amigo falflores excelente aporte yo igual estaba escribiendo una librería para este dispositivo pero es genial que te tomaras el tiempo de escribirla y la gentileza de compartirla aportaso amigo.

Saludos cordiales.
MENTE SOBRE MATERIA

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Re: Libreria para GLCD 160x80 pixeles, modelo LJ41-00192B marca Samsung en CCS
« Respuesta #5 en: 30 de Julio de 2012, 02:00:14 »
Amigo como le podria hacer para conectar el touch, osea si se donde van las patillas pero quiero que me responda al presionar la pantalla y me genere una interrupcion al tocarla por el pin INT0, la necesito usando solo los 4 pines A/D, alguna idea ??

Si, de hecho ya lo hice con la ayuda de un amigo del foro, ahora no tengo acceso a mis archivos, pero mañana posteo algo respecto a eso. Saludos!
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com

Desconectado asd hernandez

  • PIC10
  • *
  • Mensajes: 3
Re: Libreria para GLCD 160x80 pixeles, modelo LJ41-00192B marca Samsung en CCS
« Respuesta #6 en: 30 de Julio de 2012, 17:32:10 »
Hola amigo falflores gracias por el aporte de la libreria, quisiera saber si podrias dar un tip de image2code ya que las imagenes de 20X80 no se visualizan muy claras en la glcd, en tu demo la imagen del robot  se ve muy clara y checando el programa se que es de 20x80=1600 coincide con las imagenes que trato de convertir.
gracias de antemano

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Re: Libreria para GLCD 160x80 pixeles, modelo LJ41-00192B marca Samsung en CCS
« Respuesta #7 en: 30 de Julio de 2012, 19:53:15 »
Hola amigo falflores gracias por el aporte de la libreria, quisiera saber si podrias dar un tip de image2code ya que las imagenes de 20X80 no se visualizan muy claras en la glcd, en tu demo la imagen del robot  se ve muy clara y checando el programa se que es de 20x80=1600 coincide con las imagenes que trato de convertir.
gracias de antemano

No comprendo muy bien la idea en tu mensaje, una imagen cargada en el GLCD de 160x80 pixeles o se ve o no se ve, punto. Si los datos que componen la imagen están en el orden correcto, la imagen se ve bien, si no, simplemente la imagen se deforma, así que no comprendo a que te refieres cuando dices que la imagen no se ve muy clara.

La configuración que debe tener el image2code para generar el código en el orden correcto, según la libreria es como está en la imagen:


Espero que esta información te sirva. Saludos!
« Última modificación: 30 de Julio de 2012, 19:55:45 por falflores »
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com

Desconectado asd hernandez

  • PIC10
  • *
  • Mensajes: 3
Re: Libreria para GLCD 160x80 pixeles, modelo LJ41-00192B marca Samsung en CCS
« Respuesta #8 en: 30 de Julio de 2012, 20:02:27 »
muchas gracias

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Re: Libreria para GLCD 160x80 pixeles, modelo LJ41-00192B marca Samsung en CCS
« Respuesta #9 en: 30 de Julio de 2012, 20:16:31 »
A todos los que tengan touch en este GLCD (que en general son todos XD), les informo que ya lo tengo calibrado y funcionando de 10!, solo hay un detalle, como me base en un código que el usuario Duende Azul escribió para un GLCD de 128x64, solamente puedo escribir en esa area de trabajo, los links correspondientes están más abajo. Así que agradecería profundamente si alguno de los que le heche un ojito al siguiente código me puediera ayudar a descifrar la parte donde hace la conversión de coordenadas, para poder adaptarla a este tamaño de GLCD.

Amigo como le podria hacer para conectar el touch, osea si se donde van las patillas pero quiero que me responda al presionar la pantalla y me genere una interrupcion al tocarla por el pin INT0, la necesito usando solo los 4 pines A/D, alguna idea ??

El siguiente código lo modifiqué del código del amigo Duende azul, muchas gracias a el, en un post que se encuentra aquí: http://www.todopic.com.ar/foros/index.php?topic=20029.0

En el mismo, Duende Azul comparte con nosotros su código para manejar el touchscreen de una GLCD de 128x64 pixeles, el mismo código lo adapté a mis necesidades, la imagen del teclado la hice para mostrarse en un GLCD de 160x80 pero al mismo tamaño de 128x64, compilé el código y funcionó estupendamente, lo único malo es que el touchscreen solamente funciona bien dentro del área de 128x64, fuera de ella no funciona. Ya traté de modificar el código para abarcar los 160x80, pero no basta con extender el tamaño, si no que hay que modificar algo en las fórmulas.

Te paso el código que tengo hasta ahora, para que pruebes en tu GLCD con la misma libreria que compartí:

Código: [Seleccionar]
/*****************************************************************
** Conexion del touchscreen resistivo de 4 hilos
** X+ = RA0/AN0
** Y+ = RA1/AN1
** X- = RA2/AN2
** Y- = RA3/AN3
*****************************************************************/

#include<16F877A.h>
#device adc=10
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG
#use delay(clock=20MHz)

#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use fast_io(D)
#use fast_io(E)

#include<glcd_160x80.h>

void configure()
{
set_tris_A(0x00);
set_tris_B(0x00);
//set_tris_C(0x00);
set_tris_D(0x00);
output_A(0x00);
output_B(0x00);
//output_C(0x00);
output_D(0x00);

setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
   setup_adc(ADC_CLOCK_INTERNAL);
}

int16 tmp;
int16 y_min,y_max,x_min,x_max;
int16 y_loc,x_loc,y_rng,x_rng;
int1 flag_boton=0;
char boton[2];

const int8 imagen[80][20] = { // imagen del teclado adaptada
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00},
{0xF8,0xFF,0x07,0xFF,0xFF,0xE0,0xFF,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00},
{0x04,0x00,0x8C,0x00,0x80,0x11,0x00,0x30,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00},
{0x02,0x0C,0x58,0xC0,0x03,0x0B,0x78,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x0E,0x58,0x60,0x03,0x0B,0xC0,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x0F,0x58,0x00,0x06,0x0B,0xC0,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x0C,0x58,0x00,0x03,0x0B,0x78,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x0C,0x58,0x80,0x03,0x0B,0xC0,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x0C,0x58,0x80,0x01,0x0B,0xC0,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x0C,0x58,0xC0,0x00,0x0B,0xC0,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x0C,0x58,0xC0,0x00,0x0B,0xC0,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x0C,0x58,0xE0,0x07,0x0B,0x78,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x00,0x58,0x00,0x00,0x0B,0x00,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x04,0x00,0x9C,0x00,0x80,0x13,0x00,0x70,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0xF8,0xFF,0x0F,0xFF,0xFF,0xE1,0xFF,0x3F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0xF0,0xFF,0x07,0xFE,0xFF,0xC0,0xFF,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0xF8,0xFF,0x07,0xFF,0xFF,0xE0,0xFF,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x04,0x00,0x8C,0x00,0x80,0x11,0x00,0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x06,0x58,0xE0,0x03,0x0B,0x70,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x03,0x58,0x60,0x00,0x0B,0x18,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x03,0x58,0x60,0x00,0x0B,0x0C,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x03,0x58,0xE0,0x03,0x0B,0x7C,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x82,0x0D,0x58,0x00,0x06,0x0B,0xCC,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x82,0x0D,0x58,0x00,0x06,0x0B,0xCC,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x82,0x1F,0x58,0x00,0x06,0x0B,0xCC,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x0C,0x58,0x00,0x06,0x0B,0xCC,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x0C,0x58,0xE0,0x03,0x0B,0x78,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x00,0x58,0x00,0x00,0x0B,0x00,0x60,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00},
{0x04,0x00,0x9C,0x00,0x80,0x13,0x00,0x70,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00},
{0xF8,0xFF,0x0F,0xFF,0xFF,0xE1,0xFF,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00},
{0xF0,0xFF,0x07,0xFE,0xFF,0xC0,0xFF,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00},
{0xF8,0xFF,0x07,0xFF,0xFF,0xE0,0xFF,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x04,0x00,0x8C,0x00,0x80,0x11,0x00,0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x3F,0x58,0xC0,0x03,0x0B,0x78,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x1B,0x58,0x60,0x06,0x0B,0xCC,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x18,0x58,0x60,0x06,0x0B,0xCC,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x18,0x58,0xE0,0x07,0x0B,0xCC,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x18,0x58,0xE0,0x07,0x0B,0xF8,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x0C,0x58,0x60,0x06,0x0B,0xC0,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x0C,0x58,0x60,0x06,0x0B,0xE0,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x0C,0x58,0x60,0x06,0x0B,0x70,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x0C,0x58,0xC0,0x03,0x0B,0x38,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x00,0x58,0x00,0x00,0x0B,0x00,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x04,0x00,0x9C,0x00,0x80,0x13,0x00,0x70,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0xF8,0xFF,0x0F,0xFF,0xFF,0xE1,0xFF,0x3F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0xF0,0xFF,0x07,0xFE,0xFF,0xC0,0xFF,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0xF8,0xFF,0x07,0xFF,0xFF,0xFF,0xFF,0x1F,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x04,0x00,0x8C,0x00,0x00,0x00,0x00,0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x1E,0x58,0x00,0x9F,0x81,0x0F,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x1E,0x58,0x80,0x81,0x81,0x19,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x33,0x58,0x80,0x81,0x81,0x19,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x33,0x58,0x80,0x81,0x81,0x19,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x33,0x58,0x80,0x81,0x81,0x0F,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x33,0x58,0x80,0x81,0x81,0x0D,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x33,0x58,0x80,0x81,0x81,0x0D,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x1E,0x58,0x80,0x81,0x81,0x19,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x1E,0x58,0x00,0x9F,0x9F,0x19,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x02,0x00,0x58,0x00,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0x04,0x00,0x9C,0x00,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00},
{0xF8,0xFF,0x0F,0xFF,0xFF,0xFF,0xFF,0x3F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00},
{0xF0,0xFF,0x07,0xFE,0xFF,0xFF,0xFF,0x1F,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
};

/****************************************************************
*****   Rutina para mostrar la imagen del teclado             ***
****************************************************************/
void put_image() // función para mostrar la imagen declara en el GLCD
{
glcd_go_address(0);
glcd_command_write();
for(i=0;i<80;i++)
{
for(j=0;j<20;j++) glcd_send_byte(imagen[i][j]);
}
}

/**************************************************
*******  Lee la coordenada y   ********************
**************************************************/
int16 y_pos(void)
{
   int16 result;
   set_tris_a(0x04);
   output_a(0x0A);      //Energize X plate, RA1 and RA3
   set_adc_channel(2);   //Set AN2 as input
   delay_us(10);
   result = read_adc(); //get Y axis value
   if (result != 0)
   {
      set_tris_a(0x01);
      set_adc_channel(0);
      delay_us(10);
      tmp = (1023 - read_adc());
      result = (result + tmp) >> 1;  
   }
   Return(result);
}

/**************************************************
*******  Lee la coordenada x   ********************
**************************************************/
int16 x_pos(void)
{
   int16 result;
   set_tris_a(0x02);
   output_a(0x05);      //Energize X plate, RA1 and RA3
   set_adc_channel(1);   //Set AN2 as input
   delay_us(10);
   result = read_adc(); //get Y axis value
   if (result != 0)
   {
      set_tris_a(0x08);
      set_adc_channel(3);
      delay_us(10);
      tmp = (1023 - read_adc());
      result = (result + tmp) >> 1;  
   }  
   Return(result);
}

/**************************************************
***  Funcion para determinar si la pantalla     ***
***  ha sido pulsada o no...                    ***
**************************************************/
int1 touch(void)
{
   int1 resp;
   int16 tmp,ty,tx;
   resp=false;
   ty = y_pos();
   if (ty > 0)
   {
      delay_ms(30);
      ty=y_pos();
      tx=x_pos();
      if (ty > y_min)
      {
         if(ty < y_max)
         {
            resp = true;
            tmp=(tx - x_min) << 7;

            x_loc =(int16)(tmp/x_rng);
            if(x_loc > 127)  x_loc = 127;
            tmp = (ty - y_min) << 6;
            y_loc = (int16)(tmp/y_rng);
            if(y_loc > 63)   y_loc = 63;
         }
      }
   }
   return(resp);
}

/*************************************************************
*****  Rutina para calibrar la pantalla                *******
*************************************************************/
void calibracion()
{
   int1 sw;
   sw=1;
   while(x_pos()==0)
   {
      glcd_line(1,1,10,1,sw);
      glcd_line(1,1,1,10,sw);
      glcd_rect(1,1,5,5,YES,SW);
      delay_ms(150);
      sw=!sw;
   }
   delay_ms(30);
   y_min = y_pos();
   x_min = x_pos();
   glcd_fill_screen(OFF);
   while(x_pos() > 0);
   delay_ms(30);
   while(x_pos()==0)
   {
      glcd_line(128,64,128,54,sw);
      glcd_line(128,64,118,64,sw);
      glcd_rect(123,59,128,64,YES,SW);
      delay_ms(150);
      sw=!sw;
   }
   delay_ms(30);
   y_max = y_pos();
   x_max = x_pos();
   y_rng = y_max - y_min;
   x_rng = x_max - x_min;
   while(x_pos() > 0);
   glcd_fill_screen(OFF);
}

/*****************************************************************
******  Determina sobre que boton se ha pulsado            ********
*****************************************************************/
int8 boton_act(void)
{
int8 button;
if(((x_loc>2)&&(y_loc>2))&((x_loc<21)&&(y_loc<16))) button = '1';
if(((x_loc>23)&&(y_loc>2))&((x_loc<42)&&(y_loc<16))) button = '2';
if(((x_loc>44)&&(y_loc>2))&((x_loc<63)&&(y_loc<16))) button = '3';
if(((x_loc>2)&&(y_loc>18))&((x_loc<21)&&(y_loc<32))) button = '4';
if(((x_loc>23)&&(y_loc>18))&((x_loc<42)&&(y_loc<32))) button = '5';
if(((x_loc>44)&&(y_loc>18))&((x_loc<63)&&(y_loc<32))) button = '6';
if(((x_loc>2)&&(y_loc>34))&((x_loc<21)&&(y_loc<48))) button = '7';
if(((x_loc>23)&&(y_loc>34))&((x_loc<42)&&(y_loc<48))) button = '8';
if(((x_loc>44)&&(y_loc>34))&((x_loc<63)&&(y_loc<48))) button = '9';
if(((x_loc>2)&&(y_loc>50))&((x_loc<21)&&(y_loc<64))) button = '0';
if(((x_loc>23)&&(y_loc>50))&((x_loc<63)&&(y_loc<64))) button = 'X';
  
return(button);
}

void main()
{
configure();
glcd_init(GRAPHIC);
calibracion();   //Calibra la pantalla
put_image();     //muestra el teclado
//glcd_init(CHARACTER);

while(TRUE)
{
/*
// Para ver los valores calibrados y sin calibrar, requiere el GLCD en
// modo alfanumérico, comentar glcd_init(GRAPHIC) y put_image() y
// descomentar glcd_init(CHARATER) arriba del while(TRUE)
temp=touch();
printf(glcd_putc,"\f\n\nSin calibrar: (%lu,%lu)\n",x_pos(),y_pos());
printf(glcd_putc,"Calibrado:    (%lu,%lu)\n",x_loc,y_loc);
delay_ms(50);
*/

//------------------------------------------------------------------

/*
// dibujar en el GLCD
if(touch()==true)
{
glcd_pixel(x_loc,y_loc,ON);
}
*/

//------------------------------------------------------------------------

// teclado en pantalla con numeros del 1 al 0 y clear
// el boton 1 prende un LED conectado en PIN_D0
// el boton 2 apaga el LED conectado en PIN_D0
if(touch()==true)
{
boton=boton_act();
boton[1]='\0';
if(boton[0]=='1'&&flag_boton==0)
{
flag_boton=1;
output_high(PIN_D0);
}
if(boton[0]!='1'&&flag_boton==1) flag_boton=0;

if(boton[0]=='2'&&flag_boton==0)
{
flag_boton=1;
output_low(PIN_D0);
}
if(boton[0]!='2'&&flag_boton==1) flag_boton=0;


if (boton[0]=='X')
glcd_rect(91,9,100,22,YES,OFF); //Borra el numero mostrado

if ((boton[0]>='0')&&(boton[0]<='9'))
{
glcd_rect(91,9,100,22,YES,OFF);  //Borra el numero mostrado antes de
glcd_text57(91,9,boton,2,ON); //escribir uno nuevo..    
}
}
}
}

Con este código puedes probar el touch, fijate en las conexiones del mismo, si no funciona o funciona mal, puede ser por la conexión, copia este código y anexa la libreria, debería funcinar.

En el código hay tres partes distintas a probar, tal como está comentado, genera el teclado en pantalla, otra forma de probarlo es comentar antes del while(TRUE) la función put_image() para que no ponga el teclado, y descomentar la parte para dibujar en el GLCD, o si no, hacer lo que dice en el codigo para ver las coordenadas del touchscreen en modo alfanumérico.

Si te funciona, a ver si me puedes ayudar a modificarlo para que abarque los 160x80 de nuestros GLCD. Espero te sirva. Saludos!!


« Última modificación: 31 de Julio de 2012, 17:21:12 por falflores »
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Re: Libreria para GLCD 160x80 pixeles, modelo LJ41-00192B marca Samsung en CCS
« Respuesta #10 en: 30 de Julio de 2012, 20:31:26 »
Hola amigo falflores excelente aporte yo igual estaba escribiendo una librería para este dispositivo pero es genial que te tomaras el tiempo de escribirla y la gentileza de compartirla aportaso amigo.

Saludos cordiales.

Bonito trabajo te ha quedado, gracias por compartirla.

Muchas gracias por las buenas palabras!

Te ha quedado muy bien!  ((:-))

Saludos!

Adjunto tu libreria al post por si se llega a caer el enlace.

Muchas gracias por tomarte la molestia!
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com

Desconectado nietzche

  • PIC10
  • *
  • Mensajes: 14
Re: Libreria para GLCD 160x80 pixeles, modelo LJ41-00192B marca Samsung en CCS
« Respuesta #11 en: 31 de Julio de 2012, 01:55:30 »

Si te funciona, a ver si me puedes ayudar a modificarlo para que abarque los 160x80 de nuestros GLCD. Espero te sirva. Saludos!!




Gracias muchas gracias por el codigo, pero ahora ando bajo de recursos y estoy con el PIC18F4550 y no para comprar un 16F,  lo adapte cambiando toda la cabezera y usando mi reloj interno de  4Mhz, y me sale un error:
Expecting LVALUE such as a variable name or *expression
Hay un prblema con la variable: boton pero no se cual es.

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Re: Libreria para GLCD 160x80 pixeles, modelo LJ41-00192B marca Samsung en CCS
« Respuesta #12 en: 31 de Julio de 2012, 04:16:12 »
Gracias muchas gracias por el codigo, pero ahora ando bajo de recursos y estoy con el PIC18F4550 y no para comprar un 16F,  lo adapte cambiando toda la cabezera y usando mi reloj interno de  4Mhz, y me sale un error:
Expecting LVALUE such as a variable name or *expression
Hay un prblema con la variable: boton pero no se cual es.

PARA LOS QUE QUIERAN MIGRARLO A UN 18F4550

Ya lo revise, cambie todo lo necesario para que trabaje con el 18F4550, lo compilé y funciona. Esto es lo que hay que modificar:

Con oscilador interno a 8 MHz
Código: [Seleccionar]
#include<18F4550.h>
#device adc=10
#fuses INTRC,MCLR,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NODEBUG,NOVREGEN,
#use delay(clock=8MHz)

y dentro del main, llamas a la función:

Código: [Seleccionar]
setup_oscillator(OSC_8MHZ|OSC_INTRC|OSC_PLL_OFF);
y para configurar el ADC es:

Código: [Seleccionar]
setup_adc_ports(AN0_TO_AN3);en lugar de setup_adc_ports(AN0_AN1_AN2_AN3_AN4);

y listo! con eso me funciona a mi. Todo lo demás es exactamente igual. Espero te sirva.
« Última modificación: 17 de Agosto de 2012, 15:36:53 por falflores »
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com

Desconectado nietzche

  • PIC10
  • *
  • Mensajes: 14
Re: Libreria para GLCD 160x80 pixeles, modelo LJ41-00192B marca Samsung en CCS
« Respuesta #13 en: 31 de Julio de 2012, 16:17:52 »
Hola, fijate que mi error es el de la imagen, no se si sea yo o que es lo que pasa, en la parte de configuracion de    setup_adc_ports(AN0_AN1_AN2_AN3_AN4); la cambie a setup_adc_ports(AN0_TO_AN4), y voy a ver bien el codigo para ayudar a adaptarlo a la glcd, gracias.

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Re: Libreria para GLCD 160x80 pixeles, modelo LJ41-00192B marca Samsung en CCS
« Respuesta #14 en: 31 de Julio de 2012, 17:10:29 »
Cierto, se me pasaba que el setup_adc_ports también va distinto, aunque no es necesario ponerlo hasta AN4, solamente hasta AN3, ya lo modifiqué en el mensaje anterior para que si alguien más lo ve, no se confunda.

A mi me pasa algo muy curioso con este codigo en CCS, resulta que al declarar una arreglo en la memoria de programa con const, cuando se genera un error, el compilador me lo marca en donde se le da la gana, lo que hago yo cuando hay un error y no se donde está, es borrar temporalmente el arreglo de datos de la imagen, lo compilo, obviamente me tira el error de variable no declarada, pero el error original ya me lo marca donde debe ser, yo pienso que ese es el caso, por que el error que te da no se ve que tenga relación con esa línea de código, haz esto y me cuentas si pudiste identificar el error.
« Última modificación: 31 de Julio de 2012, 17:15:29 por falflores »
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com