Hallo :-) Wie schon im Betreff bemerkt habe ich in einem Projekt einen ATMega328P in der Programmiersprache Arduino programmiert und einen zweiten ATMega328P in C programmiert. Diese beiden sollen über TWI kommunizieren, wobei der Arduino µC als Master und der in C programmierte µC als Slave agieren soll. Den Arduino als Master zu betreiben ist nicht sonderlich schwer, gibt ja die Wire-Bibliothek. Hier ein kleines Testprogramm: void loop() { Wire.beginTransmission(0x50); // transmit to device 0x50 Wire.write(1); // sends one byte Wire.endTransmission(); // stop transmitting } Läuft, am Oszi kann ich den I2C-Verlauf wunderbar sehen. Nun liegt das Problem denke ich am C µC. Ist es nun prinzipiell möglich den C µC über die implementierten TWI Register zu programmieren? Irgendwie will da nichts funktionieren. Das einzige was bisher funktionierte war der Code dieser Seite (http://www.engineersgarage.com/embedded/avr-microcontroller-projects/atmega32-twi-two-wire-interface) wobei hier keine Interrupts verwendet werden und ich nicht verstehe wie man hier mehrere Bytes übertragen könnte. Ich weiß ist etwas viel, aber ich bitte um Hilfe, bin am verzweifeln ;) MfG Phil
Philipp G. schrieb: > Wie schon im Betreff bemerkt habe ich in einem Projekt einen ATMega328P > in der Programmiersprache Arduino programmiert und einen zweiten > ATMega328P in C programmiert. Diese beiden sollen über TWI > kommunizieren, wobei der Arduino µC als Master und der in C > programmierte µC als Slave agieren soll. Arduino ist keine Programmiersprache, sondern ein Entwicklungssystem mit Board und einer Library, die dir eine Menge Arbeit (und sehr viel Verständnis über die Funktionsweise der Controller) abnimmt. Der ATMega auf deinem Arduino Board wird ebenfalls mit C bzw. C++ programmiert. Das heisst du kannst die Arduino IDE und Arduino Library dazu verwenden deinen ATMega328 zu programmieren. Ansonsten kennt Google fertige Implementierungen zum TWI mit einem AVR Controller. Wenn du dich selber rantrauen möchstest bieten die Artikel auf dieser Seite eine gute Grundlage.
Danke für die Antwort Marcel! Leider nicht ganz was ich wissen wollte. Auf einem Controller läuft ja schon das beschriebene Programm (ja über die Arduino IDE programmiert, also in C++) mit der Wire Library! Was mir nun fehlt ist ein vernünftiger C-Code für die TWI Hardwareimplementierung meines Slave Mikrocontrollers, den ich in C programmiere! Edit: Es ist ja so, dass es von Arduino die .Wire Library gibt. Wäre interessant zu wissen, ob diese die ganzen Kommandos für TWI bereits implementiert hat.
:
Bearbeitet durch User
Philipp G. schrieb: > Was mir nun fehlt ist ein vernünftiger C-Code für die TWI > Hardwareimplementierung meines Slave Mikrocontrollers, den ich in C > programmiere! Ich wollte darauf hinaus, dass du einfach die Wire Library benutzen sollst. Nach meiner bisherigen Erfahrung mit Arduino Nutzern, die nichteinmal wissen dass sie in C++ programmieren, fehlt ihnen einfach die Grundlagen um sowas selber zu machen. Philipp G. schrieb: > Es ist ja so, dass es von Arduino die .Wire Library gibt. Wäre > interessant zu wissen, ob diese die ganzen Kommandos für TWI bereits > implementiert hat. Wenn es doch nur eine Dokumentation für die Wire Library geben würde ... http://arduino.cc/en/Reference/Wire
Trotz deiner Bewertung meiner Fähigkeiten hilft mir das nicht wirklich weiter. Der Slave uC ist in C programmiert und das kann ich auch nicht ändern! Ich suche weiterhin vergeblich nach einem Weg mit meinem Arduino über TWI zu kommunizieren. Bleibt mir der Weg des Ausprogrammierens vom zeitgesteuerten I2C nicht erspart?
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.