24FC1025 Lesevorgang endet in endloser Schleife

Gast #4960078
Lesenswert?

Hallo zusammen,

seit gestern versuche ich den 24FC1025 in Gang zu kriegen, jedoch hängt 
der Mikrocontroller (ATmega8) in der i2c_write()-Routine der Fleurys 
Bibliothek.

Da am Bus weitere Teilnehmer hängen und diese auch funktionieren, 
schließe ich den Hardware-Teil weitestgehend aus.

Der Code wurde bereits mehrfach vereinfacht um den Fehler auszuschließen 
und jetzt in dem Stadium:
1
i2c_start_wait(TWI_ADDR_EXT_EEPROM+I2C_WRITE);
2

3
if(i2c_write(EXT_EEPROM_ADDR_HIGHBYTE))
4
{
5
   event_error();
6
   i2c_stop();
7
}
8

9
i2c_write(EXT_EEPROM_ADDR_LOWBYTE);
10
i2c_rep_start(TWI_ADDR_EXT_EEPROM+I2C_READ);
11
uint8_t var = i2c_readNak();
12
i2c_stop();

Nach dem start_wait(...) kommt auch ein Acknowledge rein. Somit ist die 
Adresse schon mal richtig. Jedoch nichts mehr im i2c_write(...) - wo es 
sich in der
1
// wait until transmission completed
2
while(!(TWCR & (1<<TWINT)));

aufhängt. Zusammenfassend ist die Vorgehensweise also die, dass ich im 
WRITE-Modus den EEPROM-Adresszeiger angebe (16 Bit), dann über Neustart 
im READ-Modus ein Byte anfordere (mit Nak()) und die Verbindung per 
i2c_stop() beende.

Wo ist also mein Fehler? Ich sehe wahrscheinlich den Wald vor lauter 
Bäumen nicht mehr...

Danke im Voraus.

P.S.: TWI-Frequenz bereits von 100 bis 400 kHz ausprobiert.
Moderator (Firma: Titel) Persönliche Seite #4961155
Lesenswert?

Anonym schrieb:
> Der Code wurde bereits mehrfach vereinfacht um den Fehler auszuschließen
> und jetzt in dem Stadium:...
Und genau der Code verursacht Probleme?
Oder hast du da einen etwas vollständigeren Dreizeiler?

> - wo es sich in der // wait until transmission completed
> while(!(TWCR & (1<<TWINT)));
> aufhängt.
Und was sagt das Oszi an dieser Stelle?
(Glücklich der, der ein digitales hat... ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren