Gast
#35603
Hi! Mit dem AD meines AT90S8535 erfasse ich 4 Temperaturen, die ich zum Steuern von 3 Pumpen benutze. Ausserdem werden alle 4 Temperaturen auf einem 2x16 LCD ausgegeben. Bisher geschieht das alles mit float-Variablen. Hier die Ermittlung der Temperatur aus AD-Wert: ++++++++++++++++++++++++++++++++++++++++++++++ #define x 0.0000470 #define y 0.4052285 #define z 924.2677621 float ReadTemp(unsigned char pin) { float mittelwert=0; float temp=0; for(i=0;i<300;i++){mittelwert += ReadAD(pin);} mittelwert=mittelwert/300; temp=((mittelwert*mittelwert*x) + (mittelwert*y) + z -1000 ) / 3.85 ; return(temp); } +++++++++++++++++++++++++++++++++++++++++++ Wie man sieht wird der AD-Wert über 300 Einlesevorgänge gemittelt und dann daraus die Temperatur über eine quadratische Formel berechnet. Zur Ausgabe auf dem Display erzeuge ich 4 Strings mit sprintf die dann einzeln auf dem LCD platziert werden: sprintf(ausgabe4, "H:%3.1f", THeizkessel); Die Temperatur wird also mit einer Nachkommastelle angezeigt. Soweit so gut. Funktioniert auch alles prächtig. Nur erzeugt die floatingpoint sprintf-Version fast 4kb mehr Code als die Version z.B. von gcctest. Für die Ausgabe per sprintf würde ich jetzt also gerne die Temperaturen in Integer "konvertieren". Meine bisherige Idee war die Berechnung von Vor- und Nachkommastellen in getrennten Integern, die dann folgendermassen ausgegeben werden könnten: sprintf(ausgabe4, "H:%i,%i", vorkommastellen, nachkommastelle); Werden beim typecast von float auf Integer die Nachkommastellen nur abgeschnitten oder wird gerundet? Gibt es elegantere Möglichkeiten? Danke für Tips Axel