jupp, funktioniert!
Kleiner Schönheitsfehler: mit
> if ((TWSR & 0xF!= 0x0
USART_transmit_string("1");
wird natürlich überprüft, dass ein Fehler aufgetreten ist, ncith dass es ok ist.
Allerdings hab ich bei den Basteleien wahrscheinlich einen Mega8 geschrotet. In dem Zusammenhang ist mir was aufegfallen: Ich hab ein RN-Control (Master) und ein RN-Mega8 (Slave) mit I2C verbunden. Beide haben eine eigene Stromversorgung (gemeinsame Masse). Das RN-Control ist mangels Schalter permanent an.
Wenn das I2C-Kabel nicht da ist, oder der Slave kein Programm hat, läuft das Masterprogramm durch mit Fehlermeldungen kein Slave-Adress-Ack und kein Slave-Data-Ack. Soweit, so erwartet.
Wenn der Mega8 läuft und das Programm ok ist, läuft das Masterprogramm ohne Fehler durch und der Mega8 erhält die Daten (das Datum). Soweit, so gut.
Wenn jetzt aber der Mega8 aus ist (kein Strom) und der Master startet, bleibt das Masterprogramm hängen. Ich vermute bei der Abfrage, ob TWI-START gesendet wurde, muss ich aber noch näher einkreisen.
Das bringt mich zu der Frage wie eigentlich das Verhalten des I2C-Busses definiert ist, wenn ein Gerät stromlos ist. Oder ob das, wie ich vermute, verboten ist.
Und was machen eigentlich die Ports wenn ein Mega stromlos ist? Low?, High geht nicht, Tri-state?, undefiniert? Falls niederohmig low, kann der Master evtl. keinen Clock erzeugen, weil die Leitung low bleibt. Würde dann die I2C-Logik hängenbleiben? Und kann das den Master oder Slave beschädigen? (was erklären würde warum ich einen M8 gekillt habe)
ciao ... Bernd
Lesezeichen