KTY10-7

Gast #239226
Lesenswert?

Vielleicht bin ich ja hier richtig :

Moin moin zusammen,
ich habe einen KTY10-7 in reiche zu einen 4k7 Ohm geschaltet und den
mittelabgriff auf den ADC des ATmega8 geschaltet. Habe eine Aref von
2,75V. Die ADC werte bekomme ich wunderbar raus und gebe Sie über
RS232
weiter.
Ich will aber die Temperatur werte weitergebn. Wie kann ich die
Temperatur errechnen ?
Das hier bringt mir nur Müll raus :
#define KTY_R25 2030
#define KTY_RS 4700
#define KTY_ALPHA 0.00788
#define KTY_BETA 0.00001937
float temp_calc(int adcwert)
{
float vAdc, temp, kt;
vAdc = (adcwert * V_REF) / 1024;
kt = (KTY_RS / (vcc / vAdc - 1)) / KTY_R25;
temp = pow(KTY_ALPHA, 2) - 4 * KTY_BETA + 4  KTY_BETA  kt;
temp = 25 + ((sqrt(temp) - KTY_ALPHA) / (2 * KTY_BETA));
tempHighbyte = temp;
tempLowbyte = (temp - tempHighbyte) * 10;
return temp;
}
Kann mir da jemand bitte weiterhelfen ?
mirki
Gast #239228
Lesenswert?

Danke für die schnelle Antwort,....

aber was hab ich davon wenn ich bei den konstanten '.0' hinzufüge ?
Sorry für die blöde frage, dann würde es ja heissen

#define KTY_R25 2030.0
#define KTY_RS 4700.0
#define KTY_ALPHA 0.00788 .0
#define KTY_BETA 0.00001937.0

mirki
Gast #239229
Lesenswert?

>#define KTY_ALPHA 0.00788 .0
>#define KTY_BETA 0.00001937.0

Ähem, DA natürlich nicht ;-)
Das anhängen von "komma null" (.0) macht aus den Konstanten
Integerwerten Floats.

>vAdc = (adcwert * V_REF) / 1024;
>kt = (KTY_RS / (vcc / vAdc - 1)) / KTY_R25;
>temp = pow(KTY_ALPHA, 2) - 4 * KTY_BETA + 4  KTY_BETA  kt;
>temp = 25 + ((sqrt(temp) - KTY_ALPHA) / (2 * KTY_BETA));
>tempHighbyte = temp;
>tempLowbyte = (temp - tempHighbyte) * 10;

Da solltest Du das übrigens auch machen. Also bei 1024, 1, 2, 4...
Gast #239230
Lesenswert?

Da fällt mir grad noch was auf.
Was soll das denn bezwecken:

>tempHighbyte = temp;
>tempLowbyte = (temp - tempHighbyte) * 10;

Da steht ja eigentlich:

>tempHighbyte = temp;
>tempLowbyte = (temp - temp) * 10;

Also "0 * 10" und das ergibt 0.
Gast #239232
Lesenswert?

Naja, das Format ist schon wichtig.
Wenn temp ein float-Zahl ist und
tempHighByte / tempLowByte ein Byte,
dann steht, wie der Name vermuten läßt,
in tempHighByte der Wert vorm Komma und in
tempLowByte die erste Stelle nach dem Komma...

also 28.67 wird zu 28 und 6.

Ahoi, Martin
Gast #239233
Lesenswert?

Na gut, dann setzen wir mal ein:

tempHighbyte = temp;
tempLowbyte = (temp - tempHighbyte) * 10;

temp = 28.67

tempHighbyte = 28.67;
tempLowbyte = (28.67 - 28.67) * 10;
tempLowByte = 0

Oder sieht das jemand anders?

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