mikrocontroller.net

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


Autor: Bernd M. (adventureman1972)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: MeinerEiner (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: Bernd M. (adventureman1972)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Florian Sigg (sigge)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: lexs (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.