mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C-Bus mithören


Autor: Andy Nagel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich habe folgendes Anliegen:

Ich habe ein geschlossenens System (eine Automatensteuerung). In diesem
System bedindet sich ein I2C-Datenbus, mit einem Master und mehren
Slaves. Jetzt möchte ich mit einem externen Mikrocontroller auf den Bus
gehen und diesen abhören.
Wenn zum Beispiel der Master vom Slave ein Byte anfordert, soll der
externe Mikrocontroller auch dieses Byte lesen und nun eine
Folgefunktion einleiten....!
Es reicht wenn der externe Mikrocontroller NUR LESEN KANN!!!


Wie wird sowas realisiert?

Ich steht Gedanklich im Wald!!!!

danke für eure IDEEN!!!

Andy

Autor: Sven F. (sven0876)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ABO such ich auch!

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Andy,

ist eigentlich kein Problem, um Dir etwas Mut zu machen.

Ich hoffe die SCL-Frequenz dieses Systems ist nicht zu hoch?

Was benötigst Du?

- Einen µC mit ext. Interrupt, um die
  Start-STOP-Prozedur besser zu erkennen
- Ist die SCL-Frequenz bekannt? Wenn nicht ==> mit Oszi messen

Lösungsvariante:

Der µC muss die Startprozedur bzw. Repead-START erkennen und
bei jedem SCL-Takt die SDA -Leitung abfragen.

Anschließend kannst Du die Adresse,R/W, und das/die Datenbyte
auswerten.

Die Stopp-Prozedur sollte auch vom µC erkannt werden.

Anmerkung:

Der Aufbau dieses Datenprotololls findest Du z.B. gut beschrieben in
den Datenblättern der µC (z.B. ATmega8)

Bernhard

Autor: Benedikt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ein kleiner Programm für einen tiny2313. Ich nutze die USI im TWI
Modus um die Daten zu empfangen.
Die empfangenen Daten werden per UART gesendet.
Folgende Ereignisse werden gemeldet:
Start, Stop, Byte übertragen, ACK/NAK

Bei mir funktionierte das ganze wunderbar, aber ich habe keine Ahnung
wie schnell der I2C Bus maximal sein darf. Bei 100kHz und keinem lang
anhaltenden Dauertransfer hatte ich bisher keine Probleme.

Autor: Andy Nagel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Bernhard,

Mut machen ist gut:-)

Habe eine Frequenz von 200kHz. Sollte nicht das Problem sein!

Habe ich das richtig verstanden, das ich jede positive Flanke(über INT)
auf SCL erkenne , und dann im Interrupt prüfe ob SDA HIGH oder LOW
ist.
Die ersten 7 Besuche im INT-Interrupt geben die Adresse an. Der 8
Besuch R/W....... 9 Besuch ACK . Besuch 10- bis 17 das Datenbit???????

Das soll funktionieren=????

Oder kann ich mit dieser methode irgendwelche Probleme bekommen oder
geht es auch leichter?

Autor: Jogibär (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wenn Du z.B. einen AVR mit I2C Schnitstelle nimmst, kannst Du diesen
als Slave konfigurieren.
Ich glaube, da gibt es irgenwie eine "Mithörfunktion".
Schau mal ins Datenblatt z.B. ATMEGA8

mfg
Jogibär

Autor: Peter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
I2C Sniffer:

Schematics und Programm.

Autor: mydani (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Andy,

>Habe eine Frequenz von 200kHz. Sollte nicht das Problem sein!

da blieben bei 16MHz µC-Takt, 80 Takte zur Auswertung, das müsste
reichen


>Habe ich das richtig verstanden, das ich jede positive Flanke(über
>INT)auf SCL erkenne , und dann im Interrupt prüfe ob SDA HIGH oder
>LOW ist.

SCL und SDA muss auf Flankenwechsel geprüft werden.

Bsp START      : SDA wird LOW, aber SCL noch HIGH
Bsp Übertragung: SCL wird HIGH, SDA LOW oder HIGH
BSP STOP       : SCL ist HIGH, SDA Pegelwechsel

>Die ersten 7 Besuche im INT-Interrupt geben die Adresse an. Der 8
>Besuch R/W....... 9 Besuch ACK . Besuch 10- bis 17 das
>Datenbit???????

korrekt

>Das soll funktionieren=????

Ja, ABER!!!

Es kann sein, dass sich der Programmierer nicht an dieses Standard

Protokoll halten wollte und in Deinem konkreten Fall davon abgewichen
ist.

Das wirst Du aber sicherlich beim programmieren sehr bald feststellen.

Hierzu gab es hier mal vor einiger Zeit ein sehr interessanten Beitrag
über ein Autoradio (9-Datenbytes).



Hallo Jogibär,

>Ich glaube, da gibt es irgenwie eine "Mithörfunktion".
>Schau mal ins Datenblatt z.B. ATMEGA8

Wo soll denn das stehen, habe es noch nicht rauslesen können?



Bernhard

Autor: Andy Nagel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Bernhard!

Bin gerade dabei mir eine solche Routine zu schreiben!
Hast du schon erfahrung mit dieser Problematik?
Programmiere in C.

Habe jetzt schon mehrfach im Datenblättern versch. ATMEL Controller
nach einer solchen Mithörfunktion gesucht....aber OHNE ERFOLG!!

Gruss Andy

Autor: Bernhard S. (bernhard)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Andy,

>Bin gerade dabei mir eine solche Routine zu schreiben!
>Hast du schon erfahrung mit dieser Problematik?

Ich würde einen µC mit 16 MHz takten und die externen Interrupts nutzen
(Atmega8 ==> 2Stk)

Hat den Vorteil, dass Du jedes I2C-Protokoll (8 oder 9-Bit -Pakete)
mitlesen könntest)

>Programmiere in C.

Hoffentlich ist C dazu in der Lage (200kHz), da Du nur wenige Takte zur
Verfügung hast.

Benedikt hat sich schon mit diesem Thema tiefgründiger beschäftigt,
vielleicht hielft Dir sein Beispiel weiter?

Wäre Assembler für diesen konkreten Anwendungsfall nicht
treffsicherer?


>Habe jetzt schon mehrfach im Datenblättern versch. ATMEL Controller
>nach einer solchen Mithörfunktion gesucht....aber OHNE ERFOLG!!

Eigentlich benötigst Du nur den konkreten Protokollaufbau

(s. Datenblatt ATmega8), der Rest ist dann Fleißarbeit nach der

Methode "Versuch und Irrtum"  ;)



Vielleicht hilft Dir dieses kleine Werkzeug zum experimentieren etwas:

http://www.mikrocontroller.net/forum/read-4-291891.html

Bernhard

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.