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
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. :)
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
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.
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
Vielen Dank :-) Bin gerade dabei, das in http://www.linuxfocus.org/English/November2002/article251.shtml 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 :-))
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
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
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.
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.