Autor Tema: Memoria no volátil en dspic33FJ64GP710  (Leído 5389 veces)

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

Patoso

  • Visitante
Memoria no volátil en dspic33FJ64GP710
« en: 29 de Diciembre de 2009, 15:04:32 »

Buenas tardes foreros!

Estoy tratando de grabar en memoria no volátil en el dspic33FJ64GP710 y buscando encontré cómo grababan en un dspic30F en la EEPROM.
He intentado buscar dentro del datasheet de mi PIC pero cuando lo miro no encuentro por ninguna parte que tenga memoria EEPROM.
¿Es que no tengo manera de guardar datos en memoria no volátil? y en caso de poder hacerse... ¿alguien me puede dar una pista de cómo?

Muchas gracias a todos, os facilito el datasheet por si puede ayudar.

Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/70286C.pdf

Un saludo.   :-/

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Memoria no volátil en dspic33FJ64GP710
« Respuesta #1 en: 29 de Diciembre de 2009, 17:00:28 »
Ningún 33F tiene EEPROM. Sólo se me ocurre que podrías guardar tus datos en la memoria de programa, reservando una parte de la misma para ellos.

Aquí tienes el código fuente (en ASM) de un bootloader para dsPIC, de donde puedes sacar la parte de escritura en la memoria de programa, que es lo que te interesa:

http://www.microchipc.com/sourcecode/ingenia/ingeniadsPICbootloader_including_firmware_1.1.zip

Patoso

  • Visitante
Re: Memoria no volátil en dspic33FJ64GP710
« Respuesta #2 en: 29 de Diciembre de 2009, 17:20:10 »

Me pondré a ello y te contaré!

Muchísimas gracias otra vez. :)

Patoso

  • Visitante
Re: Memoria no volátil en dspic33FJ64GP710
« Respuesta #3 en: 16 de Enero de 2010, 07:20:01 »

Conseguido!  :-/  :-/  :-/
Al final lo he sacado de un ejemplo de los de microchip que te lo hacía todo, un lujazo.

Saludos!

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Memoria no volátil en dspic33FJ64GP710
« Respuesta #4 en: 16 de Enero de 2010, 07:45:21 »
Hola Patoso

Que bueno que lo solucionaste!

Podrias decir cual es el ejemplo de microchip porfavor!!

Saludos!

P.D. ni enterado que esos pics no tienen eeprom , no los he tocado todavia ,siempre algo nuevo que se aprende!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Memoria no volátil en dspic33FJ64GP710
« Respuesta #5 en: 16 de Enero de 2010, 09:25:20 »
Pues me alegro, ¿cuál es el ejemplo?

Patoso

  • Visitante
Re: Memoria no volátil en dspic33FJ64GP710
« Respuesta #6 en: 16 de Enero de 2010, 13:52:50 »
Es un ejemplo que creo que viene incluido con la "Audio PICtail Plus Daughter Card" que graba audio presionando un pulsador y luego presionando otro pulsador reproduce lo grabado...
El código es de Microchip pero no consigo encontrarlo en la web!

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Memoria no volátil en dspic33FJ64GP710
« Respuesta #7 en: 16 de Enero de 2010, 15:02:07 »
Los únicos dispositivos de 16 bits de microchip que tienen eeprom son los dsPIC30F, lo demás ninguno. Será porque disponen de una gran cantidad de memoria de programa accesible mediante operación de tablas, además de poder mapearlo al sector PSV de la memoria de ram y tratar los datos como tal.

Una variable se la puede localizar en la memoria de programa con el atributo space:

int Variable __attribute__ ((space(prog)));

También puede agregarse el atributo noload para que no se inicialice la variable al ocurrir un reset? No sé si será necesario  :mrgreen:

Luego para escribir o leer en ese espacio en C30 están lo macros definidos:
Código: [Seleccionar]
// Para leer:
TBLPAG = __builtin_tblpage(&b);
tbloffset = __builtin_tbloffset(&b);
DataL=__builtin_tblrdl(tbloffset);
DataH=__builtin_tblrdh(tbloffset);

// Para escribir..
__builtin_tblwtl(tbloffset,DataL);
__builtin_tblwth(tbloffset,DataH);
__builtin_write_NVM()

Para escribir no sé la secuencia exacta  :?


Seria útil que muestres el código que involucra el tema del guardado y lectura de datos en la memoria de programa.

Saludos!
No contesto mensajes privados, las consultas en el foro

Patoso

  • Visitante
Re: Memoria no volátil en dspic33FJ64GP710
« Respuesta #8 en: 02 de Marzo de 2010, 14:36:37 »
Saludos!

Hace tiempo que no me paso por aquí... el código del que os hablé no escribe en memoria de programa, al menos tengo la sospecha que lo hace en una memoria externa que incluye la explorer16, así que lo siento pero no va, metí la pata :(

No obstante, la secuencia de programación está explicada en el datasheet (entiendo que previamente habrá que guardar los datos en los buffer...).

Cargar datos en el buffer:

Set up NVMCON for row programming operations
MOV #0x4001, W0 ;
MOV W0, NVMCON ; Initialize NVMCON
; Set up a pointer to the first program memory location to be written
; program memory selected, and writes enabled
MOV #0x0000, W0 ;
MOV W0, TBLPAG ; Initialize PM Page Boundary SFR
MOV #0x6000, W0 ; An example program memory address
; Perform the TBLWT instructions to write the latches
; 0th_program_word
MOV #LOW_WORD_0, W2 ;
MOV #HIGH_BYTE_0, W3 ;
TBLWTL W2, [W0] ; Write PM low word into program latch
TBLWTH W3, [W0++] ; Write PM high byte into program latch
; 1st_program_word
MOV #LOW_WORD_1, W2 ;
MOV #HIGH_BYTE_1, W3 ;
TBLWTL W2, [W0] ; Write PM low word into program latch
TBLWTH W3, [W0++] ; Write PM high byte into program latch
; 2nd_program_word
MOV #LOW_WORD_2, W2 ;
MOV #HIGH_BYTE_2, W3 ;
TBLWTL W2, [W0] ; Write PM low word into program latch
TBLWTH W3, [W0++] ; Write PM high byte into program latch
.
.
.
; 63rd_program_word
MOV #LOW_WORD_31, W2 ;
MOV #HIGH_BYTE_31, W3 ;
TBLWTL W2, [W0] ; Write PM low word into program latch
TBLWTH W3, [W0++] ; Write PM high byte into program latch


Una vez cargados los buffer la secuencia es:

DISI #5 ; Block all interrupts with priority <7
; for next 5 instructions
MOV #0x55, W0
MOV W0, NVMKEY ; Write the 55 key
MOV #0xAA, W1 ;
MOV W1, NVMKEY ; Write the AA key
BSET NVMCON, #WR ; Start the erase sequence
NOP ; Insert two NOPs after the
NOP ; erase command is asserted

Pero a mi no me ha funcionado, si a alguien se le ocurre qué puede estar pasando...

Un saludo!  :-/

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: Memoria no volátil en dspic33FJ64GP710
« Respuesta #9 en: 28 de Julio de 2010, 00:14:43 »
Hola gente estoy en un problemon con mi dsPic  :( , necesito almacenar solamente 6 datos (una miseria) en memoria no volatil.... según lo que entendí el RTSP requiere la escritura de una página completa (512 instrucciones) y como teóricamente puede llegar a modificarse algunas veces por día, estoy en la duda de que memoria de programa sea una buena opción para esto... y la otra que me queda es una eeprom externa pero solo por 6 datos  :?  ...
Alguien conoce alguna alternativa sencilla para almacenar pocos datos con poco sufrimiento  :D.


Saludos!


Todavía me lamento que no hayan guardado algo de eeprom   :8}
LAS MALVINAS SON ARGENTINAS!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Memoria no volátil en dspic33FJ64GP710
« Respuesta #10 en: 28 de Julio de 2010, 01:46:27 »
¿No tienes en tu circuito ningún otro elemento donde poder hacerlo?, si necesitas usar un RTC por ejemplo, puedes poner el DS1307 que te permite guardar 56 bytes en su eeprom.
En cualquier caso, si te reservas 512 bytes en la zona de memoria de programa para hacer esa escritura, no veo el problema. ¿Crees que llegarás a agotar la capacidad de escritura de la eeprom?, también te ocurriría con una externa, ¿no?

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: Memoria no volátil en dspic33FJ64GP710
« Respuesta #11 en: 28 de Julio de 2010, 14:59:37 »
Es buena idea pero no tengo la posibilidad de pedir prestada memoria de otro dispositivo  :(...
No creo que alcance el limite de escrituras ya que no es un proyecto a largo plazo, aunque me pareció muy engorroso autoprogramar memoria para guardar solo unos datos :oops:
LAS MALVINAS SON ARGENTINAS!