Hallo,
ich messe die Temperatur z.Z. mit einem LM35. LCD-Anzeige auf 0.5 Grad.
Nun ist es ja nicht möglich eine 0.123…89 Anzeige zu bekommen.
Ich wüßte nicht wie.
Was für einen digitalen/analogen Sensor könnt ihr denn empfehlen, mit dem
das ohne großen Aufwand möglich ist. Das ganze sollte ohne Lib funktionieren.
Auch bin ich am überlegen, dass mit einem PT1000 (extrem genau) zu machen.
Da müßte ich die Werte aber aus einer Tabelle holen/vergleichen.
Mit den Tabellen kenne ich es so, das sie ans Ende des Code geschriebe
werden. Ist das mit Arduino möglich? Oder muß die Tabelle in den Speicher
geschrieben werden?
Gruß und Dank
Andreas
Logischerweise wird auf erst mal alles in Flash geschrieben. Der AVR hat aber eine (modifizierte) Harvard Architektur. Also gibt es getrennte Adressräume für Flash und RAM und getrennte Daten- und Adressbusse für beide. Praktisch bedeutet, dass das es nicht ohne Umwege möglich ist Adressen ins Flash zu bekommen. Normale Funktionen können also erst mal nur ins RAM greifen. Deshalb werden bei Programmstart alle bekannten Variablen vom Flash ins RAM kopiert.
Wenn du jetzt wirklich große Tabellen hast, fressen die das RAM auf. z.B. 100 ints belegen 200 Bytes. Aber wenn sich das in Grenzen hält kannst du sie auch im RAM lassen. Kommt auch darauf an was du sonst noch machst.
AVR-gcc hat aber natürlich auch Mittel zu sagen "lass das im Flash" und dann gibt es ein paar Makros mit denen man sich Adressen ins Flash holen kann und besondere Funktionen, die diese Adressen annehmen. Ist eigentlich ganz einfach wenn man es mal gemacht hat:
Da ist Beispiel Code dabei für unsigned char oder int arrays
Was hast du gegen eine Library ?
Wenn du höher aufgelöste Messwerte haben willst und ein kompaktes Programm benutzen willst, setze DS18B20 ein. Die haben eine Genauigkeit von +-0,5° und eine Auflösung von 12 Bit.
Um diese Genauigkeit mit einem Pt1000 zu erzielen, muss du schon ganz schöne Klimmzüge bei der Beschaltung machen (0,4 Ohm / 1°C ! ).
SkobyMobil:
ich messe die Temperatur z.Z. mit einem LM35. LCD-Anzeige auf 0.5 Grad.
Nun ist es ja nicht möglich eine 0.123…89 Anzeige zu bekommen.
Möchtest du eine Anzeige mit mehr Nachkommastellen?
Oder möchtest du eine bessere Genauigkeit?
Ersteres kann du ganz leicht erreichen: mach deine Umrechnung von ADC in °C in float, dann kannst du fast beliebig viele Nachkommastellen ausgeben. (etwas filtern hilft hier auch).
Genauer kriegst du es nur mit anderen Sensoren. Wobei ich Erni-Berni beipflichte: mit einem PT1000 ist das sehr schwer.
geschlossene Digitale Sensoren wie der DS18B20 oder der DHT22 sind da besser.
Aber alle käuflichen Sensoren sind nicht besser als +-0,2°C. Wenn du mehr willst, mußt du kalibriren.
Je genauer die Messung sein soll, desto genauer muß die Auswertungselektronik sein. Um ein 0,5% Messung zu erreichen brauche ich mindestens 0,5% Widerstände ecc.
Es ist ein Irrglauben daß durch Kalibrieren die Genaugigkeit beliebig vergößert werden kann. Die Fehler bei einer Messung setzen sich aus mehreren Einzelfehler zusammen, wovon einige in ihrer Größe vorhersehbar oder meßbar sind bze ausgeglichen werden Können, andere aber zufällig und nicht vorhersehbar sind.
Ein 1% Widerstand wird nicht zu einem 0,1% Widerstand nur weil ich einen aussuche der genau den vorgesehenen Widerstandwert hat. Einflüsse wie Temperatur und Alterung gehen auch in den Fehlerkoefizienten ein und lassen sich nicht durch augesuchte Exemplare verringern.
Ich möchte meinem Vorrednern nicht wiedersprechen die DS18B20 sind für diesen Zweck optimal.
Er wollte es aber ohne Lib - das war das Pflichtenheft !
Es wäre eine OneWire nötig und evtl. die DallasTemperature, man könnte das natürlich auch alles selbst machen.
Um diese Genauigkeit mit einem Pt1000 zu erzielen, muss du schon ganz schöne Klimmzüge bei der Beschaltung machen (0,4 Ohm / 1°C ! ).
Hallo,
den PT1000 habe ich nur erwähnt, weil ich davon noch zwei habe. Ich habe mir
mal ein hochgenaues ReferenzThermometer gebaut, weil jedes Thermometer eine
andere Temperatur anzeigt. Das aber nur am Rande.
Eine Genauigkeit von 0,5 Grad bei einer Auflösung von 0,1 Grad ist völlig
ausreichend. Diese 0,1 Grad möchte ich aber auch gerne darstellen. Also,
LCD- 10,1 - 10,2 - 10,3 u.s.w
Momentar stelle ich 20,0 - 20,5 - 21,0 , das stört mich ein wenig, weil alle
Thermometer im Haus 20,1 anzeigen. So ist es angedacht.
Der DS18B20 ist wohl ein Dallas, den schaue ich mir mal an. Der DHT22 mist
wohl auch Feuchtigkeit- das wäre auch noch eine Option.
Wenn ich das mit dem PT1000 mache, dann muß dazu eine Schaltung gebastelt
werden. Das "PollinDing" hebt aber nur die Spannung an. Ist analog, also
müssen die einzelnen Werte angeglichen werden.
Wenn ich das einfach, "genau", und mit 0.1 Auflösung möchte, dann wird
wohl an etwas Digitalem nichts vorbeiführen. In den sauren "LibApfel" werde
ich dann wohl auch beißen müssen. Schaun wir mal…
Gruß und Dank
Andreas
SkobyMobil:
Momentar stelle ich 20,0 - 20,5 - 21,0 , das stört mich ein wenig, weil alle Thermometer im Haus 20,1 anzeigen. So ist es angedacht.
Das liegt daran, das dein Sensor zwar einen analogen Ausgang hat, du den aber mit 8Bit abtastest. Das macht bei 10mV/°C dann eben die 0,488° pro digit.
das kannst du erweitern in dem du einen externen AD verwendest, der 10 oder 12bit Auflösung hat.
Oder eben einen Temperatursensor, der den AD schon mit verbaut hat. z.B. den DS18B20 oder den DHT22 (oder andere).
uwefed:
Es ist ein Irrglauben daß durch Kalibrieren die Genaugigkeit beliebig vergößert werden kann. ... Einflüsse wie Temperatur und Alterung gehen auch in den Fehlerkoefizienten ein und lassen sich nicht durch augesuchte Exemplare verringern.
Uwe, natürlich kann ich keine Ding-Dong elektronik mit Kalibrierung in ein Präzisionsinstrument wandeln.
Aber ich kann alle systematischen Fehler im Arbeitspunkt des Abgleiches neutralisieren. Und damit ein genaues System, das aber noch die Serienstreuung hat, noch genauer machen. Und gegen die Alterung ist schliesslich eine jährliche Rekalibrierung vorgesehen. Wenn ich eine bessere Genauigkeit haben will als das was auf dem Markt zu haben ist, dann muß ich kalibrieren.
Kalibrieren heißt aber auch ein genaueres Refernzmeßgerät haben.
Ds muß auch wiedere kalibriert werden und eine solche Kalibrierung mit Eichung kostet oft mehr als ein neues, geeichtes Meßgerät. .....
Grüße Uwe
Ja. manche.
Ich mache ja auch Röntgenbilder, wenn ich nicht weiß wo die Schrauben versteckt sind und ich ein Gerät öffnen muß. Und mein Mobiltelefon wird auch regelmäßig geröntgt, wenn ich etwas zum durchleuchten brauche.
Hallo,
die Entscheidung ist gefallen, meine TempSensoren sind geliefert und "Probe gefahren"
Die Geschichte mit dem PT1000 habe ich aufgegeben.
Dem Rat mit dem DS18B20 bin ich nachgekommen. Der DHT22 hat es mir von seiner Funktion her angetan. Ist schon
eine feine Sache, zwei Werte geliefer zu bekommen. Nur die Ausführung des DHT22 hat mir nicht gefallen.
Ich habe mich nach etwas anderem umgeschaut und bin auf den HYT 939 gestoßen. Ich bin begeister von dem Ding.
Der kostet zwar "einen Groschen" mehr, aber ist in Ausführung und Genauigkeit allererste Sahne.
Und das Beste, alle Sensoren laufen OHNE Geräte speziellen Lib´s.
Also, schönen Dank für eure Mühe.
Gruß und Spaß
Andreas
Wenn du mit dem LM35 arbeitest bietet es hier an die interne ADC Referenz auf 1,1V zu setzen.
Schau mal hier.
Damit kommst du von 4,88mV pro Bit auf 1,07mV pro Bit, was dann mit einem LM35 zu einer Auslesegenauigkeit! von 0,1°C führt (nicht Wiederholgenauigkeit des Sensors die bleibt). Maximal lassen sich dann mit dem LM35 110°C messen.
Gruß
Der Dani
Hallo ihr Beiden,
die "analogReference(type" Seite habe ich mit gleich gelesezeichnet. Das ist
ja eine hoch interresante Seite. Das kann einem bestimmt so aus mancher
Patsche helfen. Guter Tip.
Über die Langzeitdrift habe ich mir keine Gedanken gemacht, aber wenn man
das Datenblat liest, dann ist es eine angenehmer Punkt.
Von dem HYT939 werde ich mir bestimmt noch einen besorgen. Ich muß mal
schauen ob es etwas in der Art auch für Luftfruck und Licht gibt.
Da könnte man sich eine astreine Wetterstation basteln, die in auch die
Steuerung der Heizung eingreift.
Gruß und Spaß
Andreas