FreeRTOS + ATMega + OneWire

OP #1109297
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
#1109365
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.
OP #1109382
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!
#1109433
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.