Autor Tema: Imprimir palabras en LCD grabadas previamente en EEPROM externa  (Leído 5634 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado soy_ismael

  • PIC10
  • *
  • Mensajes: 15
Imprimir palabras en LCD grabadas previamente en EEPROM externa
« en: 13 de Marzo de 2007, 12:47:13 »
Hola a todos! estoy aprendiendo mucho con vuestro foro, quiero empezar expresando mi agradecimiento.

Entrando en materia, le he dado vueltas a este foro y varias webs en busca de respuestas para montar un proyecto.
Consiste en un PIC que recoge caracteres de una memoria EEPROM externa y la imprime en un LCD 2x16. Programado todo en PBP.

Con el LCD en principio no tengo problemas defino los puertos (4bits) e imprimo un mensaje usando el comando LCDOUT. (En el foro hay mucha información de como configurarlo y conectarlo al PIC, de nuevo gracias!)

Ahora llega lo complicado para mi, he leido varios temas de este foro sobre EEPROM pero no me aclaro, a ver si pueran echarme una mano:

Debo leer de la eeprom (por ejemplo 24LC16B) caracter a caracter hasta formar una palabra y enviarla al LCD. He pensado en meter todas las palabras seguidas (divididas en caracteres) e incluir un caracter extraño que dara el stop.
El comando a usar es I2CREAD con un bucle WHILE, pero como? :(

A ver si lo explico mejor con un ejemplo, dendro de la memoria tengo:  p e r r o # g a t o # p a j a r o .... monto un bucle que vaya leyendo la memoria para formar la palabra hasta que llegue a "#".
Cuando llegue a # coge todos los caracteres y los envía a la LCD para que ponga la palabra: "perro" luego "gato" ...

Otro punto de este proyecto es la de meter las palabras en la EEPROM previamente con un cargador ¿como se haria esto? aqui no tengo ni idea!
Les agradecería toda la ayuda e ideas de hacerlo distinto.

Ire publicando mis avances, y les agradezco de antemano vuestra ayuda. Como incentivo les diré que es para crear un juego electronico, y es muy divertido y adictivo en version de juego de mesa!! :-/

Saludos!!

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: Imprimir palabras en LCD grabadas previamente en EEPROM externa
« Respuesta #1 en: 13 de Marzo de 2007, 13:21:53 »
Que tal "soy_ismael":

Para colocar la palabra o cadena de carecteres en la LCD leyendo estos de la eeprom como mencionas podrias tener 2 casos:

1.- Utilizar un array para leer la memoria y despues ese mismo array para mostrarlo en la LCD
2.- Leer un dato de la memoria y mostrarlo inmediatamente hacia la LCD

Si me permites yo puedo hacer un ejemplo, el problema es que lo haria hoy por la noche y lo estaria recibiendo hasta el dia de maniana.

Saludos.

Elreypic2

Desconectado soy_ismael

  • PIC10
  • *
  • Mensajes: 15
Re: Imprimir palabras en LCD grabadas previamente en EEPROM externa
« Respuesta #2 en: 13 de Marzo de 2007, 15:16:58 »
Claro que te permito, es mas, me harias un rey! (sin quitarte el puesto claro!...jeje)

Cualquiera de tus dos soluciones me parece buena, de hecho yo habia pensado en la primera ¿cual crees que sería mejor?

Cuando tu puedas lo cuelgas, lo espero ansioso, tengo muchas ganas de montar el experimento. Si te interesa te comento de que va el juego. Es muy adictivo para jugarlo en grupo :D

Gracias!

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Imprimir palabras en LCD grabadas previamente en EEPROM externa
« Respuesta #3 en: 13 de Marzo de 2007, 16:45:26 »
podrias explicar de q trata ese juego? soy aficionado al T-O-D-I-T-O  , monopolio, millonario, bingo, etc etc ajedrez, damas chinas, etc etc  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado soy_ismael

  • PIC10
  • *
  • Mensajes: 15
Re: Imprimir palabras en LCD grabadas previamente en EEPROM externa
« Respuesta #4 en: 14 de Marzo de 2007, 09:32:08 »
Si, te explico, es un juego que hace tiempo jugué con unos amigos. Es muy simple pero engancha y nos despedimos todos con ganas de comprarlo. Llevo mucho buscándolo pero lo retiraron de la venta.
Es una mezcla entre tabú y la patata caliente, se debe describir la palabra que te toca para que tu equipo lo acierte antes que acabe el tiempo.

A ver si lo explico bien:
El juego se compone de un disco donde se lee la palabra a describir y otro disco más pequeño que se pone encima de la mesa que va sonando.

- Se hacen 2 equipos unos enfrentados a otros (lo divertido es que sean 4 ó 5 en cada equipo) EQUIPO A Y EQUIPO B.
- El equipo A pulsa el disco de las palabras y la lee (para comprobar que los otros no hacen trampa), entonces se lo pasa al equipo B y al mismo tiempo pulsa el otro que se ha dejado en la mesa. Este empieza a sonar durante un minuto, cada vez sonara mas rápido (poniendo nervioso al personal!! jeje) hasta que termina con un gran zumbido  :shock:
- El componente del equipo B que le ha tocado el disco debe describir la palabra a su equipo hasta que la acierten, si es así pulsa el botón para que aparezca otra palabra, la lee y se la pasa al equipo A.
- Este proceso se repite hasta que el zumbador de el gran pitido final. El equipo que tenga el disco en ese momento pierde y el equipo contrario gana un punto (en realidad avanza una casilla en un tablero pero nosotros acabamos como en el fútbol, con un marcador) (El personal acaba poniendose nervioso y hasta lanza el disco antes que les explote!!)
Os adjunto un dibujo de cómo era aproximadamente los dos artilugios, el pequeño tiene un gran botón y un altavoz que va sonando (cada vez más rápido el hijo de…), el otro más grande tenía discos de papel dentro con palabras y una ventanita para leerlas.
Como iréis comprendiendo lo que yo quiero es hacer lo mismo, pero todo junto .Un solo disco que tenga un display LCD donde aparezca las palabras a describir, el pulsador para pasar a la siguiente palabra y un altavoz que vaya emitiendo un zumbido intermitente (cada vez más rápido) durante un minuto hasta que suene el pitido final.
Como ampliación me gustaría ponerle un motorcillo que vibre los 5 últimos segundos para que ya termine por darle el infarto al que lo tenga cogido (jeje) :D

¿Me ayudáis a ponerlo en práctica? Os animo a darle un fin divertido a vuestro gran conocimiento de los PICs. :-/
« Última modificación: 14 de Marzo de 2007, 09:51:34 por soy_ismael »

Desconectado soy_ismael

  • PIC10
  • *
  • Mensajes: 15
Re: Imprimir palabras en LCD grabadas previamente en EEPROM externa
« Respuesta #5 en: 14 de Marzo de 2007, 09:39:32 »
Aqui teneis un dibujo del juego original, aproximadamente porque tenía la ventanita mucho más pequeña y yo lo he dibujado como me gustaría que quedara. :-)

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Imprimir palabras en LCD grabadas previamente en EEPROM externa
« Respuesta #6 en: 14 de Marzo de 2007, 10:24:50 »
añap... aca en Peru existe un juego similar llamado: charada, tiene un monton de variantes pero trata de q un miembro del equipo tiene q descrbir un objeto (puede ser tambien una peli)  para q los demas lo adivinen.

tu proyecto suena interesante sobretodo por la interface electronica, ya pues aca toy para ver en q te podria apoyar  :-)
« Última modificación: 14 de Marzo de 2007, 10:27:19 por micro_cadaver »
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado soy_ismael

  • PIC10
  • *
  • Mensajes: 15
Re: Imprimir palabras en LCD grabadas previamente en EEPROM externa
« Respuesta #7 en: 14 de Marzo de 2007, 13:14:16 »
Ok agradezco toda la ayuda que me puedas aportar. Necesito saber como se haría el programita que lea de la memoria externa (quiero meter unas 1000 palabras y no hay pic que aguante eso, imagino...) todos los caracteres de una palabra los una y lo imprima en el LCD o letra a letra si es más facil.

Además estoy buscando la forma de grabar la eeprom directamente todas las palabras con el programador, yo tengo el JDM. ¿como se haría eso?!   :?:

Saludos a todos! Iré publicando mis avances y fotos del proyecto por si alguien se anima a construirse el juego. :D



P.D: Una vez montado este que es mas facil, tengo pensado muchas variantes como tu dices, pero siempre jugando contra el crono para que acelere el pulso!
« Última modificación: 14 de Marzo de 2007, 13:21:13 por soy_ismael »

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Imprimir palabras en LCD grabadas previamente en EEPROM externa
« Respuesta #8 en: 14 de Marzo de 2007, 13:31:59 »
ok vamos con acelerador !!!!

lo de las palabras aun no lo he estudiado pero se me ocurre hacerlo asi:
- me imagino q son palabras definidas digamos un banco de 100 (por ahora)
- escribimos el alfabeto en ASCII en la misma memoria de programa.
- q tal si de alguna manera elaboramos en base a registros el conjunto de las letras es decir, q un valor de un registro signifique un conjunto de caracteres ASCII (osea una palabra), me parece q asi no tendiramos q escribir mil palabras sino manejar valores aleatorios.

lo del cronometro tb seria facil de implementar.

q programa usas para el basic? yo le doy al pic basic simulator IDE.
http://www.todopic.com.ar/foros/index.php?topic=14917.0
en este hilo la gente adora ese programa jijijiji yo tambien  :mrgreen:


« Última modificación: 14 de Marzo de 2007, 13:35:56 por micro_cadaver »
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: Imprimir palabras en LCD grabadas previamente en EEPROM externa
« Respuesta #9 en: 14 de Marzo de 2007, 14:27:27 »
Que tal "soy_ismael"

La manera mas facil segun estudie es el metodo 2 que te propuse, el cual seria de la siguiente manera.

'***************************************************
'                            Definicion de variables
'***************************************************
ADDRESS_EE           VAR           Word
ADD_HIGH               VAR           ADDRESS_EE.HighByte
ADD_LOW                VAR           ADDREES_EE.LowByte
DATO_LEIDO           VAR           Byte
CTL_BYTE                VAR           Byte

'***************************************************
'                          Definicion de pines
'***************************************************
DPIN                          VAR           PORTA.0    'El pin RA0 es el pin de datos
CPIN                          VAR            PORTA.1    'El pin RA1 es el pin de clock
BOTON                      VAR           PORTA.2     'El pin RA2 es el pin de boton de mostrar la palabra

'*****************************************************
'             PROGRAMA PRINCIPAL
'*****************************************************

INICIO:
'        Configuracion de pines   (aqui colocas la configuracion de pines que necesitas)
                 ADRESS_EE = 0              'Inicializa la direccion de la EEPROM
                 CTL_BYTE = $A0           'Inicializa el valor del byte de control de la EEPROM
PREGUNTA_BOTON:
                 IF BOTON = 0 THEN      'Se presiono el boton para mostrar la palabra?
                        GOSUB    LEER_PALABRA   'Realiza la lectura de la palabra en la EEPROM y muestrala en la LCD
REBOTES:       PAUSE     50                           'Delay para eliminar los rebotes del boton
                        IF BOTON = 0 THEN REBOTES      'Aun esta presionado el boton?, Si, entonces ejecuta pause de 50 milisegundos
                        PAUSE 50             'No, entonces elimina los rebotes de liberacion de boton                               
                  ENDIF
                  GOTO PREGUNTA_BOTON    'No, entonces continua peguntando por el boton

'**************************************************
'                   Inicio de subrutinas
'**************************************************
'*********************************************************
'                   Subrutina para leer y mostrar las palabras
'*********************************************************
LEER_PALABRA:
            LCDOUT     $FE,1                      'Limpia la LCD
            I2CREAD    DPIN,CPIN,CTL_BYTE,ADD_LOW,[DATO_LEIDO]      'Lee el primer caracter de la palabra en la EEPROM
            WHILE     DATO_LEIDO <> "#"             'Mientras el dato leido sea diferente al caracter "#", ejecuta la accion
                             LCDOUT        DATO_LEIDO    'Coloca el caracter leido de la EEPROM en la LCD
                             GOSUB           INCRMENTA_ADDRESS         'Llama la rutina para incrementar la direccion en la EEPROM
                             I2CREAD    DPIN,CPIN,CTL_BYTE,ADD_LOW,[DATO_LEIDO]      'Lee el caracter de la palabra en la EEPROM
            WEND
'********************************************************
'    Subrutina para incrementar y preparar la direccion de la EEPROM
'********************************************************
INCREMENTA_ADDRESS:
           ADDRESS_EE = ADDRESS_EE + 1                          'Incrementa la direccion en 1
           IF ADDRESS_EE >= $800 THEN                              'La direccion de la EEPROM sobrepaso el limite?
                ADDRESS_EE = 0                                                'Si, entonces inicializa nuevamente la direccion de la EEPROM
                CTL_BYTE = $A0
                RETURN                                                              'Termina la subrutina
           ENDIF
           CTL_BYTE = (ADD_HIGH << 1) | $A0                   'Prepara el valor del byte de control
           RETURN                                                                  'Termina la subrutina


Espero esto te sirva para alcanzar tu objetivo.
Cualqueir duda hazmela saber

Elreypic.

Desconectado soy_ismael

  • PIC10
  • *
  • Mensajes: 15
Re: Imprimir palabras en LCD grabadas previamente en EEPROM externa
« Respuesta #10 en: 14 de Marzo de 2007, 14:58:27 »
Q bien  :mrgreen: que te animaste!

He empezado con PBP aunque hace poco descubrí Pic Basic Simulator IDE, y me gusta todo lo que he leido por ahora de el, tenerlo todo integrado y la posibilidad de ir viendo linea linea el programa me parece lo mas util, aunque todavía no lo he probado. Pero la noche es joven!

Hasta escribir el alfabeto ASCII en la memoria del programa te sigo, lo que no me queda claro es "elaboramos en base a registros el conjunto de las letras es decir, q un valor de un registro signifique un conjunto de caracteres ASCII (osea una palabra), me parece q asi no tendiramos q escribir mil palabras sino manejar valores aleatorios"

Yo habia pensado en leer 1 dato de la memoria que se corresponda con 1 caracter ASCII y asi dato a dato se carga todos los caracteres hasta completar la palabra. Ejemplo: de la memoria leemos 03-01-19-01-99 que se corresponde segun nuestra tabla a:

03 -> C
01 -> A
19 -> S
01 -> A
99 -> (STOP) para de leer y graba donde se ha quedado.

¿es lo mismo que tu dices? :?:

El funcionamiento del programa que tengo en mente lee desde el primer registro hasta el ultimo y empieza desde el principio (por ejemplo las 100 palabras que tu dices). Cada vez que se lee una palabra se guarda en la memoria eeprom del micro el registro de la siguiente palabra que se expuso. Para no empezar desde la primera palabra cada vez que se empiece a jugar.

Le voy a dar duro para aprender el Pic Basic Simulatro IDE.  ;-)

Desconectado soy_ismael

  • PIC10
  • *
  • Mensajes: 15
Re: Imprimir palabras en LCD grabadas previamente en EEPROM externa
« Respuesta #11 en: 14 de Marzo de 2007, 15:00:08 »
Gracias elreypic2 me pongo a analizar ahora mismo tu programa! :-/

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Imprimir palabras en LCD grabadas previamente en EEPROM externa
« Respuesta #12 en: 14 de Marzo de 2007, 15:36:58 »
ajap esa era mi idea ismael, eh... no se q tan mala o buena sera jijij, pero creo q nos ahorraria el usar una memoria externa. si puedes me agregas al msn pa seguir charlando de tu proyeto. :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: Imprimir palabras en LCD grabadas previamente en EEPROM externa
« Respuesta #13 en: 14 de Marzo de 2007, 17:44:35 »
"soy_ismael":

Que software estas usando en conjunto con tu programador JDM?

Ic-prog?   Winpic800?

Yo no los he usado nunca, pero puedes verificar si es posible modificar directamente la ventana en donde se muestra el archivo hexadecimal cargado. Si es asi, entonces simplemente modificas cada una de las direcciones asignandoles su valor ASCII para cada letra y asi formar cada palabra.

Saludos.

Elreypic.

Desconectado soy_ismael

  • PIC10
  • *
  • Mensajes: 15
Re: Imprimir palabras en LCD grabadas previamente en EEPROM externa
« Respuesta #14 en: 15 de Marzo de 2007, 07:46:14 »
Gracias de nuevo elreypic2, yo uso el IC-Prog y si deja escribir directamente en el cuadro de "Program Code". Aqui dejo una captura del programa, y esta misma noche lo pruebo (trabajo+novia no te dejan mucho tiempo para los proyectos  :( )

La correspondencia HEX con ASCII la podeis ver en la web: http://ascii.cl/es/

61  a         70  p
62  b         71  q
63  c         72  r
64  d         73  s
65  e         74  t
66  f          75  u
67  g         76  v
68  h         77  w
69  i          78  x
6A  j          79  y
6B  k         7A  z
6C  l
6D  m
6E  n
6F  0

Nuestro caracter especial que da fin a cada palabra es "#" que en HEX es 23

Adjunto un link con un programa que convierte de ASCII en HEX (es facil programarlo pero si ya esta hecho...)  :lol:

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=238

Voy a darle una pensada para modificar tu codigo, quiero poner en la primera posición de la memoria externa la dirección de la ultima palabra leida. Así cuando el juego se apague y se encienda otra vez no empiece por la misma palabra sino que agote todas las que tiene hasta que llegue al final. Y ahora que caigo habrá que poner otro caracter de final del listado de palabras que cuando llegue empiece por la primera, por ejemplo "%" que se corresponde con el 25 HEX.

¡ Micro_cadaver esto tiene ya forma ! Que emoción! Necesito sacar tiempo como sea para ir materializandolo, todavía estoy con el Pic y la LCD diciendo "Hola Mundo". En cuanto me conecte al msn (muy poco por lo que ya he comentado) te agrego.

Saludos! :-)