fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

EEPROM en 16f84a
 
Avisos
Vaciar todo

EEPROM en 16f84a

5 Respuestas
4 Usuarios
0 Reactions
2,724 Visitas
turman
Respuestas: 98
Topic starter
(@turman)
Trusted Member
Registrado: hace 19 años

Hola, bueno lo que voy a preguntar, he mirado por encima en el foro y no se si alguna vez se ha comentado el tema. Bueno, resulta que quiero hacer un reloj despertador tipico, por supuesto quiero que me despierte a una hora que configure yo de forma determinada. Mi pregunta es, puedo utilizar la memoria eeprom del 16f84a, como memoria persistente, es decir sabría hacerlo, para que si el despertador esta conectado todo el tiempo, me puede guardar la hora, pero ¿ que pasa si se va la luz ?, se apagaría el micro y la posible modificacion a la programacion de fabrica se me borraría, ¿ es posible mantener una zona de memoria , la cual se pueda modificar "alegremente" y que si se va la luz se mantenga lo que he configurado anteriormente ??

Un saludo a todos
gracias por las respuestas, anticipadamente !!!!!

Responder
4 respuestas
dosky
Respuestas: 82
(@dosky)
Trusted Member
Registrado: hace 18 años

Buenas turman, si se puede utilizar los 64B de EEPROM de datos para almacenar la hora, como una variable remanente. Si miras el datasheet del 16F84a exactamente veras que hay un apartado referido a este tema con los registros que necesitas y la manera de realizarlo. Espero haberte sido de ayuda.

Saludos.

Responder
heli
Respuestas: 748
 Heli
(@heli)
Ardero
Registrado: hace 19 años

Según el caso puedes usar dos formas:
Si sabes cuando han cambiado los datos, por ejemplo la programación de la hora de la alarma etc, cada vez que los cambias en RAM lo copias a la EEPROM. Al arrancar el micro lo copias de EEPROM a RAM y ya está.
Si no sabes cuando cambian los datos, o cambian muy a menudo (no se puede hacer lo anterior siempre que quieras, escribir en la EEPROM lleva mucho tiempo y el número de escrituras hasta que se estropea es limitado)
entonces puedes hacerlo es así, aunque necesitas algo de hardware:
Programas el reloj de forma normal, con los datos en RAM.
Conectas una línea de "power fail" a una interrupción INT (pata 7) del micro. Esto se hace con un comparador en la línea de alimentación. Cuando la alimentación cae, por ejemplo a menos de 4V, activa la pata INT, pero hasta que alcance los 2V, que es el límite de funcionamiento del micro, y se activa la interrupción que tiene tiempo para salvar en la EEPROM los datos que quieras.
Al arrancar los cargas de EEPROM a RAM y a funcionar.
Básicamente la EEPROM hace de "copia de seguridad" de los datos en RAM. Pero para trabajar necesitas tener los datos en RAM.
Con el compilador CCS se hace con las funciónes "dato = read_eeprom(direccion)" y "write_eeprom(direccion, dato)".

Responder
ranganok
Respuestas: 3875
(@ranganok)
Ardero
Registrado: hace 19 años

turman, ponle una pila, todos los relojes la llevan para no perder la hora que funciona en caso que se pierda la alimentación..

S2

Ranganok Schahzaman

PD: El programa no se pierde (esta grabado en FLASH), lo que se pierde son los datos en RAM.

Responder
turman
Respuestas: 98
Topic starter
(@turman)
Trusted Member
Registrado: hace 19 años

Muchas gracias a todos, he mirado el datasheet, es verdad , puff... , viene hasta un ejemplo,... Bueno pues nada me liaré manos a la obra a ver que tal se me da esto.

Heli, tendré muy encuenta tu propuesta. Me parece una buena solución.

Un saludo
ciao

Responder
Compartir: