Hallo, habe ein kleines Programm geschrieben, welches mir nach einer bestimmten Aktion (Taster gedrückt + weitere Bedingungen) die aktuelle Uhrzeit in einem externen EEPROM abspeichern soll.
Ich benutze die I2C Master Library von P. Fleury, einen externen I2C EEPROM AT24C512 und habe da ein kleines Problem.
Hin und wieder, wenn ich Datum + Uhrzeit in den EEPROM speichern will, schreibt er mir den ersten Eintrag (das erste Byte), also die Stunde nicht, sondern stattdessen einfach gar nichts, d.h. also ich bekomme dann beim Auslesen entweder das, was vorher schon unter dieser Adresse stand oder 0xFF.
Hier meine Funktion:
Code:
void recTime(void)
{
// Überprüfung auf Änderung des Monats oder des Jahres
if ((prevMonth != recMonth) || (count == 0))
{
eeprom_write_word(&eeMonthAddress[recMonth-1], address);
}
// Schreiben der Werte in externen EEPROM
i2c_start_wait(i24c512+I2C_WRITE);
i2c_write(address >> 8);
i2c_write(address);
i2c_write(recHour);
i2c_write(recMinute);
i2c_write(recSecond);
i2c_write(recDate);
i2c_write(recMonth);
i2c_stop();
address += 5; // Adresse erhöhen
count++;
}
Ich sollte vielleicht noch dazu sagen, dass ich nicht den Hardware TWI
meines ATMEGA32 verwende, da dieser mysteriöserweise gar nicht
funktioniert hat, also jedes mal, wenn ich aus dem EEPROM lesen bzw. in
den EEPROM schreiben wollte, blieb das Programm einfach stehen.
Also verwende ich die softwareemulierte Version auf den Pins des
Hardware TWI Interface (PC0, PC1).
Außerdem verwende ich noch den internen Timer2 zwecks Uhrzeit, natürlich mit Interrupts.
Woran kann nun dieses EEPROM Problem liegen, bzw. hat einer von euch
eine Idee, wie ich es beheben kann?
Lesezeichen