Forum: Compiler & IDEs float auf LCD ausgeben


von lui (Gast)


Lesenswert?

Ich habe eine Problem und zwar nutze ich ein 4x20 LCD an einem Mega32. 
Nun wollte ich einfach mal den ADC testen also einfach nen Poti an Aref 
und ADC0 so wenn ich das einfach so Ausgebe dann funktioniert das auch. 
Mit einer umrechnung hab ich dann den Wert in mV da stehn also von 0mv 
bis 2560mV.

So nun wollt ich es aber mal ausprobieren das auf dem Dislay bei max 
ausschlag 2,56V stehn oder 0,50V. wie ist das zu realisieren ?


Denn mein befehl itoa den ich hier aus dem forum kopiert hab ist nur 
fuer Maximal short int zahlen und das geht ja nciht weil ich ein Komma 
haben möchte.

gibts da nen trick ?

von Karl H. (kbuchegg)


Lesenswert?

lui wrote:
> Ich habe eine Problem und zwar nutze ich ein 4x20 LCD an einem Mega32.
> Nun wollte ich einfach mal den ADC testen also einfach nen Poti an Aref
> und ADC0 so wenn ich das einfach so Ausgebe dann funktioniert das auch.
> Mit einer umrechnung hab ich dann den Wert in mV da stehn also von 0mv
> bis 2560mV.
>
> So nun wollt ich es aber mal ausprobieren das auf dem Dislay bei max
> ausschlag 2,56V stehn oder 0,50V. wie ist das zu realisieren ?
>


2560 / 100  = 2    das ist dein Vorkommaanteil

    danach gibst du einen '.' aus

2560 % 100 =  560  das ist dein Nachkommaanteil

Wenn du alles nacheinander ausgibst, steht am Display  2.560

Aufpassen, der Nachkommaanteil muss immer 3 Zeichen (in deinem
Beispiel) umfassen.  2080 / 100 = 2,  2080 % 100 = 80 aber
eine Ausgabe von 2.80 wäre falsch. Es muss schon 2.080 heissen!

von lui (Gast)


Lesenswert?

Ich denke du meinst am anfang

2560 / 1000  = 2    das ist dein Vorkommaanteil


aber das mit der nachkomma zahl hab ich noch nciht verstanden wie wird 
denn da die vorkomma zahl "weg" gemacht ?

von Karl H. (kbuchegg)


Lesenswert?

lui wrote:
> Ich denke du meinst am anfang
>
> 2560 / 1000  = 2    das ist dein Vorkommaanteil

Ja. Natürlich.
Noch zuwenig Kaffee :-)

> aber das mit der nachkomma zahl hab ich noch nciht verstanden wie wird
> denn da die vorkomma zahl "weg" gemacht ?

%  ist der Modulo Operator. = Rest bei einer Division.
So wie in: Eine Mutter hat 2 Kinder und 14 Äpfel. Wenn jedes
Kind gleich viele Äpfel bekommt, wieviele Äpfel bleiben der
Mutter noch übrig.
    14 % 2 = 4

von lui (Gast)


Lesenswert?

Gibts da nen Trick das der nachkomma wert immer 3 Zeichen lag sein soll 
? also das die folgenden nullen ja auch angezeigt werden soll ?

von Johannes M. (johnny-m)


Lesenswert?

Karl heinz Buchegger wrote:
> So wie in: Eine Mutter hat 2 Kinder und 14 Äpfel. Wenn jedes
> Kind gleich viele Äpfel bekommt, wieviele Äpfel bleiben der
> Mutter noch übrig.
>     14 % 2 = 4
Hmmm, ich würde sagen, 14 % 2 = 0...

Meintest Du vielleicht ne Mutter mit 5 Kindern? Dann wäre es 14 % 5 = 4, 
dann stimmt's.

Schließlich kann der Rest nie größer sein als der Divisor.

von lui (Gast)


Lesenswert?

mhm das könnte ich dann ja so nciht verwenden weil bei meinem Poti ja 
immer mal ne 2,0xx oder noch schlimmer ne 2,00x dabei sein kann.


Ich hab auch öfter den befehl gelesen

printf("%05.2f" , 4.5 );

könnte ich den nicht auch einfach nutzen ? und bei 4,5 müsste dann meine 
zahl stehn ?

oder is der printf nicht fuer ein LCD gedacht ? gibts denn dafür einen 
ähnlichen bfehl fuer ein LCD

von Karl H. (kbuchegg)


Lesenswert?

Johannes M. wrote:
> Karl heinz Buchegger wrote:
>> So wie in: Eine Mutter hat 2 Kinder und 14 Äpfel. Wenn jedes
>> Kind gleich viele Äpfel bekommt, wieviele Äpfel bleiben der
>> Mutter noch übrig.
>>     14 % 2 = 4
> Hmmm, ich würde sagen, 14 % 2 = 0...

Oh Mann.
Heute fehlt noch viel Kaffee.

> Meintest Du vielleicht ne Mutter mit 5 Kindern?

Jup.

Aber irgendwie hab ich dann die 5 Kinder mit den jeweils 2
Äpfel durcheinandergewürfelt :-)

von Karl H. (kbuchegg)


Lesenswert?

lui wrote:

> Ich hab auch öfter den befehl gelesen
>
> printf("%05.2f" , 4.5 );
>
> könnte ich den nicht auch einfach nutzen ? und bei 4,5 müsste dann meine
> zahl stehn ?

Könntest du natürlich nutzen. Nur ziehst du dir dann für diese
eine Floating Point Berechnung die komplette Floating Point
Library ins Programm rein (~2KB nur für diese eine Ausgabe)

> oder is der printf nicht fuer ein LCD gedacht ? gibts denn dafür einen
> ähnlichen bfehl fuer ein LCD

printf weiß überhaupt nicht warauf es ausgibt. printf formatiert
einen String und schickt ihn dann in die Ausgabekanäle, was
auch immer am anderen Ende hängt.
Aber es gibt eine Alternative: sprintf
sprintf formatiert nur den String und was du dann mit dem String
weiter machst, ist dein Bier
1
   char Out[80];
2
   int i = 2860;
3
4
   sprintf( Out, "Spannung = %d.%03d V", i / 1000, i % 1000 );
5
6
   lcd_string( Out );  // oder wie auch immer die Stringausgabe
7
                       // auf deinem LCD heißt

Und demnächst wird ein Besuch in der nächsten Buchhandlung
fällig :-) Ohne Literatur wirst du auf lange Sicht Schiffbruch
erleiden.

von lui (Gast)


Lesenswert?

Jau genial der Befehl funktioniert. Jo ich glaub auch das ich langsam so 
ein buch ma lesen sollte bis jetzt hab ich mich einfach durch tutorial 
gewuselt und mal alles ausprobiert was mich so interessiert hat. Und hab 
einfach ma an den werten rum gespielt und getestet :D

bis jetzt hats geklappt


ich sach auch ma warum ich dat mache vll interessierts euch ja :o)
Also wenn das alles mal Feritg ist soll das eine Wetterstation werden 
die über das DCF77 signal die uhrzeit Datum und wochtag anzeigt 
zusätzlich soll die Temperatur Innen und evtl auch Aussen temperatur 
angezeigt werden. das ganze in einem Gehäuse mit einem Bleigel Akku 
versorgt mit anschluss an die Steckdose um den akku zu laden.

eventuell später noch einen PC-Speaker als Wecker eingebaut :P aber das 
erst später. Ich denk als nächstes setz ich mich ans empfangen/auswerten 
des DCF Signals

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.