Autor Tema: LA LCD muestra signo de interrogación  (Leído 1780 veces)

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

Desconectado Jorge_Loa

  • PIC10
  • *
  • Mensajes: 24
LA LCD muestra signo de interrogación
« en: 24 de Marzo de 2007, 20:28:07 »
Hol amigos, tengo un problema con una LCD 2 x 16 que estoy manejando con un PIC 16f877, resulta que emdiante comunicación I2C "leo" los datos de un RTC (DS 1307 exactamente) y los almaceno en registros del PIC creados para este fin, cada minuto se debe pasar a la LCD el valor de los registros minutos, hora, dia y mes para que esta la muestre, además cada quince minutos se debe guardar estos mismos valores en la memoria FLASH del PIC. El problema es que cuando empiezo a ejecutar el programa este funciona bien por cerca de dos horas y a partir de ahí a veces la LCD muestra ??????? :(  u otras veces el cursor se queda estatico en la primera columna de la primera fila de la LCD, :?  o sea donde deberia empezar a mostrar el mes. NO SE QUE PUEDA SER, la ultima vez que lo probe me funciono cerca de dos horas pero el tiempo es indeterminado, a veces realiza el programa 15 minutos otras veces 30 ...etc,  :shock: pense que podria ser el PIC, asi es que grabe el programa en dos PIC diferentes, uno 16f877  y otro 16f877A y sucede lo mismo. Pido su colaboración para descubrir este misterio.
Un solo privilegio: La inteligencia
Una sola aristocracia: La del Espíritu

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: LA LCD muestra signo de interrogación
« Respuesta #1 en: 25 de Marzo de 2007, 01:01:47 »
Y en que programas, una muestra del codigo o bien me suena como a desbordamiento de variables.
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Deimos

  • Visitante
Re: LA LCD muestra signo de interrogación
« Respuesta #2 en: 26 de Marzo de 2007, 04:10:11 »
Puede ser un overflow como bien dice navaismo. También puede ser el watch-dog que está haciendo de las suyas. Lees el RTC de manera secuencial o por interrupciones???? Seguramente será secuencial, y no te hará los ciclos bien, por eso a veces lo hace antes y a veces lo hace después. Programando el micro con el sistema interruptivo no te debería pasar eso, ya que siempre ejecutará de manera síncrona.

Cuelga el programa como te dice el compañero y le echaremos un vistazo.

Salu2!!!!

Desconectado Jorge_Loa

  • PIC10
  • *
  • Mensajes: 24
Re: LA LCD muestra signo de interrogación
« Respuesta #3 en: 26 de Marzo de 2007, 13:01:39 »
Hola de nuevo, en este momento no tengo el codigo del programa en el PC desde donde escribo este mensaje asi que lo haré mas tarde, pero les comento lo siguiente: Primero que todo estoy programando en assembler y respecto a como estoy leyendo el RTC lo hago de manera secuencial, la secuencia total del programa es mas o menos así: leo RTC, guardo valores en registros mes, hora, dia, minuto, etc...., comparo registro minuto con 0, 3, 6, 9 (debería hacerlo con 00,15,30,45 pero es que si lo hago cada tres minutos es mas rapido para darme cuenta que si funciona); si minuto es igual a uno de estos valores grabó en la flash el valor de minuto, hora, dia, y mes despues muestro estos mismos valores en la LCD y vuel vo a leer RTC....etc; si minuto no es igual a uno de estos valores entonces muestro el valor de minuto en la LCD y vuelvo a leer RTC....etc; no comprendo porque es mejor si leo el RTC mediante interrupciones, según lei en la hoja de especificaciones del RTC luego que este ha sido programado por primera vez sigue generando fecha y hora de manera autónoma (y tiene asignado un cristal solo para el) y yo lo único que hago es leerlo, asi es que por este lado no creo que sea el problema, de cualquier manera apenas pueda subo el programa.

...Y una ultima cosita. ¿Existe alguna manera de subir el programa como dato adjunto en vez de copiarlo y pegarlo?????????? Es que no he viso esa opción por ningún lado y no se si se puede, y adjunto se verá mas ordenado y por tanto mas entendible.
Agradezco su colaboración.

Saludos!!!
Un solo privilegio: La inteligencia
Una sola aristocracia: La del Espíritu

Deimos

  • Visitante
Re: LA LCD muestra signo de interrogación
« Respuesta #4 en: 27 de Marzo de 2007, 03:58:11 »
Una cosa es como funcione el RTC y otra muy distinta es como funciona el programa que ejecuta el micro. Tu RTC funciona de manera síncrona, ejecutándose de manera cíclica en el tiempo, pero, tu micro no lee los puertos de manera síncrona, sino que cuando puede se pasa por el puerto a leer lo que hay. Una manera de hacerlo de forma interruptiva es asociando un timer del micro. Con cada overflow del timer salta una interrupción que es la que utilizas para leer el puerto I2C. De esta forma leerás el puerto siempre exactamente con el mismo intervalo de tiempo. Para programar la velocidad del timer te puedes ayudar con el criterio de nyquist donde fm>2*fs. Así la frecuencia del timer del micro (fm) ha de ser como poco dos veces la frecuencia del RTC (fs). Creo que lo más prudente sería programar las interrupciones del I2C así seguro que no tienes problemas, ya que no es el micro el que periodicamente lee los puertos, sino que es el RTC el que avisa al micro que se pase por los puertos a leer el valor actualizado. Entre tramas de i2c puedes hacer tus comparaciones y los cálculos que tengas que realizar. Pienso que el micro no debería tener problemas por saltarse valores al estar ocupado haciendo otras cosas. Eso suele pasar en los programas secuenciales, pero no en los interruptivos.

Volviendo a tu problema...... es posible que el micro cuando lee el puerto i2c no ve nada y por eso saca por el LCD ????????. Puede ser un problema de velocidades, o de direcciones en el i2c. Tambien puede ser que no estés volcando las variables bien una vez recibidas, y de ahí el desbordamiento que te comentaba navaismo.

Pega el programa aquí sin problemas, no te preocupes por el orden.

Salu2!!!!!!!