Eine bessere DS1621 library für den AVR

Gast #4301594
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
Persönliche Seite #4301613
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 ;)
Gast #4301786
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren