I2C Komm. interruptbasiert mit Assembler: Code? Erfahrungen?
Hi!
Ich habe vor, zwei Mega32s per TWI bzw. I2C interruptbasiert kommunizieren zu lassen. Der Grund ist, dass mein geplanter Roboter mehr Ein-/Ausgänge und Hardwaremodule braucht, als ein Mega32 hat.
Leider kann man eine solche Kommunikation nur schwer mit AVRStudio simmulieren, was das Debugging erschwert.
Und weil das auch ne Menge Programmierarbeit ist und ich (noch) kein Meister bin, frage ich Euch, ob Ihr wisst, wo man Programmcode dazu herbekommen kann? Bei Atmel habe ich keine Application Note gefunden, was mich verwundert, da das doch viele Leute gebrauchen können, oder etwa nicht?
Das was man sonst im Netz findet ist entweder unvollständig oder nutzt keine IRQs.
Hat jemand Erfahrungen mit derartiger Kommunikation und kann mich vor ein paar Tücken warnen?
Gruß Gock
Liste der Anhänge anzeigen (Anzahl: 2)
Hi, ich hab es jetzt nach endlosen Versuchen geschafft, das meine TWI-Routine läuft.
Auf die Schnelle hänge ich mal die Interupt-Routine und die Subroutine zum Einleiten der Transmission an.
WR = R16, HR = R17
Die Routine funktioniert in etwa so: Der Teilnehmer, der SUB_START_TWI_TRANSMISSION ausführt macht sich zum Master, schickt ein Byte zur Adressierung der gewünschten Daten an den Slave, und bekommt dann 8 Datenbytes + eine Checksumme zurück. Die Variable STAT_TWI kennzeichnet die möglichen Zustände von Interupt zu Interupt. Ist die Übertragung erfolgreich, bleibt der Status bei 0x10 stehen, bei Fehlern meldet sich die Routine mit 0x1D zurück.
Der abgefragte Slave merkt im Idealfall nichts davon, das er abgefragt wird, die Daten müssen also immer im Datenbereich bereitliegen.
Vielleicht kannst Du Dir ja ein paar Anregungen holen.
Ach so, ich hab es mir einfach gemacht, in dem ich nur gerade TWI-Adressen zulasse, damit das R/W Bit gleich frei ist.
greetz Rajko