Forum: Mikrocontroller und Digitale Elektronik Eine bessere DS1621 library für den AVR


von mbrg (Gast)


Lesenswert?

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

von N. G. (newgeneration) Benutzerseite


Lesenswert?

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 ;)

von mbrg (Gast)


Lesenswert?

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