PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : atmega32 binärwert in dezimal-komma zahl



Jasmin13
08.03.2013, 08:16
da ich Neuling in dem Gebiet C-Programmierung bin, ist meine Frage wie ich von einem 4-stelligen Binärwert, welchen ich auf meinem Display ausgegeben habe, in einen Komma-Dezimal-Wert umrechnen bzw. programmieren kann.

Ich bitte um Hilfe :)

Danke im Voraus

ePyx
08.03.2013, 08:19
Wenn ich dich richtig verstehe, dann könnte man das mit itoa machen etc.

Falls auf dem Display nur Fragezeichen auftauchen, dann eventuell mal diesen Artikel lesen http://www.mikrocontroller.net/articles/FAQ#Aktivieren_der_Floating_Point_Version_von_spri ntf_beim_WinAVR_mit_AVR-Studio

Jasmin13
08.03.2013, 09:49
Auf dem Display steht ein Dezimalwert vom Speicher ausgelesen 1024, aber ich möchte diesen Wert als Dezimal-Wert umrechnen...

Danke trotzdem Daniel :)

ePyx
08.03.2013, 09:54
Na wo haste den denn her? Vom ADC ? Dann muss erst die Referenzgröße verrechnet werden, damit du deine Fließkomma zahl bekommst und diese aufs Display ausgibst.

markusj
08.03.2013, 10:15
@Jasmin: Was genau willst du eigentlich machen? Uns so einen Mini-Brocken hinzuwerfen macht es schwer dir zu helfen.

mfG
Markus

oberallgeier
08.03.2013, 12:29
Mal nur so, zur Begriffsbestimmung - auch wenns pingelig klingt.

... einem 4-stelligen Binärwert ... einen Komma-Dezimal-Wert umrechnen ...Hier ist ein Binärwert gezeigt (aus einer RC-5-Decodierung) der in eine dezimale Entsprechung umgerechnet wird - Zeile 3 bis 8 im folgenden Codefenster.


C501 R5M_x15 m1284p/20MHz 27Nov2012 15:28
...
11000000010100 => dez: 20 , RCges_zt = 483
11100000011001 => dez: 25 , RCges_zt = 482
11000000100011 => dez: 35 , RCges_zt = 482
11100000011011 => dez: 27 , RCges_zt = 482
11000000001010 => dez: 10 , RCges_zt = 484
11100000000110 => dez: 6 , RCges_zt = 483

Binärzahlen - auch Dualzahlen genannt - bestehen aus den Ziffern 1 und 0. Einen vierstelligen Binärwert in einen "Komma"-Wert umrechnen - also in eine Gleitkommadarstellung der Art 3,14 ist wohl nicht möglich (genauer könnt ich das ausführen, aber das ist hier sicher nicht von Bedeutung).


Auf dem Display steht ... 1024 ... möchte diesen Wert als Dezimal-Wert umrechnen ...Dieser Wert ist schon ein Dezimalwert - vermutlich. Natürlich könnte es auch eine Darstellung in oktal, hex oder gar auf einer total ungewöhnlichen Basis sein. Nur binär ist es mit Sicherheit nicht. Eine dezimale "1024" würde beispielsweise binär 10000000000 heissen.

Zur eigentlichen Frage "Umwandeln Binär in Dezimal" - als Darstellung auf einem Display. Dazu gibts in C den Befehl
itoa - Integer to ascii
der etwa so verwendet wird:

// Hilfsfunktion, um Zahlen über das UART auszugeben
void uputs0i( const int val )
{
char buffer[8];
uputs0 ( itoa(val, buffer, 10) );
}
Dabei ist val der aufrufende Parameter, buffer der ASCII-String, der ausgegeben werden kann und 10 die Basis zu der der Wert val umgerechnet werden soll (10 => also ne Dezimalzahl). Die binäre Zahlendarstellung im Codefenster oben wurde mit genau dieser Routine dort oben dargestellt.

Puuuhhhh. Wirds jetzt etwas verständlicher für Dich?

ePyx
08.03.2013, 12:38
Nimm deinen Wert 11100000000110 verunde es mit 0xF und stell diese Zahl auf dem Display dar.

Zum Verständnis :

11100000000110 & 0xF ergibt 0110 = 6. Entspricht das deinen Erwartungen?

ichbinsisyphos
08.03.2013, 13:32
Du willst nur 1024.0 aus 1024 machen? Die Nachkommastellen zeigt er nicht an, wenn sie alle null sind. PECH! :P

Was willstn wirklich machen? Ich nehm an, was auch immer dein Ziel ist, es beeinhaltet das Multiplizieren der Ganzzahl mit einem konstanten Gleitkomma-Faktor.

Entsprechen die 1024 einer Spannung oder einem anderen Messwert?

Jasmin13
09.03.2013, 10:57
Die 1024 entsprechen einer Spannung, welche ich nun einfach als ...Volt mir anzeigen lassen möchte.

markusj
09.03.2013, 12:00
Dann musst du sie erst Mal umrechnen, die Formel dazu kennen wir nicht, weil wir nicht wissen was die Zahl bedeutet. Je mehr Informationen wir haben, desto besser können wir dir helfen ...

mfG
Markus

ichbinsisyphos
09.03.2013, 16:57
Nun, wenn der Wert von einem Analog/Digital-Wandler kommt musst du seine Auflösung und die Referenzspannung rausfinden.

Angenommen er liefert 10bit-Zahlen, kann also 0 bis 1023 zurückgeben. 0 entspricht Massepotential, 1023 dann die angeschlossene Referenzspannung, beziehungsweise wenns keine separate gibt, dann die Versorgungsspannung.
Bei 5V Referenzspannung liefern 5V am Eingang den Maximalwert von 1023, 0V liefern den Minimalwert 0.

<Spannung in Volt> = <Zahl vom A/D-Wandler>/1023.0*5.0

Die Informationen die ich oben willkürlich angenommen habe, wirst erstmal rausfinden müssen.

Jasmin13
09.03.2013, 17:53
danke ichbinsisyphos

Ich verwende einen 12Bit A/D-Wandler, den ich Single Ended beschaltet habe mit einem Nullpunkt 2,5 2Vss das bedeutet von 1,5-3,5. Meine maximal Amplitude des Spannungswertes von meinem Eingangssignal beträgt ungefähr 3V. Nun möchte ich mit einer Formel das ganze umgerechnet als Spannung haben....

ichbinsisyphos
09.03.2013, 18:46
12bit sind schonmal 4096 Werte zwischen 0 und 4095.

... den ich Single Ended beschaltet habe mit einem Nullpunkt 2,5 2Vss das bedeutet von 1,5-3,5.Wenn das so stimmt, dann verteilt er die 4096 Werte auf den Bereich von 1,5V(=0) bis 3,5V(=4095).

<Spannung in Volt> = 1.5V + <Zahl vom A/D-Wandler>*(2.0/4095.0)
Anmerkung: diese ".0" sind nicht nur zur Zierde, das zwingt ihn die Ganzzahl auf eine Gleitkommazahl zu casten. Sonst hast Integerdivision und das wär in manchen Situtationen sehr schlecht (2/4095 = 0).

1024 wären dann aber nur 2V.