Ich nehm für solche Berechnungen eigentlich immer int werte her, da die der Controller schneller bearbeiten kann als float.
Um eine Nachkommastelle zu kriegen nehm ich immer den zehnfachen Wert der tatsächlichen Temperatur.
Das funktioniert aber nur mit einer Nachkommastelle, da die Funktion itoa führende Nullen unterdrückt.Code://Berechnung der Temperatur si_temp=((si_adwert-ad_nullwert)*si_multiplyer)/si_const; // Die Ganzen Grade Berechnen si_ones=si_temp/10; //Die eine Nachkommastelle Berechnen si_komma=si_temp%10; // Die Zehnerstellen ans Display ausgeben itoa(si_ones,uc_disp); lcd_puts(uc_disp); lcd_putchar(","); itoa(si_komma,uc_disp); lcd_puts(uc_disp);
Die Variable ad_nullwert ist der Wert, den der A/D Wandler bei 0°C ausgibt. Die Variable si_mutiplyer ist der Steilheitsfaktor zur kalibrierung der Temperatur. si_const ist eine feste Teilerkonstante die natürlich von von si_multiplyer und der gewünschten Auflösung abhängig ist.
Vorschlag 1024.







Zitieren

Lesezeichen