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.