PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verbindung von AVRs über I²C



Pascal
18.08.2004, 15:59
schonmal im Voraus, ich hab die Suchenfunktion verwendet, aber nichts Passendes gefunden, kann natürlich sein, dass ich etwas übersehen habe...

ich möchte mehrere AVRs(AT90S2313 und ATMEGA 8515L) über I²C verbinden, es kommen wahrscheinlich auch noch weitere I²C-Bauteile hinzu
was I²C ist und wie es vom Prinzip her funktioniert, weiß ich inzwischen, auch wie man den Master dazu bringt, Daten zu senden

mein Problem ist nun, wie man die AVRs dazu bringt, als Slave zu arbeiten,
muss man das komplett selbst programmieren?
gibts dafür fertigen Code(C oder Assembler)?
unterstützen das die AVRs vielleicht sogar von Haus aus?

Florian
18.08.2004, 16:46
Hi! :o)
Das gleiche Problem bearbeite ich auch gerade, bin aber auch nicht weiter als Du! :o(
Einfach keine Zeit! :o(
Ich hoffe ich schaffe es bald! :o)

Hellmut
18.08.2004, 20:17
Hallo Freunde
auf der Seite 7 der I2C Spec steht im Prinzip die Lösung eures Problems: "I2C-Bus is a Multi-Master-Bus". Viel Spaß beim Lesen. Von der Software kann man die existierende I2C-Software für den AVR praktisch unverändert benutzen. Die einfachste Form ist die Kommunikation gedanklich auf ein höheres Layer zu legen. Erst uCA -> uCB, dann uCB an uCA!. Bei jedem Datenaustausch ist immer der die die Verbindung einleitet der Master, der Empfängt der Slave. Definiere ich jetzt auf "Anwendungsebene" meine Kommunikationsprotokolle, in Hochdeutsch: Wie Mache ich Job1, wie Job 2, dann könnten die von A an B übertragenen Daten bei B eine zuvor definierte Reaktion bewirken, und umgekehrt.

19.08.2004, 15:51
ich hab die Stelle grad mal durchgelesen(vielleicht hab ich auch was übersehen), das meiste wusste ich schon und beantwortet mein Problem nicht wirklich: ich möchte nen Mikrocontroller dazu bringen, dass er als Slave arbeitet

inzwischen hab ich mir aber noch ein paar Gedanken dazu gemacht: könnte man nicht jeden Mikrocontroller, der an den Bus hinsoll, über zwei Interruptfähige Pins anschließen, die standartmäßig Eingang sind
wenn dann ein uC was senden will, schaltet er seine beiden Pins als Ausgang und sendet seine Daten, wenn er wieder fertig ist, macht er wieder beide Pins zu Eingängen und wartet darauf, entweder wieder Master zu werden, oder als Slave zu arbeiten
um zu verhindern, dass mehrere auf einmal Slave werden wollen(dazu stand ja auch was in den I²C specs, aber das hab ich mir nur ganz kurz angeschaut...keine Zeit), müsste man halt, wenn sich ein uC zum Master macht, in den anderen ein Bit so setzen, dass sie jetzt nicht Master werden dürfen; wenn die STOP-Sequenz vom Master erkannt wurde(die ja jeder uC mitbekommt), wird dieses Bit einfach wieder geändert

um wieder zur Slaveprogrammierung zurückzukommen: man müsste die Interrupts der beiden Pins für fallende und steigende Signalflanken aktivieren und dann in den entsprechen Interruptroutinen die Daten der beiden Pins nach I²C-Normen verarbeiten

wenn man das geschickt macht, müsste man doch auch senden und empfangen können(vom Slave aus)?

ich hoffe, ich hab da jetzt nicht vollkommenen Unsinn erzählt...
falls sich das nicht herausstellt, werde ich das mal in den nächsten Tagen versuchen, zu programmieren

19.08.2004, 15:53
der post war von mir, ich hab nur vergessen, mich einzuloggen...

Pascal
19.08.2004, 15:56
sorry, die beiden letzten posts waren von mir, mein Konqueror spinnt ein wenig herum wie man merkt...