Hallo, ich benutze die I2C Master Library von P. Fleury und habe da ein
kleines Problem.
Hin und wieder, wenn ich mit meiner Funktion ein Datum + Uhrzeit in den
externen I2C EEPROM AT24C512 speichern will, schreibt er mir den ersten
Eintrag, also die Stunde nicht, sondern stattdessen einfach gar nichts,
also ich bekomme dann beim Auslesen entweder das, was vorher schon unter
dieser Adresse stand oder 0xFF.
Hier meine Funktion:
1 | void recTime(void)
|
2 | {
|
3 | // Überprüfung auf Änderung des Monats oder des Jahres
|
4 |
|
5 | if ((prevMonth != recMonth) || (count == 0))
|
6 | {
|
7 | eeprom_write_word(&eeMonthAddress[recMonth-1], address);
|
8 | }
|
9 |
|
10 | // Schreiben der Werte in externen EEPROM
|
11 |
|
12 | i2c_start_wait(i24c512+I2C_WRITE);
|
13 | i2c_write(address >> 8);
|
14 | i2c_write(address);
|
15 | i2c_write(recHour);
|
16 | i2c_write(recMinute);
|
17 | i2c_write(recSecond);
|
18 | i2c_write(recDate);
|
19 | i2c_write(recMonth);
|
20 | i2c_stop();
|
21 |
|
22 | address += 5; // Adresse erhöhen
|
23 |
|
24 | count++;
|
25 | }
|
Ich sollte vielleicht noch dazu sagen, dass ich nicht den Hardware TWI
meines ATMEGA32 verwende, da dieser komischerweise 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.
Außerdem verwende ich noch den internen Timer2 zwecks Uhrzeit.
Woran kann nun dieses EEPROM Problem liegen, bzw. hat einer von euch
eine Idee, wie ich es beheben kann?