Forum: Mikrocontroller und Digitale Elektronik Thermometer mit R8C13


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jochen (Gast)


Lesenswert?

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 ?

:-)

von Refernz (Gast)


Lesenswert?

Jochen schrieb:
> 10mV/°C

Die Schwankungen können an Deiner A/D-Referenz liegen. Wie wird die 
gebildet? Ist sie ausreichend gepuffert und entkoppelt?

von Jochen (Gast)


Lesenswert?

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

von Referenz (Gast)


Lesenswert?

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.

von Jochen (Gast)


Lesenswert?

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

von Referenz (Gast)


Lesenswert?

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?

von Jochen (Gast)


Lesenswert?

>> 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

von Referenz (Gast)


Lesenswert?

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!

von Jochen (Gast)


Lesenswert?

Laut Handbuch:

adcon1 = 0x28; // 10-bit mode

Datenblatt ist mangels Englischkenntnisse keine Option :-|

lg

von ... (Gast)


Lesenswert?

Jochen schrieb:
> Datenblatt ist mangels Englischkenntnisse keine Option :-|

Dann vielleich ein DS18B20

von Jochen (Gast)


Lesenswert?

Im Datenblatt des DS18B20 stehen viele Worte, die ich leider nicht lesen 
kann ... :-|

Wie würde der Quellcode bei Verwendung des DS18B20 aussehen ?

lg

von MaWin (Gast)


Lesenswert?

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.

von Referenz (Gast)


Lesenswert?

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.

von Jochen (Gast)


Angehängte Dateien:

Lesenswert?

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

von MCUA (Gast)


Lesenswert?

>Der RC8 hat - glaube ich - nur 8 Bit.
R8C'2 haben 10 Bit-ADC (aber keine Floaing-Point-Unit).

von Jochen (Gast)


Lesenswert?

>> 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

von Referenz (Gast)


Lesenswert?

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.

von Olaf (Gast)


Lesenswert?

> 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

von Olaf (Gast)


Lesenswert?

> 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

von Krapao (Gast)


Lesenswert?

[Offtopic]
Olaf, entspann dich mal.
[/Offtopic]

von Referenz (Gast)


Lesenswert?

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?

von Olaf (Gast)


Lesenswert?

> 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)

von ... (Gast)


Lesenswert?

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

von Jochen (Gast)


Lesenswert?

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

von Referenz (Gast)


Lesenswert?

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.

von MaWin (Gast)


Lesenswert?

> 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

von Jochen (Gast)


Lesenswert?

>> 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 ?

von Jochen (Gast)


Lesenswert?

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 ?

von Referenz (Gast)


Lesenswert?

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.

von MaWin (Gast)


Lesenswert?

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.

von Jochen (Gast)


Lesenswert?

>> 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".

von Jochen (Gast)


Lesenswert?

> 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 ?

von Referenz (Gast)


Lesenswert?

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.

von Jochen (Gast)


Lesenswert?

>> 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.

von Jochen (Gast)


Lesenswert?

> 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.

von Jochen (Gast)


Angehängte Dateien:

Lesenswert?

@ MaWin

Hab mal das Schaltbild, so wie ich es verstanden habe, angehängt.
Ist das so OK ?

lg

von MaWin (Gast)


Lesenswert?

> 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.

von Jochen (Gast)


Lesenswert?

> 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.

von Jochen (Gast)


Lesenswert?

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 ???

von Jochen (Gast)


Lesenswert?

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.

von MaWin (Gast)


Lesenswert?

> 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.

von Jochen (Gast)


Angehängte Dateien:

Lesenswert?

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

von Referenz (Gast)


Lesenswert?

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.

von Olaf (Gast)


Lesenswert?

> 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

von Jochen (Gast)


Lesenswert?

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

von MaWin (Gast)


Lesenswert?

> 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.

von MaWin (Gast)


Lesenswert?

> Nur vor dem - Eingang, nicht vor dem + Eingang.

Umgekehrt.

von Jochen (Gast)


Angehängte Dateien:

Lesenswert?

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

von MaWin (Gast)


Lesenswert?

> 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)

von MaWin (Gast)


Lesenswert?

ENTWEDER ein (Schottky-)Diode von VRef zu VCC des R8C,
ODER 10k vor den ARef Eingang

von Jochen (Gast)


Lesenswert?

> 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.

von MaWin (Gast)


Lesenswert?

> 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.

von Jochen (Gast)


Lesenswert?

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

von Jochen (Gast)


Lesenswert?

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

von Erich (Gast)


Lesenswert?

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.

von Jochen (Gast)


Lesenswert?

@ 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

von John B. (johnbauer)


Lesenswert?

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

von Erich (Gast)


Lesenswert?

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 ?

von Aufpasser (Gast)


Lesenswert?

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!

von Jochen (Gast)


Lesenswert?

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

von ... (Gast)


Lesenswert?

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.

von Jochen (Gast)


Lesenswert?

> 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.

...

von MaWin (Gast)


Lesenswert?

> 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:

Ebay-Artikel Nr. 260937031048

von Jochen (Gast)


Lesenswert?

LMAA

von Ilvy (Gast)


Lesenswert?

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.

von Krapao (Gast)


Lesenswert?

Dann bau dein Zelt nicht in der verbrannten Prärie auf. Mach einen neuen 
Thread auf und vermeide die Fehler hier.

von ... (Gast)


Lesenswert?

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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.