Forum: Mikrocontroller und Digitale Elektronik EEPROM AT24C1024B


von Jenny I. (jenny-i)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.