Gibt es irgendwo eine kompakte Libary für die D18B20? Habe mir die von
Peter bereits angeschaut und finde die doch recht komplex und würde
einige Zeit benötigen, diese entsprechend abzuspecken.
Ich habe am Attiny84 ein LCD16x2 angeschlossen und möchte nun über die
freien Ports noch D18B20 anschließen.
Ausreichend wäre ein Sensor, optimal bis zu 5 Stück auf einem Bus.
Bislang habe ich ausser der Lib von Peter Dannegger habe ich bereits
http://www.sicklinger.com/atmel-avr-atmega-ds18x20-library-in-c.html
getestet. Diese scheint aber nicht D18B20 sondern nur DS18B20 kompatibel
zu sein. Bei Zimmertemperatur gibt dieser mir für zweit auf dem
Breadboard befestigten Sensoren -73 und -69 aus. So kalt hab ichs dann
doch nicht. Die Sensoren reagieren auf Erwärmung bereits.
Die Suche selber spuckt hier nichts zu D18B20 aus, nur DS18B20.
Stefan S. schrieb:> Gibt es irgendwo eine kompakte Libary für die D18B20? Habe mir die von> Peter bereits angeschaut und finde die doch recht komplex und würde> einige Zeit benötigen, diese entsprechend abzuspecken.
Erstmal: Gibts wirklich einen Unterschied zwischen D18B20 und DS18B20?
(gibts überhaupt einen D18B20?)
Meines Wissens nach gibts entweder DS18S20 (9 Bit) und DS18B20 (12Bit),
der "originalen" DS1820 (ohne S/B zwischen 18 und 20) ist praktisch
ausgestorben.
An Peters Code gibts (wie üblich) nicht mehr viel abzuspecken;
allerdings ist der doch schon in die Jahre gekommen, damals gabs
offensichtlich noch keine _delay_us / _delay_ms Funktionen, und die
Timings haben sich bei neueren Chips etwas verschoben.
ich hab erst kürzlich sowohl DS18S20 als auch B20 an einem ATmega328P
erfolgreich in betrieb genommen, ich kann den Code (der auf Peters Code
basiert) gerne posten.
Michael Reinelt schrieb:> Meines Wissens nach gibts entweder DS18S20 (9 Bit) und DS18B20 (12Bit),> der "originalen" DS1820 (ohne S/B zwischen 18 und 20) ist praktisch> ausgestorben.
DALLAS 18B20,
ich hatte vorhin einen zweiten Edit gemacht, irgendwie hat er den nicht
gespeichert, da hatte ich das noch als Fußnote gerade gebogen
> An Peters Code gibts (wie üblich) nicht mehr viel abzuspecken;> allerdings ist der doch schon in die Jahre gekommen, damals gabs> offensichtlich noch keine _delay_us / _delay_ms Funktionen, und die> Timings haben sich bei neueren Chips etwas verschoben.>> ich hab erst kürzlich sowohl DS18S20 als auch B20 an einem ATmega328P> erfolgreich in betrieb genommen, ich kann den Code (der auf Peters Code> basiert) gerne posten.
Bei Peters Variante habe ich lange in dem Beitrag hier im Forum
gescrollt, jedoch keine neue Version seinerseits gefunden. Soll
angeblich einen Bug bei negativen Zahlen haben.
Beinhaltet dein Code bereits diesen Fix?
Temperaturbereich ist für den Anfang bei 20 - 60° geplant. Der Dallas
ist Teil eines kleinen Gadgets. Attiny84 + 16x2Display, welches die
Durchschnittstemperatur sowie Min Max und Aktuell ausgeben soll für 1 -
n Sensoren. Bis auf den Dallas ist alles soweit eingebaut.
Stefan S. schrieb:> Soll> angeblich einen Bug bei negativen Zahlen haben.>> Beinhaltet dein Code bereits diesen Fix?
Wenn ich das richtig verstehe, tritt das problem mit negativen Werten
nur in dem print-aufruf auf:
und das verwende ich so nicht.
ich kann allerdings momentan nicht garantieren dass ich Temperaturen
unter 0° korrekt auswerte, momentan hab ich den Aufbau nciht zur
verfügung, um ihn in den Tiefkühler zu geben (und Kältespray ist auch
grad keins im haus)
Michael Reinelt schrieb:> Wenn ich das richtig verstehe, tritt das problem mit negativen Werten> nur in dem print-aufruf auf:
So ist es, für den Kommateil braucht man eine Fallunterscheidung.
Will man sich das sparen, gibt man den Wert einfach als float aus.
Peter Dannegger schrieb:> Michael Reinelt schrieb:>> Wenn ich das richtig verstehe, tritt das problem mit negativen Werten>> nur in dem print-aufruf auf:>> So ist es, für den Kommateil braucht man eine Fallunterscheidung.> Will man sich das sparen, gibt man den Wert einfach als float aus.
Genau das mach ich schon in meiner "Lib", da ich den Wert anschließend
sowieso als float brauche. Hat noch den angenehmen Nebeneffekt, dass ich
Fehler gleich als NAN im Rückgabewert codieren kann. Lässt sich aber
einfach ändern (wenn man lieber einen int als Rückgabewert hätte)
Stefan, soll ich meinen Code nun hier reinstellen?
Wenn die Messung fehlschlägt (weils die id nicht gibt, oder ein
bus-Feher auftritt, oder...) wird NAN zurückgegeben, das kann man mit
"isnan(ds1820_temp)" abfangen.
ACHTUNG: w1_measure wartet nicht auf eine fertige messung! Es liest das
Scratchpad aus, und startet danach eine messung. Das heisst, jeder
aufruf von w1_measure() liefert eigentlich das Ergebnis der
vorhergehenden Messung! Daher empfielt es sich in der Praxis, vor der
Hauptschleife eine Dummy-messung durchzuführen.
Normalerweise wird man ohnehin recht oft messen, und die messergebnisse
noch durch einen PT1-Filter jagen...
Michael Reinelt schrieb:> An Peters Code gibts (wie üblich) nicht mehr viel abzuspecken;> allerdings ist der doch schon in die Jahre gekommen
Wer, Peter ?
Marc Vesely schrieb:> Michael Reinelt schrieb:>> An Peters Code gibts (wie üblich) nicht mehr viel abzuspecken;>> allerdings ist der doch schon in die Jahre gekommen>> Wer, Peter ?
LOL :-)
Von Peter weiss ich's nicht, aber nachdem sein Code aus 2004 (?) ist,
und der Code nicht gerade wie von einem 14jährigen aussieht, wird Peter
wohl keine 21 mehr sein :-)
Hallo,
danke, das Beispiel geht. Zumindest wird mir jetzt eine Temp von ~22°C
angezeigt.
Werde den Sketch nun mal säubern und das Ergebnis nachher hier
reinstellen.