Hallo Ich möchte mir ein digitales Thermometer mit dem R8C13 basteln. Die Temperatur wird mittels LM335 (10mV/°C) in eine Spannung umgesetzt und am AN6 (Pin31) dem µC zugeführt. Ausgegeben wird die Temperatur mittels 3 großen 7-Segment-Anzeigen. Mit den Anzeigen klappt das auch schon ganz gut. Blos die temperaturabhängige Spannung schwankt fürchterlich. Wenn ich zB die 5V Versorgungsspannung messe, so bleibt die recht stabil und wird auch so stabil angezeigt. Bei der Umrechnung auf die Temperatur muss also das faule Ei sein - ich komm blos nicht drauf. Die Umrechnung sieht so aus: #################### float u; // Spannung float t; // Temperatur u = ad_in(6); u = u / 1023.0 * 5000.0; t = u - 2730; // 2.73V = 0°C #################### In weiterer Folge wird t etwa einmal pro Sekunde an die 7-Seg-Anzeigen ausgegeben. Leider springt die Anzeige bis zu 5°C pro Messung auf und ab. Sie pendelt also bei Zimmertempertur zwischen 20 und 25°C. Hat jemand einen Tipp ? :-)
Jochen schrieb: > 10mV/°C Die Schwankungen können an Deiner A/D-Referenz liegen. Wie wird die gebildet? Ist sie ausreichend gepuffert und entkoppelt?
Was meinst du damit ? Hardware ist nur 1k von 5V (=Ub) zum LM335 und der liegt mit dem anderen Ende auf GND. Adjust ist offen. Verbindung 1k mit LM335 geht zum Eingang am µC. Hier mit Kondensator abzupuffern ist wirkungslos. lg
Der R8 hat einen internen A/D Wandler. Der benötigt eine stabile Referenz. Der Analogteil im IC hat eine eigene Spannungsversorgung. Die muss sehr stabil sein. Schau bei Renesas in das Datenblatt und application notes für Hinweise.
Ja ich weis. Die analoge Versorgung ist hier gleich der Hauptversorgung. Also die "normale" und die analoge Versorgungsspannung wird über EINEN 7805 hergestellt. Zusätzlich ist noch direkt am µC jeweils ein 100nF-Kerko. Habe auch schon versucht zusätzlich 1000µF auf die Ub zu legen - aber auch keine Wirkung ersichtlich. Ich denke vielmehr, dass es an der "Rechnung", also an der Software liegt. lg
Na ja, rechnen wird er immer gleich. Schau dir die raw Daten - also direkt die AD Werte - an. Ich schätze, die schwanken bereits. Hängt die Anzeige auch an dem 7805? Zum Zeitpunkt der AD Wandlung bruacht es eine absolut stabile AD Versorung und Referenz. Mmmhhh.... wie löst der AD Wandler auf? Also wieviel mV/digit?
>> Hängt die Anzeige auch an dem 7805?
Nein die wird zZ. aus einer anderen Spannungsquelle versort (15V). Der
GND der 5V und der GND der 15V ist aber verbunden.
Mmmhhh.... wie löst der AD Wandler auf? Also wieviel mV/digit?
Wenn ich das wüsste. Es schein als wären es 5mV, das die Kommastelle der
Temp-Anzeige immer nur 0 oder 5 anzeigt.
Wie bekomme ich die Auflösung höher ?
Die Anzeige sollte 0.1°C auflösen - also auf 1mV.
lg
Der RC8 hat - glaube ich - nur 8 Bit. Dann wären das so um die 20mV/digit und bei dir ca. 2°C. Wenn der AD Wandler um 2 digit wackelt, passt deine Beobachtung. Du kommst am Datenblatt nicht vorbei. Auf geht es!
Laut Handbuch: adcon1 = 0x28; // 10-bit mode Datenblatt ist mangels Englischkenntnisse keine Option :-| lg
Jochen schrieb: > Datenblatt ist mangels Englischkenntnisse keine Option :-| Dann vielleich ein DS18B20
Im Datenblatt des DS18B20 stehen viele Worte, die ich leider nicht lesen kann ... :-| Wie würde der Quellcode bei Verwendung des DS18B20 aussehen ? lg
Deine Rechenformel ist ok, du ver(sch)wendest zwar floating point, aber das kann der uC ja und du darfst wohl die Leistung verschwenden. Ein 7805 ist (mit -1.1mV/GradC) fast so temperaturabhängig wie ein LM335 (10mV/GradC), als Spannungsversorgung eines Thermometers taugt der billigste der billigen Spannungsregler also nicht. EIn LP2951-5 wäre präziser, aber normalerweise verwendet man Referenzspannungsquellen, damit die absolute Genauigkeit der Spannung deutlich besser wäre als 5mV (ergibt immerhin eine Genauigkeit besser 1 GradC). Dummerweise sind solche absolut genauen Referenzspannungsquellen teuer und schwer beschaffbar, MC1403 nur 25mV, LP2951 nur 36mV, REF5050 5mV, bingo, Reichelt Fehlanzeige, der hat nur die REF02 mit 15mV. Da also absolut genaue Referenzspannungen sowieso zu schwer zu bekommen sind, nimm die eingebaute, die ist zwar noch ungenauer (1.19V bis 1.49V), du musst dann nur mit einer bekannten Temperatur dein Thermometer kalibrieren, aber immer 1000mal stabiler als deine 5V Versorgungsspannung die du derzeit verwendest, Allerdings kann sie keine 2.93V messen. Nimmst du einen Spannungsteiler 1:3 und willst 2.73V (0 GradC) bis 3.43V (70 GradC, Temperaturbereich des R8C) messen, reicht dein A/D-Wandler nur von 795 bis 1000, also 200 Schritte oder 0.35 GradC pro Schritt weit. Du müsstet die Spannung des Sensors verstärken mit einem externen Operationsverstärker um auf 0.1 GradC Auflösung zu kommen. Alles in allem also recht ungünstig. Ich weiß nicht, ob man dem R8C eine höhere untere Referenzspannung RefLO zuführen kann (AVss also so bei 2.5V), vermutlich aber nicht. Also bleibt dir nur ein externer OpAmp mit dem du das alaogsignal des LM335 auf den ganzen Messbeerich von 0V (für 0 GradC) und 1.1V (für 70 GradC oder was du willst) verstärkst. Ein anderer Trick ist es, das Signal absichtlich mit Rauschen zu unterlegen und im uC dann Mittelwerte mit höherer Auflösung zu bilden, aber bei schon 3 digit absolute Ungenauigkeit des A/D-Wandlers sind dein 0.1 GradC Auflösung dann sehr grosse Schätzwerte.
Jochen schrieb: > Wie würde der Quellcode bei Verwendung des DS18B20 aussehen ? Ja, wie, was denn??? Dir ist also egal, wie du an die Werte kommst? Dann kauf doch gleich eine fertige Lösung beim Poolin oder Paerl oder sonst wo. Wie sehen die Rohdaten des AD Wandlers beim RC8 aus? Sind die stabil oder nicht? Post die Werte mal.
Danke für deine Worte ! Heist also: Ein Thermometer mit 0.1° Auflösung ist mit dem R8C13 schwer bis garnicht realisierbar. Schade nur, weil ich bereits mit dem R8C eine Uhr gebaut habe. Und nun sollte im selben Design noch ein Thermometer hinzukommen. lg
>Der RC8 hat - glaube ich - nur 8 Bit.
R8C'2 haben 10 Bit-ADC (aber keine Floaing-Point-Unit).
>> Wie sehen die Rohdaten des AD Wandlers beim RC8 aus? >> Sind die stabil oder nicht? Post die Werte mal. Was sind den Rohdaten ? Wo finde ich diese ? Was soll ich Posten ? lg
Mit u = ad_in(6); liest du den AD Wandler aus. Das sind die digitalen Werte, die du durch die anschließende Berechnung skalierst. Wenn dieser Wert schwankt, musst du den Wandler stabilisieren.
> Was sind den Rohdaten ? Wo finde ich diese ? Was soll ich Posten ? Hm...was ist denn in deinem Gehirn vorgegangen als du die Routine geschrieben hast um den AD-Wandler auszulesen? Du wirst doch wohl noch wissen wo du die Daten aus dem Register des AD-Wandlers kopierst. Du koenntest auch dort mal in deine Variable direkt nach dem Auslesen einen festen Wert in die Hilfsvariable schreiben. Dann sollte deine Anzeige einen festen Wert anzeigen. Machst du das dann mit 2-3 Werten an den grenzen deines erwarteten Temperaturbereich hast du gleich gelernt wie du deinen Algorythmus testen kannst. Wenn der Wert dann stabil sein sollte gibt es nur noch zwei Moeglichkeiten. Entweder die AD-Wandlung selber ist ungenau weil der Spannungswert rauscht, oder du wartest nicht bis der AD-Wandler mit der Wandlung fertig ist. > Ein Thermometer mit 0.1° Auflösung ist mit dem R8C13 schwer bis > garnicht realisierbar. Ein Thermometer mit 0.1 Grad Aufloesung kannst du einfach durch rechnen bekommen. Solltest du dagegen eine Genauigkeit von 0.1Grad erwarten so ist das natuerlich mit dem R8C13 genauso einfach loesbar wie mit jedem anderen Controller, aber es stellt natuerlich erhoehte Anforderungen an deine Schaltung und die Kalibrierung der Temperatur. Das ist fuer jemanden der noch auf dem Level 'blinkende LED' ist, nicht machbar. Aber das macht nichts da kaeufliche Thermometer da auch luegen wenn sie nicht sehr sehr teuer sind. Olaf
> Mit > u = ad_in(6); > liest du den AD Wandler aus Noe, damit ruft er eine Funktion auf die es macht. Man muss bei diesem schweren Fall hier vermuten das er sie einfach woanders abgeschrieben hat und diese Funktion aus dem zusammenhang gerissen wurde. Wenn man den AD-Wandler auslesen sollte wenn er noch wandelt dann kann das auch zu interessanten Ergebnissen fuehren. Olaf
Olaf schrieb: > Man muss bei diesem schweren Fall hier vermuten das er sie einfach > woanders abgeschrieben hat und diese Funktion aus dem zusammenhang > gerissen wurde. Wenn man den AD-Wandler auslesen sollte wenn er noch > wandelt dann kann das auch zu interessanten Ergebnissen fuehren. Immer locker aus der Hüfte ... Es ist doch völlig egal, wie der Wert dahin kommt. Es bleibt die Frage: Ist der Wert vor der Berechung stabil, oder nicht?
> Olaf, entspann dich mal.
Bin ich doch. Aber wenn man einem Fall maximaler Unwissenheit die
Wuermer einzeln aus der Nase ziehen soll weil der Source nur in Teilen
zu sehen ist, dann muss man sich halt mit Sarkasmus retten um nicht an
der boesen Welt zu verzweifeln. .-)
Olaf (jetzt erstmal einen beruhigenden Tee trinken geh)
Olaf schrieb: > Aber wenn man einem Fall maximaler Unwissenheit die > Wuermer einzeln aus der Nase ziehen soll weil der Source nur in Teilen > zu sehen ist, dann muss man sich halt mit Sarkasmus retten um nicht an > der boesen Welt zu verzweifeln. .-) Nö, man kann auch http://www.youtube.com/watch?v=5KT2BJzAwbU
Hallo Olaf Also wenn ich einen festen Wert angebe, dann steht der auch bombenfest und "wackelt" nicht. Ist ja auch klar, denn dann messe ich ja nichts. Die Funktion des AD-Wandlers hab ich schon so wie sie ist aus einem Bsp. genommen - sie sieht so aus:
1 | unsigned int ad_in(unsigned char ch) |
2 | {
|
3 | adcon0 = 0x80 + ch; // Port P0 group |
4 | adcon1 = 0x28; // 10-bit mode |
5 | adst = 1; // Conversion start |
6 | while(adst == 1){} // Wait A/D conversion |
7 | return ad; // AD value |
8 | }
|
lg
Jochen schrieb: > Also wenn ich einen festen Wert angebe, dann steht der auch bombenfest > und "wackelt" nicht. Wo gibst Du einen festen Wert an? Speichere ein paar der Rückgabewerte von ad_in(6) und schaue, ob die Werte gleich sind.
> Ein Thermometer mit 0.1° Auflösung ist mit dem R8C13 > schwer bis garnicht realisierbar. Du benötigst, nebem den R8C mit Display und LM335, einen OpAmp wie LM358. Schwer bis gar nicht würde ich das nicht nennen, aber viele Leute stehen auf Kriegsfuß mit Analogtechnik. Für die ist das dann schwer bis gar nicht realisierbar. Woran man wieder erkennen kann, daß Grundlagenkenntnisse in Analogtechnik gar nicht so verkehrt wären. VRef ---|+\ | >--+--+---+---------- ARef +-|-/ | | R3 | | R1 +--|+\ +-------+ | | | >-+-- A/D +---(--|-/ R4 | | | +---(-------+ | | R2 LM335 | | GND
>> Wo gibst Du einen festen Wert an?
Na da wo die Rechnung steht:
1 | u = ad_in(6); |
2 | u = u / 1023 * 5000; |
3 | t = u - 2730; |
4 | t = 179; // nun wird t an die Ausgabe übergeben |
>> Speichere ein paar der Rückgabewerte von ad_in(6) und schaue, ob die >> Werte gleich sind. Wo/Wie soll ich die den Speichern und schauen ?
VRef ---|+\ | >--+--+---+---------- ARef +-|-/ | | R3 | | R1 +--|+\ +-------+ | | | >-+-- A/D +---(--|-/ R4 | | | +---(-------+ | | R2 LM335 | | GND Mit dieser Art "geschreibsl" blick ich ja schon gar nicht durch :-( Ich gehe mal davon aus, das es zwei Opamps sind. Der erste ein Impedanzwandler, der eine Referenzspannung niederohmig macht. Der zweite OP vergleicht scheinbar die gemessene Spannung (Temperatur) mit einem Spannungsteiler (mit Hysterese?). Der Ausgang des zweiten OPs geht zum AD-Eingang des µC. Was wird aber als Referenzspannung (VRef) angelegt? Was ist ARef ?
Jochen schrieb: > Wo/Wie soll ich die den Speichern und schauen ? Im Debugger oder Monitor Deiner Entwicklungsumgebung. Notfalls geht auch Deine Anzeige:
1 | t = ad_in(6); |
2 | // t anzeigen
|
Die Messungen sollten nicht zu schnell erfolgen, sonst sieht man ja nichts.
Stimmt doch alles. > Was wird aber als Referenzspannung (VRef) angelegt? Eine brauchbar stabile Referenzspannung aus einem der obejn genannten Spannungsreferenzen. Falls es möglich ist, die Referenz des R8C auf einen Ausgang geschaltet (hab ich aber im Datenblatt nicht gefunden). > Was ist ARef ? Der ARef Eingang des R8C, falls eine externe Refeenz verwendet wurde.
>> Wo/Wie soll ich die den Speichern und schauen ? > Im Debugger oder Monitor Deiner Entwicklungsumgebung. Der Debugger läuft bei mir nicht (Win7/32). > Notfalls geht auch Deine Anzeige: Anzeigen ja - wo sonst, aber speichern ???
1 | t = ad_in(6); |
2 | // t anzeigen
|
>> Die Messungen sollten nicht zu schnell erfolgen, sonst sieht man ja >> nichts. Die 7-Seg-Anzeige flimmert nicht - da sieht man alles, nur der Messwert "wackelt".
> Was wird aber als Referenzspannung (VRef) angelegt? >> Eine brauchbar stabile Referenzspannung aus einem der >> obejn genannten Spannungsreferenzen. >> Falls es möglich ist, die Referenz des R8C auf einen >> Ausgang geschaltet (hab ich aber im Datenblatt nicht >> gefunden). Du meinst die normale Versorgungsspannung des R8C ? > Was ist ARef ? Der ARef Eingang des R8C, falls eine externe Refeenz verwendet wurde. Die analoge Versorgungsspannung ist gleich die "normale" Versorgungsspannung. So müsste VRef und ARef das gleiche sein - richtig ?
Jochen schrieb: > Anzeigen ja - wo sonst, aber speichern ??? Nocheinmal langsam: Beim Ausgangspost hast Du vermutet, dass Deine Berechnung nicht stimmt. Die "Experten" hier sind eher der Meinung, dass der AD Wandler bereits wacklige Werte liefert. Eine einfache Möglichkeit dies zu prüfen, ist direkt die AD Wandler Werte zu betrachten. Also machst Du es, wie beschrieben. anstatt u = ad_in(6); u = u / 1023 * 5000; t = u - 2730; t = 179; // nun wird t an die Ausgabe übergeben machst Du t = ad_in(6); // t an Anzeige übergeben Auf der Anzeige siehst du jetzt die Rohdaten und kannst deren Stabilität kontollieren.
>> machst Du >> t = ad_in(6); // t an Anzeige übergeben >> Auf der Anzeige siehst du jetzt die Rohdaten und kannst deren Stabilität >> kontollieren. Jetzt weis ich erstmal was Rohdaten sind :-) Gesagt, getan: Die Anzeige "wackelt" genauso.
> t = ad_in(6); // t an Anzeige übergeben > Die Anzeige "wackelt" genauso. Richtigstellung: "Genauso" stimmt nicht ganz - sorry: Die Anzeige wechselt nur um ein, zwei oder auch mal drei Digits. Das könnte also aus einer leichten Temperaturschwankung entstehen. Sie bleibt auch mal für ein paar Messungen unverändert. Jedenfalls deutlich stabiler als zuvor.
@ MaWin Hab mal das Schaltbild, so wie ich es verstanden habe, angehängt. Ist das so OK ? lg
> Ist das so OK ? Nicht ganz. Die 5V aus dem 7805 reichen dem LM358 nicht als Versorgungsspannung um seinerseits 5V ausgeben zu können. Du müsstest dem LM358 mit 15V versorgen. Da sollte man dann aufpassen, daß nicht mehr als 5V an die Eingänge des uC kommen (z.B. ein 10k Widerstand zwischen A2 und den uC-Eingang) Und die Widerstandswerte R4 R5 R7 müssen natürlich passend berechnet werden, um deinen gewünschten Temperaturbereich, den du natürlich niemandem erzählt hast, auf volle 0V bis 5V auszudehnen. Letztlich sind die 5V des TL431 sogar so belastbar, daß man A1 weglassen könnte. Da man aber A2 braucht, spart das kein Bauteil.
> Und die Widerstandswerte R4 R5 R7 müssen natürlich passend berechnet > werden, um deinen gewünschten Temperaturbereich, den du natürlich > niemandem erzählt hast, auf volle 0V bis 5V auszudehnen. Hatte ich das nicht ? Also von -30°C bis +60°C wäre wünschenswert. Wie berechnet man die Widerstände ? > Letztlich sind die 5V des TL431 sogar so belastbar, daß man A1 weglassen > könnte. Das dachte ich mir auch schon. > Da man aber A2 braucht, spart das kein Bauteil. Man könnte aber einen Einzel-OP verwenden. Hätte noch TS321 im SOT23-5 vorrätig. Der würde mir schon aus platzgründen gut gefallen.
Nun habe ich mal mit dem TL431 eine stabile Referenzspannung aufgebaut und diese an Aref des µC angelegt und auch den LM335 damit versorgt. Erstmal ohne Opamp. Nun schwankt die Anzeige nicht mehr um 5°C sondern um gut 15°C. Auch die Rohdaten sind deutlich unstabiler. Was läuft hier falsch ???
Jetzt habe ich Referenzspannung des TL431 nochmal zusätzlich mit 100µF stabilisiert - und jetzt ist (fast) Ruhe eingekehrt. Die Anzeig wechselt nur noch um 0.5°C mal nach oben, mal nach unten. Damit kann ich leben. Vermutlich ein "Steckplatten-Problem" ?! Was aber noch garnicht vertretbar ist, ist die Tatsache, dass die Anzeige um gut 10°C zuviel anzeigt. Der LM335 sollte doch einigermaßen genau sein. Nur wird aber um gut 10°C mehr Raumtemperatur angezeigt als tatsächlich herscht. Natürlich könnte ich das per µC rausrechnen, ob das aber die richtige Lösung ist ? Die Genauigkeit sollte schon in vertetbaren Grenzen liegen. So etwa +/- 1°C Abweichung würde ich für vertretbar halten. Ach ja, die Auflösung von 0.5°C gefällt mir auch nicht wirklich. Eine Auflösung von 0.1°C würde ich anstreben.
> Also von -30°C bis +60°C wäre wünschenswert. > Wie berechnet man die Widerstände ? -30 = 2.43V -> 0V +60 = 3.33V -> 5V Schnittpunkt der Geraden bei 2.97V, Spannungsteiler der 5V könnte man also aus 8k2 und 12k aufbauen, er hat am Knotenpunkt 4871.28 Ohm Quellwiderstand, Verstärkung 5.5, also 4.5 mal grösseren Widerstand für R7, also 21.920 Ohm = 22k. Es fliessen dann bei soll=0V am Ausgang 180uA aus den +5V in den Ausgang des TS321, das sind mehr als die 50uA die der TS321 so nah an 0V noch abfliessen lassen kann, er kommt kaum unter 0.7V. Also R4=82k, R6=120k, R7=220k geht runter bis 0.05V und hat einen Eingangsfehler bei 500nA Eingangsoffsetstrom von 20mV, den man zum guten Teil wegkalibriert. Du siehst, 1% genaue Widerstände führen zu Abweichungen, die man eigentlich schon bei der Rechenformel zur Anzeige der Temperaturen mit einrechnen müsste. Daher ist es notwendig das Thermometer hinterher zu kalibrieren, was man wegen des bis zu 9 GradC ungenauen LM335 und 1% ungenauen TL431 sowieso tun muß. Ein kleines bischen besser weil symmetrischer wird es, wenn du in die +-Eingangsleitung des OpAmps noch einen 39k Widerstand einbaust, dann sehen beide Eingänge dieselbe Quellimpedanz und unterscheiden sich nur noch um 150nA statt 500nA, also unter 0.5 GradC statt 2 GradC. Ein TL431B und ein LM235A und 0.5% Widerstände würde vielleicht gerade eben ein abgleichfreies Thermometer ergeben, je nach deinen wirklichen Genauigkeitsanforderungen. A1 weglassen. Wenn du keinen 10k Widerstand vor den ARef-Eingang baust (weil das vielleicht laut Datenblatt nicht zulässig ist, man zumindest auch 100nF dahinter nach Masse legen müsste), dann solltest du eine BAT49 Schottky-Diode von C2 nach C3 legen, damit 5VRef nie mehr als 0.5V höher werden kann als VCC des R8C.
Kalibrierung: Sollte ich irgendwo einen Trimmer vorsehen, oder wo/wie kann ich ansonst kalibrieren ? Anbei das Schaltbild. Meinst du das mit den 39k-Widerständen so ? lg
Jochen schrieb: > jetzt ist (fast) Ruhe eingekehrt. Die Anzeig wechselt > nur noch um 0.5°C mal nach oben, mal nach unten. Damit kann ich leben. Gratuliere! Da wackelt nur noch das letzte Bit: 5V Ref bei 10Bit AD Wandler ergibt ca. 5mV/digit bei 10mV/°K Sensor ergeben sich 5mV = 0.5°K Auflösung. Die Anzeige kann sich also nur in ca. 0.5° Schritten ändern. Um das zu ändern, muss der AD Wandler höher auflösen (geht ja nicht) oder die Eingangssignaländerung (jetzt noch 10mV/°K) vergrößert werden. Da bist Du mit MaWin dran. Ach ja, die Anzeige läßt sich durch Mittelwertbildung über 3 - 5 Messungen beruhigen.
> Sollte ich irgendwo einen Trimmer vorsehen, oder wo/wie kann ich > ansonst kalibrieren ? Du hast einen Microcontroller und der kann Rechnen. Und er hat internes Dataflash um kalibrierwerte abzulegen. Wenn du also irgendwo an deiner Schaltung einen Taster hast dann koenntest du damit in einen noch zu programmierenden Kalibriermodus wechseln. Da dann zwei Referenztemperaturen messen und damit dann die Kalibrierung vornehmen. > Gratuliere! > Da wackelt nur noch das letzte Bit: Besser wird man den AD-Wandler auch kaum bekommen. Da wuerde ich dann auch den Wert durch einen Filter schicken/mitteln wenn einen das stoert. Oder vielleicht einfach auf 0.5Grad runden. Olaf
Hallo Irgendwie raff ich das Thermometer nicht (mehr)! Ich sagte ja bereits, dass bei Raumtemperatur etwa 10°C zuviel angetzeigt werden. Nun habe ich den überschüssigen Wert per Software abgezogen, so dass bei 20° Raumtemperatur auch etwa 20° angezeigt werden. Soweit so gut. Wenn ich nun damit in den Abstellraum gehe (hier zeigt das Quecksilber 12°C) zeigt mein Thermometer blos noch rund 7° an. Leg ich es in die nähe der Heizung (Laserthermometer sagt 45°) zeigt mein Superthermometer satte 65° an. Ist der LM335 das Übel oder der µC oder was sonst ? Alternativ hätte ich noch einen KTY81-110 (Temperatursensor) im TO92 oder einen LM61 (Tempertursensor) im SOT23 anzubieten. Wären hiermit vielleicht bessere Werte zu bekommen ? lg
> Meinst du das mit den 39k-Widerständen so ? Nur vor dem - Eingang, nicht vor dem + Eingang. Aber noch ein 10k Widerstand zum A/D-uC-Eingang. > Sollte ich irgendwo einen Trimmer vorsehen, Ich würde so was eher in Software machen, also Sensor in 0 GradC stopfen, Taste drücken damit Umrechnnungswerte so gesetzt werden daß 0 GradC angezeigt werden, Sensor auf 37 GradC erwärmen (lässt sich exakt mit Fieberthermometer erfassen), Taste drücken damit 37 GradC angezeigt werden. Dazwischen rechnet der uC dann eine lineare Interpolation. > Ist der LM335 das Übel oder der µC oder was sonst ? Da andere Leute durchauch 0.1 GradC auflösende und 1 GradC exakte Thermoemeter mit dem hinbekommen, liegt es wohl eher an was anderem. > Alternativ hätte ich noch einen KTY81-110 > (Temperatursensor) im TO92 oder vergleichbar genau vergleichbar einsetzbar > einen LM61 (Tempertursensor) im SOT23 anzubieten. Den könnte man direkt an einen A/D-Eingang anschliessen wenn man den R8C auf interne 1.2V Referenz stellt, um -30 bis +60 GradC anzeigen zu lassen mit fast voller Auflösung. Allerdings muß auch er wie oben beschrieben kalibriert werden, weil eben die interne Referenz des R8C nicht so absolut genau ist, sondern nur stabil. Jegliche zusätzliche Elektronik entfällt. Er ist ja auch ein modernerer Sensor, aber auch er ist um 3 GradC ungenau.
Neues Schaltbild anbei. Müsste jetzt so stimmen. Um eine Kalibrierung, so wie du es beschrieben hast, durchzuführen, muss aber noch eine entsprechende Funktion geschrieben werden. Solch eine Funktion zu erstellen übersteigt bei weitem meine Fehigkeiten. Kannst du mir dabei helfen ? lg
> Solch eine Funktion zu erstellen übersteigt > bei weitem meine Fehigkeiten. Das ist Grundschulmathematik angezeigte Temperatur = aktueller A/D-Wandlerwert - A/D-Wandlerwert der auf Tastendruck für 0 GradC gespeichert wurde * 37 / (A/D-Wandlerwert der auf Tastendruck für 37 GradC gespeichert wurde A/D-Wandlerwert der auf Tastendruck für 0 GradC gespeichert wurde)
ENTWEDER ein (Schottky-)Diode von VRef zu VCC des R8C, ODER 10k vor den ARef Eingang
> Das ist Grundschulmathematik > > angezeigte Temperatur = > aktueller A/D-Wandlerwert - > A/D-Wandlerwert der auf Tastendruck für 0 GradC gespeichert wurde > * > 37 > / > (A/D-Wandlerwert der auf Tastendruck für 37 GradC gespeichert wurde > A/D-Wandlerwert der auf Tastendruck für 0 GradC gespeichert wurde) Ich weis ja auch nicht wie ich das mit nem Tastendruck speichern soll - das bekomm ich so nicht hin. Dazu hab ich viel zu wenig Ahnung vom programmieren. > ENTWEDER ein (Schottky-)Diode von VRef zu VCC des R8C, Mach ich.
> Ich weis ja auch nicht wie ich das mit nem Tastendruck speichern soll -
Den Tastendruck sollst du nur erkennen,
speichern solltest du die beiden A/D-Wandlerwerte, falls der uC nach dem
Kalibrieren auch irgendwann mal wieder abgeschaltet wird, und beim
nächsten einschalten (Batterie-einlegen) nicht erneut kalibriert werden
soll.
Zum Speichern bietet dich EEPROM-Speicher an, den man abfragt, wenn nach
dem Einschalten (minutenlang) kein Taster gedrückt wurde.
Klingt vernünftig. Hatte aber noch nie mit so einem EEPROM-Speicher zu tun. Weis nicht wie der R8C mit dem Speicher kommuniziert - alles Fremdworte für mich. Hab mir das wohl etwas einfacher vorgestellt. Gibt es eine andere Möglichkeit einen brauchbaren Thermometer mit dem R8C zu realisieren? Ohne Kalibrieren, ohne EEPROM? lg
Hab eben bei Conrad geschaut, da gibt es einen DS18S20 um 5 Euro, von -50° bis +125°C, zwar auch nur in 0.5°-Schritten, ist aber bereits kalibriert. Hier steht: Dieser Temperatur-Sensor macht das "Thermo-Management" mit einem direkten digitalen Ausgang leicht. Der Sensor ermöglicht ein direktes, digitales Auslesen der gemessenen Temperatur, ohne dass ein A/D-Wandler benötigt wird und ist kalibriert. Der Sensor beinhaltet ein digitales Thermometer und verfügt darüber hinaus über Funktionen wie Thermostat, programmierbarem, digitalen Thermostat oder Speicher. Wie kann dieser Baustein mit dem R8C13 arbeiten - ohne AD-Wandler? Wie bekommt man die Temperaturwerte angeboten? lg
Ohne daß ich jetzt die Spec des LM335 genau kenne: Kannst mal vergleichen mit dem Microchip MCP9700A (dto. 10mV/°C aber Offset bzgl. der Null Grad Grenze, nur pos. Spannungen). Dann gibt's noch den MCP971A , der hat 19,5 mV/°C , also fast doppelt so hohe Spannungsänderung (dafür aber eingeschränkter Meßbereich). http://ww1.microchip.com/downloads/en/DeviceDoc/21942e.pdf Und in nachfolgenden Links kannste noch nachlesen, wie andere Leute das machen, evtl. ergibt sich daraus was. http://embedded-lab.com/blog/?p=4001 http://www.microchip.com/forums/m594754.aspx Generell kann man durch längere Mittelwertbildung eine Verbesserung bzgl. des "wackelns" hinbringen, aber die 1/10° Anzeigestelle... ... Auflösung und Genauigkeit sind zwei Dinge ! Ohne Kalibrierung geht wohl keine Genauigkeit in 1/10 Grad, denke ich. Das genaueste ohne Kalibrierung dürfte mit dem SMT160-30 sein. Dessen PWM Signal muss man aber denn direkt mit einer Capture-Einheit des uC auszählen und jede Periode einzeln ins Verhältnis setzen.
@ Erich Das ist lieb gemeint - Danke, aber die verlinkten Seiten sind alle in englisch - da kann ich leider nur Bilder ansehen. Auch ist da nichts vom R8C13 zu sehen - mit anderen µC hatte ich noch keine Erfahrung. Mir schwebt vielmehr so ein "Temperaturonkel" vor, der zum einen bereits kalibriert ist und zum anderen eine der Temperatur proportionele Spannung ausgiebt. Diese Spannung kann ich (dann auch mit meinen bescheidenen Wissen) mit dem R8C zur Anzeige bringen. Dass wäre Klasse :-) lg
Hallo Jochen, Vielleicht doch so ein "Temperaturonkel" von Dallas (Maxim) wie er schon vorgeschlagen wurde. Schau mal hier: http://www.elektor.de/extra/r8c---entwickler-wettbewerb-die-gewinner.83233.lynkx - 30. Preis: Thermoalarm von Diedrich Lamken - Tetalogger von Heinz Kutzer Gruß John
Jochen schrieb: > Autor: > > Jochen (Gast) > Datum: 06.02.2012 16:43 > > @ Erich > > Das ist lieb gemeint - Danke, aber die verlinkten Seiten sind alle in > englisch - da kann ich leider nur Bilder ansehen. > Auch ist da nichts vom R8C13 zu sehen - mit anderen µC hatte ich noch > keine Erfahrung. Hmmmm, du willst dich ernsthaft mit Mikrocontrollern befassen und bist nicht in der Lage, englische Artikel über dieses Thema zu lesen ? = VHS Kurs besuchen (Englisch) = http://de.babelfish.yahoo.com/ = http://translate.google.de/ = ... oder vielleicht doch einfacheres Hobby suchen ?
Erich schrieb: > = ... oder vielleicht doch einfacheres Hobby suchen ? Meine Fres.... Erich. Hooooooobbbbbbbyyyyyy! Der verdient kein Geld damit. Ich finde er sich bisher sehr gut geschlagen. Bitte unterstützen, oder einfach mal die Finger still halten!
Aufpasser schrieb: > Erich schrieb: >> = ... oder vielleicht doch einfacheres Hobby suchen ? > > Meine Fres.... Erich. Hooooooobbbbbbbyyyyyy! Der verdient kein Geld > damit. Ich finde er sich bisher sehr gut geschlagen. > > Bitte unterstützen, oder einfach mal die Finger still halten! Vielen Dank lieber `Aufpasser` ! Mitlerweile denke ich an einen Temperatursensor, der (früher) bei Multimetern mitgeliefert wurde. Man konnte ihn an die Buchsen V und COM stecken. Den Messbereich stellte man (glaube ich) auf 200mV. Im Display des DMM wurde dann direkt die gemessene Temperatur in °C angezeigt. Ich denke aber ohne Kommastelle. Der Messbereich ging dabei oft weit unter Null und auch weit über 1000°. Über die Genauigkeit weis ich auch nicht Bescheid. Aber so ein Sensor, sollte doch auch für meinen Zweck realiserbar sein. Warum dann plötzlich Funkstille ? Nur weil ich nicht englisch kann ? lg
Jochen schrieb: > Neues Schaltbild anbei. > Müsste jetzt so stimmen. Du bist doch fertig. Noch kalibrieren und gut isses. Das muss ja nicht auf Knopfdruck gehen. Die Werte können auch fest compiliert werden. Ohne Kalibrierung musst du etwas fertiges kaufen. Da übernimmt der Hersteller dies für dich. Das macht aber keinen Spaß :-( MaWin hat es oben beschrieben: Referenzthermometer nehmen, einen Messpunkt im unteren Bereich, einen im oberen und schon kann jeder beliebige Wert berechnet werden.
> MaWin hat es oben beschrieben: Referenzthermometer nehmen, einen > Messpunkt im unteren Bereich, einen im oberen und schon kann jeder > beliebige Wert berechnet werden. Klingt so einfach wie ein Motorschaden: Brauchst nur den Motor auszubauen, reparieren und wieder einbauen - schwubs bist schon fertig - ist ja ganz einfach. ...
> Warum dann plötzlich Funkstille ? Weil niemand Lust hat, deinen ständig ändernden Wünschen hinterherzuhecheln. Warum soll man für 10 verschiedene Sachen erklären wie es geht, wenn danach doch nur die Frage nach der 11ten kommt ? Warum soll eine Heerschar von Menschen für dich arbeiten, bloss weil du zu faul bist selbst mal was zu lesen und selbst zu arbeiten ? Trainierst du für deine Zukunft als Chef ? Vergiss es. > Nur weil ich nicht englisch kann ? Das ist natürlich ein dickes Defizit. Kauf dir was fertiges: http://www.ebay.de/itm/Typ-K-Temperaturmessgerat-50-C-1300-C-Digital-Thermometer-Temperaturfuhler-/260937031048
Schade, dass der Thread hier so aprupt endet. Wie so eine Kalibrierung aussieht hätte mich auch interessiert. Womöglich macht sich jemand die Mühe um es mir näherzubringen.
Dann bau dein Zelt nicht in der verbrannten Prärie auf. Mach einen neuen Thread auf und vermeide die Fehler hier.
Frage: Ilvy schrieb: > Wie so eine Kalibrierung aussieht hätte mich auch interessiert. Antwort: ... schrieb: > MaWin hat es oben beschrieben: Referenzthermometer nehmen, einen > Messpunkt im unteren Bereich, einen im oberen und schon kann jeder > beliebige Wert berechnet werden.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.