Autor Tema: timer0 y EEPROM  (Leído 2105 veces)

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

Desconectado rodo74

  • PIC10
  • *
  • Mensajes: 5
timer0 y EEPROM
« en: 20 de Febrero de 2006, 17:20:00 »
Hola, tengo un problema al grabar la memoria EEPROM. La rutina que utilizo en un pic16f873 siempre me ha servido, sin embargo cuando intento guardar datos en la memoria EEPROM tras una interrupción generada por el timer0 tras desbordarse, los datos no se guardan en la EEPROM. El programa funciona correctamente pero los valores no se almacenan. ¿Alguien sabe que ocurre? La simulación en el MPLAB
no presenta problema alguno.loco

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: timer0 y EEPROM
« Respuesta #1 en: 20 de Febrero de 2006, 17:55:00 »
Escrito originalmente por rodo74
Hola, tengo un problema al grabar la memoria EEPROM. La rutina que utilizo en un pic16f873 siempre me ha servido, sin embargo cuando intento guardar datos en la memoria EEPROM tras una interrupción generada por el timer0 tras desbordarse, los datos no se guardan en la EEPROM. El programa funciona correctamente pero los valores no se almacenan. ¿Alguien sabe que ocurre? La simulación en el MPLAB
no presenta problema alguno.loco


A ver si entendi bien.  Tu programa sigue una secuencia,  grabas en la eeprom, etc.

Cuando se activa la interrupcion del timer0 por primera vez, NUNCA mas graba o el dato que estabas grabando en ese momento es el que se pierde?

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado rodo74

  • PIC10
  • *
  • Mensajes: 5
RE: timer0 y EEPROM
« Respuesta #2 en: 20 de Febrero de 2006, 18:32:00 »
Hola maunix, gracias por responder. Efectivamente el dato que almacenaba en ese momento se pierde. Cuando el timer0 provoca la interrupción, la rutina debería almacenar el valor de dos bytes en dos posiciones de la EEPROM, pero no lo hace, el programa no se cuelga, y la rutina para grabar la EEPROM funciona correctamente, pero al utilizarla dentro la interupción del timer0, la memoria EEPROM no almacena los datos.¿El timer0 está involucrado de alguna manera con el proceso de escritura de la memoria EEPROM?

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: timer0 y EEPROM
« Respuesta #3 en: 20 de Febrero de 2006, 18:39:00 »
Escrito originalmente por rodo74
Hola maunix, gracias por responder. Efectivamente el dato que almacenaba en ese momento se pierde. Cuando el timer0 provoca la interrupción, la rutina debería almacenar el valor de dos bytes en dos posiciones de la EEPROM, pero no lo hace, el programa no se cuelga, y la rutina para grabar la EEPROM funciona correctamente, pero al utilizarla dentro la interupción del timer0, la memoria EEPROM no almacena los datos.¿El timer0 está involucrado de alguna manera con el proceso de escritura de la memoria EEPROM?


No, no están relacionados para nada.  De seguro es algun error en tu rutina de interrupcion.  Probablemente no almacenas correctamente lo que se llama el "contexto" que es el WREG, PCLATH, STATUS y FSR.

Revisa bien eso y si aún asi tienes problemas, postea tu código.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado poi5on

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 127
RE: timer0 y EEPROM
« Respuesta #4 en: 20 de Febrero de 2006, 18:46:00 »
Hola amigo,
Otro problema seria, estas llamando la rutina de guardar en la eeprom desde la interrupción? te recomiendo que hagas otra rutina identica de guardar en la eeprom pero dentro de la interrupción. Yo he tenido algunos problemas cuando llamo a otras rutinas en el cuerpo del programa desde la interrrupción.
Saludos

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
RE: timer0 y EEPROM
« Respuesta #5 en: 21 de Febrero de 2006, 09:37:00 »
¿Y si hablamos de tiempos?

¿Cada cuanto se produce tu interrupción TIMER0? A mi  me han dado problemas interrupciones que se producen mas rápidamente de lo que mi código de interrupción tarda en ejecutarse. Resultado: la ejecución de la interrupción se solapa con la anterior con resultados absolutamente imprevisibles ...


Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: timer0 y EEPROM
« Respuesta #6 en: 21 de Febrero de 2006, 16:25:00 »
Escrito originalmente por RedPic
¿Y si hablamos de tiempos?

¿Cada cuanto se produce tu interrupción TIMER0? A mi  me han dado problemas interrupciones que se producen mas rápidamente de lo que mi código de interrupción tarda en ejecutarse. Resultado: la ejecución de la interrupción se solapa con la anterior con resultados absolutamente imprevisibles ...



Mmmm, eso es porque tu código es algo pobre...
Se puede mandar a escribir la eeprom y hacer otras cosas, miles de ellas,  hasta esperar los 4 msegundos que tarda aproximadamente en escribir el dato.

Luego chequeas el flag EECON1,WR de si está completa la grabación, si está completa mandas a guardar el siguiente dato, sino sigues con el flujo del programa.  El programa puede hacer cientos de interrupciones mientras grabas la eeprom...

Estoy casi seguro que nuestro amigo tiene un problema en su código no en el pic.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado rodo74

  • PIC10
  • *
  • Mensajes: 5
RE: timer0 y EEPROM
« Respuesta #7 en: 24 de Febrero de 2006, 14:27:00 »
hola maunix, poi5on, RedPic, gracias por su ayuda. Les comento que la falla no estaba en el código, pues este funciona correctamente en el MPLAB, sino era un problema de ruido eléctrico. Al colocar un filtro en la entrada o en la salida del regulador 7805, el programa funciona correctamente y las posiciones de la memoria EEPROM se almacenan correctamente.
Tengo otra pregunta, estoy intentando realizar una fuente initerrumpida para mi circuito, esto para evitar que el pic se resetee cuando la corriente de la línea eléctrica se corte abruptamente, en este caso el pic se alimentaría con una
batería de 3V; el consumo de corriente del circuito es bajo. ¿Podrían ayudarme?
Rebotado

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: timer0 y EEPROM
« Respuesta #8 en: 25 de Febrero de 2006, 07:43:00 »
Escrito originalmente por rodo74
hola maunix, poi5on, RedPic, gracias por su ayuda. Les comento que la falla no estaba en el código, pues este funciona correctamente en el MPLAB, sino era un problema de ruido eléctrico. Al colocar un filtro en la entrada o en la salida del regulador 7805, el programa funciona correctamente y las posiciones de la memoria EEPROM se almacenan correctamente.


Eso que mencionas del ruido eléctrico es un problema común que te pasará con cualquier memoria eeprom que utilices siempre.

En los pics, lo que sucede es que si hay ruido un pic puede entrar a encenderse y apagarse por instantes (precisamente en le momento en que conectas la alimentación).  Si esto pasa justo cunado estas "leyendo", una operación de lectura se puede convertir en una de escritura precisamente por como se setean los bits e n los registros que programan al microcontrolador.

Sin entrar en detalles , activa el Brown Out Reset, mejora tu fuente y listo.

Escrito originalmente por rodo74
Tengo otra pregunta, estoy intentando realizar una fuente initerrumpida para mi circuito, esto para evitar que el pic se resetee cuando la corriente de la línea eléctrica se corte abruptamente, en este caso el pic se alimentaría con una
batería de 3V; el consumo de corriente del circuito es bajo. ¿Podrían ayudarme?
Rebotado

Creo que esto amerita un nuevo hilo.  Además deberás saber que si utilizas un pic a 5V deberás subir la tensión.  Esto lo veo ideal para un pic de 3V como la familia LF.  Eso si para que anden con 3V la frecuencia del clock debe ser de 4Mhz

Saludos

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)