NTC Temperaturfühler Auswertung funktioniert nicht

OP #3195901
Hallo Leute,

ich möchte einen NTC Temperaturfühler über den PIC16F886 auswerten. 
Dieser NTC hat bei 25°C einen Widerstand von 10kOhm. Sein B beträgt 3993 
K. Bis zur Spannungsberechnung funktioniert der CODE auch. Ab der 
Widerstandsberechnung nicht mehr.

Ich habe die Formel

R(t) = R(n)*e^(B*(1/(t+273,15)-1/298,15))

nach T umgestellt

T = (3993/(ln(R(t)/R(n)+13,39258762)  - 273,15


daraus habe ich folgenden Code gebildet

1
int vADWANDLUNG            = 0;
2
double vSPANNUNG = 0;
3
double vWIDERSTAND = 0;
4
double vNTCTEMP = 0;
5

6
void fNTC()
7
{
8
    //ADCON0
9
    CHS3    = 0;                                                                //Analog Channel bit 4
10
    CHS2    = 0;                                                                //Analog Channel bit 3
11
    CHS1    = 0;                                                                //Analog Channel bit 2
12
    CHS0    = 0;                                                                //Analog Channel bit 1
13

14
    GO_DONE = 1;                                                                 //Starte AD Wandlung
15
    while(GO_DONE);                                                              //warte auf AD Wandlung
16

17
    vADWANDLUNG = ADRESH;                                                       //Auslesen des ADRESH
18
    vADWANDLUNG <<= 8;                                                           //Verschieben des ADRESH
19
    vADWANDLUNG += ADRESL;                                                      //Addieren des ADRESL
20

21
    vSPANNUNG = vADWANDLUNG*5/1024;               //Bis hier läuft
22
    
23
    vWIDERSTAND = vSPANNUNG*10/5-vSPANNUNG;
24

25
    vNTCTEMP = (3993/log(vWIDERSTAND)+13.39258762);
26
    vNTCTEMP -= 237,15;
27

28
    vGANZZAHLIG = vNTCTEMP*10;
29

30
    vZEHNERSTELLE = vGANZZAHLIG/100;                                              //Liefert Zehnerstelle  205/100 = 2,05; ,05 fällt weg
31
    vEINERSTELLE = (vGANZZAHLIG%100)/10;                                          //Liefert Einzerstelle  205%100 = 05/10 = 0,5; ,5 fällt weg
32
    vKOMMASTELLE = vGANZZAHLIG%10;                                                //Liefert Kommastelle   205%10  = 5
33
    fSENDTOSLAVE(0x02,0,0,vZEHNERSTELLE,vEINERSTELLE,vKOMMASTELLE);
34
}

Am Display kommen leider nur schrott raus. Kann mir jemand hierbei 
weiterhelfen? Vielleicht ist mein weg auch zu kompliziert und es gibt 
viel einfachere Möglichkeiten einer Auswertung.
Du überlässt an einigen Stellen deiner Berechnungen dem Compiler die 
Wahl der Datentypen. Wie soll da das von dir Gewünschte Ergebnis heraus 
kommen.
1
vSPANNUNG = vADWANDLUNG*5/1024;               //Bis hier läuft
Und hier ist es schon Falsch. Durch diese Berechnung verlierst Du schon 
die Nachkommastellen. Den Fehler nimmst Du mit in die nachfolgenden 
Berechnungen.

Richtig wäre:
1
vSPANNUNG = vADWANDLUNG*5.0/1024.0;

Grüsse
OP
Das heißt ich muss das .0 an jede Zahl heften die ich addiere, 
multipliziere die kein Komma hat? Bevor ich jetzt noch weiter 
rumprobiere und nichts geht. kann mir jemand den Code in die richtige 
Form bringen. Wäre richtig nett (:
Gast
Jein. Du musst verstehen wie das ganze funktioniert und wann du mit 
Float und wann du mit Ganzzahlen arbeitest.
Beim Teilen durch Konstanten wenn du Float erhalten willst: JA!
Gast
Lukas D. schrieb:
> Wie viele Stützpunkte benötige ich bei 0,5 °C und bei 0,1°C Schritten?

Das kommt auf deinen Temperaturbereich drauf an. Wenn du einen Bereich 
von z.B. 25°C in Schritte von 0,5°C aufteilen möchtest, sind das - 
tataaah - 25/0,5 = 50 Stücke, also 25/0,5 + 1 = 51 Stützstellen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.