Hallo, ich versuche einen Float Wert auf ein Display zu übertragen. Der Innhalt ist nach dem IEEE 754 Standart hinterlegt. Ich habe ein kleines C-Programm unter Windows/Dos, mit dem habe ich das hinbekommen. unsigned char mod [] = { 0x6E, 0x40, 0xBD, 0x1F }; float * q; q = (float *) mod; printf ("\n mod= %f", *q); Nun möchte ich dasselbe auf einem AtMega32 machen, und das ergebnis als Flieskommazahl auf einem angeschlossenen Display darstellen. Für das Display stehen mir zwei Funktionen zur Verfügung, eine womit ich ein Char darstellen kann und eine womit ich einen String darstellen kann. Meine Überlegung war, die Float Zahl in ein Array mit sprintf zu 'konvertieren' brachte aber keinen Erfolg. Da ich noch ziemlich am Anfang mit meinen C-Erfahrungen stecke komme ich nicht mehr weiter. Kann mir da jemand bitte helfen ? Viele Grüße Christian
Was hat denn mit sprintf nicht funktioniert? Eigentlich sollte ein: unsigned char lcd_buffer[20]; float f1=3.2; sprintf (lcd_buffer,"%3.3f",f1); // Wie auch immer deine lcd_string Funktion heisst ... lcd_puts(lcd_buffer); doch an sich funktionieren? Du musst vllt aufpassen, dass dein lcd_buffer gross genug ist für jeden Fall. Viel Erfolg noch! Gruss, Sebastian
Hallo, also im meinem Float schiebe ich ein paar Chars rein: value = (float *) value_array; value ist dann mein Float Wert, den habe ich dann versucht mit sprintf(value_array2,"%f",value); zu konvertieren und dann das value_array2 nacheinander aufs Display zu jagen. Auf dem Display wurden mir dann jedoch irgendwelche Zeichen wiedergeben. Wenn ich das %f durch %x ersetzte bekomme ich wieder die Hex-Werte angezeigt die zuvor ins value_array2 kopiert habe -ok das ist ja auch klar....- . Dein Code Beispiel konnte ich nicht verifizieren. Wenn ich das so übernehme und dann aufs Display übertrage bekomme ich ein "?" angezeigt. Die Chars die sich im value_array2 befinden habe ich aus einer Modbus Datenübertragung raus erhalten. Dabei handelt es sich um einen Messwert, den iach auf einem Display darstellen möchte....
Was mir gerade einfällt, wenn Du den gcc benutzt, hast Du im makefile die printf option mit floating point aktiviert? Eventuell ist das der Fehler, weil ja deine Displaykommunikation und sprintf an sich zu funktionieren scheint. Hoffentlich hilfts, Gruss, Sebastian
makefile => nächste 'Falle' ;-) gleich mal checken ... Danke für den Hinweis....
Du kannst einen Float-Wert auch mit den dtostr bzw. dtostre-Funktionen aus der stdlib.h in einen ASCII-String umwandeln und dann einzeln rausschieben...
> Dein Code Beispiel konnte ich nicht verifizieren. Wenn ich das so > übernehme und dann aufs Display übertrage bekomme ich ein "?" > angezeigt. Da haben wirs schon. Du musst die printf-Library gegen jene austauschen, die Unterstützung für float enthält. Siehe auch hier: http://www.mikrocontroller.net/forum/read-2-395780.html#new
<<Siehe auch hier: http://www.mikrocontroller.net/forum/read-2-395780.html#new >> man beachte die "2" im Link Wird sowieso alles hier in der "1" gepostet, egal.
@2: Die "2" von Axel besgt einfach nur, dass es in das Forum "gcc" gehört, weil es ein gcc-Problem (Software) und keine Hanrdware-Problem ist. Es gibt wirklich Leute, die sich die anderen (Unter-) Foren nie ansehen (mit FPGA etc hatte ich z.B. bis jetzt noch nichts am Hut...)
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.