Memoria EEPROM de un PIC

Hola a todos.

Tengo una duda con respecto a la memoria EEPROM de los PIC. Hice un contador de objetos y guardo el ultimo valor que ha registrado el contador en la memoria EEPROM.

El problema es que por cada conteo hago una escritura en la memoria y en cada encendido una lectura de la misma. Según la Datasheet la memoria admite un millón de ciclos de lectura y escritura ... el contador cuenta hasta 9999. ¿Quiere decir que si llega a esa cifra ya habré gastado 9999 ciclos del millón disponible?.

Gracias.
 

D@rkbytes

Moderador
Para guardar el 9999 se necesitan dos bytes, y si escribes y lees esos dos bytes en cada conteo, sí.
O sea que, puedes escribir y leer cada locación de la memoria 10,000,000 de veces, no 1,000,000
EEPROM.jpg
 
Suelen tener una interrupción cuando baja la tensión de alimentación, de forma que solo lo guardes cuando hace falta y el resto del tiempo no.

No sabia eso y es precisamente el mejor método ... guardar en la memoria solo cuando sea necesario. Investigare sobre el asunto. Muchas gracias.

Para guardar el 9999 se necesitan dos bytes, y si escribes y lees esos dos bytes en cada conteo, sí.
O sea que, puedes escribir y leer cada locación de la memoria 10,000,000 de veces, no 1,000,000
Ver el archivo adjunto 185562
Me refiero al PIC 16F628A.

P2.png
 
No sabia eso y es precisamente el mejor método ... guardar en la memoria solo cuando sea necesario. Investigare sobre el asunto. Muchas gracias.
... y si usas un DS1307, tienen 56bytes de una vram, sostenida con la pila del reloj, esa la podes escribir todas las veces sin pensar en el desgaste... imagino que existren otros chip de memoria con alimentación externa para recordar, despues de quitar la energia principal.
 
... y si usas un DS1307, tienen 56bytes de una vram, sostenida con la pila del reloj, esa la podes escribir todas las veces sin pensar en el desgaste... imagino que existren otros chip de memoria con alimentación externa para recordar, despues de quitar la energia principal.
Si, pero aumentaría el hardware y no quiero agregar mas circuitos.
 
Hola miembro,
Necesito un poco de ayuda de usted aquí.
Tuve un problema cuando escribí eeprom, el compilador me dio un error cuando compilé.
¿Podría usted y alguien aquí ayudarme, lo que está mal.

Código:
write eeprom @0, $232,$3,$0,$20,$20,$20,$54,$45,$53,$49,$53,$20,$46,$49,$4D,$45,$20,$20,$20

Gracias,
Lahmun
 

D@rkbytes

Moderador
el compilador me dio un error cuando compilé.
¿Qué error muestra el compilador?
¿Qué compilador?

Eso parece Basic...
En MicroCode Studio: WRITE Address, Value/s

En Proton: Ewrite Address, [Variable {, Variable… etc. }]

write eeprom @0, $232,$3,$0,$20,$20,$20,$54,$45,$53,$49,$53,$20,$46,$49,$4D,$45,$20,$20,$20
Esos datos entre otras cosas, dice: TESIS FIME
 
hola D@rkbytes,
Muchas gracias por la respuesta. Consulte su referencia electrónica, que funciona bien, para que pueda compilar ese código. Pero todavía tengo otro problema, este problema parece solo un mensaje, pero podría ser usted o alguien aquí que pueda ayudar a resolverlo o decirme cuál es la solución.

Mi problema es el Mensaje (306), cruzando el límite de la página, recibí 3 líneas de mensaje sobre esto.
Capture.JPG
Busqué en otro foro, me sugirieron que agregue esta línea ( @ ERRORLEVEL -306 ), una vez que agregué esta línea adentro, solo tengo 2 líneas de mensajes, lo que significa que todavía tengo 2 líneas de mensajes restantes para borrar y estar bien compilados.

Usé un procesador es (PIC16F876A)

Gracias,
Lahmun
 

D@rkbytes

Moderador
Eso no es un error, es solo un mensaje de advertencia ya controlado por el IDE y la compilación no se verá afectada.
Los elimines o no con "errorlevel X" el hex generado será el mismo.
Lo único que pasará es que no se mostrarán en el log de compilación.
Preocúpate cuando sean errores, ahí ya no se podrá compilar.
 
Eso no es un error, es solo un mensaje de advertencia ya controlado por el IDE y la compilación no se verá afectada.
Los elimines o no con "errorlevel X" el hex generado será el mismo.
Lo único que pasará es que no se mostrarán en el log de compilación.
Preocúpate cuando sean errores, ahí ya no se podrá compilar.
Hola D@rkbytes,
Muchas gracias y dame confianza con mi compilado y mi compilador que usé.

Gracias,
Lahmun
 
Hay que revisar las hojas de datos del PIC a utilizar para saber si habrá o no problemas muy comunes si se usan tablas gigantes.

En el caso de usar C++ el compilador se encarga de todo el "trabajo sucio". Cuando de usa ASM hay que prestar atencion a los saltos de pagina porque ahí empiezan los errores. Errores que vienen al usar llamadas (CALL) porque no cabe toda la dirección mas la codificación de la instrucción en el ancho que usa el PIC para codificarlos (para la linea PIC12 y PIC16 es de 14bits).

Cuando se usa esas instrucciones (CALL por ejemplo, creo que GOTO no tiene problemas pero hay que revisar porque puedo estar errandole) no carga toda la dirección sino una parte por lo que no pueden acceder directamente a toda la memoria sino que queda reducido a una pagina (porcion de memoria de programa). Si los saltos son en la pagina 0 no habrá problemas, pero si los saltos son a otra pagina y no se ajusta el registro para que marque la pagina correspondiente el programa saltara a un lugar no deseado generando problemas ("cuelgues" de programa por ejemplo).

De ahí que el compilador te diga que, si bien no es un error, chequees todo porque puedes haber un problema si no lo has tenido en cuenta.

De echo acabo de buscar y en el foro hay un hilo sobre tu problema con ejemplos. Te aconsejo que lo leas.
 
Arriba