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!
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
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!!
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
Listing Slave (i2c-routine) Die ganze übertragung läuft nur hier ab
P.S Wie kann ich hier mehr als eine Datei anhängen? So ists verdammt lässtig und unübersichtlich! sorry
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.