Pages: [1]   Go Down
Author Topic: ayuda con codigo para eeprom con i2c  (Read 999 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 19
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

estoy trtandoo de almacenar datos en la memoria eeprom 24AA256 esta es una memoria de 32kx8bits, cuenta con 8 paginas de 32k cada una la cual se puede acceder mediante los pines A2,A1 y A0 de la memoria, el problema que tengo es para poder incluir la libreria
<TWIPROM.h>
el codigo que tengo hasta ahora es:

#include <TWIPROM.h>
#include <Wire.h>
void setup(){
  TWIPROM.begin();
  TWIPROM.assingn(8,9,10);
  TWIPROM.setBlock(0);
  delay(1000);
}

void loop(){
  TWIPROM.write(12,0x2A);
  delay(500);
  Serial.println("leyendo Pagina 1");
  for(int i=10;i<15;i++){
    Serial.println(i,HEX);
    Serial.println(": ");
    Serial.println(TWIPROM.read(i),HEX);
    delay(50);
  }
}  
me sale el siguiente error
21: error: TWIPROM.h: No existe el archivo o directorio In function 'void setup()':
 In function 'void loop()':
Bad error line: -3

yo tengo en una carpeta la libreria TWIPROM.h pero no se donde debo colocar este archivo para poder cargar el programa a arduino

Logged

Murcia
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Yo utilizo todavía la versión 019 y las librerías se colocan en:

C:\arduino-0019\libraries\xxxxxx

donde xxxxxxx es el nombre de la carpeta que contiene twiprom.h

Supongo que en tu caso sería:

c:\arduino\libraries\twiprom\

Aunque también depende de la carpeta de instalación del soft de arduino.


Saludos, Pakoff
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 19
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hola si bueno gracias, pero el problema es que estoy trabajando en ubuntu y no puedo copiar la carpeta
TWIPROM.h dentro de la carpeta arduino/libraries... no me deja copiar nada ahi.. habia pensado en no usar la libreria
sino tratar de copiar todo el programa en un mismo archivo.pde
Logged

Murcia
Offline Offline
Jr. Member
**
Karma: 0
Posts: 60
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bueno, para empezar creo que la carpeta no debe llamarse TWIPROM.h sino TWIPROM.

Creo que en Ubuntu las librerías van en la misma carpeta que los sketch's, es decir

/home/<usuario>/sketchbook/libraries

Saludos, Pakoff.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 19
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

buscando por el foro encontre el siguiente enlace http://arduinox.blogspot.com del cual saque el siguiente programita para usar una EEPROM 24xx256, bien el prgrama lo he probado y funciona correctamente, quisiera saber saber si alguien ha usado este programa y ha podido escribir en varias paginas de la eeprom, lo que estoy tratando de hacer es escribir en la pagina 1 el dato 100 y en la pagina 2 el dato 25 (esto es un ejemplo) pero cuando voy a leer solo leo el dato 100, les coloco el codigo de lectura y escritura de la eeprom por separado
los pines A0,A1 y A2 estan conectados a los pines 2,3 y 4 del arduino respectivamente

lectura de la Eeprom
void loop (){
  Serial.println("Leyendo");
  digitalWrite(A0,LOW);
  digitalWrite(A1,LOW);
  digitalWrite(A2,LOW);  
  delay(1000);
  
  Wire.beginTransmission(0x50);   //DIRECCION DEL DISPOSITIVO
  Wire.send(150);                     //DIRECCION DE LA PAGINA
  Wire.send(0x01);                      //LEO 1 BYTE DE LA MEMORIA
  Wire.endTransmission();
  Wire.requestFrom(0x50,1);
  if (Wire.available())
       temp = Wire.receive();
  Wire.endTransmission();
  Serial.println(temp,DEC);
    
  Serial.println("Leyendo Pagina 2");
  digitalWrite(A0,HIGH);
  digitalWrite(A1,LOW);
  digitalWrite(A2,LOW);  
  delay(2000);
  Wire.beginTransmission(0x52);   //DIRECCION DEL DISPOSITIVO
  Wire.send(150);                     //DIRECCION DE LA PAGINA
  Wire.send(0x01);                      //LEO 1 BYTE DE LA MEMORIA
  Wire.endTransmission();
  Wire.requestFrom(0x52,1);
    if (Wire.available())
       temp = Wire.receive();
  Wire.endTransmission();
  Serial.println(temp,DEC);
  delay(2000);
}

Escritura de la Eeprom
void loop(){
//*****Escribiendo en la pagina 1******
 digitalWrite(A0,LOW);
 digitalWrite(A1,LOW);
 digitalWrite(A2,LOW);
 Wire.beginTransmission(0x50);     //Direccion de la Pagina a escribir
 Wire.send(150);                  //DIRECCION DE LA PAGINA (puedo acceder hasta 32768 paginas de 8 BYTE cada una)
 Wire.send(0x01);                   //OCUPO 1 BYTE DE LA PAGINA
 Wire.send(100);                   //Dato a escrbir
 Wire.endTransmission();
 delay(2000);
  
//*****Escribiendo en la pagina 2
 digitalWrite(A0,HIGH);
 digitalWrite(A1,LOW);
 digitalWrite(A2,LOW);  
 delay(1000);
 Wire.beginTransmission(0x52);     //Direccion de la Pagina a escribir
 Wire.send(150);                  //DIRECCION DE LA PAGINA (puedo acceder hasta 32768 paginas de 8 BYTE cada una)
 Wire.send(0x01);                 //OCUPO 1 BYTE DE LA PAGINA
 Wire.send(25);                   //Dato a escrbir
 Wire.endTransmission();
 delay(1000);
}
Logged

Offline Offline
Edison Member
*
Karma: 23
Posts: 1375
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Para estos casos tengo un proyecto que a lo mejor te interesa, podrás probar si no se escribe por código mal escrito o por que la memoria está en mal estado.
Aquí tienes el código a grabar en el Arduino y un par de manuales
http://wiki.kungfulabs.com/arduino/ardubus
Si quieres un manual específico para memerias I2C:
http://hackaday.com/2008/11/19/how-to-the-bus-pirate-universal-serial-interface/ (busca donde pone "Setup I2C mode")

Leyendo por encima me parece que lo que tienes mal es cuando mandas la página, ya que tienes que mandar dos datos para la posición y tu sólo mandas uno, te echaría una mano, pero tengo que irme ya.

Un saludo

EDITO: ya he vuelto, así que ahora con tranquilidad ya he visto que es lo que te falla.
Lo que he dicho antes estaba mal, al llamar página a uno de los datos de la posición me ha despistado.

Analicemos el código, en la escritura pones A0,A1 y A2 a 0, por lo que la dirección de la memoria en el bus I2C será 0b1010000 que es 0x50, correcto, y le escribes un 100 en la posición 0x9601, vale.
Luego pones el bit A0 a nivel alto, por lo que modificas la dirección de la memoria a 0b1010001, que es 0x51 y luego llamas a la dirección 0x52, que no existe y por lo tanto no se graba el valor de 25.
Además aunque cambiaras la escritura de 0x52 a 0x51, cuando lo leyeras recibirás el 25, ya que has sobreescrito el 100 que has escrito antes en la misma posición (0x9601).

Tampoco está demás leer la hoja de datos de lo que vayas a usar, te orienta un poco sobre que tienes que mandar y que deberías recibir.
http://ww1.microchip.com/downloads/en/DeviceDoc/21203Q.pdf

Si de todas maneras sigues teniendo alguna duda nos lo dices

Un saludo
« Last Edit: October 11, 2010, 05:46:23 am by chiva » Logged

Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

Pages: [1]   Go Up
Jump to: