www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TWI, I2C Master-Slave mit AVR


Autor: Philipp Putzer (putzer_philipp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich versuche seit ein paar Tagen eine einfache Kommunikation zwischen 
zwei AVR µC mit dem I2C Bus aufzubauen. Dazu verwende ich die i2c.c und 
Gefolge aus der AVR-LIBC.

Die Idee wäre ja ganz einfach. Man hat einen Master (MEGA64) welcher vom 
Slave Daten anfordert. Dieser misst in meinen Fall etwas, und sendet die 
Daten an den aufrufenden Master zurück. Nur leider bekomme ich das immer 
nur in eine Richtung hin. Wenn überhaupt!!

DAs ganze sol Interruptbasierend sein,zwar helfen die Debug-Ausgaben in 
der i2c.c etwas weiter, nur leider komme ich einfach nicht hin.

Kann mir jemand sagen, wo ich vielleicht eine 
Dokumentation/Anleitung/sonstwas zur i2c.c finde? in der onlinedoku 
steht ziemlich wenig bis gar nix drin!

Gibts da vielleicht irgendwelche Refenzprojekte die man sich mal 
anschauen könnte? Auch egal wenns eine andere lib ist!


Vielen Dank und schönen Abend noch!

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Philipp,

Deine Informationen sind leider etwas dürftig:

- wie sieht der aktuelle Code aus (bitte als Anhang)
- welche Debug-Möglichkeiten hast Du
- was geht nicht
- wird der slave richtig adressiert
- "laufen" beide Controller

..
..
..
..

Otto

Autor: Philipp Putzer (putzer_philipp)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Den Code habe ich als Rar angehängt, da ist alles vom Master und vom 
Slave drin.

Beim Master gehe ich so vor:
- Bei Tastendruck wird ein Byte (hier nur als test die fiktive adresse 
des masters) an den Slave gesendet.
- Frage: Wie mache ich es, um die Daten, welche vom Slave zurückgesendet 
werden abzurufen?

Beim Slave stelle ich mir das so vor:
- Wenn ein TWI-Interrupt auftretet, starte ich in der ISR (ist das schon 
gut/richtig?) eine Messung. Den Codeteil zur Messung startetn habe ich 
aber unter "I2C: SR->DATA_ACK" UND unter "I2C: ST->DATA_ACK". Ich bin 
mir noch nicht im klaren, wo ich den genau hintun muss, leider.
Laut Debug (UART) lande ich beim Slave im "I2C: SR->DATA_ACK", was 
meines Erachtens ja auch Sinn macht, da der Slave ja Daten empfängt.
Frage: Nur, wie sende ich nun die Daten an den Master zurück??


Danke schon mal!!

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Philipp,

könntest Du das Listing bitte unkomprimiert anhängen, so dass man es 
direkt ansehen kann ?

In der Codesammlung gibt es ein schönes Beispiel in Assembler.

1. Nur die Slaves haben Adressen

Schreibadresse z. B. 0xA0

2. "TWI-Interrupt auftretet, starte ich in der ISR "

Das ist richtig so - dann musst Du in eine Auswertung verzweigen.


3. Ich bin mir noch nicht im klaren, wo ich den genau hintun muss, 
leider.

Bei einem Schreibzugriff des Masters setzt Du abhängig von der 
gewünschten Aktion ein Flag oder speicherst eine Variable, welche Du im 
zyklischen Programm auswerten kannst. Z. B. 0-255 = Messung aus/ein, 
wenn > 0 alle x Sekunden


4. Frage: Nur, wie sende ich nun die Daten an den Master zurück??

Gar nicht - der Master holt die Daten mit einem Lesezugriff ab.

Leseadresse z.B. 0xA1

Gruss Otto

Autor: Philipp Putzer (putzer_philipp)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier das Listing für den Master 1.Teil

Autor: Philipp Putzer (putzer_philipp)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Listing für Master Teil 2 (i2c-Routine)

Autor: Philipp Putzer (putzer_philipp)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Listing Slave (i2c-routine)
Die ganze übertragung läuft nur hier ab

Autor: Philipp Putzer (putzer_philipp)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
P.S
Wie kann ich hier mehr als eine Datei anhängen? So ists verdammt lässtig 
und unübersichtlich! sorry

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.