uControl
Mayo 23, 2013, 06:48:28 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: Memoria EEPROM en Microcontroladores Freescale  (Leído 2454 veces)
0 Usuarios y 1 Visitante están viendo este tema.
jhary3000
PIC10F
*
Desconectado Desconectado

Sexo: Masculino
Mensajes: 9



« : Septiembre 06, 2011, 12:58:58 »

Un saludo a todos.

Tengo una inquietud en cuanto a las memorias de los microcontroladores Freescale.

Lo que pasa es que estoy programando una maquina que presta servicios a los usuarios.
Cada vez que se activa la máquina, pues aumenta el conteo de servicios.

Mi pregunta es:
¿Cómo hago para guardar en el micro ese conteo permanentemente sin que se me borre, en caso de que la maquina quede sin electricidad? Huh?

Especificamente estoy utilizando el Micro JL3 y GP32 y los estoy programando en Code Warrior con lenguaje C.


Muchas Gracias y Existos...!!!
« Última modificación: Septiembre 07, 2011, 01:42:40 por jhary3000 » En línea
Diogenes
Visitante
« Respuesta #1 : Septiembre 06, 2011, 01:19:46 »

Hola, aunque esos micros no estan recomendados para nuevos diseños, las rutinas de grabación estan incluidas dentro de la rom del mismo. Te pedo una nota de aplicación donde explica como hacerlo.

http://cache.freescale.com/files/microcontrollers/doc/app_note/AN2183.pdf?fpsp=1&WT_TYPE=Application%20Notes&WT_VENDOR=FREESCALE&WT_FILE_FORMAT=pdf&WT_ASSET=Documentation

Saludos !
En línea
jhary3000
PIC10F
*
Desconectado Desconectado

Sexo: Masculino
Mensajes: 9



« Respuesta #2 : Septiembre 06, 2011, 01:29:56 »

Muchas gracias Diogenes.

Estuve revisando el código y es demasiado extenso.

Pero me gustaría saber si alguien tiene información acerca del tema para programar el micro en lenguaje C.

 duda No sé si sea posible solo re-programar la parte de la memoria donde está la variable. duda

Gracias.!!
En línea
Diogenes
Visitante
« Respuesta #3 : Septiembre 06, 2011, 02:10:24 »

Hola, lamento no poder ayudarte más, son micros que no trabaje, te recomiendo leer este foro ( es un poco viejo ) pero se que hay mucha info.


http://ar.groups.yahoo.com/group/MCUMotorola/

Saludos !
En línea
geronimox
Moderador
PIC18F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1176



WWW
« Respuesta #4 : Septiembre 07, 2011, 12:30:15 »

Esos micros traen eeprom? O te refieres a la flash?
En línea

Gero. Divide & Conquer.>----.
^-------------------------------|
-'-------------------------------'
jhary3000
PIC10F
*
Desconectado Desconectado

Sexo: Masculino
Mensajes: 9



« Respuesta #5 : Septiembre 07, 2011, 01:41:05 »

No, Estos microcontroladores no traen EEPROM.
Pero yo necesito que me funcione como una EEPROM para guardar un dato variable, pero que quede grabado en una memoria del micro para que no se borre cuando el micro se quede sin alimentación VCC.

Al inicio de este post está la descripción de lo que necesito.  Wink
En línea
gargolan
Amigo de uControl
PIC10F
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 91



WWW
« Respuesta #6 : Septiembre 07, 2011, 06:45:58 »

No tienen eeprom pero podes usar la flash para guardar datos usando las rutinas internas que estan en ROM, las cuales las usa el bootloader.
Fijate en estas notas de aplicación también tenes ejemplo de código.
http://www.freescale.com/files/microcontrollers/doc/app_note/AN2635.pdf
http://www.freescale.com/files/microcontrollers/doc/app_note/AN2874.pdf

Y broche de oro, como emular una eeprom en flash
http://www.freescale.com/files/microcontrollers/doc/app_note/AN2346.pdf
Saludos.
En línea
geronimox
Moderador
PIC18F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1176



WWW
« Respuesta #7 : Septiembre 07, 2011, 01:14:22 »

Aqui te dejo las rutinas de escritura y lectura en la flash..
Hay que recordar que el borrado de la flash se realiza por bloques, en el caso de los S08, estos son de 512Bytes.
Asi que lo primero que tenes que hacer es decirle a codewarrior que NO ubique codigo en determinado sector... Este sector lo vas a usar para la persistencia de tus datos.
Otro detalle importante, es que la flash no puede ser escrita desde codigo que se esta ejecutando en la misma flash, por lo que se copian las rutinas de escritura a la ram, y se salta a la misma...

Para reservar un sector de codigo, tenes que abrir el archivo PRM de tu proyecto y buscar la palabra ROM debajo de SECTIONS
En el caso de un SH8, vas a ver algo asi:
Código:
ROM =  READ_ONLY    0xE000 TO 0xFFAD;

Asi que de esa zona te robas 512 bytes y creas una nueva zona llamada MI_ROM:
Código:
ROM     =  READ_ONLY    0xE200 TO 0xFFAD;
    MI_ROM  =  READ_WRITE   0xE000 TO 0xE1FF;
Podes ponerle el nombre que quieras, la idea es que codewarrior no use esa zona...

Despues agregas el archivo FlashProgram.c a tu proyecto y listo =D

Ejemplo para escribir en flash:
Código:
#include FlashProgram.h
  unsigned char temp;   //variable usada por la "funcion" Program_Byte
  byte variable;
  variable=33;
  Page_Erase(0xE000);
  Program_Byte(0xE000,variable);

Ejemplo para leer de flash:
Código:
#include FlashProgram.h
  byte variable;
  variable=FlashRead(0xE000);

Saludos!

(Estos códigos que adjunto no son ninguna novedad, creo que lo saque de alguna nota de aplicación)

* FlashProgram.c (0.48 KB - descargado 99 veces.)
* FlashProgram.h (0.41 KB - descargado 87 veces.)
En línea

Gero. Divide & Conquer.>----.
^-------------------------------|
-'-------------------------------'
jhary3000
PIC10F
*
Desconectado Desconectado

Sexo: Masculino
Mensajes: 9



« Respuesta #8 : Octubre 12, 2011, 09:03:22 »

geronimox, Muchisimas Gracias por este aporte.

Ahora; me gustaría saber si puedo utilizar el mismo código para un QT4..¿  duda?

Gracias...!!!
En línea
jhary3000
PIC10F
*
Desconectado Desconectado

Sexo: Masculino
Mensajes: 9



« Respuesta #9 : Octubre 13, 2011, 02:50:36 »

Aqui te dejo las rutinas de escritura y lectura en la flash..
Hay que recordar que el borrado de la flash se realiza por bloques, en el caso de los S08, estos son de 512Bytes.
Asi que lo primero que tenes que hacer es decirle a codewarrior que NO ubique codigo en determinado sector... Este sector lo vas a usar para la persistencia de tus datos.
Otro detalle importante, es que la flash no puede ser escrita desde codigo que se esta ejecutando en la misma flash, por lo que se copian las rutinas de escritura a la ram, y se salta a la misma...

Para reservar un sector de codigo, tenes que abrir el archivo PRM de tu proyecto y buscar la palabra ROM debajo de SECTIONS
En el caso de un SH8, vas a ver algo asi:
Código:
ROM =  READ_ONLY    0xE000 TO 0xFFAD;

Asi que de esa zona te robas 512 bytes y creas una nueva zona llamada MI_ROM:
Código:
ROM     =  READ_ONLY    0xE200 TO 0xFFAD;
    MI_ROM  =  READ_WRITE   0xE000 TO 0xE1FF;
Podes ponerle el nombre que quieras, la idea es que codewarrior no use esa zona...

Despues agregas el archivo FlashProgram.c a tu proyecto y listo =D

Ejemplo para escribir en flash:
Código:
#include FlashProgram.h
  unsigned char temp;   //variable usada por la "funcion" Program_Byte
  byte variable;
  variable=33;
  Page_Erase(0xE000);
  Program_Byte(0xE000,variable);

Ejemplo para leer de flash:
Código:
#include FlashProgram.h
  byte variable;
  variable=FlashRead(0xE000);

Saludos!

(Estos códigos que adjunto no son ninguna novedad, creo que lo saque de alguna nota de aplicación)

geronimox, Gracias por el código; pero me surje un problema:
1. A la hora de compilar me aparece un error que dice que me falta el archivo Cpu.h. duda
2. El código es para HCS08, pero el JL3,GP32 y QT4 son HC08; no sé si funcione igual. duda

El código que me sale en el QT4, el cual corresponde al archivo PRM es el siguiente:

Código:
/* This is a linker parameter file for the mc68hc908qt4 */

NAMES END /* CodeWarrior will pass all the needed files to the linker by command line. But here you may add your own files too. */

SEGMENTS /* Here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. */
    Z_RAM                    =  READ_WRITE   0x0080 TO 0x00FF;
    ROM                      =  READ_ONLY    0xEE00 TO 0xFDFF;
    ROM1                     =  READ_ONLY    0xFFB0 TO 0xFFBD;
    ROM2                     =  READ_ONLY    0xFFC2 TO 0xFFCF;
 /* INTVECTS                 =  READ_ONLY    0xFFDE TO 0xFFFF; Reserved for Interrupt Vectors */
END

PLACEMENT /* Here all predefined and user segments are placed into the SEGMENTS defined above. */
    _PRESTART,                          /* startup code */
    STARTUP,                            /* startup data structures */
    ROM_VAR,                            /* constant variables */
    STRINGS,                            /* string literals */
    VIRTUAL_TABLE_SEGMENT,              /* C++ virtual table segment */
    DEFAULT_ROM,
    COPY                                /* copy down information: how to initialize variables */
                                        INTO  ROM; /* ,ROM1,ROM2: To use "ROM1,ROM2" as well, pass the option -OnB=b to the compiler */

    DEFAULT_RAM,                        /* non-zero page variables */
    _DATA_ZEROPAGE,                     /* zero page variables */
    MY_ZEROPAGE                         INTO  Z_RAM;
END

STACKSIZE 0x30

//VECTOR 0 _Startup     /* Reset vector: this is the default entry point for an application. */

De nuevo gracias...!!
« Última modificación: Octubre 13, 2011, 02:57:15 por jhary3000 » En línea
geronimox
Moderador
PIC18F
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1176



WWW
« Respuesta #10 : Octubre 15, 2011, 04:11:59 »

hola jhary3000
No probé el código en ningún hc08, me imagino que no funcionara.
Sobre el error de cpu08.h, comenta la linea, compila y a partir de los nuevos errores podes ir haciendo includes de los archivos que sean necesarios...
O sino podes usar esta nota tecnica: http://www3.fi.mdp.edu.ar/electronica/accesoporcatedras/sistemdigdocs/PROG_Flash_JLK.pdf
Saludos!
En línea

Gero. Divide & Conquer.>----.
^-------------------------------|
-'-------------------------------'
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.18 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.096 segundos con 29 consultas. (Pretty URLs adds 0.01s, 3q)