www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM AT24C1024B


Autor: Jenny Ioannidis (jenny-i)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle,

ich arbeite mit der Plattform von Conrad, sprich C-Control. Habe mir den 
PRO BOT 128 gekauft und diesen anschließend mit einem 
Beschleunigungssensor verbunden. Wenn der Robi jetzt fährt, werden die 
Beschleunigungen in x,y und z Richtung ausgelesen. Das ganze habe ich 
über den I2C BUS konzipiert.

Nun möchte ich die augelesenen Werte zwischenspeichern und später wieder 
auslesen. Dafür habe ich das AT24c1024B EEPROM gewählt.
Da ich mehrer Daten speichern möchte empfiehlt sich der Page Write 
Modus.

Laut Datenblatt kenne ich die Deviceadresse(1010 xx10) und bin nach der 
Routine bei meine Programmierung vorgegangen.

void main (void)
{

    PRO_BOT128_INIT();
    I2C_Init(I2C_100kHz);

    Thread_Start(1,bma);
    Thread_Delay(10);

    //EEPROM speichern

    word adresse_eep;
    adresse_eep=0xA2;

    int x_long,y_long,z_long;
    unsigned int x_short,y_short,z_short;

    unsigned int EEPROM_x_short,EEPROM_y_short,EEPROM_z_short;
    int EEPROM_x_long,EEPROM_y_long,EEPROM_z_long;

    I2C_Start();
    I2C_Write(adresse_eep); //Device Adresse write
    I2C_Write(0x00); // MSB
    I2C_Write(0x02); // LSB

    I2C_Write(x_short);
    I2C_Write(x_long);

    I2C_Write(y_short);
    I2C_Write(y_long);

    I2C_Write(z_short);
    I2C_Write(z_long);

    I2C_Stop();

    // EEPROM lesen

    I2C_Start();
    I2C_Write(adresse_eep); // Device Adresse write
    I2C_Write(0x00);
    I2C_Write(0x02);

    I2C_Start();
    I2C_Write(0xA3); // Device Adresse read

    EEPROM_x_short=I2C_Read_ACK();
    EEPROM_y_short=I2C_Read_ACK();
    EEPROM_z_short=I2C_Read_ACK();

    EEPROM_x_long=I2C_Read_ACK();
    EEPROM_y_long=I2C_Read_ACK();
    EEPROM_z_long=I2C_Read_NACK();

    I2C_Stop();

    AbsDelay(100);


    EEPROM_x_long=((EEPROM_x_long*4)+(EEPROM_x_short/64));

    EEPROM_y_long=((EEPROM_y_long*4)+(EEPROM_y_short/64));

    EEPROM_z_long=((EEPROM_z_long*4)+(EEPROM_z_short/64));

// Anschließend erfolgt die Ausgabe
}

Damit ich in C-Control den Robi fahren und Werte auslesen kann, arbeite 
ich hier mit Threads.
Nun zu meinem Problem, die Daten die ich anschließend erhalte nach dem 
Speichern sind für x,y und z identisch warum??

Wo liegt mein Fehler?
Wenn ich ein Testprogramm schreibe indem ich nur 2 festgelegte Werte von 
mir ins EEPROM speicher(ohne fahren,ohne Sensor) und anschließend 
auslese erhalte ich exakt die richtigen Werte.

Über Eure hilfe wäre ich sehr dankbar.

Gruß
Jenny

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.