PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Word in Double Konvertieren - nicht möglich?



Thegon
24.01.2011, 16:27
Hallo zusammen,
ich habe eine Spannungsmessung mit einem ATmega32 gebaut. Der soll eine Spannung auf einem Display anzeigen können, und zwar mit kommastellen. Der ADC Eingang liefert genaue werte, wenn ich direkt den Pegel anzeigen lasse. Nun hätte ich aber gerne, dass der ADC wert in eine Spannung umgerechnet wird, so weit so gut. Da der ADC seinen Ausgabewert aber in eine Word - Variable speichert, kann ich durch dividieren keine Kommastellen herausbekommen, deshalb hätte ich gerne den Wert der Word - Variablen in eine Double - Variable geschrieben, sodass ich diese dividieren kann und eine genauere Spannung erhalte. Nun, am display erscheint einfach "0", egal was am ADC anliegt. Ich weiß auch nicht weiter... Woran kann das liegen?
Der Code wäre Hier:



Dim X As double

Do
W = Getadc(0) 'W ist die word variable
X = W
X = X * 3 'Spannungsteiler 1: 3
X = X / 204 ' 1024 / 5 V, so viel ist ein volt am ADC
Cls
Locate 1, 1
Lcd X
waitms 1000
Loop

DAs ist jetzt nicht das ganze Programm, aber alles, das wichtig ist, hoffe ich zumidest. ADC Funktionieren, wie schon oben geschrieben sehr gut, wen ich den Ausgabewert direkt am Display ausgebe und dann mit dem Taschenrechner umrechne.
Wäre sehr glücklich wenn mir jemand sagen kann, was ich falsch mache, denn ich komme nicht weiter.
Danke im voraus!
Gruß Thegon

BMS
24.01.2011, 16:51
Ändert es was, wenn du anstatt *3 einfach *3.0 schreibst bzw anstatt /204 halt /204.0 ? So kenne ich das von einer anderen Basic-Programmiersprache.

Sonst: Wurde die Lcd-Funktion so programmiert, dass sie auch Fließkommazahlen darstellen kann? (Dokumentation?)

Thegon
24.01.2011, 17:01
Also das mit dem 204.0 geht glaub ich nicht, denn ich habe vorher die Zahl genauer eingetippt (204,8..), damit auch die Lösung genauer wird und da ist auch null raus gekommen. Ob das Lcd Gleitkomma darstellen kann, weiß ich nicht so genau, es ist schon ziemlich alt, aber es hat den HD4478 (oder so, auf jeden fall den bekannten Controller)
Was müsste man denn machen, dass die Zahl im gleitkomma angezeigt wird, sollte das Display jetzt nicht darauf programmiert bzw. gibt es eine andere Lösung als die Zahl mit rechenoperationen auseinander zu reißen und dann ein komma dazwischen hineinzuschreiben?
Gruß Tegon

for_ro
24.01.2011, 18:19
Hallo Thegon,
du kannst eine Word Variable (W) nicht direkt in einen Double Typ (X) umwandeln. Du könntest jetzt erst in eine Single und diese dann in eine Double wandeln. Ist aber bei deinen max. 1024 Werten vom ADC ziemlich übertrieben.
Mache X zu einer Single und es wird gehen.

Thegon
24.01.2011, 18:36
Also das klingt ja schon mal vielverprechend, danke. Mir ist nur gerade eingfallen dass ich zur Zeit ja gar kein Display habe, aber in ein paar Tagen werde ich wieder eins haben und auch gleich berichten, ob es funktioniert hat.
Grup Thegon

masasibe
24.01.2011, 18:53
Ob das Lcd Gleitkomma darstellen kann, weiß ich nicht so genau, es ist schon ziemlich alt, aber es hat den HD4478 (oder so, auf jeden fall den bekannten Controller)

Es geht nicht darum, ob das Display Gleitkommazahlen anzeigen kann (das Display bekommt sowieso nur den ASCII-Code), sondern ob die Bascom-Funktion LCD dafür geschrieben wurde auch Variablen, die Gleitkommastellen enthalten, an das Display zu senden

Thegon
24.01.2011, 19:14
Tja, ich werde es einfach mal ausprobieren, so genau weiß ich das auch nicht.
Mfg Thegon

masasibe
25.01.2011, 16:36
Ich habe das mit dem Single ausprobiert, aber irgendwie funktioniert es auch nicht richtig. Die Single Variable hat den Wert 5.12 und auf dem Display wird 5.11888999 angezeigt!

for_ro
25.01.2011, 16:50
Mit einigem Abstand betrachtet ist 5.12 gleich 5.11888999 ;-)
Es können nur sehr wenige Brüche exakt in Binärform dargestellt werden, wenn du nur eine kleine Anzahl Stellen zur Verfügung hast.
Entweder du akzeptierst den Unterschied oder du rundest den Wert auf die 2. Stelle oder du nimmst Word weiterhin und formatierst die so, dass es passt.

masasibe
25.01.2011, 19:03
Ja aber ich habe der Single-Variable direkt den Wert 5.12 zugewiesen. Wie kommt er dann auf 5.118...?

for_ro
25.01.2011, 19:28
Dein Single Wert 5.12 muss intern binär abgespeichert werden.
Bei mir kommt da 5.119999883 raus, was ich bei der gegebenen Auflösung von 24 Bit hinter dem Komma für korrekt halte.
Deine Zahl scheint mir etwas stark abzuweichen.

for_ro
25.01.2011, 19:31
Du kannst auch so etwas vorgeben, wenn du immer nur 2 Stellen hinter dem Komma ausgeben willst:
Config Single = Scientific , Digits = 2

Richard
25.01.2011, 20:06
Du kannst auch so etwas vorgeben, wenn du immer nur 2 Stellen hinter dem Komma ausgeben willst:
Config Single = Scientific , Digits = 2

DAS habe ich jetzt auch nicht gewusst, ich hoffe ich kann es mir merken bis ich es einmal brauche. :-)

Guß Richard

masasibe
26.01.2011, 13:49
Hi!


Deine Zahl scheint mir etwas stark abzuweichen.

Ja du hast recht, deine Zahl stimmt. Übrigens auch vielen Dank für den Tipp mit dem Einschränken. Ich werde es bei nächster Gelegenheit ausprobieren!