Forum: Mikrocontroller und Digitale Elektronik FreeRTOS + ATMega + OneWire


von Hermann G. (df2ds)


Lesenswert?

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

von Gast (Gast)


Lesenswert?

Ist es denn ein Problem, das Timing genau einzuhalten?

von (prx) A. K. (prx)


Lesenswert?

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.

von Hermann G. (df2ds)


Lesenswert?

@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!

von holger (Gast)


Lesenswert?

>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.

von (prx) A. K. (prx)


Lesenswert?

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
Noch kein Account? Hier anmelden.