TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Suky en 02 de Marzo de 2010, 00:57:15

Título: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 02 de Marzo de 2010, 00:57:15
En un proyecto que desarrollo necesito implementar un menú en una pantalla GLCD 128x64, buscando por la red encontré este excelente proyecto (http://www.reifel.org/PICUserInterface/) en el que utilizan un display Nokia 6100. A partir de esa librería, me dedique a entender como trabaja y tomando su estructura re-escribí la librería para un GLCD monocromático  :(  :D :D

Para crear un elemento del submenú tenemos la siguiente estructura:
Código: [Seleccionar]
typedef struct{
char TipoMenu;
rom char *TextoMenu;
rom char *PtrMenuSeleccion;
}MENU;

Un ejemplo en la creación de un Submenú:
Creamos Menú principal:
       
Código: [Seleccionar]
MENU MenuPrincipal[]={
{MENU_MAIN,"",vInicializaSistemaDisplay},
{MENU_SUBMENU,"Sub Menu",SubMenu1},
{MENU_COMANDO,"Control Motor",vControlMotor},
{MENU_COMANDO,"Backlight",vControlBack},
{MENU_COMANDO,"About",vMuestraAbout},
{MENU_FIN,"",0}
};

El programa está controlado por medio de punteros a la memoria de programa. Por ejemplo en el bucle del programa principal (main), ejecuta una función (vEjecutaFuncion(Evento)) apuntada por el puntero *FuncionActualEjecucion, el cual direcciona las distintas funciones que trabajan con los eventos en las distintas pantallas presentadas en el GLCD.
Por ejemplo al dibujar la pantalla principal cargamos en puntero la función vEventosPantallaPrincipal, la cual atenderá los eventos, en este caso solo se espera a que se pulse el botón inferior derecho para acceder al submenú.

(http://img130.imageshack.us/img130/3568/imagen0230.jpg)

Al clickear en menú ejecutamos la función vSeleccionMenu(MenuPrincipal,1) que dibujará el Menú seleccionado y volverá a direccionar el puntero a la función vEventosSubMenu, la cual atiende los eventos que ocurran en el menú dibujado en pantalla. Es mas o menos un resumen de cómo trabaja el código.
(http://img714.imageshack.us/img714/5725/imagen0229.jpg)

Dentro de las opciones de menús del tipo comando tenemos:

Visualizar mensaje simple:
(http://img130.imageshack.us/img130/3950/imagen0240.jpg)

Visualizar opción a ejecutar:
(http://img96.imageshack.us/img96/9774/imagen0237y.jpg)

Visualizar deslizador para modificar una variable:
(http://img96.imageshack.us/img96/222/imagen0232.jpg)

Visualizar una variable:
(http://img690.imageshack.us/img690/3632/imagen0242.jpg)

Vídeo de muestra: (El video no muestra la ultima opción de menú, lo desarrolle después  :mrgreen: )

Se adjunta proyecto con el ejemplo mostrado. Al ser flexible, se pueden ir agregando otras opciones de menús.


Saludos!
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Felixls en 02 de Marzo de 2010, 01:03:34
Excelente Suky!   :-/ :-/

Una pregunta, si o si necesita 1k de ram, o no?
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 02 de Marzo de 2010, 01:05:30
Excelente Suky!   :-/ :-/

Una pregunta, si o si necesita 1k de ram, o no?

Es para manejo de la pantalla, más velocidad en la presentación. Si se escribe en la pantalla, pixel por pixel, se puede hacer bastante lento  :?
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Nocturno en 02 de Marzo de 2010, 02:00:37
Muy útil y sencillo. Cada vez que necesito menús me pongo a escribirlos desde cero, así que esta librería seguro que es un magnífico punto de partida.
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: migsantiago en 02 de Marzo de 2010, 13:45:30
Está interesante la librería.

Veo que hay faltas de ortografía en las pantallas, ¿no acepta código ascii completo la librería?
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 02 de Marzo de 2010, 14:29:50
Muy útil y sencillo. Cada vez que necesito menús me pongo a escribirlos desde cero, así que esta librería seguro que es un magnífico punto de partida.

Exactamente eso, un punto de partida donde se puede ir haciendo muchas mas cosas.

Veo que hay faltas de ortografía en las pantallas, ¿no acepta código ascii completo la librería?

 :oops:  :D :D jeje! En realidad los caracteres está guardado en una tabla en memoria de programa, y solo están desde el Espacio hasta ~  :mrgreen: Con un poco de trabajo se puede implementar  ;-)

Saludos!
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: micro_cadaver en 05 de Marzo de 2010, 14:22:49
gracias Suky, andaba necesitando algo como esto para no hacer desde cero los menus de algunos proyectos.
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: manutek en 16 de Julio de 2010, 03:17:52
Gracias suky ,y como siempre exelente calidad la tuya¡¡¡
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 04 de Enero de 2011, 00:28:37
Bueno, ahora que tengo un TFT con Touch Screen estoy actualizando, en realidad migrando y mejorando la librería  :rolleyes: Algunas imagenes:

(http://img403.imageshack.us/img403/3394/imagen1100k.jpg)(http://img152.imageshack.us/img152/5886/imagen1101.jpg)
(http://img340.imageshack.us/img340/6332/imagen1105j.jpg)(http://img337.imageshack.us/img337/4314/imagen1103b.jpg)
(http://img375.imageshack.us/img375/5779/imagen1104.jpg)

Con 2 opciones de visualización de items, iconos o botones   :-)

Saludos!  

PD:Pero todavía no he implementado los acentos  :oops:  :D :D :D :D
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Nocturno en 04 de Enero de 2011, 02:49:13
¡Chulísimo, Suky!.
¿Utilizas las librerías de gráficos de Microchip o las has creado desde cero?

P.D.: ahora entiendo tu interés por las truetype  :mrgreen:
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 04 de Enero de 2011, 09:59:11
¡Chulísimo, Suky!.
¿Utilizas las librerías de gráficos de Microchip o las has creado desde cero?

P.D.: ahora entiendo tu interés por las truetype  :mrgreen:

Gracias!
Es todo desde cero porque estoy utilizando el mbed con LPC1768  :) Gracias por la info de las truetype, tengo que ver como utilizarlas así agrego más fuentes.


Saludos!
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Cryn en 05 de Enero de 2011, 01:28:41
CAPO!

excelente suky, que gran trabajo, como siempre luciendote!

 :-/ :-/
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: ppyote en 05 de Enero de 2011, 19:35:16
joder  Suky desde luego... solo falta ya crear el transbordador espacial, seleccionar a 7 u 8 pilotos... y enviarlos a marte...
Muy buen trabajo y aporte... lastima que no tenga ninguna pantallita de esas tan monas jejejjee me tocara conformarme aun con el lcd ...
un saludo
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 05 de Enero de 2011, 20:00:43
Muchas gracias a todos!! Por aquí un video donde se muestra algo, en realidad el fin del vídeo es mostrar el juego Simons Says  :mrgreen:



Medio feo, pero bueno  :oops:


Saludos!

Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: aripod en 05 de Julio de 2011, 14:38:07
Excelente libreria!!
Estoy tratando de usar solamente la parte del GLCD.
Puse en mi proyecto DriverGLCD.c y DriverGLCD.h. Llamo a la funcion vGLCD_Iniciar, la parte de los TRIS y valores de CS1, CS2, RST, E , RW y DI lo hace a la prefeccion. El problema esta al momento de llamar a vGLCD_Escritura_Byte. El lado lo pasa bien, pero en la variable Data la que se la asigna al puerto D para ir a los D0...D7 esta siempre en cero, como que desde la funcion de inicializacion a la de escritura de byte no pasa elvalor de Data. Alguna idea porque puede ser??

Edito: Tampoco pasa lado.
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 05 de Julio de 2011, 15:12:25
Es raro, porque en vGLCD_Iniciar(..) si coloca el puerto como salida, ( GLCD_DATA_TRIS=0; ), y #define GLCD_DATA_TRIS TRISD  :tongue: Podrías mirar el asm generado? Por aquí tienes otra opción, con ésta libreria vengo trabajando a diario: http://www.micros-designs.com.ar/libreria-glcd-128x64-c/

Saludos!
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: aripod en 05 de Julio de 2011, 18:10:50
Me llama la atencion porque no anda...ya veremos...
Ahora voy a probar le Generic...pero tengo un error: Error - section 'BUFFER_GLCD' can not fit the section. Section 'BUFFER_GLCD' length=0x00000400

Calculo que es un problema con el linker?

Citar

// File: 18f452_g.lkr
// Generic linker script for the PIC18F452 processor

#DEFINE _CODEEND _DEBUGCODESTART - 1
#DEFINE _CEND _CODEEND + _DEBUGCODELEN
#DEFINE _DATAEND _DEBUGDATASTART - 1
#DEFINE _DEND _DATAEND + _DEBUGDATALEN

LIBPATH .

#IFDEF _CRUNTIME
  FILES c018i.o
  FILES clib.lib
  FILES p18f452.lib
#FI

#IFDEF _DEBUGCODESTART
  CODEPAGE   NAME=page       START=0x0               END=_CODEEND
  CODEPAGE   NAME=debug      START=_DEBUGCODESTART   END=_CEND        PROTECTED
#ELSE
  CODEPAGE   NAME=page       START=0x0               END=0x7FFF
#FI

CODEPAGE   NAME=idlocs     START=0x200000          END=0x200007       PROTECTED
CODEPAGE   NAME=config     START=0x300000          END=0x30000D       PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE          END=0x3FFFFF       PROTECTED
CODEPAGE   NAME=eedata     START=0xF00000          END=0xF000FF       PROTECTED

ACCESSBANK NAME=accessram  START=0x0               END=0x7F
ACCESSBANK NAME=accesssfr  START=0xF80             END=0xFFF          PROTECTED
DATABANK   NAME=gpr0       START=0x80              END=0xFF
DATABANK   NAME=gpr1       START=0x100             END=0x1FF
DATABANK   NAME=gpr2       START=0x200             END=0x2FF
DATABANK   NAME=gpr3       START=0x300             END=0x3FF
DATABANK   NAME=data       START=0x400             END=0x7FF          PROTECTED




#IFDEF _DEBUGDATASTART
  DATABANK   NAME=gpr4       START=0x800             END=_DATAEND
  DATABANK   NAME=dbgspr     START=_DEBUGDATASTART   END=_DEND           PROTECTED
#ELSE //no debug
  DATABANK   NAME=gpr4       START=0x800             END=0x8FF
#FI


#IFDEF _CRUNTIME
  SECTION    NAME=CONFIG     ROM=config
  #IFDEF _DEBUGDATASTART
    STACK SIZE=0x100 RAM=gpr3
  #ELSE
    STACK SIZE=0x100 RAM=gpr4
  #FI
#FI
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 05 de Julio de 2011, 18:41:24
Esto ultimo para cual seria? Si es para el Generic, en el *.h te conviene comentar #define GLCD_USE_MODE_FAST


Sino, debes crear una sección en el lkr:

SECTION    NAME=BUFFER_GLCD RAM=data


Saludos!
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: NANO1985 en 05 de Julio de 2011, 19:41:56
chango suky!, te has ido a la REPu$·%&/$%&·a madre que lo pario! sabelo.... muy lejos  :D
impresionante trabajo . groso!

p.D. como es el pinout de ese LCD? y fisicamente como es el cable de datos?
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: aripod en 05 de Julio de 2011, 20:03:20
Abro un nuevo threadthread (http://www.todopic.com.ar/foros/index.php?topic=35383.0) para no desvirtuar.
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 05 de Julio de 2011, 20:51:25
chango suky!, te has ido a la REPu$·%&/$%&·a madre que lo pario! sabelo.... muy lejos  :D
impresionante trabajo . groso!

p.D. como es el pinout de ese LCD? y fisicamente como es el cable de datos?


Hola! Una foto:

(http://mbed.org/media/uploads/Suky/lcd_tft_.png)

Tiene 16 pines para datos, y después los conocidos RS, RW, CS, etc... Aquí (http://mbed.org/cookbook/TFT-LCD-with-HX8347) una librería en C++ para el mbed y un esquema de como se conecta:

(http://mbed.org/media/uploads/Suky/lcd_tft.png)

Saludos!
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 18 de Septiembre de 2011, 18:07:57
Buenas! Hoy me entretuve modificando un poco la librería para trabajar con imágenes guardadas en un SD Card  :) Un ejemplo de como quedo:


El refresco de las imagenes es un poco lento debido a que se escribe en el LCD por medio de un expansor de puertos SPI.
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: manutek en 18 de Septiembre de 2011, 18:54:23
Paaaa.... impecable suky¡¡¡¡¡
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: MGLSOFT en 18 de Septiembre de 2011, 20:13:29
Muy bueno Suky !!
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: fabianjsm en 18 de Septiembre de 2011, 22:06:45
Un trabajo admirable Suky, felicitaciones!
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: MerLiNz en 20 de Septiembre de 2011, 19:29:35
pues si, esta muy muy currado
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 20 de Septiembre de 2011, 21:40:21
Gracias por los comentarios!  ;-)
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: MerLiNz en 20 de Septiembre de 2011, 22:16:22
Yo acabo de modificar mi libreria para usarla mediante un buffer, segun he visto es mas rapido, cuando reciba el icd3 para programar los pics ya os pongo algun video.
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 21 de Septiembre de 2011, 00:23:24
Yo acabo de modificar mi libreria para usarla mediante un buffer, segun he visto es mas rapido, cuando reciba el icd3 para programar los pics ya os pongo algun video.

Sin dudarlo es más rápido  ;-)
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: MerLiNz en 21 de Septiembre de 2011, 09:14:48
ya te digo que si lo es  :shock: ahora las pantallas se actualizan al instante, ademas de ser mucho mas facil trabajar con la ram del pic que con la ram de la lcd, ahora unicamente modifico la ram del pic, escribo toda la ram al lcd y yasta, me olvido de problemas como lecturas del lcd, calculos de direcciones para el lcd... Y bueno aun me queda el 50% de la ram del pic xD

Ademas con el ICD3 programa el doble de rapido.
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: MerLiNz en 21 de Septiembre de 2011, 11:40:25
Aqui esta el video, aunque no se vea esta conectadas las 2 placas por can bus, la de la pantalla le pide a la otra que le envie la configuracion actual (guardada en la eprom del pic) y esta la muestra, cuando modificas un dato y vuelves al menu de atras esta envia la nueva configuracion y la placa 2 la escribe en su eprom.
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Drod en 22 de Septiembre de 2011, 16:08:56
Hola, se que es um poco fuera del tema, pero con el C18 seria posible la comunicacion directa entre las salidas
D+ y D- (USB) de un PIC18F2550, y las entradas RX y TX de otro PIC18F2550?

Gracias!
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: MerLiNz en 22 de Septiembre de 2011, 16:54:48
el c18 es un compilador, indistintamente de que sea ccs, hitech...

Sobre lo que dices, te refieres a D+ y D- entre pics? o USB->USART? Si es esto lo que quieres no se puede conectar directamente, tendrias que buscarte un conversor usb->rs232->usart.
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 22 de Septiembre de 2011, 17:23:24
Ninguna de las opciones es posible. Ni tratar D+ y D- como pines digitales para una comunicación serial por firmware, ya que estos pines son solo como entrada. Tampoco es posible, utilizando la clase CDC USB, conectarlo a la uart de otro micro  :z) TAMPOCO implementando un conversor USB-Serial.


Saludos!
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: olicar1 en 16 de Noviembre de 2011, 10:21:22
Muy bueno Suky,
Alguien tiene las conexiones de una pantalla tft (nokia 5800) referencia ls032b3lx01c muchas gracias.
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: yeremayo en 05 de Diciembre de 2011, 02:46:59
Hola amigos estoy empezando con c18 y con los glcd por inspiración del trabajo del amigo suky, pero en esta cuestión de los glcd en c18 me encontré con un problemita y es que no se como crear el bmp para trabajar con c18, uso el bitmap2lcd y en ccs no tengo problema pero cuando lo intento en c18 en principio el compilador me da error de sintaxis, cuando añado las comas para separar las constantes en mi pantalla solo veo puntos dispersos.

Gracias de antemano.
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: MerLiNz en 05 de Diciembre de 2011, 09:33:40
que error de compilacion te sale?
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 05 de Diciembre de 2011, 09:52:26
Como es la declaración de la imagen y que función utilizas para dibujarla?
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: yeremayo en 05 de Diciembre de 2011, 17:44:49
Gracias por responder tan rapido estoy usando la funcion que usa usted suky en meunuesc18, cuando lo hago en ccs despues de crear la imagen en el bitmap2lcd copio lo que esta entre las llaves{oxoo,oxff,.......} y la imagen se dibuja sin problemas, pero cuando hago lo mismo con c18 en primera me dice error de sintax y me lo señala en la primera fila de datos, a esto le añado las comas que no me da el bitma2lcd y el error de compilacion se quita Merlinz, pero cuando lo simulo o lo paso a hardware no hay imagen y solo aparecen unos puntos dispersos sera el tamaño de los datos que arroja el bitmap??

ahora no tengo los programas ala mano lo del error de sintax es por las comas lo que me tiene intranquilo es porque no aparece la imagen, muchas gracias espero me puedan orientar hacia el motivo del error saludos.
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: MerLiNz en 05 de Diciembre de 2011, 17:50:14
el tema esta en que tanto en CCS como C18 los arrays son iguales, por lo cual no te deberia dar error con las comas o sin ellas, lo unico en lo que te puede dar error puede ser en que use int8 o algun tipo que el C18 no lleve.
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 05 de Diciembre de 2011, 19:48:23
Gracias por responder tan rapido estoy usando la funcion que usa usted suky en meunuesc18, cuando lo hago en ccs despues de crear la imagen en el bitmap2lcd copio lo que esta entre las llaves{oxoo,oxff,.......} y la imagen se dibuja sin problemas, pero cuando hago lo mismo con c18 en primera me dice error de sintax y me lo señala en la primera fila de datos, a esto le añado las comas que no me da el bitma2lcd y el error de compilacion se quita Merlinz, pero cuando lo simulo o lo paso a hardware no hay imagen y solo aparecen unos puntos dispersos sera el tamaño de los datos que arroja el bitmap??

ahora no tengo los programas ala mano lo del error de sintax es por las comas lo que me tiene intranquilo es porque no aparece la imagen, muchas gracias espero me puedan orientar hacia el motivo del error saludos.

Lo más adecuado sería subir el arreglo que entrega bitma2lcd (no lo he usado) para ver que puede ser el error, y también seria bueno saber como genera el arreglo este soft. Porque por ahí la función que se implementa no es la adecuada para el caso, y lo mejor es portar la de CCS que se sabe que funciona y es compatible.



Saludos!
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: yeremayo en 06 de Diciembre de 2011, 00:18:35
Cierto en el ccs tengo:

const int8 imagen[]= {0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
 0x20 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00
 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0F
 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00.....
};
asi es como el arreglo que me da bitmap2lcd sin las comas

y en c18 es: rom char imagen[]={...};

entonces eso quiere decir que no podre utilizar el arreglo entregado por este soft?

edito:
muchas gracias, encontre que si es la forma en que me genera la funcion el soft lo he cambiado y asunto arreglado muchas gracias por su atencion.

saludos.
me doy cuenta que me falta mucho que estudiar
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 06 de Diciembre de 2011, 00:25:36
Lo entrega así o sin las comas? En caso de entregarlo sin las comas, hay que agregarselas. Después para dibujar migra la ecuación de CCS a C18, ya que sabes que funciona  ;-)


Saludos!
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: MerLiNz en 06 de Diciembre de 2011, 08:30:28
en CCS los arrays van sin comas?? O es que el soft tiene un fallo?
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: yeremayo en 06 de Diciembre de 2011, 19:32:12
Hola  merlinz si te das cuenta en mi comentario pasado pongo:
"Cierto en el ccs tengo:

const int8 imagen[]= {0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 //falta la ultima coma si yo lo dejo asi
 0x20 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00                                 //el mplab c18 me arroja error de sintaxis
 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0F
 0xC0 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00.....
};
asi es como el arreglo que me da bitmap2lcd sin las comas"

el bitmap2lcd me entrega renglones de 8 columnas y en la ultima columna los datos no tienen comas,
probablemente sea un error mio en la configuracion de salida (outputs) ya que le pido que me de un .H en vez de un .C
o alguna cuestion en ese sentido debe ser el error, el soft funciona porque cuando uso esos datos en el ccs no tiene problemas.

saludos.
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: MerLiNz en 07 de Diciembre de 2011, 08:57:05
pues me dejas de piedra, como diferencia el ccs de un dato a otro?? sera porque no estan en la misma linea??
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: ignaciorod en 09 de Diciembre de 2011, 09:56:10
che suki se le puede agregar un touch  a tu pantalla para usarla con la libreria que hiciste? o habria q modificarla?
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 09 de Diciembre de 2011, 13:00:09
Si seguro, se puede. Modificar? y un poco, pensar que ahora no hay que seleccionar los items mediante pulsadores sino que se elije al tocar la pantalla, etc.  Revisa lo que hay por aquí puede ayudarte: http://www.micros-designs.com.ar/como-crear-menus-en-lcd/


Saludos!
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: LeugimZerO en 03 de Enero de 2012, 18:41:05
Hola amigos y Feliz año nuevo para toda la familia de TodoPIC, yo tengo un proyecto avanzado en CCS con GLCD y la verdad me gustaria usar el menu GLCD de nuestro maestro Suky pero como esta desarrollado en C18 (yo no manejo C18  :( ) me preguntaba si podriamos hacer una version para CCS y asi tambien usar esta interesante tecnica en nuestros proyectos CCS  :-/ , o si alguien ya lo desarrollo nos de una ayudita.

Pdta. Tambien estoy buscando el Graphics Library v1.65 para guardar mis imagenes en la eeprom, me di cuenta que el link murio.
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 03 de Enero de 2012, 19:37:26
Esta librería no es compatible con CCS, por no permitir por ejemplo const char *Puntero  ;-)



Saludos!
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: LeugimZerO en 03 de Enero de 2012, 20:17:27
noooooo....  :(
chispas entonces que tecnica me recomiendas para hacer menus en CCS que no me consuman mucha rom.
Gracias por responder.
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 03 de Enero de 2012, 23:14:43
Un par de variables que indiquen en que submenu estas y un par de switch para seleccionarlo y dibujar  :tongue: O pasa a otro compilador  :mrgreen:


Saludos!
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: MGLSOFT en 03 de Enero de 2012, 23:39:57
Esta librería no es compatible con CCS, por no permitir por ejemplo const char *Puntero  ;-)



Saludos!

Creo que en las ultimas versiones ya se puede...
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 04 de Enero de 2012, 07:27:54
Les toca probar  :mrgreen: Alguna vez quise utilizar el tema de los punteros a funciones y solo me hizo perder el tiempo  :tongue:
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: LeugimZerO en 04 de Enero de 2012, 17:10:34
bueno amigo MGLSOFT, porque no nos das unas pautas para empezar  :mrgreen:...
ya que esta tecnica es muy interesante
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: pou en 20 de Junio de 2012, 20:35:28
Hola. menudas cosas os currais!!

Yo tambien quiero hacerme un menu con algun ATmega y esta pantalla NHD-C128128BZ, que en mouser parece "barata"
Pero tema jodido este e!?! al menos para mi  :shock:

Suki, el programa que as puesto es comunicando la pantalla en patalelo no? Es que a mi me gustaria usar con SPI, y compartir este para 2 cacharros mas, tardará mucho con el SPI? (todavia nunca lo he usado)

Y no se puede hacer lo del buffer pero solo con una parte de la pantalla?? (cuando solo quiero numeros en medio de la pantalla)

no se si quiero hacer mucho con un micro o no, pero no me salen las cuentas  :D
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 20 de Junio de 2012, 21:38:09
En ese caso si, la librería envía de forma paralela. Pero he implementado en un TFT la comunicación SPI, o sea a color y podemos decir que es aceptable, así que en monocromático poco se debe notar.

Si vas a usar SPI, lo mejor es utilizar un buffer interno, así armas una rutina rápida que dibuje toda la pantalla  ;-)


Saludos!
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: pou en 21 de Junio de 2012, 05:25:55
OK.  ;-)
He mirado un programa de ejemplo, y aparte de no enteder cosas, me parece un coñazo las funciones de IniciarLCD y DibujarLCD, otros programas para otras GLCD parecen menos lio  :?

Este es el programa de ejemplo.
http://www.newhavendisplay.com/app_notes/NHD-C128128BZ.txt

No entiendo para que vale tanto comando en la funcion "lcd_init() ", al final pone "settings for 16-level grayscale", pero ni idea
En la funcion "void show_display", escribe 4 veces el mismo dato, mirando el dataseeht del controlador (pag. 29, fig. 9) ¿será que es para la escala de grises. (escribe 4 unos = negro, ó 4 ceros = blanco)?
datasheet del controlador: http://www.newhavendisplay.com/app_notes/ST7528.pdf

Los que llamais monocromaticos tambien hay que enviar 4 bit x pixel o con 1 vale? Si es asi paso de usar este GLCD, conoceis alguno un poco grande que solo mande 1 bit x pixel, barato, que gaste poco, que se limpie solo,etc?
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Rikr09 en 27 de Junio de 2012, 16:18:21
En un proyecto que desarrollo necesito implementar un menú en una pantalla GLCD 128x64, buscando por la red encontré este excelente proyecto (http://www.reifel.org/PICUserInterface/) en el que utilizan un display Nokia 6100. A partir de esa librería, me dedique a entender como trabaja y tomando su estructura re-escribí la librería para un GLCD monocromático  :(  :D :D

Para crear un elemento del submenú tenemos la siguiente estructura:
Código: [Seleccionar]
typedef struct{
char TipoMenu;
rom char *TextoMenu;
rom char *PtrMenuSeleccion;
}MENU;

Un ejemplo en la creación de un Submenú:
Creamos Menú principal:
       
  • El primer elemento direcciona al volver atrás en el submenú:
  • MENU_MAIN o SUBMENU_ANTERIOR: Regresa a pantalla principal o a un submenú anterior.
          
  • vInicializaSistemaDisplay: Función a ejecutar al regresar atrás.-
       
  • Segundo elemento: Primer ítem del menú a crear:
  • MENU_SUBMENU: Indica que al seleccionar este se debe crear otro submenú.
          
  • "Sub Menu": Texto del ítem.-
          
  • SubMenu1: Submenú a crear y dibujar.-
       
  • Tercer elemento: Segundo ítem del menú a crear:
  • MENU_COMANDO: Indica que al ejecutar tal ítem se ejecuta una función.-
          
  • "Control Motor": Texto del ítem.
          
  • vControlMotor: Función que se ejecuta, puede generar una pantalla con mensaje, barra deslizante o nada.-
       
  • Sexto elemento: Elemento que indica finalización del menú.-
Código: [Seleccionar]
MENU MenuPrincipal[]={
{MENU_MAIN,"",vInicializaSistemaDisplay},
{MENU_SUBMENU,"Sub Menu",SubMenu1},
{MENU_COMANDO,"Control Motor",vControlMotor},
{MENU_COMANDO,"Backlight",vControlBack},
{MENU_COMANDO,"About",vMuestraAbout},
{MENU_FIN,"",0}
};

El programa está controlado por medio de punteros a la memoria de programa. Por ejemplo en el bucle del programa principal (main), ejecuta una función (vEjecutaFuncion(Evento)) apuntada por el puntero *FuncionActualEjecucion, el cual direcciona las distintas funciones que trabajan con los eventos en las distintas pantallas presentadas en el GLCD.
Por ejemplo al dibujar la pantalla principal cargamos en puntero la función vEventosPantallaPrincipal, la cual atenderá los eventos, en este caso solo se espera a que se pulse el botón inferior derecho para acceder al submenú.

(http://img130.imageshack.us/img130/3568/imagen0230.jpg)

Al clickear en menú ejecutamos la función vSeleccionMenu(MenuPrincipal,1) que dibujará el Menú seleccionado y volverá a direccionar el puntero a la función vEventosSubMenu, la cual atiende los eventos que ocurran en el menú dibujado en pantalla. Es mas o menos un resumen de cómo trabaja el código.
(http://img714.imageshack.us/img714/5725/imagen0229.jpg)

Dentro de las opciones de menús del tipo comando tenemos:

Visualizar mensaje simple:
(http://img130.imageshack.us/img130/3950/imagen0240.jpg)

Visualizar opción a ejecutar:
(http://img96.imageshack.us/img96/9774/imagen0237y.jpg)

Visualizar deslizador para modificar una variable:
(http://img96.imageshack.us/img96/222/imagen0232.jpg)

Visualizar una variable:
(http://img690.imageshack.us/img690/3632/imagen0242.jpg)

Vídeo de muestra: (El video no muestra la ultima opción de menú, lo desarrolle después  :mrgreen: )

Se adjunta proyecto con el ejemplo mostrado. Al ser flexible, se pueden ir agregando otras opciones de menús.


Saludos!

Suky Saludos,

Cual es la referencia de la GLCD que implementaste? la monocromatica que usas para la libreria que creaste.

Gracias
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Rikr09 en 27 de Junio de 2012, 16:27:41
Saludos Suky

Excelente tu aporte una vez mas. Me gustaría saber cual es la referencia de la GLCD que empleas la de 128*64.

Atento a tu respuesta, Gracias  :-/
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 27 de Junio de 2012, 18:48:41
Saludos Suky

Excelente tu aporte una vez mas. Me gustaría saber cual es la referencia de la GLCD que empleas la de 128*64.

Atento a tu respuesta, Gracias  :-/

Compatible con ks0108  ;-)


Saludos!
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Rikr09 en 29 de Junio de 2012, 09:48:07
Saludos Suky

Excelente tu aporte una vez mas. Me gustaría saber cual es la referencia de la GLCD que empleas la de 128*64.

Atento a tu respuesta, Gracias  :-/

Compatible con ks0108  ;-)


Saludos!
Gracias una vez mas Suky!!   :)
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: yeremayo en 19 de Abril de 2013, 18:35:54
Hola Suky y amigos del foro solo una pregunta, he estado mirando la librería y observe una cosilla,
cuando lees la entrada AD y quieres mostrar por ejemplo 0.055 en la pantalla aparece 0.55,
la pregunta es ¿porque no aparece el cero después del punto?? porque por ejemplo si simulamos
tu proyecto y movemos el pot, en 2% nos da en pantalla 0.97 que seria (0.097) y en 3% nos da 0.151.

saludos espero que me haya hecho entender.
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: Suky en 19 de Abril de 2013, 20:17:29
Hola Suky y amigos del foro solo una pregunta, he estado mirando la librería y observe una cosilla,
cuando lees la entrada AD y quieres mostrar por ejemplo 0.055 en la pantalla aparece 0.55,
la pregunta es ¿porque no aparece el cero después del punto?? porque por ejemplo si simulamos
tu proyecto y movemos el pot, en 2% nos da en pantalla 0.97 que seria (0.097) y en 3% nos da 0.151.

saludos espero que me haya hecho entender.

mmm... Es un bug! El tema esta en que no había librería para pasar float a string e invente algo y seguro mal!  :? Dale una revisada a eso, creo que en una versión posterior use una librería para pasar a string un numero flotante. Busca por el foro que ha sido mencionada varias veces dicha librería.


Saludos!
Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: yeremayo en 19 de Abril de 2013, 20:39:37
jajaja lo solucione de manera manual haber que le parece maestro Suky es una jalada de pelos pero me funciono: :D

   decimas=((short long)(valor*VisualizacionNDecimas)%(VisualizacionNDecimas)); //con dos decimales VisualizacionNDecimas =100
   if(decimas<10){sprintf(Texto,"%d,0%u"Entero,Decimas);}
   if(decimas>=10){sprintf(Texto,"%d,%u",Entero,Decimas);}

saludos gracias por la respuesta lo voy a revisar.

Título: Re: C18: Librería para creación de menús en GLCD 128x64.
Publicado por: thomas666 en 13 de Mayo de 2013, 16:51:08
hola a todos....................
quisiera saber si me pueden ayudar con una lcd 128x64 que estoy manejando...............
es un proyecto nuevo que estoy reaizando y estoy tratando de desifrar como funciona estoy manejando un controlador KS0108  con e cual e realizado este codigo en c18:



Código: [Seleccionar]
#include <p18f4550.h>
#include <delays.h>

void InOut_Init(void);
void Ennable(void);
void Init_LCD_Grafica(unsigned char DATO);
void write_Comand(unsigned char comand,unsigned char byte);
void write_dato(unsigned char dato);
void Draw(void);
void actualizar(void);


#pragma config FOSC=INTOSC_EC //configuracion oscilador interno
#pragma config WDT=OFF //watchdog deshabilitado
#pragma config MCLRE=OFF //MCLEAR habilitado
#pragma config LVP=OFF //single-supply ICSP halitado
#pragma config PBADEN=OFF



unsigned int comand_cs1=0,comand_cs2=1;
unsigned char Address_X=0xb8;
unsigned char Address_Y=0x40;
unsigned char Star_Line=0xc0;
unsigned char GLCD_ON=0x3f;
unsigned char GLCD_OFF=0x3e;
unsigned int X=0xb8,Y=0x40;
unsigned int pixel=0X01;
unsigned char on=1,off=0;
unsigned char vector[8]={0B11111111,0B11111111,0B11111111,0B11111111,0B11111111,0B11111111,0B11111111,0B11111111};

void main (void){
InOut_Init();
Init_LCD_Grafica(on);
Draw();



while(1){
}
}

void InOut_Init(void){
ADCON1=0X0F;
TRISB=0X00;
TRISA=0b00000000;
TRISC=0b11000000;
TRISD=0X00;
TRISE=0X00;
LATC=0X00;
OSCCONbits.IRCF0=0;       
  OSCCONbits.IRCF1=1;
  OSCCONbits.IRCF2=1;

}
//el pulso del pin Ennable debe durar 30ns
void Ennable(void){
PORTBbits.RB2=1;
Delay10TCYx(1);
PORTBbits.RB2=0;
}


void Init_LCD_Grafica(unsigned char DATO){

LATB=0X00;
PORTBbits.RB3=0;
Delay1KTCYx(3);
PORTBbits.RB3=1;

write_Comand(comand_cs1,Star_Line);
write_Comand(comand_cs2,Star_Line);
write_Comand(comand_cs1,Address_Y);
write_Comand(comand_cs2,Address_Y);
write_Comand(comand_cs1,Address_X);
write_Comand(comand_cs2,Address_X);

if(DATO==on){

write_Comand(comand_cs1,GLCD_ON);
write_Comand(comand_cs2,GLCD_ON);
}else if(DATO==off){
write_Comand(comand_cs1,GLCD_OFF);
write_Comand(comand_cs2,GLCD_OFF);
PORTBbits.RB3=0;

}


}


void write_Comand(unsigned char comand,unsigned char byte){
PORTBbits.RB3=1;
if(comand==1){
PORTBbits.RB5=1;
}else{
PORTBbits.RB4=1;
}
PORTBbits.RB1=0;   //pin rs o di en 0
PORTBbits.RB0=0;
LATD=byte;
Ennable();

PORTBbits.RB4=0;
PORTBbits.RB5=0;
}



void write_dato(unsigned char dato){
PORTBbits.RB3=0;
LATB=0X00;
PORTBbits.RB1=1;
LATD=dato;
Ennable();
PORTBbits.RB1=0;
}




void Draw(void){

int paginas,filas;
write_Comand(comand_cs2,X);
write_Comand(comand_cs2,Y);
for(paginas=0;paginas<=8;paginas++){
write_Comand(comand_cs2,X);
X++;
for(filas=0;filas<=128;filas++){
write_Comand(comand_cs2,Y);
write_dato(pixel);
Y++;

}

}
actualizar();
}

void actualizar(void){
write_Comand(comand_cs1,Star_Line);
write_Comand(comand_cs2,Star_Line);
write_Comand(comand_cs1,Address_Y);
write_Comand(comand_cs2,Address_Y);
write_Comand(comand_cs1,Address_X);
write_Comand(comand_cs2,Address_X);
}


el caso es que so estoy tratando de poner agunos pixeles de a lcd en 1 y poderos visualizar en a rutina Draw()    pero no ocurre nada.................  la lcd no muestra nada
me podrian ayudar soo quiero saber como rayos es que se prende un pixel  :5]en una posicion cuaquiera de a lcd no se si se tenga que actualizar la pantalla (como se realiza eso :shock: :() no se si e codigo que realize este bien......... o me falte algo :(

gracias por su atencion