Forum: Mikrocontroller und Digitale Elektronik ARM LPC 2129, I2C als "passiver" Slave


von Christian (Gast)


Lesenswert?

Hallo werte Leser,

Ich wollte gerne mit meinem ARM auf einem I2C-Bus mitlauschen. 
Angeschlossen ist das Board an eine Freisprecheinrichtung mit 
I2C-Display.
Da sich mehrere Slaves auf gleicher Adresse schon mal mit ihrem 
Acknowledge stören können, wollte ich mein ARM-Board gerne passiv 
lauschen lassen - also ohne Acknowledge.

Wenn ich im Control Register das Acknowledge ausschalte, bekomme ich 
jedoch keinen Interrupt mehr. Mach ich was falsch oder soll das so sein?

Hier der Code:
1
I2ADR       =   0x74;
2
I2CONCLR    =   0x7C;
3
I2CONSET    =   0x40;    // mit 0x44 (AA enabled) gehts dann
4
I2SCLH      =   I2CHIGH;
5
I2SCLL      =   I2CLOW;

Würde mich über eure Ideen sehr freuen.
Gruß,
Christian

von Peter D. (peda)


Lesenswert?

Christian wrote:
> Wenn ich im Control Register das Acknowledge ausschalte, bekomme ich
> jedoch keinen Interrupt mehr. Mach ich was falsch oder soll das so sein?

Ja das ist richtig.
Das Mitlauschen ist nur mit MCs möglich, die ein abgerüstetes I2C haben, 
wo das ACK per SW erzeugt werden muß, z.B ATtiny:

Beitrag "I2C (TWI) Sniffer mit AVR"


Peter

von Christian (Gast)


Lesenswert?

Hmmm. Das ist aber schade. Die Rechenleistung wäre zwar für einen SW-I2C 
bestimmt noch ausreichend, aber ich glaube diesen Schritt werde ich 
nicht gehen. Und früher oder später kommt das Display eh weg. Dann 
brauch ich das Acknowledge ja eh wieder.

Irgendwie erschließt sich mir jedoch weiterhin nicht wieso ich das 
Acknowledge abschalten kann obwohl der Controller dann gar keinen I2C 
mehr verarbeiten kann. Erscheint mir reichlich sinnlos gerade.

Christian

von Peter D. (peda)


Lesenswert?

Christian wrote:

> Irgendwie erschließt sich mir jedoch weiterhin nicht wieso ich das
> Acknowledge abschalten kann obwohl der Controller dann gar keinen I2C
> mehr verarbeiten kann. Erscheint mir reichlich sinnlos gerade.

Nein, ist nicht sinnlos.
Sondern das ist der Vorteil von I2C z.B. gegenüber ner UART.

Wenn Dein Empfangspuffer voll ist oder Du noch keine Sendedaten bereit 
hast, kann der Slave mit dem NACK dem Master sagen, daß er noch nicht 
bereit ist und er es später nochmal versuchen soll.

Z.B. die I2C-EEPROM machen das etwa 5ms lang, wenn sie die Daten 
speichern.

Bei I2C kann es also nie zu einem Pufferüberlauf kommen.


Peter

von Christian (Gast)


Lesenswert?

Argh, du hast recht. Daran hab ich gar nicht gedacht. Dadurch ergibt die 
Sache wirklich Sinn.
Vielen Dank für den Hinweis und auch deine vorherigen Post :)

Ich werd mal gucken ob ich im Auto Probleme mit den 2 Slaves haben 
werde. Aufm Schreibtisch hatte ich in der Vergangenheit leider schon mal 
ausdauernde Kommunikationsprobleme beobachtet. Heute hats bei den Tests 
im Auto aber scheinbar problemfrei funktioniert. Vlt passt der neue 
Quarz bzw die neue PLL Einstellung besser zur Baudrate oder ähnliches...

Also nochmal vielen Dank für die schnelle und kompetente Hilfe und noch 
einen schönen Sonntagabend!
Christian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.