Autor Tema: Programar mensajes para LCD  (Leído 2818 veces)

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

Desconectado Falconhunter

  • PIC12
  • **
  • Mensajes: 60
Programar mensajes para LCD
« en: 26 de Diciembre de 2004, 17:01:00 »
Hola a todos. Estoy programando una LCD con un 16F819 y utilizando C con el PICC CCS. Me funciona muy bien y configuro la LCD como yo quiero. Ahora bien, mi objetivo es que en la pantalla se visualicen diferentes mensajes en funcion de la opcion seleccionada (a modo de menu de seleccion). Dichos mensajes los he declarado segun este estilo:

   char pantalla10[] = "fHola.
Soy una prueba";
   char pantalla11[] = "fSoy la segunda
pantalla";
   char pantalla[] = {pantalla10 , pantalla11};

de forma que en función del menú "i" se me imprima la pantalla del array pantallas con la instruccion

   printf(lcd_putc,"%s",pantalla);

Lo realmente grave, es que declarando de esta forma los mensajes me ocupa una cantidad de memoria de programa impresionante (3 pantallas me ocupan casi un 20% del codigo). ¿Hay alguna forma de que estos mensajes se declaren como array de constantes o algo parecido?¿Pueden programarse los mensajes en la zona de datos del pic desde el compilador CCS? Que alguien me diga como porque si no me veo con un micro mas grande y no es lo que me interesa.

Gracias gente y feliz año nuevo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: Programar mensajes para LCD
« Respuesta #1 en: 27 de Diciembre de 2004, 00:42:00 »
Pues según leo ese micro tiene 2K de Flash y 256 bytes de Eeprom.

Si quieres guardar los mensajes en la zona Eeprom es tan fácil como escribirlos en tu software de grabación y programar el micro. Tanto WinPic800 como ICProg admiten esta opción.

Únicamente tendrás que apuntar las direcciones de memoria que ocupan los mensajes, para luego poder hacer referencia a ellas desde tu programa.

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: Programar mensajes para LCD
« Respuesta #2 en: 27 de Diciembre de 2004, 05:53:00 »
Yo lo suelo hacer de otra forma, lo que no se es si ocupará más o menos que como tú lo haces... este es el tipico caso donde la experiencia juega un papel importante... de todos modos... yo con los strings tampoco tengo mucha experiencia....

Una posible solución sería compilar ambos códigos y ver cual ocupa menos.


const char mensajes[2][26]=
   {
      "fHola.
Soy una prueba",
      "fSoy la segunda
pantalla",
     
    };

Es importante declararlo como const. Pruebalo de esta forma, es la manera de meter datos en la rom.

Un saludo.


-----------------------
FELICES FIESTAS.

Desconectado Falconhunter

  • PIC12
  • **
  • Mensajes: 60
RE: Programar mensajes para LCD
« Respuesta #3 en: 27 de Diciembre de 2004, 12:20:00 »
Pues tenias razon oshow. Ahora se reduce considerablemente el espacio ocupado, puesto que antes se escribia en cada posicion de memoria cargando el literal al acumulador para despues pasarlo a la posicion, mientras que ahora se crea la tipica tabla en ensamblador. Muchas gracias por el apaño.
Aunque el tema esta medio solucionado, me ha dejado mosca lo que me has dicho nocturno sobre la programacion de la EEprom. Por lo que entiendo hay que programarla "a mano" en el software de programacion. Yo programo con una programadora del tipo WillEprom con la version 0.96 (que vale para muchos tipos de memoria) y me permite esta opcion pero hay que programar una a una las posiciones de la EEprom. Entonces cada vez que carge el fichero .HEX habra que modificar todas y cada una de las posiciones de la memoria de datos. ¿Existe alguna forma de hacerlo en el entorno de programacion?¿Me recomendais que utilice otro software y otra programadora?

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Programar mensajes para LCD
« Respuesta #4 en: 27 de Diciembre de 2004, 12:51:00 »
No, nada de hacerlo a mano.

Usa write_eeprom(address,value) con un bucle for para guardar todos los valores a partir de una determinada dirección de memoria.

value=read_eeprom(address) y un bucle, para recuperar los datos escritos.

Un saludo

Desconectado Falconhunter

  • PIC12
  • **
  • Mensajes: 60
RE: Programar mensajes para LCD
« Respuesta #5 en: 27 de Diciembre de 2004, 16:32:00 »
Si. Eso que dices pocher lo implementaria y se ejecutaria dentro del programa del pic. Pero lo que yo quiero es que una vez transferido el programa al micro haya una serie de valores almacenados en la EEprom para poder acceder a ellos, sin que el programa tenga que almacenarlos, porque si no estamos en las mismas, el tamaño del codigo se agranda. Yo creo que tiene que haber algun modo de programar la EEprom desde el preprocesador del compilador. ¿Que pensais?

Desconectado Falconhunter

  • PIC12
  • **
  • Mensajes: 60
RE: Programar mensajes para LCD
« Respuesta #6 en: 27 de Diciembre de 2004, 16:36:00 »
He mandado el mensaje anterior y se me acaba de ocurrir una cosa. A ver que opinais:
- Hacer un programa para el pic que unicamente grabe una serie de valores (cadenas de caracteres en mi caso) en la EEprom de datos.
- Despues programar el micro con el programa que yo quiero utilizar (visualizado de mensajes) y teoricamente los valores de la EEprom permanecen ahi medio siglo por lo menos, con lo que solo hay que utilizar funciones de lectura.

¿Que os parece la solucion?¿Es cutre o lo mas sencillo suele ser lo mas efectivo?

Feliz año a todos

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Programar mensajes para LCD
« Respuesta #7 en: 28 de Diciembre de 2004, 00:00:00 »
Las soluciones sencillas siempre son las más inteligentes, todo el mundo las entiende.

Para hacerlo como planteas el programa grabador tendrá que tener deshabilitada la opción de grabar datos en la EEPROM, para que cuando lances el segundo programa no te machaque lo previamente grabado en la EEPROM con el primer programa.

Un saludo

Desconectado Falconhunter

  • PIC12
  • **
  • Mensajes: 60
RE: Programar mensajes para LCD
« Respuesta #8 en: 29 de Diciembre de 2004, 17:24:00 »
Indagando en el manual del CCD, el datasheet del micro y haciendo probatinas ya he solucionado esto de programar la EEProm de datos desde el compilador sin tener que programar el micro dos veces.

Se hace con la directiva:
                                         #rom <inicio> {lista de datos}
que coloca la serie de datos a partir de la direccion <inicio>. Esto se puede colocar en la ultima linea del programa (si alguien programa con los intel MCS-51 es lo mismo que la directiva DB que se utilizada para las tablas).

En lo unico que hay que tener precaucion es colocar la direccion de la directiva en una zona de la menoria que no se utilice con el programa, puesto que la memoria de programa y la memoria EEprom de datos comparten el mismo espacio fisico. Un valor para la serie 16 es 0x2100. Un ejemplo:

#rom 0x2100={0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xa,0xb,0xc,0xd,0xe,0xf}

Coloca en la zona reservada para EEprom d datos los valores del 1 a F. Cuando cargas el fichero .HEX en el software programador aparece automaticamente la zona de datos programada.

Un truquillo mas para la coleccion. Feliz año nuevo a todos

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
RE: Programar mensajes para LCD
« Respuesta #9 en: 30 de Diciembre de 2004, 12:58:00 »
Llegue tarde...
Esto es lo que hago en la rutina de numeros grandes, guardo las configuraciones en la eeprom en el momento de grabar el micro...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 679
RE: Programar mensajes para LCD
« Respuesta #10 en: 30 de Diciembre de 2004, 20:28:00 »
Bueno, la verdad que es un verdadero problema crear mensajes, pues ocupan directamente memoria de programa, en la epoca en que solo teniamos el 16C84, de 1KW esto se traia un problema si la interface hombre maquina a crear demanaba muchos mensajes de texto, ademas de demandar  un puerto completo del micro la pantalla lcd se "come" la memoria, entonces, ademas de usar el mismo puerto de la pantalla para el teclado, se me ocurrio "colgar" una memoria del tipo 24LC16 (que son 2KB), en dos lineas de la pantalla, entonces en el micro lo unico que habia era un indice con la direccion de cada mensaje, y bueno imaginense que son 2048 caracteres a usar......hay memorias mas chicas, para meter lo mensajes use el IC-PROG con el tait serial programmer, esquema que esta en la misma pagian web de IC-PROG, tambien con este mismo esquematico puede usarse el maravilloso WINPIC800, entonces solo hay que anotar las direcciones de inicio de cada mensaje y luego crear el indice, en el programa hay que incorporar claro las rutinas de manejo I2C para la memoria, y proterger mediante el pin WP la memoria para que no pueda ser escrita por error, y listo, de esta manera se puede incroporar facilmente mucho texto a vuestros desarrollos a muy bajo costo y con impacto cero al harware, espero que se entienda, pues soy medio "enrredao" para expilcar, por lo que quedo a disposicion por cualquier consulta.

No olviden poner el pull-up en las lineas donde conecten la memoria, o si estan en el high del portb activar el weak pull up, esto no afecta el funcionamiento de la pantalla.

Desde CCS es muy senccillo usar la memoria, por lo tanto hay que leer la memoria del mensaje a enviar, copiarlo en la ram y luego enviarlo al LCD, esto toma algo mas de tiempo que usando memoria de programa pero inperceptible por ele usuario, en fin el arte de mutiplexar,

saludos, y feliz año 2005 para todo el foro.Vacilando

ARIEL


saludos
PikMan

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Programar mensajes para LCD
« Respuesta #11 en: 31 de Diciembre de 2004, 02:09:00 »
Yo para meter datos en memorias I2C lo que hago es primero me hago un programa únicamente con los datos que quiero pasarle a la memoria, se los paso y una vez los tiene grabados ya grabo de nuevo en el PIC el programa "principal" que se encargará de leer los datos de la memoria.

Un saludo

Desconectado Falconhunter

  • PIC12
  • **
  • Mensajes: 60
RE: Programar mensajes para LCD
« Respuesta #12 en: 01 de Enero de 2005, 11:32:00 »
Probare esto de la memoria, lo que pasa es que ando bastante justo de lineas, pero por probar. Gracias a todos.