Nur ein Schreibvorgang auf EEPROM möglich


hallo zusammen,
ich habe einen eeprom, 24lc64
auf den ich einen int schreiben möchte.
hierzu zerleg ich den int in zwei einzelne bytes und speichere diese ab.
zum auslesen lese ich die zuvor abgelegten zwei byte's aus und setze sie wieder zu einem int zusammen.
leider gibt es ein problem beim schreiben: es wird immer nur das erste byte auf den eeprom geschrieben, das zweite nicht.
jetzt meine frage: ist die software richtig?
code: [select]
#include <wire.h>
#define eeprom_address 0x50

void setup()
  {
    wire.begin(); // initialise connection
    serial.begin(9600);
    eeprom_inttobyte(409, 1);
    delay(20);
  }

  void loop()
  {
    serial.println(eeprom_2bytetoint(1));
    delay(10000);
  }

 funktionen:
code: [select]
void eeprom_writebyte(unsigned int eeaddress, byte data) {
  wire.begintransmission(eeprom_address);
  wire.write((int)(eeaddress >> 8));    //msb
  wire.write((int)(eeaddress & 0xff));  //lsb
  wire.write(data);
  wire.endtransmission();
}

byte eeprom_readbyte(unsigned int eeaddress) {
  byte rdata = 0xff;

  wire.begintransmission(eeprom_address);
  wire.write((int)(eeaddress >> 8));    //msb
  wire.write((int)(eeaddress & 0xff));  //lsb
  wire.endtransmission();

  wire.requestfrom(eeprom_address, 1);
  if (wire.available()) rdata = wire.read();
  return rdata;
}

void eeprom_inttobyte(unsigned int integer, unsigned int startadr) {
  // convert unsigned int 2-byte
  // integer = int save 2 byte
  // startadr = address of first byte
  // int ---> 1111 1111 1111 1111 ---> (1111 1111)byte1, (1111 1111)byte2
  byte a;
  byte b;

  = (int)((integer >> 8) & 0xff);
  b = (int)(integer & 0xff);

  eeprom_writebyte(startadr, a);
  serial.print("a = ");
  serial.println(a);
  startadr += 1;
  eeprom_writebyte(startadr, b);
  serial.print("b = ");
  serial.println(b);
}

int eeprom_2bytetoint(unsigned int startad) {
  // convert 2-byte unsigned int
  int anotherint;
  byte c;
  byte d;

  c = eeprom_readbyte(startad);
  serial.print("c = ");
  serial.println(c);
  startad += 1;
  d = eeprom_readbyte(startad);
  serial.print("d = ");
  serial.println(d);

  anotherint = int(( (c << 8) + (d) ));

  return anotherint;
}


anschluss:

a0, a1, a2, vss, wp ---> gnd
vcc ---> 5v
scl ---> a5
sda ---> a4

ich verwende ein arduino uno.

hoffentlich könnt ihr mir helfen,
gruß steffen

dafür gibt es auch fertige makros:
http://arduino.cc/en/reference/wordcast
http://arduino.cc/en/reference/lowbyte
http://arduino.cc/en/reference/highbyte

ist vielleicht sicherer als das selbst zu erledigen und dabei fehler mit den datentypen zu machen

der cast auf int bei der adresse ist überflüssig. außerdem sollte auch multi-byte zugriff möglich sein. man kann mehr als 1 byte hintereinander lesen und schreiben. jedes byte einzelne zu behandeln geht aber natürlich auch.


Arduino Forum > International > Deutsch (Moderator: uwefed) > Nur ein Schreibvorgang auf EEPROM möglich


arduino

Comments