www.mikrocontroller.net

Forum: Compiler & IDEs kommazahlen auf LCD ausgeben


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
könnt ihr mir sagen, was an dem code falsch sein könnte? ich hab einen
atmeg8535 und auf dem LCD sehe ich nur ein "?". bitte umhilfe!

int main(void)
{
  lcd_init(LCD_DISP_ON);

  float zahl;
  char buffer[16];

  zahl = 3.96;

  sprintf(buffer, "%f", zahl);

  lcd_puts(buffer);

  for(;;);
}


danke,
tom

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast die Doku nicht gelesen. ;-)

Sonst wüßtest Du, was man für Gleitkomma-printf machen muß...  Die
aktuelle WinAVR-Version hatte übrigens gerade dahingehend einen Bug
im Makefile-Template, daß sie die Gleitkomma-Version immer
eingebunden hat. :-/  Braucht übrigens ziemlich viel ROM, ggf.
solltest Du stattdessen die Nutzung von dtostrf() in Erwägung
ziehen.  Wiederum, ach das kennst Du ja nun schon... siehe Doku. :)

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit dtostrf habich es auch scho probiert, jedoch werich aus er doku
nicht schlau und weiß nicht, wie ich das anwenden soll, mit den
parametern und so... kannst du mir ein kurzes beispiel geben?

danke schon mal

gruß,
tom

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist denn so unverständlich daran?  Konkrete Frage halt, solange
wir nicht wissen, was man daran nicht versteht, können wir das auch
nicht besser formulieren.

width und prec entsprechen den normalen Parametern aus printf().
Den Puffer mußt Du selbst allozieren und dafür Sorge tragen, daß
er groß genug ist, das Ergebnis aufzunehmen.  Das ist bei dtostrf()
der trickreiche Teil, Du mußt eben entweder sicherstellen, daß das
Ergebnis nicht gerade 1E38 ist und Du 39 Zeichen für die Darstellung
brauchst, oder Du mußt wirklich so viel Platz reservieren.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
seh ich das richtig, dass das eigentlich so funktionierenm müsste:

#include <stdlib.h>
#include <lcd.h>

...

char buffer[16];
double i;

i = 13.7603;

dtostrf(i, 10, 3, buffer);

lcd_puts(buffer);

...


funktioniert das auch so und was bedeuten die parameter 10 und 3
eigentlich genau, und wie muss ich das einstellen, damnit ich zum
beispiel nur 2 nachkommastellen habe und so?

danke schon mal,
Tom

Autor: Andreas Böhme (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank :-)

Bin gerade dabei, das in
http://www.linuxfocus.org/English/November2002/art...
beschriebene Digital-Netzteil zu bauen und habe mich schon gewundert,
dass die Grösse nicht stimmen kann. Im Map File konnte man sehen, dass
printf_flt eingebunden wurde.. Im Makefile wurde wirklich mit "LDFLAGS
+=  -Wl,-u,vfprintf -lprintf_flt" die Floating Point Version von
printf eingebunden. Nun ist die Größe von 16kb auf 3 kb geschrumpft
:-))

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm die neueste Version von WinAVR, dort ist das Beispiel-Makefile
wieder OK.

Autor: Zoltan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur nebenbei:
Ich habe aus platzmangel keinen float.. verwenden wollen. Kommastellen
kann man nämlich auch "hintrixen": Die darzustellende Zahl, z.B. 12,5
wird bei mir als 125 vom restlichen Programm vorgegeben. Nun Schreibe
ich die 125 auf das Display, und überschriebe sie nochmal, aber eine
Stelle früher beginnend: 125 Dann sieht es so aus: 1255. Nun noch eine
Komma an die 3. Stelle und fertig ist die 12,5 ;-).
Das Problem ist jetzt, dass bei mehr/weniger Ziffern die Komastelle
verrutscht, aber für meine Anwendung (Akku überwachen von 10..14V) ist
diese Lösung mehr als ausreichend.

1. 125__
2. 125____
3. 1255___
4. 12,5___


-Zoltan

Autor: Udo Drees (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, bitte maile mir doch mal dein Programm zur LCD-Ausgabe.Bin
absoluter Neuling und muß demnächst ein Projekt mit dem AVR in C
fertigen. Vielleicht kannst Du mir Tipps geben wie ich an
Prgrammlistings"zum Analysieren und lernen" kommen kann. Alles ist
hilfreich. Wo bekommt man sonst noch Infos?

Danke im vorraus  udodrees@gmx.de

Autor: Zoltan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Udo,
ich weiß jetzt nicht wen du mit "dein" meinst, aber das Progamm, dass
ich verwende ist von Peter Fleury (
http://www.mysunrise.ch/users/pfleury/avr-lcd44780.html ) Er erklärt
die Funktion auf seiner Seite auch sehr gut, du kannst aber auch unter
http://www.mikrocontroller.net/tutorial/lcd.htm schauen, ist aber in
Assembler.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.