Hallo Forum, Ich wollte fragen, ob es eine gute TWI-Master-Lib gibt, die mit den Interrupts des AVR arbeitet (ein ATmega2560, sollte aber egal sein, da die Register bei allen(?) AVRs gleich ist, sonst muss ich halt noch mit dem Praeprozessor etwas anpassen). Eigentlich könnte ich den Code auch selber schreiben, aber warum das Rad neu erfinden? Und es würde mir vor allem sehr viel Zeit beim proggen und testen sparen. Mein jetziger Code ist zT mit while-Schleifen, und diese Wartezeit würde ich mir gerne sparen, da ich gerade einen Roboter baue, der in Echtzeit auf Ereignisse reagieren soll Also, hat jmd einen Link oÄ. Für mich? mfG N.G.
Hmm. Interessanter Weise konnte ich auf die schnelle nichts in C finden, obwohl das eigentlich nicht so das große Problem sein sollte eine State-Machine in der TWI-ISR hochzuziehen. Der Link hier Beitrag "[ASM] Hardware TWI-MASTER Interrupt basierend für Mega AVR" scheint momentan der beste zu sein, auch wenn es da um Assembler geht. Der Autor hat da ein potentielles Problem entdeckt, darum poste ich den Link trotzdem
Das hier http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=31371 scheint auch ein guter Anfangspunkt für weitere Recherchen zu sein. Die Atmel AppNote klingt recht viel versprechend.
Komisch, irgendwie dachte ich immer, daß die lib von Peter Fleury sowas wie der defacto-Standard ist, und google die garantiert findet. Was genau passt dir daran nicht? Oliver
Oliver S. schrieb: > Komisch, irgendwie dachte ich immer, daß die lib von Peter Fleury sowas > wie der defacto-Standard ist, und google die garantiert findet. An die hatte ich auch als erstes gedacht. > Was genau passt dir daran nicht? Sie ist nicht interrupt basiert.
Erst einmal danke für eure Antworten Ich befinde mich gerade auf Klassenfahrt, deswegen kann ich mir den ASM-Code erst später ansehen. Die Li von Fleury kannte ich, ich habe diese auch schon benutzt, aber wie oben schon genannt wurde greift diese eben nicht auf den Interrupt zurück Ich suche auch auch nochmal ein bisschen mfG N.G.
Genau dieselbe Suche hatte ich vor ca. einem Jahr auch, auch mehr oder weniger erfolglos. Ich hab mir dann meine eigene Implementierung gemacht, getrennt nach Master und Slave, basierend auf den beiden AppNotes von Amtel. Eingesetzt in vielen verschiedenen Projektchen, bis jetzt problemlos. Etwas unvollständig (Restart fehlt, hatte ich bisher nicht gebraucht) Soll ich mich trauen das hier hochzuladen?
Hi, an einer Interrupt-Lösung die schon funktioniert, wäre ich auch interessiert. Ich finde du solltest es hochladen ;) Gruß Marcus
Also gut... keine "Library" im herkömmlichen Sinn, nur zwei Files: i2c_master.c und .h, einfach ins Projektverzeichnis kopieren, ins Makefile aufnehmen. Einfaches (nicht getestetes) main um die Verwendung zu illustrieren. Hinweis: in der zentralen state machine (großes switch-statement) habe ich ganz bewusst die symbolischen Konstanten aus der util/twi.h verzichtet (z.B. TW_MR_DATA_NACK), ganz einfach weil im Datenblatt immer die Hex-Zahl angeführt ist. Beim Entwickeltn/Debuggen dauernd händisch hin- und her-übersetzen ist mir irgendwann zu mühsam geworden.... Nachtrag: Der Code ist zwar interrupt-basiert, die eigentlichen Routinen i2c_get() und i2c_put() warten aber bis die Übertragung fertig ist (eigentlich wartet die i2c_start() ) Das sollte sich aber leicht anpassen lassen, allerdings wird das Error-handling und eventuelles retry dann etwas komplexer... meine "Slave-Library" arbeitet da etwas anders (ist am Slave aber auch einfacher...) Was auf jeden Fall fehlt: Restart und Multi-master kritische aber konstruktive Kommentare sehr erwünscht!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.