PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I²C/TWI Programmierung



ben21684
04.06.2007, 14:14
Hallo zusammen,
ich weis es gibt schon viele fertige Programmbeispiele, zum Thema aber irgendwie steig ich da nicht so sehr durch. Ich möchte gern 2 Bytes (Werte von 0...255) von einem ATMega16 auf einen ATMega8 übertragen. Das ganze soll über TWI/I²C geschehen. Jetzt weis ich nicht so recht, wie ich dass programmieren soll. Schön wäre, wenn jemand mal ein Bespiel hätte, bei dem an einem µC eine Taste gredrückt wird und an einem anderen ne LED leuchtet. Die Programmierung für Master und Slave in C und so simple wie möglich gehalten. Ich denke sowas als Tutorial wäre echt hilfreich für viele User.
MFG Benny

p_mork
04.06.2007, 15:22
Hallo Benny,

schau mal hier (https://www.roboternetz.de/wissen/index.php/TWI_Slave_mit_avr-gcc)

MfG Mark

ben21684
04.06.2007, 16:28
So hab mal nach der Anleitung 2 Programme geschrieben. Der Master sendet beim ersten Byte 255 wenn Taster gedrückt wurde. Am Slave wird wenn dieses Byte übertragen wurde eine LED an PORTC angeschalten. ISt das so richtig?

ben21684
04.06.2007, 17:37
so habs jetzt ausprobiert und es geht nicht

uwegw
04.06.2007, 17:53
init_twi_slave(1100000);
Du übergibst die Adresse als dezimale Konstante. Das wären also 1,1 Millionen!
Wenn du die Adresse als Binärzahl angeben willst, musst du sie mit 0b als solche kennzeichnen:
0b011000000

Im Master wird übrigends die Konstante SLAVE_ADRESSE 0x50 als Adresse genutzt, und nicht deine SLA_W = 11000001; (<<wieder fehlt das 0b)

Da also unterschiedliche Adressen benutzt werden, kann es gar nicht klappen.

PS: hab mal nen Beispielprogramm für den Slave mit ins Wiki gepackt. Da müsstest du nur sämlichen UART-Befahle rausschmeißen und in die while-Schleife deine Pin-Ausgabe packen.

ben21684
04.06.2007, 19:29
super Danke erstmal für die schnelle Hilfe ich werds morgen gleich ausprobieren.