Problema con EEPROM en proteus

Hola a todos quisiera saber como usar la memoria eeprom en proteus con un arduino uno R3, estoy intentando grabar datos con la funcion EEPROM.write(direccion,valor); pero no he podido, voy al menu del proteus: debug>>AVR>>EEPROM MEMORY y veo que no ha grabado nada, o nose como es que graba. Tengo el siguiente codigo:

Código:
#include <EEPROM.h>

int addr = 20, a=2600;
int ex;
void setup()
{
  Serial.begin(9600);
}

void loop()
{
  EEPROM.write(addr,a);
  ex=EEPROM.read(addr);
  Serial.print(ex);
  delay(1000);  
}

y sale lo que esta en la imagen eeprom que adjunte, me esta imprimiendo un 40 y el numero que guarde fue 2600, tambien quisiera saber como guardar la memoria eeprom en un archivo y como usarla posteriormente tambien en el proteus.
 

Adjuntos

  • eeprom.png
    eeprom.png
    35.4 KB · Visitas: 22
No sé de Arduino, pero lo que te está pasando es normal.
En una EEPROM solo puedes escribir 8 bits (1 Byte), o sea que no puedes escribir un número superior a 255.
Lo que estás viendo es el LSB de 2600 = 0x28 y no se está escribiendo el MSB que es 0x0A
Lo que necesitas es separar esa cantidad que pertenece a una variable de 16 bits en dos partes.
Debes obtener el LSB y el MSB y luego grabar esos datos en dos direcciones de la memoria.
Para hacerlo sencillo, puedes crear las funciones que se encarguen de hacer la separación, la escritura y la lectura.

Suerte.
 
Hola, yo soy novato en esto de arduino y de la electronica, lo que no te entiendo es porque el 40 es el bit menos significativo de 2600, que tiene que ver con el numero, que pena la ignorancia man, pero es que soy un poco novato en esto.
No sé de Arduino, pero lo que te está pasando es normal.
En una EEPROM solo puedes escribir 8 bits (1 Byte), o sea que no puedes escribir un número superior a 255.
Lo que estás viendo es el LSB de 2600 = 0x28 y no se está escribiendo el MSB que es 0x0A
Lo que necesitas es separar esa cantidad que pertenece a una variable de 16 bits en dos partes.
Debes obtener el LSB y el MSB y luego grabar esos datos en dos direcciones de la memoria.
Para hacerlo sencillo, puedes crear las funciones que se encarguen de hacer la separación, la escritura y la lectura.

Suerte.
 
40 es el BYTE menos significativo

2600 = 256 * 10 + 40

te recomiendo, antes de largarte a programar, leer sobre representacion de numeros en binario

Saludos
 
Hola, yo soy novato en esto de arduino y de la electrónica, lo que no te entiendo es porque el 40 es el bit menos significativo de 2600, ¿qué tiene que ver con el número?, que pena la ignorancia man, pero es que soy un poco novato en esto.
OK. Como menciona chclau, necesitas estudiar sobre representación numérica.
Sin embargo, no es complicado comprender el porqué el número 40 es el byte menos significativo de 2600.

Toma una calculadora científica y escribe el número decimal 2600
Ahora conviértelo a hexadecimal = A28
Si lo separamos en dos partes, la parte de la izquierda será el MSB y la parte de la derecha será el LSB.
MSB = 0x0A
LSB = 0x28

La A en decimal es 10 y el 28 hexadecimal en decimal es 40, que es el número que ves por el terminal.

¿Ahora comprendes?

Como en cada locación de memoria solo puedes escribir un byte, nada más se escribió el LSB de A28 (28).

En la lectura visual de la EEPROM no vas a ver números en decimal, verás el valor escrito pero en hexadecimal.
Si escribes el decimal 10, en la lectura de la EEPROM verás el hexadecimal 0A.

En proteus se puede cambiar el formato de visualización, pero el hexadecimal es el más común.
 
Ya pude separar los numeros en bytes asi:
Código:
int num=2600;
byte a,b;

a=num; //Guardo los 8 bits menos significativos en la variable tipo byte a
b=num>>8; //Desplazo 8 bits y los dejo como menos significativos y los guardo en la variable b
a=00101000=40=0x28;
b=00001010=10=0x0A;

Ahora mi pregunta es como yo podria volver a unir los numeros, como concatenarlos para que me vuelva a dar 2600.
OK. Como menciona chclau, necesitas estudiar sobre representación numérica.
Sin embargo, no es complicado comprender el porqué el número 40 es el byte menos significativo de 2600.

Toma una calculadora científica y escribe el número decimal 2600
Ahora conviértelo a hexadecimal = A28
Si lo separamos en dos partes, la parte de la izquierda será el MSB y la parte de la derecha será el LSB.
MSB = 0x0A
LSB = 0x28

La A en decimal es 10 y el 28 hexadecimal en decimal es 40, que es el número que ves por el terminal.

¿Ahora comprendes?

Como en cada locación de memoria solo puedes escribir un byte, nada más se escribió el LSB de A28 (28).

En la lectura visual de la EEPROM no vas a ver números en decimal, verás el valor escrito pero en hexadecimal.
Si escribes el decimal 10, en la lectura de la EEPROM verás el hexadecimal 0A.

En proteus se puede cambiar el formato de visualización, pero el hexadecimal es el más común.
 
Atrás
Arriba