Hallo,
wir arbeiten für ein Projekt daran, einen I2C-Master und -Slave auf dem
Mega 32 umzusetzen. Die ganze Sache funktioniert soweit auch ganz gut.
Der Slave löst einen Interrupt aus, wenn auf dem Bus seine Adresse
auftaucht, in der Form:
Das funktioniert einwandfrei. Sobald jedoch der Master resettet wirdCode:Signal(TWI_vect) { switch (TWSR) //TWI-Statusregister prüfen und nötige Aktion bestimmen { //alle Fälle werden hier abgehandelt case: ..... case:.... default: { //Falls Bus-Error (TWSR = 0) setze die Register auf dem Slave zurück PORTA = setBit(PORTA, 0); //Fehler-LED TWCR = (1<<TWEN)| (1<<TWIE)|(1<<TWINT)| (1<<TWEA)|(0<<TWSTA)|(0<<TWSTO)| (0<<TWWC); break; } } }
(z.B. durch einen Fehler oder Stromausfall, etc.) signalisiert der
Slave jedes Mal einen Buserror, wenn der Master wieder aktiviert wird,
und die komplette Leitung steht.
Wir resetten aber auf dem Slave im Fehlerfall das TWCR Register, siehe
Code oben.
Weiß vielleicht Jemand, wie man diesen Fehlerfall abfangen kann, sodass auch nach einem Masterreset die Kommunikation wieder einwandfrei läuft?
MfG Marcus







					
					
					
						
Zitieren
Lesezeichen