Hallo,
ich möchte aus dem ADC Wert die Temeratur errechnen.
Der KTY ist mit 4,7k in reihe geschaltet und ich messe am
Spannungsteiler. VRef sind die internen 2,56 V
Ich habe die ADC Werte per RS232 ausgegeben, funktioniert alles soweit.
hier habe ich ein Beispiel gefunden:
Beitrag "KTY10-7"
Leider bekomme ich den code nicht komplett kompiliert.
#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define KTY_R25 2030.0
#define KTY_RS 4700.0
#define KTY_ALPHA 0.00788
#define KTY_BETA 0.00001937
float V_REF = 2.56;
float tempHighbyte;
float tempLowbyte;
float vcc 5.0;
float temp_calc(int adcwert)
{
float vAdc, temp, kt;
vAdc = (adcwert * V_REF) / 1024.0;
kt = (KTY_RS / (5.0 / vAdc - 1.0)) / KTY_R25;
temp = pow(KTY_ALPHA, 2.0) - 4.0 * KTY_BETA + 4.0 KTY_BETA kt;
temp = 2.05 + ((sqrt(temp) - KTY_ALPHA) / (2.0 * KTY_BETA));
tempHighbyte = temp;
tempLowbyte = (temp - tempHighbyte) * 10;
return temp;
}
in der Zeile bekomme ich den Fehler:
temp = pow(KTY_ALPHA, 2.0) - 4.0 * KTY_BETA + 4.0 KTY_BETA kt;
error: expected ';' before numeric constant
wird die pow Funktion falsch aufgerufen ? Hat jemand einen Tipp für
mich.
viele Grüße
Michael
pow(KTY_ALPHA, 2.0)
Das quadriert KTY_ALPHA.
pow(x,y) = x hoch y
Das zweite Argument ist der Exponent, also im Fall von 2 eine einfache
Quadrierung.
Grüße,
Peter
Moin,
der Aufruf von pow() ist schon richtig
temp = pow(KTY_ALPHA, 2.0) - 4.0 * KTY_BETA + 4.0 KTY_BETA kt;
Das Problem ist das was nach dem "+" Zeichen kommt. Schau dir das
einfach mal genau an.
Gruss,
Tobi
Abgesehen davon ist es nicht sinnvoll, Konstanten zur Laufzeit zu
quadrieren.
KTY_BETA ist im Originalbeitrag FETT geschrieben, das geht durch
vorangestelltes Mal-Zeichen und nachfolgendes Mal-Zeichen, es ist also
vor und nach dem KTY_BETA ein Multiplikationsoperator.
Das sieht dann im Forum ohne Textformatierung fett aus:
temp = pow(KTY_ALPHA, 2.0) - 4.0 * KTY_BETA + 4.0 KTY_BETA kt;
Eigentlich ist das gemeint: