Hy Leute,
habe die Suchfunktion schon verwendet, aber nichts passendes gefunden.
Folgendes Problem habe ich. bzw. Frage.
Ich suche einen Temperatursensor der zwischen ca. -10C und +60C mit ner
genauigkeit um die 1C mist.
Ich dachte an den DS1820 doch dieser braucht ja eine Wartezeit von 600us
wenn ich mich recht erinnere.
Ich wollte aber einen haben, den ich anspreche und er mir direkt den
Wert liefert.
Desweitern sollte er gut mit Bascom ansprechbar sein.
und zu guter letzt. sollte man auch 2 davon am Atmel anschließen können.
(Das sollte aber eher das kleinere Problem sein.)
Danke schonmal im Vorraus
Bis denne JungS!
>Ich dachte an den DS1820 doch dieser braucht ja eine Wartezeit von 600us>wenn ich mich recht erinnere.
Was sollte sich innerhalb von 600us an der Temperatur
schon ändern. In der Zeit merkst du nicht mal ob du dir grad
die Flossen verbrannt hast.
DS18B20: Bei 9 Bit Auflösung, was für 1°C Genauigkeit ausreicht, sind es
knapp 100ms, bei voller Auflösung 750ms. Was nicht heisst, dass der DS
in 100ms auf die Temperatur reagiert, das ist nur die Messzeit.
Wenn der Sensor tatsächlich im Bereich unter 1s reagieren soll, sollte
man sich erst einmal Gedanken um Kontakt und Wärmekapazität des Sensors
machen.
Also wie lange dauert denn die Abfrage an den Ds1820 um mir Temperatur
zu geben?
Versteh ich das richtig, das der DS1820 nur selbständig 600ms braucht um
seinen Wert neu zu regenerieren oder brauche ich so lange mit dem uC den
Wert auszulesen.
Ganz genau möchte ich wissen, wie lange ich von Startzeile des Auslesens
brauche, bis zur Ausgabe.
Vielen Dank hoffe, man konnte mir folgen
Der Sensor besitzt in diesem Zusammenhang 2 Kommandos: Mit dem einen
wird die Messung gestartet, mit dem anderen das Ergebnis ausgelesen.
Dazwischen müssen für volle Auflösung 750ms liegen.
Die Übertragungszeit für die Kommandos liegt grob bei 1-5ms, je nach
Länge.
Was hindert dich daran das Ding kontinuierlich zu starten, also so etwa
jede Sekunde?
Stört dich die Tatsache dass die Temperatur dann veraltet ist? Hast du
so schnelle Temperaturwechsel?
Ich würd das so machen:
Interrupt Routine die jede Sekunde oder so anspringt, den aktuellen Wert
in ein Register schreibt und dann eine neue Messung initiiert.
Wenn du dann einmal in deinem Hauptprogramm den Wert brauchst, musst du
nur das / die Register auslesen, das geht in kürzester Zeit.
> Ganz genau möchte ich wissen, wie lange ich von Startzeile des Auslesens
brauche, bis zur Ausgabe
Der DS18B20 im TO92-Gehäuse ist ein langsamer Sensoren. Dass die
12-Bit-Conversion bis zu 750ms dauert, ist in dem Zusammenhang
zweirangig. Das ist immer noch rasend schnell im Vergleich zu der
Geschwindigkeit, mit der der Sensor eine Temperatur richtig erfasst: er
ist zu dick in Plastik eingepackt, um für schnelle Messungen brauchbar
zu sein. Wenn man den Sensor zwischen die Fingerspitzen presst, dauert
es 5-7 Sekunden, bis er die Temperatur weitgehend erkannt hat. Und
danach Minuten, bis er wieder Raumtemperatur sieht.
Vergleich:
- Ein TSIC306 im SOP8-Gehäuse (auch ein kalibierter digitaler Sensor,
ungefähr gleicher Preis, etwas genauer) schafft es in etwa 2-3 Sekunden.
Für die Auswertung liefert er ca 10 Werte pro Sekunde. Gibt es auch in
einem leicht abgewandelten TO92-Gehäuse, habe ich aber noch nicht
getestet.
- Ein KTY11-5 (PTC) im TO92-mini-Gehäuse erkennt die Temperatur in etwa
2 Sekunden. Auswertung nahezu belibig schnell ("sofort") mit ADC. Das
ist aber ein nicht kalibierter analoger Sensor.
- Ein Thermoelement Typ K (offen) mit MAX6674 erkennt die neue
Temperatur in ca einer Sekunde. Die Conversion dauert 180ms, liefert
also ca 5 Werte pro Sekunde. Analog, aber einigermassen genau auch ohne
Kalibration (typischerweise 1-2 Grad Fehler).
Wie schnell aendert sich die Temperatur am Messpunkt und wie schnell
muss der Temperaturwert bekannt sein ? Soll ein schnelles Regelsystem
gebaut werden ? Was geschieht bei einer Verzoegerung ? Wie gross ist die
thermische Masse ? Und die Leitfaehigkeit ?
>gibt es nicht einen schnelleren, der kein start und stop benötigt>sondern direkt den wert per read auslesen kann..
Bei Temperaturänderungen folgt die Temperatur des Sensors der Temperatur
des Mediums, in dem er sich befindet, nie instantan. Die Wärme muss
schließlich erst von der Oberfläche des Sensors zum Chip im Inneren
durch Wärmeleitung wandern. Die Strecke ist zwar klein, aber endlich
groß. So entsteht, wenn es wärmer oder kälter wird, immer eine mehr
oder weniger große Verzögerung zwischen der Temperatur des Mediums um
den Sensor und dem ausgegebenen Messwert (und wenn die Temperatur gleich
bleibt, ist eine Verzögerung irrelevant!). Das gilt für alle
Temperatursensoren.
Einen DS1820 viel öfter als ungefähr einmal pro Sekunde auszulesen,
macht aus diesem Grund wenig Sinn.
> Das gilt für alle Temperatursensoren
Wobei die thermische Zeitkonstante von Sensoren, die per Kontakt mit dem
Medium messen, gewaltig unterschiedlich ausfällt:
Ein dünnes Thermoelement (z.B. D=0.025mm) kann eine thermische
Zeitkonstante von 0.002 sec haben. d.h. in 0.002 Sekunde ist ein
beliebiger Temperatursprung zu 63,2% korrekt erfasst, bei Messung in
Wasser. Das kann man schon "instantan" nennen.
Beispiel:
http://www.omega.com/ppt/pptsc.asp?ref=IRCO_CHAL_P13R_P10R
Hy, danke schonmal für die vielen Infos...
Es geht mir eigentlich nicht darum, wie schnell er den "aktuellen" wert
erfasst sondern das er mir einen zurückgibt...
Es soll soetwas wie ein Boardcomputer werden.
Ich wollte eine Schaltung bauen, in der die Einspritzdauer berechnet
wird und mit der letzten addiert wird und so weiter und zum schluss bzw.
immer wieder auf einem display eine durschnitswert der Einspritzungdauer
anzeigt.
Dazu wird der Timer gestartet immer wieder überprüft ob noch ein signal
anliegt. wenn nicht, wird der Timer gestoppt, mit dem letzten wert
addiert die dauer die der Timer festhält liegt zwischen 1,5ms und 9ms.
Danach hat er ca. 2ms Pause bis die nächste Einspritzung erfolgt und
genau in dieser zeit muss der Wert der Temperatur ausgelesen werden und
das Display die ausgabe für Einspritzungsdauer und temperatur übertragen
werden.
Vielen Dank Jungs
Welche Temperatur wird gemessen ? Eine Gastemperatur ? Eine
Fluessigkeit ? Der Motorblock ? Falls es eine Gastemperatur gemessen
werden soll, die Temperatur eines dynamischen Gases in einer
Waermekraftmaschine, so ist das wertloser Aufwand, denn die
Gasgleichungen sind bekannt. Adiabatische Kompression... alles bekannt.
Temperaturen waehrend der Explosion kann man so eh nicht messen, so ganz
nebenbei.
> genau in dieser zeit muss der Wert der Temperatur ausgelesen werden
Wieso genau in dieser Zeit? Das Messen der Einschaltdauer belastet den
Microcontroller, wenn man es mit Timer und Interrupts macht (z.B. Input
Capture), mit beispielsweise 5us per Messung. Damit ist die CPU zu
0,001% ausgelastet - man hat also noch reichlich Leistung frei,
jederzeit was anderes zu machen. Die 1-Wire-Kommunikation kann man
problemlos nebenher laufen lassen.
Oh mann, wollt Ihr ihn nicht verstehen ? Er meint dass die Messabfrage
750 mS CPU Zeit verheizt. Vermutlich will er einfach nur Raumtemperatur
messen (-10 - 60 °C). Also: Nimm den angesprochenen Sensor, das haut
alles locker hin. Tss, immer diese
IT-Einmal-mit-der-Kirche-ums-Dorf-Denker... Ein Wunder dass da nicht
mehr verhungern, so ein Einkaufszettel kann echt komplex sein :-)
> Nimm den angesprochenen Sensor, das haut alles locker hin.
Ich habs jetzt nicht nachgeschaut, aber wenn man für den DS1820 über 2ms
zum auslesen benötigt, haut das bei ihm nicht hin, da er ja nur 2ms Zeit
hat.
Wie schon angesprochen würde ich mir da aber auch überlegen das Programm
grundsätzlich umzubauen (Interrupt gesteuert?). Hast du nicht vielleicht
noch ein Hardware I2C Bus an deinem µC? Da könntest du doch einefach
einen LM75 nehmen und die Kommunikation mit dem Sensor läuft im
Hintergrund ab (über Interrupts).
> Da könntest du doch einefach einen LM75 nehmen und die Kommunikation mit dem
Sensor läuft im Hintergrund ab (über Interrupts).
Wenn er lernen würde, mit Interrupts zu programmieren (was doch wohl
eine Selbstverständlichkeit ist), gilt das Gleiche für 1-Wire und
DS18B20. Es dauert zwar inklusive Conversion rund 750ms, den
1-Wire-Sensor mit 12bit auszulesen. Aber in diesen 750ms muss man den
Microcontroller nur jeweils ein paar us lang am Stück und ohne
Unterbrechung mit 1-Wire-Protokoll-Aufgaben beschäftigen. Zwischen den
Bits kann man Pausen machen und die einzelnen Bitmuster bestehen fast
nur aus "Luft" (0 und 1 sind mindestens 60us lang, wobei man die
eigentliche Arbeit in 2us unterbringen kann, wenn man das Timing
ausreizt - der Rest ist Leerlauf). Von den 750ms kann er also ca 749ms
mnutzen, um andere Aufgaben zu erledigen.