Forum: Compiler & IDEs adc in float in char für display wandeln


von Bernd M. (adventureman1972)


Angehängte Dateien:

Lesenswert?

Hallo,

habe da ein kleines Problem.

Ich möchte mit einer AD-Wandlung die Spannung eines Mignonakkus abfragen 
und diese auf einem Display darstellen. Die Abfrage klappt und anhand 
von LEDs kann ich ausrechnen was für eine Spannung der Akku hat. Durch 
eine Umrechnung ((2,56V/1024)*ADC) bekomme ich die aktuelle Spannung als 
float.
Die Übertragung auf das Display klappt auch. Leider bekomme ich anstatt 
1,44V einen utopischen Wert. Das Problem ist die Umwandlung von float in 
char.

Wie kann ich den errechneten Wert so in ein char konvertieren (einfache 
Lösung), dass die 1,44 im Display zu sehen sind? itoa und utoa ergeben 
den gleichen Müll.

Verwendet werden: AVR-Studio 4.15 und Atmega16 auf einem Pollin-Board.

Ich selber bezeichne mich als Neuling in der Programmierung mit wenig 
Erfahrung.

Danke

von MeinerEiner (Gast)


Lesenswert?

Irgendwie find ich in dem Code die angegebene Berechnung nicht.
Um welche Zeile(n) gehts da genau?

von Karl H. (kbuchegg)


Lesenswert?

Da du sowohl hier als auch in deinen Kommentaren immer 1,44 schreibst, 
lass dir gesagt sein, dass man in Programmiersprachen normalerweise 
immer die engliche Schreibweise benutzt, bei der es kein Dezimalkomma 
sondern einen Dezimalpunkt gibt!
Also nicht 1,44 sondern 1.44

das i in itoa steh für int. das u in utoa steht für unsigned(int). Du 
willst aber float ausgeben, also wird wohl weder itoa noch utoa die 
passende Funktion sein :-)

Und auch immer daran denken:
Wenn auf dem Display schon 103 steht, und du gibst an dieselbe Stelle 
linksbündig 20 aus, dann steht auf dem Display 203 und nicht 20, weil 
niemand die 3 von den ursrünglichen 103 übeschrieben hat :-)

von ... .. (docean) Benutzerseite


Lesenswert?

schreib deine Umrechnung so um das du 144 als wert erhältst, das ist ein 
reiner int wert. diesen kann man dann mit itoa passend wandeln

Das komma kannst du dann von hand in dein char array einpflegen..

von Bernd M. (adventureman1972)


Angehängte Dateien:

Lesenswert?

Danke für die Antworten!

Habe gestern noch eine lange Nacht am Rechner gehabt. Aber es hat sich 
gelohnt. Ich glaube es war Karl heinz Buchegger der einen Code ins Forum 
gestellt hat der mir weitergeholfen hat. -->
Erst den int/1000 dann int%1000 dazwischen ein Komma. Das ganze wird mit 
sprintf irgendwie zu char... Muss ich mir noch mal in Ruhe anschauen und 
begreifen!
Aber nun bekomme ich die Spannungen der Akkus auf dem Display angezeigt.

Mein nächste Problem wird sein die Ausgänge als Soft-PWM einzurichten.

Im Anhang das geänderte Programm

von ... .. (docean) Benutzerseite


Lesenswert?

1
Akku1 = (2.502443793*Spannung); // ( ( (2,56/1024) *1000) *Spannung)

schreib ruhig die komplette formel hin (nicht nur den 2... Wert), das 
wird automatisch vereinfacht (vom präprozessor/compiler)

von Florian S. (sigge)


Lesenswert?

Super! Danke für den Beitrag!

Hat mir eine ganze Stange Zeit eingespart!
Irgendwie hat mir nur noch dieser Artikel gefehlt um das HowTo zu
"Festkommaarithmetik" zu kapieren.

Nun funktioniert bei mir die Ausgabe am LCD ebenfalls.

Danke Bernd M. für den Code.

von lexs (Gast)


Lesenswert?

>Danke Bernd M. für den Code.
Glaub, der liest nicht mehr mit .....

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.