Temperatur auslesen mit NTC 202

Gast #2817216
Lesenswert?

Hi,

ich möchte mit dem Sensor NTC 202 die Umgebungstemperatur auslesen und 
habe dazu einige Fragen.

Verwendeter Sensor: 
http://www.temperatur-shop.de/index.php?cat=KAT72&product=TS-NTC-202&sid78910D081B7F411D80FC469D5E1017A8=76db6570899648125176c87ea7ee2e5a

B-Wert: 3976 K
R bei 25°C: 2,00 kOhm
Temperaturbereich: -60°C bis 150°C


Schaltung: im Anhang (ISP-Buchse für den Programmer wurde im Schaltplan 
weggelassen | es wird ein interner Takt von 8MHz verwendet | an PortB 
befindet sich ein LCD zur Ausgabe der Temperatur)

1. Frage: Wie kann ich den richtigen Widerstand ausrechnen, den ich für 
den Sensor verwenden muss? Hier ( 
http://www.umnicom.de/Elektronik/Mikrokontroller/Atmel/AtFan/AtFan.html 
) gibt es einen Rechenweg, doch leider verstehe ich nicht wie ich aus 
dem B-Wert und dem Widerstand bei 25°C auf den Linearisierungswiderstand 
komme. (ich habe im Schaltplan einen 3,3kOhm Widerstand verwendet)

2. Frage: Wie kann ich aus dem ADC-Wert die Richtige Temperatur 
ausrechnen?

Funktion zum Auslesen der Spannung an ADC0:

uint16_t readADC(uint8_t channel) {
  uint8_t i;
  uint16_t result = 0;

  // Den ADC aktivieren und Teilungsfaktor auf 64 stellen
  ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);

  // Kanal des Multiplexers waehlen
  // Interne Referenzspannung verwenden
  ADMUX = channel | (1<<REFS1) | (1<<REFS0);

  // Den ADC initialisieren + Dummyreadout
  ADCSRA |= (1<<ADSC);
  while(ADCSRA & (1<<ADSC));

  // 3x die analoge Spannung and Kanal channel auslesen
  // dann Durchschnittswert ausrechnen
  for(i=0; i<3; i++) {
    // Eine Wandlung
    ADCSRA |= (1<<ADSC);
    // Auf Ergebnis warten...
    while(ADCSRA & (1<<ADSC));

    result += ADCW;
  }

  // ADC wieder deaktivieren
  ADCSRA &= ~(1<<ADEN);

  result /= 3;

  return result;
}

Jetzt brauch ich noch eine Funktion zum umrechnen in °C. Dafür gibt es 
hier ( http://preis-ing.de/e_calc/index.php?seite=auternzc ) ein 
Programm, dass den Code erzeugt. Ich möchte am Ende z.B. eine Temperatur 
von 24,7 °C - muss ich dann also bei "Einheit in °C" 0,1 eintragen? Und 
welche Werte muss ich in den Array mit den Stützpunkten schreiben? Ich 
habe hier eine Tabelle ( 
http://www.produktinfo.conrad.com/datenblaetter/500000-524999/502356-in-01-de-Widerstandstabelle.pdf 
), doch ich weiß nicht welche Spalte in den Array hineinkommt.

Ich würde mich um Hilfe sehr freuen!

Gruß.
Angehängte Dateien:
Gast #2817399
Lesenswert?

gtnx schrieb:
> muss ich dann also bei "Einheit in °C" 0,1 eintragen?

Probier's doch aus und verfolge, was in der Rechnung passiert. Dann 
verstehst du auch eher, wie das mit der Linearisierung funktioniert, 
welchen Einfluß die Wahl des Widerstandes hat und wie das mit der 
Integerrechnung abläuft.
Gast #2817884
Lesenswert?

Muss ich für den unteren Widerstand dann den Widerstand bei 20°C nehmen, 
wenn ich im Bereich von 20 - 80 °C einen möglichst genauen Wert haben 
möchte? Und für den oberen dann den Widerstand bei 80°C ? Mittlerer 
Widerstand bei 50°C ?

Oder bezieht es sich auf die min./max. Temperatur, also in dem Fall dann 
-60 - 150 °C ?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren