Autor Tema: Como guardar dos variables para que en caso reseteo no se borren  (Leído 1884 veces)

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

Desconectado redep

  • PIC12
  • **
  • Mensajes: 75
Como guardar dos variables para que en caso reseteo no se borren
« en: 25 de Noviembre de 2008, 06:11:07 »
Hola.

Estoy haciendo un proyecto con el 18f4550 en el cual una de las parte hago grabaciones en epprom externa y volcados de esta, la duda que se me plantea es que en el caso de que se resetee o pierda el voltaje el puntero de direccion de la memoria eeprom se perderia y comenzaria de nuevo desde la primera direccion, realmente lo que necesitaria guardar serian dos variables de 8 bits en algun lado que al resetar o apagarlo no se borren, buscando e encontrado sistemas que comentais de grabacion en eeprom interna pero veo que puede encarecer la rapidez de mi programa considerablemente(si no ay otra forma al final tocara esa).

Pero me gustaria saber si alguien a adoptado otro metodo en c18.

gracias por adelantado

Desconectado Slalen

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1079
    • Página web personal de Guillermo Herrero González
Re: Como guardar dos variables para que en caso reseteo no se borren
« Respuesta #1 en: 25 de Noviembre de 2008, 08:36:23 »
otra opción es guardar la dirección del puntero en la dirección cero de la memoria externa....

Pero yo creo que el tiempo sería mas o menos el mismo

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Como guardar dos variables para que en caso reseteo no se borren
« Respuesta #2 en: 25 de Noviembre de 2008, 09:03:11 »
Yo utilizo varios punteros a direcciones de EEPROM externa y para usarlos lo guardo en la EEPROM interna.

Cuando tengo que escribir algo en la EEPROM externa realizo la siguiente secuencia:

1º.- Recupero el valor del puntero desde la EEPROM Interna a la RAM.
2º.- Lo incremento en la RAM y lo utilizo para escribir en la EEPROM Externa.
3º.- Guardo el valor del punterodesde la RAM en la EEPROM Interna.
4º.- Verifico que el valor escrito en la EEPROM interna es igual a que tengo en la RAM
5º.- Continúo ...


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

Desconectado ma4826

  • PIC16
  • ***
  • Mensajes: 130
Re: Como guardar dos variables para que en caso reseteo no se borren
« Respuesta #3 en: 25 de Noviembre de 2008, 10:11:39 »
 Otra posible solución es usar un valor que indique fin de datos, esto sólo es posible si tus datos no pueden tomar todos los posibles valores. Por ejemplo guardas la temperatura en un int8 y sabes que está nunca va a superar los 60ºC, puedes usar por ejemplo cualquier valor de 61 a 127 como valor de fin de datos.

 Escribes en la dirección N+1 el valor fin de datos y  en la dirección N el valor de temperatura actual.

 Si se pierde la alimentación en algún momento sólo tienes que buscar el valor de fin de datos y continuar desde ahí.

 La ventaja con respecto a los metodos de Slalen y de RedPic es que en estos cambias el valor de la misma dirección de la eeprom cada vez que introduces un valor nuevo lo que puede provocar la "muerte" prematura de esa dirección de la eeprom. (Escribiendo 1 dato por segundo en 1000000/3600=277h habrás superado el número de ciclos de escritura típicos de esa celda de la eeprom)

Saludos,

Miguel Ángel.




万人の友は誰の友でもない。

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Como guardar dos variables para que en caso reseteo no se borren
« Respuesta #4 en: 25 de Noviembre de 2008, 14:46:22 »
Hola

¿No existe una interrupción en los PIC18 que indique que la EEPROM interna ya se grabó? Si existiera podrían hacer otras cosas mientras la eeprom está grabándose.  :o

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Como guardar dos variables para que en caso reseteo no se borren
« Respuesta #5 en: 25 de Noviembre de 2008, 21:19:30 »
Podrias usar la interrupcion de caida de voltaje y asi, solo en ese momento (con ayuda de un flag), guardar esa direcion en la eeprom interna o externa. Para esto, necesitarias poner esa interrupcion en el valor de 4.5 o menor (pero no tanto) para considerarlo una caida de tension cuando se le quita la alimentacion al pic y con una buena carga de condensador para que te deje hacer esto con seguridad. El BOR (si lo tienes activado) debera de estar al minimo.

En el caso de reset, ya sea por wdt, se ha comentado que las variables en la ram se mantienen por unos cuantos segundos intactas (aun sin alimentacion) pero esto no es seguro ya que ni se comenta en el datasheet. Esto tampoco serviria si tu mismo le pones un valor a esas variables ram al iniciar el programa.

Lo que comentan Slalen y RedPic son para datos cada cierto tiempo y no cada segundo o rato como bien lo dice ma4826 y que tb puede causar esa 'muerte' en la misma eeprom externa.

Te recomendaria el metodo que te propongo al principio pero eso no sirve para el caso del wdt y peor aun si tienes el pll activado ya que este consume arto, deborando al tipico condensador de 220uf en la fuente, no dejandote tiempo para escribir en cualquier eeprom. A menos que usas esta eeprom a una gran velocidad como con SPI pero tb seria inseguro. Por esto, tb te recomendaria el metodo de slalen y redpic pero es toda una seria de contradiciones xD!

...Prueba!  :D


Suerte.
« Última modificación: 25 de Noviembre de 2008, 21:28:43 por jeremylf »

Desconectado redep

  • PIC12
  • **
  • Mensajes: 75
Re: Como guardar dos variables para que en caso reseteo no se borren
« Respuesta #6 en: 26 de Noviembre de 2008, 07:56:25 »
Por lo que veo la solucion con menos variables de fallar es como la que dice red pic, lo que aria es que cada 5 min guardaria el puntero de las epprom  interna es decir en mi caso 3 bytes(dos de direccion y uno de seleccion de epprom). Por otro lado queria preguntar si es lo mismo guardar en la memoria interna que externa.



 

anything