TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: er_clemen en 30 de Julio de 2003, 19:56:00
-
Me gustaria que me aclararan un poquito un tema:
Para guardar el valor de determinadas variables en un programa (p.e. el valor de una variable contador), sin que este valor se pierda si se va el suministro electrico, entiendo que debo almacenar estas variables en una memoria no volatil, creo la EPROM.
El PIC16f84 dispone de memoria EPROM interna, sin embargo el manual (en inglés) del Pic Basic Pro, no deja claro como se accede a ella e insinua algo asi como que hay que añadir una EPROM externa.
¿Alguien podría aclararme esto?
MUCHAS GRACIAS.
-
Hola er_clemen,
A ver si te puedo ayudar.
El PIC 16f84, además de la RAM y la memoria FLASH de programa, tiene 64 Bytes de memoria EEPROM que es no-volatil, como tu dices, esta zona de memoria es idónea para almacenar constantes o las variables de un contador. Si necesitaras mucha capacidad de almacenamiento, y con esta epprom interna no te basta, entonces podrías usar una epprom externa en serie, (I2C, por ejemplo)
Puedes acceder a la memoria EPPROM del PIC, escribir y leer, tanto en asm como en PIC Basic. Yo el PIC Basic no lo controlo mucho (...por no decir nada...), pero creo que las rutinas para grabar en la EPPROM del PIC deben invocarse con la sentencia "EEPROM"... y luego hay otra que graba valores en tiempo de ejecución, "WRITE". Te aconsejo que mires estas sentencias en el manual, o bien que te ayuden los chicos "basic" del foro... yo pedaleo con el ensamblador...
Un saludo!
Elena
-
La EEPROM interna del F84 se lee en PBP con
READ midireccion, midatoleido
siendo midireccion y midatoleido variables de tipo byte
Para escribir, como ha dicho Elena con
WRITE midireccion, midatoescrito
Para escribir direcciones rapidamente debes parar al micro durante 10 milisegundos para que la eeprom termine de escribirse correctamente.
<<No hay mas informacion>>
Saludos
Ricky
-
Creo que cometes un error, RGL.
PBP tengo entendido no necesita que hagas la pausa de 10 mseg para grabar, pues la instruccion se ocupa ya de hacerla.
Como ejemplo yo grabo dos bytes uno tras otro , para guardar una word, y jamas lo necesite.
Utilizo el siguiente codigo, y funciona OK.
write TempHigh, MaxTemp.byte0 "guarda el valor de maxima temperatura
write TempHigh + 1, MaxTemp.byte1 "de calibracion del instrumento
La referencia del la direccion de TempHigh la hago de la siguiente forma, al inicio del programa:
TempHigh CON 10
-
No he analizado el codigo en ensamblador que genera este comando, pero si lo hace asi seria una chapuza y grande, pues existen diferentes dispositivos 24LC512 (por ejemplo) entre otros que tienen un tiempo de grabacion de 5 ms, con lo cual estamos perdiendo un precioso tiempo a lo tonto
Seria bueno aclarar el tema
Saludos
Ricky
-
Buenas:
Por lo que entiendo,estamos hablando de diferentes memoria, una es la eepron interna del micro, que necesita unos 10mseg para grabarse y el pbp es quien maneja esos tiempos ,la otra eepron externa, a su vez se la graba con una instruccion distinta de pbp y vuelve a ajustar los tiempos.
Saludos
Jorge
-
RGL:
No hay que programar tiempos de espera para leer la EEPROM interna, lo hace solo el PBP, tal como asevera Jorge.
En cuanto a la EEPROM externa, se lee con I2CREAD y se escribe con I2CWRITE, donde el PBP aconseja 10 mseg de espera y tambien referirse a la documentacion del dispositivo que utilizes.
En mi caso de utilizarlo conservaria los 10 mseg , aun utilizando un dispositivo de menor tiempo, porque aqui en latinoamerica tenemos que ver si mañana conseguimos el mismo y tiene que funcionar cualquiera.



-
Bien muchachos me pasé de frenada con la memoria externa, pues aunque es eeprom es externa y se controla de diferente modo.
En el manual dice:
" Each WRITE is self-timed and takes about 10 mseg to execute on a PICmicro".
No hay nada como consultar el manual.
Disculpas por el error.
Saludos
Ricky