Hallo miteinander, ich habe in den vergangenen Wochen eine Terrariensteuerung auf dem ATMega644 unter FreeRTOS entwickelt. Die geht auch so weit ganz gut... Jetzt möchte ich gern zusätzliche Temperatursensoren an die Steuerung anschließen. Wegen der erforderlichen Messgenauigkeit möchte ich gern die DS18B20 nutzen. Beim OneWire muss man aber -so weit ich weiß- das Timing ziemlich genau einhalten. Hat das schon mal jemand unter FreeRTOS gemacht? Gibt es Tipps, die ich beachten sollte? Ich habe auch schon daran gedacht, den OneWire-Bus über eine 1-Wire<->I2C Bridge anzuschließen (DS2482)...in der Hoffnung, dass dieser Baustein sich um das Timing kümmert und ich über I2C die Daten abholen kann, wenn es gerade paßt. Würde mich über jeden konstuktiven Kommentar freuen!! Hermann
Hab's nicht unter FreeRTOS gemacht, aber unter AvrX. Das Problem hat aber relativ wenig mit einem RTOS zu tun, sondern ist allgemeiner Art. Etliche Zeiten vom 1-Wire-Protokoll lassen sich nicht mit Timer-Interrupts oder RTOS-Mechanismen sondern nur mit Delayloops realisieren, schon ganz normale Interrupts sind im ein- bis zweistelligen µs-Bereich nicht akzeptabel. Daher muss man mit oder ohne RTOS im kritischen Bereich die Interrupts ausschalten. Wenn das für die übrigen Anforderungen nicht vertretbar ist, dann muss das 1-Wire-Interface ausgelagert werden. Wenn diese Einschränkung in der Reaktionszeit des Systems jedoch vertretbar sind (d.h. kein Interrupt innerhalb der Übertragung eines Bits), dann geht das problemlos.
@A. K.: Das ist schon mal ein guter Hinweis. Ich habe für andere Zwecke einen 100Hz-Interrupt laufen (Netz-Nulldurchgänge). Das sind also 10ms zwischen 2 Interrupts. Dazu kommt noch ein Task, der auch alle 10ms aufgerufen werden möchte... Was ist von der Idee mit dem DS2482 zu halten?? Danke einstweilen für den Kommentar!
>Was ist von der Idee mit dem DS2482 zu halten??
Vermutlich eine gute Idee. Der nimmt dir das Timing ab.
I2C ist nicht kritisch was das Timing angeht.
Der 100Hz Interrupt stört nicht, der kann ohne Verlust für die kritischen 60µs eines 1-Wire Bits ausgesperrt sein. Der ist eher zu langsam dafür. Bei mir läuft der RTOS-Timer mit 10KHz. Was zur Folge hat, dass die ca. 500µs des 1-Wire-Resets bereits per RTOS-Timer abgewartet werden können. Der DS2482 macht es natürlich einfach. Wobei ich sowas mal testhalber in einem ATtiny anstelle eines DS2482 implementiert hatte, ein 8pinner reicht dafür ja aus. Hab es dann aber mangels Notwendigkeit nicht so realisiert.
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.