Forum: Mikrocontroller und Digitale Elektronik TWI mit ATMega328P (.ino) als Master und ATMega328P (.c) als Slave


von Philipp G. (philsks1909)


Lesenswert?

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

von Marcel (Gast)


Lesenswert?

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.

von Philipp G. (philsks1909)


Lesenswert?

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
von Marcel (Gast)


Lesenswert?

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

von Philipp G. (philsks1909)


Lesenswert?

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
Noch kein Account? Hier anmelden.