Forum: Mikrocontroller und Digitale Elektronik Float Wert auf ein Display übertragen


von Christian (Gast)


Lesenswert?

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

von Sebastian (Gast)


Lesenswert?

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

von Christian (Gast)


Lesenswert?

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....

von Sebastian (Gast)


Lesenswert?

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

von Christian (Gast)


Lesenswert?

makefile => nächste 'Falle' ;-) gleich mal checken ...

Danke für den Hinweis....

von johnny.m (Gast)


Lesenswert?

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...

von Karl heinz B. (kbucheg)


Lesenswert?

> 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

von AxelR. (Gast)


Lesenswert?

<<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.

von Karl heinz B. (kbucheg)


Lesenswert?

Ich versteh nicht ...
Was willst du mir sagen?

von inoffizieller WM-Rahul (Gast)


Lesenswert?

@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
Noch kein Account? Hier anmelden.