Hallo. Programm: Keil µVision3 Poti: 0V - 255V LCD: 2x20 Wie kann ich eine Zahl mit zwei Nachkommastellen auf einen LCD-Display ausgeben? Mit Float funktioniert das nicht. Man dreht am Poti und die Spannung verändert sich auf der LCD-Anzeige. Jetzt möchte ich es mit zwei Nachkommastellen versuchen (Also: z.B. 125,64V). Ich glaube man muss es mit Division mit Rest machen. Könnte mir jemand das erklären? Und vielleicht auch noch mir das Programm zeigen? Mfg Frank
Wo hängts denn? Umwandlung von float zu char?
Frank schrieb: > ne ich will ohne float arbeiten Also könntest du erstmal den Ganzzahlanteil und die übrig bleibenden Hunderstel ausrechnen. Auf die Anzeige gibst du dann den in einen String konvertierten Ganzzahlanteil, ein Komma"," und die ebenfalls in einen String gewandelten Hundertstel, letztere zweistellig ggf. mit führender "0".
Frank schrieb: > Könnte mir jemand das erklären? > Und vielleicht auch noch mir das Programm zeigen? Warum machst Du Deine Hausaufgaben nicht selbst? https://www.mikrocontroller.net/articles/Festkommaarithmetik
Frank schrieb: > Wie kann ich eine Zahl mit zwei Nachkommastellen auf einen LCD-Display > ausgeben? Mit Float funktioniert das nicht. So so, mit float funktioniert das nicht... Fange doch erstmal klein an, indem du zunächst lernst, wie man zwischen Zeichenketten und Zahlen hin- und her-konvertiert. Sowas gehört zum Handwerkszeug eines jeden Programmierers. Als nächstes lernst du, wie man ein einfaches Alpha-Display ansteuert. ..und behaupte lieber nicht, daß es mit float nicht gehen würde. Ich hab sowas schon so oft selber gemacht, daß ich mit absoluter Sicherheit sagen kann, daß es geht. W.S.
W.S. schrieb: > Ich hab > sowas schon so oft selber gemacht, daß ich mit absoluter Sicherheit > sagen kann, daß es geht. +1 mee too :-)
Ich versuche in solchen Fällen auf einem µC float ehrer zu umgehen, auch wenn es manchmal ein bisschen problemorientieren Hirnschmalz verlangt. Bevor das Problem überhaupt sauber formuliert und strukturiert ist, lohnt es aber nicht, über die Umsetzung konkreter nachzudenken.
Frank schrieb: > ne ich will ohne float arbeiten Dann solltest du in Centivolt rechnen. Und zwischen die 2. und die 3. Stelle ein Komma machen.
Lothar M. schrieb: > Dann solltest du in Centivolt rechnen. Wenn die Messergebnisse in 100 Centivolt quantisiert daherkomen wird er in den Nachkomma-Stellen niemals einen Wert ungleich 00 sehen, egal ob er mit oder ohne float rechnet.
Matheprofessor schrieb: > Wenn die Messergebnisse in 100 Centivolt quantisiert daherkomen > wird er in den Nachkomma-Stellen niemals einen Wert ungleich 00 > sehen, egal ob er mit oder ohne float rechnet. Eben, dann gibt es bei den Eingangsdaten keine Nachkommastellen und damit sie in der Anzeige wieder auftauchen: Lothar M. schrieb: > Und zwischen die 2. und die 3. Stelle ein Komma machen.
Es ist einfach so, wie wenn ich z.B. beim Geld nicht in 1,23 Euro sondern in 123 Cent rechne. Wenn dann meine ganzzahlige Cent-Rechnung fertig ist und ich das Ergebnis in Euro sehen möchte, dann gebe ich den Cent-Betrag aus und mache zwischen die 3. und 2. Stelle von rechts ein Komma.
Lothar M. schrieb: > Wenn dann meine ganzzahlige Cent-Rechnung > fertig ist und ich das Ergebnis in Euro sehen möchte, dann gebe ich den > Cent-Betrag aus und mache zwischen die 3. und 2. Stelle von rechts ein > Komma. Pfusch. Elender Pfusch. So, dann stelle mal 7 Ct dar: ._7 oder so ähnlich. Bei deiner Geldbörse ist das unerheblich.. aber denk mal an negative Zahlen, damit wird das noch häßlicher: .-7 oder -._7 oder wie hätten's wir gern? Nein, man kann zwar mit Centi-Sonstwas rechnen, aber zum Ausgeben sollte man es passend geraderücken. Also durch 100 teilen, ganzen Teil (ggf. mit Vorzeichen) ausgeben, dann Dezimalpunkt, dann gebrochenen Teil dranhängen. W.S.
W.S. schrieb: > aber denk mal an negative Zahlen, damit wird das > noch häßlicher: .-7 oder -._7 oder wie hätten's wir gern? Du verlierst das Problem aus den Augen. Es geht um ein Frank schrieb: > Poti: 0V - 255V Das Zeichen "-" ist kein Minus-Zeichen, sondern bedeutet "bis" ;-)
Hi W.S. schrieb: > Pfusch. Elender Pfusch. Ganz unrecht hat Er aber trotzdem nicht. (und denke mir ein zwinkerndes Smiley an den Satz) Bei 0-255 und <100 werden die führenden Nullen wohl entfallen, wenn von 0,00 bis 2,55 angezeigt werden soll. Man kann aber auch mit 8-bit-Zahlen (nahezu beliebig) große Zahlen durch ebenso beliebige Zahlen teilen - man braucht halt 'nur ne handvoll mehr davon'. Auch bewegen wir uns da dann wieder beim Festkomma und ich muß mich selber um 'das Komma' kümmern. Unterm Strich kann man (fast?) alles 'schriftlich' von Hand in Software berechnen - ist halt die Frage, wie sinnvoll Das hier ist, wenn ich eh schon mit Zahlenvariablen mit zig Stellen unterwegs bin (also nicht auf 8bit begrenzt). MfG
Weis nicht was du für einen komischen Compiler benutzt. Kenne den nicht. Aber wenn ich das lösen müßte wären das 3 Zeilen Code und das Ergebniss stände auf dem Display. Must doch nur Float nach String umkonventieren lassen und gut ist. Braucht natürlich viel Speicher, aber das ist am einfachsten.
Stefan schrieb: > Must doch nur Float nach String umkonventieren > lassen und gut ist. Kleine Hinweisliste für angehenden Sherlock Holmes: Frank schrieb: > Poti: 0V - 255V Frank schrieb: > Mit Float funktioniert das nicht. Matheprofessor schrieb: > Wenn die Messergebnisse in 100 Centivolt quantisiert daherkomen
W.S. schrieb: > Pfusch. Elender Pfusch. Naja, ich nenne es stattdessen Festpunktarithmetik und verschiebe den Punkt soweit nach rechts, bis ich nur noch Ganzzahlen habe und mit Integern rechnen kann. So brauche ich für die Addition von 1,23 Euro und 2,45 Euro keinen Float mitsamt Rundungseffekten, Sonden addiere 123 und 245 Cent. Und nur für die Ausgabe muss ich mir dann noch Gedanken machen... Stefan schrieb: > Aber wenn ich das lösen müßte wären das 3 Zeilen Code und das > Ergebniss stände auf dem Display. Es geht nicht darum, wie viele Zeilen das im Editor sind (bei ausreichend breitem Bildschirm passt das auch in 1 Zeile) sondern darum, wie viele Ressourcen und Rechenzeit dieser Code dann tatsächlich braucht.
:
Bearbeitet durch Moderator
Es geht hier nicht um Ressorsen und rechenzeit sondern um es mit Float geht oder nicht. Der TO meinte ja das es nicht geht, was aber nicht stimmt. Dann muss man auch nicht mit ganzen zahlen rechnen.
Lothar M. schrieb: > So brauche ich für die Addition von 1,23 Euro und 2,45 Euro keinen Float > mitsamt Rundungseffekten, Sonden addiere 123 und 245 Cent. Und nur für > die Ausgabe muss ich mir dann noch Gedanken machen... Eben, eben, die Ausgabe. Genau DAS war's, was ich bereits umrissen habe. Rechnen kann man mit Festkomma allemal, keine Frage. Aber mit deinem simplen Komma "zwischen die 3. und 2. Stelle von rechts" bist du schlichtweg zu kurz gesprungen. Jedenfalls für nen Mod. nochmal im Telegrammstil: ganz:= Zahl /100; bruch:= Zahl mod 100; if Zahl < 0 then v:= '-' und Zahl:= -Zahl else v:= ' '; Text:= v + IntToString(ganz) + '.' + GebrochenToString(bruch); W.S.
Hi Vll aber auch so: Cursor auf letzte Komma-Stellen-Position setzen Zahlneu=Zahl/10 Ziffer=Zahl%10 (springt in Assembler von alleine mit raus ...) Ziffer=Ziffer + "0" Ausgabe Ziffer, Cursor-Position '1x nach links' Zahl=Zahlneu Zahlneu=Zahl/10 Ziffer=Zahl%10 (springt in Assembler von alleine mit raus ...) Ziffer=Ziffer + "0" Ausgabe Ziffer, Cursor-Position '1x nach links' Zahl=Zahlneu <--- hier ist 'zwischen 2. und 3. Stelle Zahlneu=Zahl/10 Ziffer=Zahl%10 (springt in Assembler von alleine mit raus ...) ... hier kommt der 'Dot' dazu ... Ziffer=Ziffer + "0" + 'Dot' (für den Punkt der 7-Segment-Anzeige) Ausgabe Ziffer Die Berechnung kann als Funktion/in einer Schleife aufgerufen werden, ähnlich wie das Versenden ans das Display. Woher jetzt eine negative Zahl kommt ... meine Bytes sind ALLE im Bereich 0-255 MfG PS: Auch ein MOD muß nicht weiter springen können, als das 'gemeine Volk' - Aufräumen, Ja, Das muß Er können
W.S. schrieb: > bist du schlichtweg zu kurz gesprungen. Jedenfalls für nen Mod. Und was hätte im Zweifelsfall das eine mit dem anderen zu tun? Merke "Mod != God"... Was heraus kommt, ist, dass jede Lösung, die zum Ziel führt, hinreichend ist. Und ich komme Dank Hardwaredesign eben eher mit Integern und verschobenen Kommas zurecht und ans Ziel. Andere nehmen einen schnellen Prozessor und Float. Patrick J. schrieb: > Zahlneu=Zahl/10 Ich würde hier in Hardware bei einem 16-bit Integer eher eine Multiplikation mit 6554 machen und dann aus dem 32-Bit Ergebnis das obere Wort verwenden, die "Division" durch 65536 bekomme ich somit "kostenlos". Mathematisch also (x*6554)/65536 ~= x/10.
:
Bearbeitet durch Moderator
W.S. schrieb: > if Zahl < 0 > then v:= '-' und Zahl:= -Zahl Wo bitte steht in der Aufgabenstellung irgendetwas von negativen Zahlen? Lies doch einfach mal.
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.