Hi, wie kann man am besten 3.14159 auf nem Display darstellen? Gibt's für n ATMega für Fließpunktzahlen was ähnliches wie itoa für int?
Du könntest sprintf benutzen. Kostet aber alles (auch die Fließpunktzahlen) viel Speicherplatz. Wenn du wenig Speicherplatz haben willst, dann rechne mit Festkommazahlen und schreib dir selber eine Ausgabefunktion. Beispiele findest du hier in den Artikeln und Tutorials
Ich hab hier n 4x20 mit nem ollen HD44780. Wäre halt kuhl, wenn es schon so was wie printf() als Bibliotheksfunktion dafür geben würde. Hab gelesen, man kann mit fdev_open() umleiten... aber ob mir das weiterhilft? Über das Problem sind schon andere gestolpert... Beitrag "Float to String ATMega 16"
wo ist das problem mit sprintf die float in nen string zu wandeln und dann mit der entsprechenden Funktion auf dem LCD auszugeben? Wenn es dich stört, dass es zwei Funktionsaufrufe sind, pack es halt in eine neue Funktion und taufe sie printf.
Mal ganz nebenbei: Um 3.14159 darzustellen/zu verarbeiten, musst Du nicht unbedingt float verwenden! Da tut's ein integer genau so gut! Nein, genausogut nicht, anders (nicht immer schlechter). Aber sehr oft genügend gut. Es ist ein seeeeeeeehr verbreiteter Irrglaube, dass alles, was einen Punkt hat, floating point sein soll. Es heisst ja nicht umsonst "floating point" und "fixed point", und nicht "a point" und "no point". ;-) Oh, mann, wer lesen kann.... das wurde ja schon vorgeschlagen. SORRY! :-)
>Unicode 1d6d1, spart am meisten Platz und ist dabei sehr genau :-)
Nett.
Nun noch mal zu meinem Problem:
int inum = 3;
double dnum = 3.14159;
sprintf (Buffer,"int: %d", inum);
lcd_goto(0,0);
lcd_print (Buffer);
sprintf (Buffer,"float: %f2.2", dnum);
lcd_goto(0,1);
lcd_print (Buffer);
liefert auf dem Hd44780 Display:
int: 3
float: ?2.2
float wird nicht richtig als float erkannt.
Joachim ... schrieb: > sprintf (Buffer,"float: %f2.2", dnum); probier mal: sprintf (Buffer,"float: %2.2f", dnum);
Joachim ... schrieb: > wie kann man am besten 3.14159 auf nem Display darstellen? Gibt's für n > ATMega für Fließpunktzahlen was ähnliches wie itoa für int? Gib es als string "3.14159" aus. Das ist am schnellsten. Was willst du da mit Fließkommazahlen?
wahrscheinlich um ein Ergebnis auszugeben. Ist doch auch erst mal ok. Jeder hat mal angefangen. Wenn er das hat, kann er sich immernoch Gedanken machen, wie er es besser machen kann.
>wahrscheinlich um ein Ergebnis auszugeben. Das ist der nächste Schritt. >sprintf (Buffer,"float: %2.2f", dnum); hat nix gebracht.
Joachim ... schrieb: >>sprintf (Buffer,"float: %2.2f", dnum); > hat nix gebracht. Alle Vorkommastellen, zwei Nachkommastellen und einen Dezimalpunkt in insgesamt 2 Zeichen unterzubringen ist auch etwas schwierig.
>Gib es als string "3.14159" aus.
Problem ist nicht das ausgeben sondern das reinstecken - in sprintf,
nämlich weil sprintf sich bei der "Ausgabe" sich nicht so verhält wie
ich es erwarte.
Joachim ... schrieb: > Problem ist nicht das ausgeben sondern das reinstecken - in sprintf, > nämlich weil sprintf sich bei der "Ausgabe" sich nicht so verhält wie > ich es erwarte. mann musste für (s)printf erst die floating point funktionalität extra aktivieren. stand, glaub ich, irgendwo in den artikeln drin, wie es geht. hat man das getan, fällt man erst mal vom Hocker, wenn man nach einem build auf die Programmgröße schaut.
>mann musste für (s)printf erst die floating point funktionalität extra
aktivieren.
Yep, das isses!
Für WINAVR hat Karl Heinz Buchegger bereits eine Anleitung erstellt, muß
mal schauen ob ich das für AVRStudio 5 auch hinbekomme.
Danke allen Beteiligten.
Joachim ... schrieb: > Gibt's für n ATMega für Fließpunktzahlen was > ähnliches wie itoa für int? Ja. dtostrf
Wie gesagt, das Prob war das aktivieren der Fließpunktfunktion von sprintf die defaultmäßig nicht eingeschaltet ist. Die Funktion genehmigt sich nämlich fast 2kB. Aber wir haben's ja... Für den nächsten der über das gleiche Prob stolpert - hier gibt's die Lösung: Beitrag "Re: AVR Studio 5, sprintf, float und linken?"
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.