PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Berechnung in Bascom - kann man etwas verbessern



Andree-HB
28.01.2005, 21:09
ich möchte den Drehwinkel eines Potis (etwa 300°) durch einen analogen Eingang berechnen lassen.

Klappt auch soweit mit meinem erdachtenCode, nur ist mir die Berechnung zu lang - kann man da etwas verbessern/verkürzen ?



Do
Cls
Dim W As Word
Dim I As Byte
Dim G As Word
Dim E As Word

Dim Channel As Byte
Config Adc = Single , Prescaler = 16 , Reference = Off
Start Adc
Channel = 0
W = Getadc(channel)
I = 3.41 'Faktor -> 1023 max. Analog entspricht max. Drehwinkel von 300 Grad'
G = W * I 'Ergebnis Analogwert * Faktor'
E = G / 10 'geteilt durch 10'
Lcd "Drehwinkel = " ; E ;
Cursor Off
Waitms 100
Loop
End


...wünschenswert wäre so ungefähr
Winkel = (gelesener Analogwert * Faktor) : 10

JanB
28.01.2005, 21:13
Hallo,
das gleiche Ergebnis müsstest du mit

W = Getadc(channel)
W=W * 0.341

bekommen.

G, I und E brauchst du nicht.

Hilft dir das ?

Gruß Jan

Andree-HB
28.01.2005, 21:29
...nee, macht es nicht - kommt "0" raus, dennoch danke !

Felix G
28.01.2005, 21:39
...wünschenswert wäre so ungefähr
Winkel = (gelesener Analogwert * Faktor) : 10
Geht das bei Basic etwa nicht!? :-s

PicNick
29.01.2005, 10:10
Wenn du "i" als Byte definierst, kannst du nicht 3.41 reinschreiben
Das Produkt Faktor / 10 kannst du vorher vom Kompiler ausrechnen lassen.
Für dezimalzahlen wirst du singles brauchen
und das "DO" is ein bißchen weit vorn

mfg robert

RCO
29.01.2005, 14:19
Genau!

Dim W As Single
W = Getadc(channel)
W=W * 0.341

Sollte reichen, habs grad im simulator getestet.

MFG Moritz

Andree-HB
31.01.2005, 09:02
So, geht nun auch soweit, nur möchte ich gerne die Variable "Winkel" auf dem LCD gerne auf nur eine Kommastelle anzeigen lassen....





Cls
Do
Dim W As Word
Dim Winkel As Single
Start Adc
W = Getadc(7)
Winkel = W * 0.341
Upperline
Lcd "Analogwert = " ; W
Lowerline
Lcd "Drehwinkel = " ; Winkel ; " Grad"
Cursor = Off
Loop
End


Wo mache ich denn hier wieder einen Denkfehler ?


Winkel = Format(Winkel , " +000.00")
Lowerline
Lcd "Drehwinkel = " ; Winkel ; " Grad"

....klappt so nämlich leider nicht

31.01.2005, 11:26
Hallo,

das erste mal, dass ich auch jemandem helfen kann!
Der Befehl heisst FUSING (ist auch in der Hilfe beschrieben).

Definiere eine neue Variable als String * 10, nutze den Befehl FUSING,
und lass deine neue Variable auf dem LCD ausgeben.

Die Anzahl der # nach dem #. bestimmt, auf wieviele Stellen nach dem Komma Du runden willst.


Gruss Thomas


'Rundet auf eine Stelle nach dem Komma


Dim Gerundet As String * 10

Gerundet = Fusing(winkel , "#.#")

Andree-HB
31.01.2005, 15:02
....und wie bekomme ich den Inhalt der als Single definierten Variable "Wert" in eine String-Variable ?

- sorry, bin programmtechnisch echt `ne Nullpe -

supairheld
31.01.2005, 19:44
Hallo,

hier nochmal ein Code, den du so direkt im Simulator ausprobieren kannst. Statt deinen ADC-Wert hab ich für W einfach mal den Wert 10 definiert.

Gruss, Thomas


Dim W As Word
Dim Winkel As Single
Dim Winkelgerundet As String * 10

Cls
Cursor Off

Do

W = 10
Winkel = W * 0.341
Winkelgerundet = Fusing(winkel , "#.#")


Locate 1 , 1
Lcd "Original: " ; Winkel

Locate 2 , 1
Lcd "Gerundet: " ; Winkelgerundet

Loop

End