Guten Abend,
Ich habe mal wieder ein Problem mit meinen EEPROM Chips. Nachdem ich das
Problem mit denn Schreiben/Lesen vom Chip mit euch in diesen Thread
behoben habe: Beitrag "EEPROM Chip will nicht so wie ich" .
Nun bastele ich mir mit dem ATMega328P(@16 Mhz) ein 20x4 LCD und dem
LM35 Temperatur Sensor eine kleine Wetterstation. Beim Starten frage ich
vom EEPROM die Adresse 11 ab. Auf dieser steht entweder 0xFF(Wenn nicht
gesetzt), oder 0x01(Wenn bereits gesetzt). Dann werden auch auf die
Adressen 12 und 13 0x04 geschrieben. Wenn 0xFF zurück kommt. Diese Werte
nutze ich für die Delay Phasen zwischen denn einzeln Messvorgängen. Wenn
0x01 zurück kommt dann, fülle ich zwei Variablen mit dem Wert von der
Adresse 12 und ein mit der Adresse 13. Nur mein Controllor bleibt mal
wieder beim lesen von der Adresse 11 hängen. Denn das LCD wird nicht
gesetzt und das kommt nach dem lesen vom EEPROM Und ich kann kein Fehler
dafür finden. Der Code fürs schreiben und lesen ist Identisch mit dem
vom anderen Thread und habe ich auch angehängte.
Aso es ist mittlerweile ein neuer EEPROM Chip. Um ein Hardware Defekt
auszuschließen.
Könnt ihr mir da noch mal bitte helfen :)
//EDIT!: Der bleibt nicht beim i2c_read() in der s_eeprom.c Klasse
hängen sondern beim i2c_stop
Der Code wo er hängen bleibt:
1 | void eeprom_check(void) {
|
2 | uint8_t localVar0 = readEEPROM(11); //Adresse 11 auslesen
|
3 | if(localVar0 == 0xFF) { //Abfragen ob noch nicht gesetzt wurde
|
4 | lcd_clear(); //Display setzten
|
5 | lcd_printlc(1, 1, "EEPROM Inited!");
|
6 | lcd_printlc(2, 1, "No Byte Read");
|
7 | lcd_printlc(3, 1, "Writing");
|
8 | writeEEPROM(11, 0x01);//Adresse 11 setzten
|
9 | _delay_ms(500);
|
10 | writeEEPROM(12, 0x04); //Delay Time Time
|
11 | _delay_ms(500);
|
12 | writeEEPROM(13, 0x04); //Delay Measurement Time
|
13 | _delay_ms(2500);
|
14 | }else if(localVar0 == 0x01) { //Abfragen ob gesetzt wurde
|
15 | lcd_clear(); //Display setzten
|
16 | lcd_printlc(1, 1, "EEPROM Inited!");
|
17 | lcd_printlc(2, 1, "Reading complete");
|
18 | basicTempTime = readEEPROM(12); //lesen und setzten
|
19 | _delay_ms(500);
|
20 | basicMeasurementTime = readEEPROM(13); //Lesen und setzten
|
21 | _delay_ms(2000);
|
22 | }
|
23 | }
|