Forum: Analoge Elektronik und Schaltungstechnik Temperatur Messung mit Mega8 und NTC-Widerstand 4,7k


von David S. (Gast)


Angehängte Dateien:

Lesenswert?

Moin moin, ich bastel gerade an ner Temperaturmessung mitnem ATMEGA8

Schaltung sieht so aus, sehr spartanisch die Zeichnung :-D
  AVCC/VCC---1k-Widerstand-- --4,7k NTC Widerstand
                            |
                            |
                            ADC-Eingang(PORTC.5)

Auserdem hab ich LCD angschlossen auf dem die Werte die da rauskommen 
angezeigt werden da ich das mit der seriellen geschichte ersnoch zum 
laufen bekommen muss.

Gemacht hab ich das nach diesem Beispiel: 
http://www.halvar.at/elektronik/kleiner_bascom_avr_kurs/adc_mit_getadc/

Code sieht dann so aus:
1
$regfile = M8def.dat ""
2
'$crystal = 16000000
3
4
5
6
Dim Waiting As Word
7
Waiting = 0
8
9
Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.1 , Rs = Portc.0
10
Config Lcd = 16 * 2
11
Cursor Off
12
13
14
15
16
17
Const Adc_multi = 0.0048828125                              ' = 5.0 / 1024.0
18
CONFIG ADC = SINGLE, PRESCALER = AUTO, REFERENCE = AVCC
19
START ADC
20
DIM messergebnis AS WORD
21
Dim Volt As Single
22
23
24
Do
25
Messergebnis = Getadc(5)
26
volt = messergebnis * ADC_MULTI
27
28
29
Locate 1 , 1
30
Lcd Volt
31
32
Waitms 100
33
Cls
34
35
36
Loop
37
End                                                         'end program

Also ich möcht ersmal die Spannung aufem Display haben die am Widerstad 
abfällt, die Temperatur spielt ersmal keine Rolle ;)

Allerdings kommt da immer en Wert um die 2V raus, aber wenn ich de NTC 
ausem Steckboard rauszieh, und wieder reinsteck, dann steht sowas um die 
3,8-3,9 aufem Display was auch der richtige Wert ist Laut 3 
Unterschiedlichen Messgeräten.

An was könnte das liegen?

Freu mich schon auf Antorten.
MFG
David

von Björn (Gast)


Lesenswert?

Laut Datenblatt soll man erstmal einen Dumyread machen.
Vielleicht liegt es daran?
Aber so wie ich das sehe, liest du nur ein einziges mal aus... da 
wundert es mich, dass du nach dem Abziehen und wieder anstecken des NTCs 
überhaupt noch einen Wert bekommst.

von David .. (david1)


Lesenswert?

Was ist bitte ein Dumyread ?
1
Do
2
Messergebnis = Getadc(5)
3
volt = messergebnis * ADC_MULTI
4
5
6
Locate 1 , 1
7
Lcd Volt
8
9
Waitms 100
10
Cls
11
12
13
Loop

ne Do Loop Schleife wird immer wiederholt. und zwar indem fall alle 
100ms.

Noch ne andere Frage, könnte mir mal jmd. erklären wie ich nen 16Mhz 
quarz anschliesen muss und vor allem was ich Softwaremäsig alles machen 
muss?


Und noch was ... Irgendwie hab ich den Thread in den falschen Bereich 
geschrieben, könnte den vlt ein Mod in den richtigen ( µC & Elektronik ) 
verschieben?

MFG
David

von Björn (Gast)


Lesenswert?

habe keine Ahnung von Bascom...
Dachte das hier:
CONFIG ADC = SINGLE, PRESCALER = AUTO, REFERENCE = AVCC
bedeutet eine einzelne Messung.

Nach dem anschalten des ADC soll der erste ausgelesene Wert verworfen 
werden.
Das ist ein Dummyread.

von David .. (david1)


Lesenswert?

Das wird ja immer gemacht, nach 300ms wird ja neu gelesen und 
ausgegeben.
Könnte es nicht sein das es an der Schaltung liegen könnte?

von Björn (Gast)


Lesenswert?

Hab die gleiche Beschaltung mit nem KTY81-110 (PTC) und nem 2k7 gemacht.
Dein NTC hat auf der 2. Seite GND?

Wie gesagt, Bascom kennich nicht...

von David .. (david1)


Angehängte Dateien:

Lesenswert?

Also ich weis zwarnicht wo der Fehler lag, aber inzwischen wird die 
richtige Spannung eingelesen.

Aber wie komm ich davon auf die Temperatur, im Datenblatt steht dazu 
zwar ne Formel (angehäntes Bild, auc im Datenblatt auf Seite 4 zu sehen, 
ebenfalls angehängt)


Allerdings brauch ich da ja den Widerstand, und der is ja 
bekanntlicherweisse U/I, aber ich hab ja nur die spannung und da die 
Stromstärke nicht immer gleich ist, wird da nix draus.
Kann man das auch anders iwie machen wovon ich nix weis?


MFG
David

von Helmut S. (helmuts)


Lesenswert?

David Sutter schrieb:
> Also ich weis zwarnicht wo der Fehler lag, aber inzwischen wird die
> richtige Spannung eingelesen.
>
> Aber wie komm ich davon auf die Temperatur, im Datenblatt steht dazu
> zwar ne Formel (angehäntes Bild, auc im Datenblatt auf Seite 4 zu sehen,
> ebenfalls angehängt)
>
>
> Allerdings brauch ich da ja den Widerstand, und der is ja
> bekanntlicherweisse U/I, aber ich hab ja nur die spannung und da die
> Stromstärke nicht immer gleich ist, wird da nix draus.
> Kann man das auch anders iwie machen wovon ich nix weis?
>
>
> MFG
> David


Hallo David,

natürlich wird da kein Mensch der bei Sinnen ist mit log() auf einem AVR 
oder PIC herumrechnen.
Nimm deinen PC und rechne eine Tabelle aus:  Spannung <-> Temperatur.
Die legst du in das Flash deines Controllers. Jetzt brauchst ´du nur 
noch mit deinen Werten aus dem ADC in die Tablle gehen und die 
Temperatur ablesen. Ok, eine lineare Interpolation zwischen zwei 
Stützwerten ist noch notwendig, falls du nicht genügend Speicherplatz 
hast.

von Anja (Gast)


Lesenswert?

Hallo,

in welchem Temperaturbereich willst Du denn messen?
Wenn es nur ca 30 Grad Spanne sind kommst Du mit dem richtigen 
Linearisierungswiderstand als Pull-up aus.
Ansonsten reicht eine Kennlinie mit 16-25 (nicht gleich verteilten) 
Stützstellen aus.

von Anja (Gast)


Lesenswert?

Nachtrag:
ich verwende gerne aus der gleichen Baureihe wie im Datenblatt einen 
33K-NTC.
mit einem Linearisierungswiderstand von 27K 1% ergibt sich im 
Temperaturbereich 15-40 Grad eine nahezu lineare Kennlinie mit im 
Durchschnitt 0,1 Grad Auflösung bei 10 Bit A/D-Wandler.

von David .. (david1)


Lesenswert?

Ok, danke, sorry das ich mich lang nich gemeldet hab, bin aber noch 
Schüler und hab noch nen haufen anderes zutun ...


@ Anja
Also wenn ich das richtig versteh dann sollte der Widerstand im 
Spannungsteiler möglichst gros sein?


@Helmut S
Wie realisiert man sowas, und gibts irgendwo en Toturial dazu für Bascom 
Basic?


MFG
David

von Anja (Gast)


Lesenswert?

>@ Anja
>Also wenn ich das richtig versteh dann sollte der Widerstand im
>Spannungsteiler möglichst gros sein?

Nein, der Widerstand muß an den NTC-Wert und an den zu messenden 
Temperaturbereich angepaßt werden.

Wobei ein hoher Widerstand den Vorteil hat daß bei gegebener 
Versorgungsspannung die Eigenerwärmung des NTC geringer ist.
(Deshalb verwende ich 33K-NTCs)
Für den 33K NTC ergibt sich im Temperaturbereich 10-40 Grad zusammen mit 
einem 27K Widerstand fast eine lineare Kennlinie. (weniger als 0,3 Grad 
Linearitäts-Abweichung).

Bei 4K7 müßte ein 3K9 Widerstand ähnliche Ergebnisse im Bereich 10-40 
Grad bringen. (Einfach mal mit einem Tabellenkalkulationsprogramm z.B. 
"Open Office" ausrechnen und anzeigen lassen).

von Anja (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich hab das mal für 3K9 grob ausgerechnet:
Blau ist die Spannung in mV (linke Y-Achse) Spalte E
Rot ist die Fehlerspannung in mV zur Ausgleichsgeraden (rechte Y-Achse) 
Spalte F.

Die Ausgleichsgerade ist 4097 mV - 52,8mV * Grad.
man hat also knapp 11 Digits / Grad Auflösung.
Im Bereich 10 - 40 Grad ist die Linearitäts-Abweichung max 10 mV ( also 
0,2 Grad). Außerhalb des Bereichs ergeben sich schnell große Fehler.

von David .. (david1)


Lesenswert?

Ok vielen dank!

Werd das nacher mal testen allerdings reicht das etwas 
unterdimensionierte Netzgerät nichmehr aus und liefert zu wenig Strom :P

Allerdings hab ich mit dem Temp-Bereich ein Problem, da das ganze auch 
als Sensor für ausen ausgelegt sein soll, müsste der Bereich auch auf 
ca. -10 bis -15 oder 20 gehen , is das möglich?

von Anja (Gast)


Lesenswert?

Hallo,

dann geht eine einfache Linearisierung wahrscheinlich nicht mehr.
In erster Näherung würde ich den Pull-up dann als
Wurzel (RMin * RMax) auslegen, und schauen ob ich an den "Rändern" noch 
die gewünschte Auflösung habe. Die Interpolation benötigt dann halt 
mehrere Teilbereiche (Abschnittweise Linearisierung).

Alternativ könnte auch über Port-Pins der Pull-up umschaltbar gestaltet 
werden. So daß man für jeden Temperaturbereich eine optimale Auflösung 
hat.

von David .. (david1)


Lesenswert?

Ich meld mich mal wieder da dass ganze wieder aktuell wird.

Ich bin derzeit an der Planung eines Hausbusses der erstmal nur 
Temperaturen messen soll.

Da ich noch ein paar solche NTCs da habe hab ich die mal wieder 
ausgekramt und wollte mal wieder anfangen damit Temperatur zu messen.

Allerdings hab ich nie wirklich verstanden was ihr versucht habt mir zu 
erklären.

Daher frage ich mich ob es nicht einfacher ist einen anderen Sensor zu 
verwenden. Hab da folgende ins Auge gefasst:
http://www.reichelt.de/?ARTICLE=9594

oder so einen:
http://www.reichelt.de/?ARTICLE=82326

Der erste ist wieder einer an dem ich die Spannung messen werd, 
allerdings ist hier der Strom konstant so dass sich eine liniare 
Kennlinie ergibt, seh ich das richtig?

Der zweite ist wohl ein 1-Wire, aber das brauch ich ja eigentlich nicht, 
auserdem schlagen 4,20€ bei 10-15 Stück schon nen anständiges Loch in 
die Kasse.


Wäre der erst eine gute Wahl um in jedem Raum im Haus einen solchen 
Sensor zu installiere und auch für ein 1-2 Ausensensoren? Der 
Temperaturbereich passt jedenfalls


Gruss
David

von Anja (Gast)


Lesenswert?

David S. schrieb:
> Der erste ist wieder einer an dem ich die Spannung messen werd,
> allerdings ist hier der Strom konstant so dass sich eine liniare
> Kennlinie ergibt, seh ich das richtig?

Hallo,

der KTY81 ist ein PTC-Widerstand. Gegenüber dem NTC besitzt er eine 
Kennlinie die eine bessere Linearität hat. Sie ist jedoch nicht ganz 
linear so daß sich auch hier ein Linearisierungswiderstand lohnen kann.
Die 1mA Strom sind nur die Meßbedinung unter der die Tabellen erstellt 
wurden. Du brauchst nicht unbedingt eine Konstantstromquelle.
Die Kennlinie ist in Fig 3 angegeben.
Gegenüber einem NTC ergibt sich meist eine geringere Empfindlichkeit 
bzw. Temperaturauflösung bei gleichem ADC-Wandler.

Beim TSIC wird dir die ganze Rechnerei abgenommen. (Hat halt seinen 
Preis). Ich selbst habe Ihn noch nicht benutzt.

Wenn es auf preiswerte Linearität ankommt verwende ich oft den LM335 als 
Temperatursensor. Hat 10mV/K Auflösung. Reicht also für 0,5Grad mit 10 
Bit.
http://www.reichelt.de/?ACTION=3;ARTICLE=10469;PROVID=2402

Ich verwende als Pull-up Widerstand einen LM334 als Konstantstromquelle 
der dann über einen Multiplexer (74HC4051) auf die einzelnen Sensoren 
gemultiplext wird. Dies hat den Vorteil daß die Sensoren nur während der 
Messung aufgeheizt werden. (Ansonsten hat man einen Wind-abhängigen 
Temperaturoffset von knapp 1 Grad).

Gruß Anja

von David .. (david1)


Lesenswert?

OK ersmal danke für die Antwort.

Das mit dem Liniasierungswiderstand ist klar, aber was ich nicht richtig 
verstanden habe ist ob ich den jetz ganz normal anstelle meines NTC 
einsetzen kann oder ob ich den Strom wie du beschrieben konstant halten 
muss?


Gruss
David

von Anja (Gast)


Lesenswert?

David S. schrieb:
> Das mit dem Liniasierungswiderstand ist klar, aber was ich nicht richtig
> verstanden habe ist ob ich den jetz ganz normal anstelle meines NTC
> einsetzen kann oder ob ich den Strom wie du beschrieben konstant halten
> muss?

Auf was bezieht sich die Frage? PTC oder LM335?

Gruß Anja

von David .. (david1)


Lesenswert?

Die Bezog sich auf den von mir gelinkten KTY 81-110 ( 
http://www.reichelt.de/?ARTICLE=9594 )


Gruss
David

von Anja (Gast)


Lesenswert?

Hallo

Beim KTY81 würde ich einen Linearisierungswiderstand nehmen wenn es mir 
auf die Linearität (oder Kosten) ankommt. Eine Stromquelle würde ich 
nehmen wenn es mir auf die Empfindlichkeit (Auflösung) ankommt. Beim 
Linearisierungswiderstand ist die Empfindlichkeit im Worst Case nur ca 
halb so groß wie bei der Stromquelle.

Die Stromquelle brauchst Du nicht zwingend.

Gruß Anja

von David .. (david1)


Lesenswert?

OK, ich brauch eh nur ne Genauigkeit von +- 0.5° so in dem Bereich.

Dann werd ich mir bei der nächsten Bestellung ein paar von denen 
besorgen, aber wo und vor allem wie montier ich die am besten?

Da wir im Erdgeschoss bald die Decke erneuern hab ich die Möglichkeit 
Lehrrohre wie ein weltmeister zu ziehen, allerdings wo setz ich das Ding 
in hin und wie verpack ichs?
In nen Schrumpfschlauch und in irgendner Raumecke (möglichst keine 
Ausenwand) platzieren sieht bischen blöd aus, aber wie wärs mit 
Aderendhülsen?
Weis jemand obs die mit 5mm Innendurchmesser?


Gruss
David

von Anja (Gast)


Lesenswert?

David S. schrieb:
> und wie verpack ichs?

Im Rauchmelder?

von Anja (Gast)


Lesenswert?

David S. schrieb:
> aber wie wärs mit
> Aderendhülsen?

Gaaanz schlechter WAF

von David .. (david1)


Lesenswert?

Ich hätts dann mit Wärmeleitpaste "ausgegossen, aber die Idee mit dem 
Rauchmeder is nich schlech, Danke :)

Oder wie wärs den Temp Sensor weis zu lackieren und dann ausem 
Rauchmelder oder direket der decke schauen zu lassen?

Und wie siehts mit Feuchtikeitssensoren aus? Den würd ich dann 
wahrscheinlich wirklich in nen Rauchmelder packen.

Beim Ausentemperatur-Sensor bau ich wahrscheinlich auchnoch nen Druck 
und Feuchtikeitssensor dazu, das sollte dann mit nem großen G-LCD schon 
was her machen.

Gruss
David

von Sven (Gast)


Lesenswert?

Du musst die nicht aus dem Rauchmelder rausschauen lassen. Es dürfte 
ausreichend sein, die im Rauchmelder zu verbauen.

Wie wärs mit unter die Lichtschalter-Abdeckung setzen? Hat ein bekannter 
für die Steuerung seiner Fußbodenheizung gemacht, gibt die Raumtemp vlt 
besser wieder als unter der Decke zu messen.

Spar Dir den Kram mit Linearisierungswiderstand. Passender 
Spannungsteiler und Tabelle für die Umrechnung im AVR. Genauer als 1-2K 
bekommst Du es sowieso nur mit Kalibrierung der einzelnen NTC hin.

von David .. (david1)


Lesenswert?

Wie mach ich dass den mit der Tabelle, das mit dem ausrechnen aufem PC 
is nich so das Problem, aber wie bekomm ich die dann in EEPRO?

Wie mach ich das in Bascom?

Gruss
David und nochmal Danke für die Antworten

von Anja (Gast)


Lesenswert?

David S. schrieb:
> aber wie bekomm ich die dann in EEPRO?

In Bascom kann ich dir das leider nicht sagen da ich WinAVR benutze.
Dort geht das so:

// 1. Anlegen der Datenstruktur (DATA_STRUCT) im Flash
// (als Defaultwerte falls das EEPROM defekt wird).
// Die Werte aus dem Flash werden automatisch bei
// Start des Programms ins RAM geladen.

#define DATA_STRUCT
{5,                                      \ // Anz Stützstellen
 0, 1000 mV, 2000 mV, 4000 mV, 5000 mV,  \ // x-werte
 Grd(70.0), Grd(60.0), Grd(33.7), Grd(20.2), Grd(-26.8) \ //Y-Werte
}

/* define default dataset in flash */
const _DATA_t _DATA = DATA_STRUCT;

// 2. Struktur für Kopie im EEPROM mit Checksumme anlegen

/* generate working dataset in EEPROM with checksum */
typedef struct
{
    _DATA_t  EE_DATA;
    uint32_t EE_CHECK;
} _EE_DS_t;

// 3. Daten in EEPROM-Bereich linken

const EE_DS_t __attribute_ ((section (".eeprom"))) EEDATA =
{
    DATA_STRUCT ,
    0
};

Der Compiler generiert dann 2 Hex-Files eines für Flash und eines fürs 
EEPROM. Das Programmieren geht dann mit AVRDude mit entsprechenden 
Kommandozeilenoptionen. (Die Checksumme muß dann natürlich vorher im 
Hex-File gepatcht werden).

Falls die Checksumme im EEPROM in Ordnung ist wird die RAM-Kopie der 
Struktur mit den Werten aus dem EEPROM überschrieben. Die EEPROM-Werte 
können dann im RAM beliebig geändert (serielle Schnittstelle, 
Drehencoder mit Menuesteuerung usw.) und auch ins EEPROM 
zurückgeschrieben werden. (Checksummenabgleich nicht vergessen).

Gruß Anja

von Sven (Gast)


Lesenswert?

Nicht in den EEPROM, ins Flash ans Programmende. Dann mit LPM auslesen 
und linear interpolieren.

von Arno (Gast)


Lesenswert?

Was mich mal grundsätzlich interessieren würde:
Warum macht ihr euch eigentlich immer die Arbeit mit NTCs oder KTY81 und 
Konsorten? Ist das nicht alles Technik von gestern? Ich meine es gibt 
doch schon fertige, kalibrierte Temperaturensoren wie den DS1822, da hat 
man keinen Ärger mit Linearitätsfehlern und bekommt die Temeratur als 
fertigen Digitalwert Controllerfreundlich vorgesetzt. Warum also einen 
NTC verwenden?

von Sven (Gast)


Lesenswert?

Preis? Temperaturbereich? Genauigkeit? Verfügbarkeit in verschiedenen 
Bauformen (Hülse, SMD, anschraubbar...)?

Ich hab sowohl NTC, PTC als auch DS und LM75 oder wie der heisst 
gemacht. Der Aufwand einen DS abzufragen ist nicht kleiner als einen 
AD-Wert einzulesen und mal schnell in eine Tabelle zu gucken. NTC ist 
halt universeller einsetzbar und wenn man Tabelle und Umrechnung einmal 
hat, immer wieder verwendbar.

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
Noch kein Account? Hier anmelden.