Hallo zusammen. Ich möchte gern eine Temperatur mit zwei Nachkommastellen anzeigen (in einem Display angesteuert von einem ATMega64). Meine Temperatur ist zunächst ein Integer mit 256 Multipliziert, z.B. 5158 für 20,15°C. Wie kann ich die Nachkommastelle berechnen ohne den Datentypen float zu verwenden? Die Berechnung 5158/256=20; auf Integer Ebene, und die Nachkommastelle? Wird das Modulo berechnet? Oder komme ich nicht drumherum?
5158/256=20 256*20=5120 5158-5120=38 38*10=380 380/256=1 380-256=124 124*10=1240 1240/256=4 usw...
Vorkomma: 5158/256=20 Nachkomma: (5158&255)*100/256=14,84375 also 14 Das ergibt dann 20,14°C Mann kann auch noch richtig runden: Nachkomma: ((5158&255)*100+128)/256=15,34375 also 15
Danke. Eine Frage nich. Was soll das "&" bedeuten. Heißt das logische Verknüpfung?
ja, das ist ein logisches UND, somit wird der Rest der sich nicht durch 256 teilen lässt berechnet.
Hallo, ich würde das ganze mit 100 multiplizieren und durch 256 dividieren: 5158*100/256 = 515800/256 = 2014,844 Wenn Du nun diese Zahl nach BCD wandelst hast Du 2 Nachkommastellen! Das Ergebnis der Multiplikation ist eine 32Bit oder 24Bit Zahl. Du addierst 128 dazu um zu runden. Dann nimmst Du das Byte 1 und 2 und wandelst das nach BCD. Das ganze geht gut in Assembler! Waldo
>Meine Temperatur ist zunächst ein Integer mit 256 Multipliziert, z.B. >5158 für 20,15°C. Das sind doch beste Vorraussetzungen: Also: -highbyte von 5158 (20) auf die Anzeige schaffen, 20 -Punkt darstellen, 20, -lowbyte von 5158 (38) mit 10 multiplizieren =>380, -highbyte des Ergebnisses (01) zur Anzeige schaffen, 20,1 -lowbyte von 380 (124) mit 10 multiplizieren =>1240, -highbyte des Ergebnisses (04) zu Anzeige schaffen, 20,14 -lowbyte von 1240 (216) mit 10 multiplizieren =>2160, -highbyte des Ergebnisses (08) zu Anzeige schaffen, 20,148 -lowbyte von 2160 (112) mit 10 multiplizieren =>1120, -highbyte des Ergebnisses (04) zu Anzeige schaffen, 20,1484 ... und so weiter, je nachdem, wieviel Stellen du willst... (oder Abrruch bei Nullen im Lowbyte) PS: 5158/256 = 20,1484... Das Verwenden des HighBytes ersetzt! das /256 ! Einfacher bekommst dus nicht ;-)
Bob wrote:
> ja, das ist ein logisches UND,
Nein, es ist ein bitweises UND. Die Operation "x&255" ist eine andere
Schreibweise für "x%256" (x modulo 256). Jeder anständige C-Compiler
macht aber aus einem "%256" automatisch eine dem "&255" entsprechende
Operation (bei 8-Bit-Rechnern bedeutet das einfach: "Nimm nur das
Low-Byte für die anschließende Operation").
Generell gilt
x % 2^n = x & (2^n - 1)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.