Hallo Leute, ich habe vor kurzem einige DS1621 am AVR zum Laufen bringen wollen und war mit den diversen Libs die es so im Netz gab sehr unzufrieden. Hauptnachteile waren die trotz Nutzung des Hardware-TWI-Interfaces des AVR vorhandenen while-Schleifen, die gerne mal dafür sorgten, dass der Controller "hängen blieb", wenn man am Kabel gewackelt hat :) Um nun meine primitiven frickeligen Versuchsaufbauten softwaremäßig zu kompensieren habe ich eine Library geschrieben, die das Ganze so zu sagen "bullett-proof" umsetzt: eine hot-plug fähige TWI-Library. Müsste auch mit dem Nachfolgetyp des DS1621 funktionieren und leicht für andere Dinge anpassbar sein. Vielleicht ist es ja noch für wen zu gebrauchen, zu finden ist alles auf Sourceforge: http://ds1621avr.sourceforge.net Beste Grüße, Max
Hallo Max, ich habs mir mal angeschaut und dabei kamen mir mehrere Fragen: 1. Warum beunutzt du nicht den HW-Interrupt vom AVR? Würde doch auch gehen und der User müsste nicht die State-machine permanent aufrufen 2. Warum trennst du I2C und Temp-Sensor nicht auf? Wäre schöner und man könnte die I2C-lib auch für was anderes verwenden. Sieht aber insgesamt relativ gut aus ;)
Hallo, danke für das Feedback! N. G. schrieb: > 1. Warum beunutzt du nicht den HW-Interrupt vom AVR? Würde doch auch > gehen und der User müsste nicht die State-machine permanent aufrufen Das habe ich absichtlich so gelöst: 1. wenn jemand aus dem Array mit den fertigen Werten liest, kann kein Interrupt, der diese Werte verändert dazwischengretschen; Zugriffe auf 16bit Variablen sind schließlich nicht atomic. 2. Als Teil meines Programmierparadigmas habe ich versucht, ISRs nur dann zu verwenden, wenn es wirklich nötig ist und Dinge zeitkritisch sind. Der DS1621 ist ja ohnehin unfassbar lahm (ca 2 Messungen pro Sekunde) und da bei I2C der Busmaster (also hier der AVR) den Takt generiert, kann man den Slave im Prinzip zwischen jedem Byte so lange warten lassen wie man will. 3. Ursprünglich war die Library in einem Projekt entstanden, bei dem der AVR als Client in einem RS485 Netzwerk arbeiten sollte. Mir war wichtig, dafür zu sorgen, dass die UART-ISRs die höhere Priorität haben. Hätte der AVR verschiedene Interruptlevel hätte ich das Ganze sehr wahrscheinlich anders gelöst. :) > 2. Warum trennst du I2C und Temp-Sensor nicht auf? Wäre schöner und man > könnte die I2C-lib auch für was anderes verwenden. Gute Frage. Wollte ich eigentlich noch machen. Im Moment habe ich aber kein Projekt bei dem ich I2C brauche und daher nicht so wirklich Motivation das zu tun. Kann aber durchaus noch kommen :) Viele Grüße, Max
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.