Forum: Compiler & IDEs Temperatur auslesen mit NTC 202


von gtnx (Gast)


Angehängte Dateien:

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

von pse (Gast)


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.

von Werner (Gast)


Lesenswert?

gtnx schrieb:
> doch leider verstehe ich nicht wie ich aus dem B-Wert und dem Widerstand
> bei 25°C auf den Linearisierungswiderstand komme.

Gleichung (3) Rp=... ?
Was verstehst du nicht?

von xrtm4e (Gast)


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 ?

von gtnx (Gast)


Lesenswert?

(sorry, im vorherigen beitrag soll der name natürlich gtnx heißen)

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.