Forum: Mikrocontroller und Digitale Elektronik Arduino als I2C Slave ohne Antwort programmieren


von ThinkArduino (Gast)


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.

von Oliver S. (oliverso)


Lesenswert?

Mit dem Hardwaremodul geht das nicht, aber per Software geht alles.

guugst du hier:
Beitrag "I2C (TWI) Sniffer mit AVR"

Oliver

von Mitdenker (Gast)


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 ....

von ThinkArduino (Gast)


Lesenswert?

Oliver S. schrieb:
> guugst du hier:
> Beitrag "I2C (TWI) Sniffer mit AVR"

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

von ThinkArduino (Gast)


Lesenswert?

Mitdenker schrieb:
> 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 ...

Der Bus arbeitet mit 400 kHz und ist mir bekannt.

von Thomas W. (diddl)


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.

von ThinkArduino (Gast)


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.

von Oliver S. (oliverso)


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

von Stefan W. (dl6dx)


Lesenswert?

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

von ThinkArduino (Gast)


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.

von Mitdenker (Gast)


Lesenswert?

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.

von ThinkArduino (Gast)


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".

von Mitdenker (Gast)


Lesenswert?

ThinkArduino schrieb:
> Habe nur ins Datenblatt des Display's und des Treibers geschaut

Davon war vorher gar nicht die Rede.

Bei "Display's" solltest du dich mal bei dieser Seite schlau machen:

http://www.deppenapostroph.info

von Mitdenker (Gast)


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.

von Stefan W. (dl6dx)


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

von PittyJ (Gast)


Lesenswert?

Es gibt einfach FPGAs im Arduino Format für ca 30 Euro. 2 Tage Software 
und der I2C Sniffer ist fertig.

von Mitdenker (Gast)


Lesenswert?

PittyJ schrieb:
> 2 Tage Software und der I2C Sniffer ist fertig.

Insbesondere bei Arduino-Jüngern (die immer nach der geeigneten
Lib suchen) könnte sich diese Zeit noch "geringfügig" erhöhen.

von Jens M. (schuchkleisser)


Lesenswert?

Aktuelles Projekt in der März-April Elektor: Ein I2C-Sniffer mit schöner 
Auswertung per PC-Programm.
Zu finden unter https://www.elektormagazine.de/magazine/elektor-87/42487

von Oliver S. (oliverso)


Lesenswert?

ThinkArduino schrieb:
> Ich würde gerne die Arduino-Hardware nutzen.

Oliver

von Jens M. (schuchkleisser)


Lesenswert?

Ja, sorry, eben in der Mittagspause gelesen und gedacht da war doch was.
Muss man ja nicht nehmen...

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.