Arduino als I2C Slave ohne Antwort programmieren

Gast #5761913
Lesenswert?

Hallo Leute,

ich möchte gerne mit einem Arduino die Kommunikation zwischen einem I2C 
Display Treiber und dem Display selber beobachten.

Dazu dachte ich, dass ich einen Uno als I2C Slave konfiguriere, ihn 
jedoch nicht auf die Nachrichten des Masters antworten lasse. Somit 
würde er ja jede Nachricht mitlesen aber nicht darauf reagieren. Ich 
könnte jedoch die Nachricht, die ja eigentlich für das Display bestimmt 
war, in meinem Arduino für weitere Anwendungen benutzen. Quasi ein I2C 
Sniffer.

Habt ihr eine Idee wie sich so etwas umsetzen lässt oder ob es sich 
überhaupt umsetzen lässt?

Viele Grüße und Danke.
Gast #5761942
Lesenswert?

Ein Slave kann ja nur empfangen wenn er adressiert ist. Somit
schickt er aber dann auch ein ACK wenn er eine Adresse oder
Daten bekommen hat.

Um das zu vermeiden würde ich einen Soft-I2C-Slave programmieren
und das ACK beim Empfangen weglassen ....

Allerdings wäre das eine Herausforderung wenn man die Datenrate
nicht kennt oder allein wenn diese sehr hoch ist und man per
Interrupt einzelne Bits empfangen will ...

Also mit Einschränkung umsetzbar ....
#5761963
Lesenswert?

Das Konzept finde ich gut.
Einfach ein Tool, mit dem man I2C Kommunikation beobachten kann.



Aber ich würde es eher anders angehen:

- einen Logicanalyzer  implementieren
- die Daten zum PC senden (flanken mit timestamps)
- am PC eine Software, die den Datenstrom analysiert


Man wäre so nicht beschränkt auf I2C.
Jegliche Kommunikation könnte man aufzeichnen und am PC übersetzen.
Gast #5761976
Lesenswert?

Thomas W. schrieb:
> Aber ich würde es eher anders angehen:
>
> - einen Logicanalyzer  implementieren
> - die Daten zum PC senden (flanken mit timestamps)
> - am PC eine Software, die den Datenstrom analysiert

Gerade das möchte ich aktuell noch nicht machen. Erstmal würde ich gerne 
die Nachrichten auf dem Arduino auswerten und anschließend Rückschlüsse 
ziehen. Natürlich ist es deutlich universeller wie du es vorgeschlagen 
hast aber mir reicht erstmal I2C.
#5761986
Lesenswert?

ThinkArduino schrieb:
> Ich würde gerne die Arduino-Hardware nutzen. Einen Tiny habe ich hier
> nicht rumliegen.

Pech ;)

Eine kurze Google-Suche nach "I2C Software slave Arduino" fördert das 
hier zu Tage:
https://github.com/Testato/SoftwareWire/wiki/Arduino-I2C-libraries

Darin wird eine Software-lib aufgeführt, die auch Slave kann. Die würde 
ich in dem Fall mal näher anschauen, und eventuell als Ausgangsbasis 
nutzen.

Oliver
Gast #5762046
Lesenswert?

Stefan W. schrieb:
> ThinkArduino schrieb:
>> Ich würde gerne die Arduino-Hardware nutzen. Einen Tiny habe ich hier
>> nicht rumliegen.
>
> Lies den Thread mal bis zum Ende...
>
> VG
>
> Stefan

Habe ich. der Arduinoversion habe ich bereits getestet und diese 
funktioniert leider nicht. Jedenfalls passt der Terminaloutput nicht mit 
dem auf dem Oszi zusammen.
Gast #5762056
Lesenswert?

Mitdenker schrieb:
> ThinkArduino schrieb:
>> Der Bus arbeitet mit 400 kHz und ist mir bekannt.
>
> Der Bus arbeitet mit einer beliebigen Frequenz von Null
> bis zu einer Maximalfrequenz die von Master und Slave
> abhängig ist.
>
> Das ist dir scheinbar nicht bekannt.

Oh scheinbar nicht. Habe nur ins Datenblatt des Display's und des 
Treibers geschaut und dort steht "400 kHz I2C-Bus".
Gast #5762079
Lesenswert?

Oliver S. schrieb:
> Darin wird eine Software-lib aufgeführt, die auch Slave kann. Die würde
> ich in dem Fall mal näher anschauen, und eventuell als Ausgangsbasis
> nutzen.

Arduino Libs sind bekanntlich dazu da sich von der Hardware
zu abstrahieren was oft zu bösen Geschwindigkeitseinbussen
führt. Wird also in diesem Zusammenhang (hohe Datenrate,
jedes Bit muss einzeln bearbeitet werden) nicht sehr hilfreich
sein.

Einziger Ausweg: beim "Sniffen" setzt man die Datenrate des
zu untersuchenden Systems soweit herunter dass "der Sniffer"
auch noch mitkommt.

ThinkArduino schrieb:
> Habe nur ins Datenblatt des Display's und des
> Treibers geschaut und dort steht "400 kHz I2C-Bus".

Ich wette dass man das Display auch mit 3721 Hz Clockfrequenz
betreiben kann. Oder mit jeder anderen Frequenz unterhalb
von 400 kHz.
#5762106
Lesenswert?

ThinkArduino schrieb:
> Habe ich. der Arduinoversion habe ich bereits getestet und diese
> funktioniert leider nicht. Jedenfalls passt der Terminaloutput nicht mit
> dem auf dem Oszi zusammen.

Ok. Kannst du denn sicher, dass dein Oszilloskop korrekt dekodiert?
Und passt die Busgeschwindigkeit zur Signalform? (Flankensteilheit -> 
Lastkapazität/ Dimensionierung Pullup-R)

Ich würde auch das nicht außer Acht lassen, gerade bei Busfrequenzen von 
400 kHz. Eventuell solltest du für die Tests die Taktfrequenz mal 
herunter setzen (sofern du das im Master ändern kannst).

Viele Grüße

Stefan

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