PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TWI Repeated Start



bax
03.02.2007, 02:11
Nachdem ich nun schon paar Tage übe aber nicht wirklich weiterkomme muß ich Euch mal um Hilfe bitten. Hab 3 AVR's, die über TWI kommunizieren. Bis jetzt ist einer Master und handelt zyklisch den Datenaustausch, jeweils nur als Reciver oder Sender in einem Zyklus. Nun möchte ich das gerne umstellen, das sich jeder AVR seine Daten holt, so wie er sie braucht. Also er macht sich zum Master Transmitter, adressiert den gewünschten Slave, schickt ein Byte mit der Information, welche Daten zurückgeschickt werden sollen, macht einen Repeated Start, adressiert den selben Slave wieder als Master Reciver. An der Stelle gehen mir nun die Infos auf, bzw. hab ich einige Varianten probiert, aber an diesem Punkt ging die Kommunikation immer verloren.

Ich hab mal versucht die Zustände und notwendigen Aktionen schematisch darzustellen, (entspricht dem Idealzustand, das da noch weitere Zustände / Fehlerbehandlungen notwendig sind ist mir schon klar) Die Punkte die mir noch nicht so klar sind hab ich mal rot gemacht.

Ist vielleicht einfacher, Fehler im Code zu finden, wenn man weiß, was man programmieren muß ;-)

Würde mich über ein paar Tips freuen.

freundliche Grüße, Rajko

uwegw
03.02.2007, 10:37
Prinzipiell läuft das Ganze so ab: Im Rhezustand sind alle drei AVRS slaves. Wenn jetzt einer von ihnen (sagen wir mal A) von einem anderen AVR (B) lesen will, macht sich A zum Master, daressiert B als als Slave, und sendet zu B, welche Daten er haben will. Dann schaltet A sich zum Slave. B macht sich nun zum Master und überträgt die gewünschten Daten zu A. Wenn die Übertragung beendet ist, schalten wieder alle auf slave.
Und wenn zwei gleichzeitig Master werden wollen, kommt die Arbitrierung ins Spiel. Einer schafft es, den Bus zu übernehmen, der andere hat dann irgendwas mit "arbitration lost" im TWSR.

PicNick
03.02.2007, 13:19
Schau mal dort, das ist zwar für Bascom, aber das TWI-Gefummel ist in einer Library, also eh' in Assembler.

https://www.roboternetz.de/wissen/index.php/TWI_Praxis_Multimaster

Vielleicht kannst du dir was abspicken