Gast
#1157932
Hallo, ich versuche gerade einen I2C-Slave (DS1337) am TWI eines Atmega32 anzusprechen.Der Atmega ist Master, der DS1337 der einzige Slave. Was die Software angeht, habe ich mich exakt an das Datenblatt gehalten. Meine Kommunikation funktioniert so, dass ich ein Byte (die interne Registeradresse des DS1337) an den Slave sende (Master transmitter mode) und dann vom DS1337 lese (Master receiver mode): 1. Sende Start condition - TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) 2. Sende SLA+W 3. Sende Datenbyte (hier: die Register Adresse des DS1337) 4. Sende Stop - TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN) Bis hier funktioniert alles perfekt. Danach möchte ich vom DS1337 lesen: 1. Sende Start condition - TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) while (!(TWCR & (1<<TWINT))); ... Leider bekomme ich als Statuscode hier nicht $08 zurück (START condition) sonder $10 (Repeated START condition). Wurde die STOP-condition des vorigen Buszyklus vielleicht nicht richtig gesendet? Wenn ja, wie kann ich das überprüfen. Warten auf TWINT und Abfrage des Status geht leider nach STOP nicht. Gruss Mike