"0 to 90" klingt irgendwie nach "Grad"
die SIN() braucht aber Bogenmass, das ist am PC genauso
Hallo Leute,
habe mir jetzt einen 8-Bit DAC aus 10k bzw. 20k R, einem TLC272 und einem BC337-16 gebaut. Das ganze funktioniert ganz gut, bis auf dass ich max. 3.6V ca. Ausgangsspannung habe. Das liegt aber glaube ich daran, dass der TLC272 und der BC337-16 die restliche Spannung "verbrauchen".
Das ist jetzt auch garnicht mein Problem!
Ich möchte mir damit einen Sinus ausgeben lassen, was ich auch mit folgendem Code schön hinbekommen habe:
Jedoch möchte ich mir die Werte durch den µC selbst ausrechnen lassen, mit der Sinus funktion! Hier mal mein Programm dazu:Code:$regfile = "m32def.dat" $crystal = 16000000 $framesize = 80 $hwstack = 80 $swstack = 80 Config Portc = Output Portc = 0 Dim X As Byte X = 0 Dim Y As Byte Do Incr X If X = 120 Then X = 0 Y = Lookup(x , Dta) Y = Y / 2 Portc = Y Waitus 1 Loop End Dta: Data 128 , 134 , 141 , 147 , 154 , 160 , 167 , 173 , 179 , 185 , 191 , 197 , 202 , 208 , 213 , 218 , 222 , 227 , 231 , 234 , 238 , 241 , 244 , 247 , 249 , 251 , 252 , 253 , 254 , 255 , 255 , 255 , 254 , 253 , 252 , 251 , 249 , 247 , 244 , 241 , 238 , 234 , 231 , 227 , 222 , 218 , 213 , 208 , 202 , 197 , 191 , 185 , 179 , 173 , 167 , 160 , 154 , 147 , 141 , 134 , 128 , 121 , 114 , 108 , 101 , 95 , 88 , 82 , 76 , 70 , 64 , 58 , 53 , 47 , 42 , 37 , 33 , 28 , 24 , 21 , 17 , 14 , 11 , 8 , 6 , 4 , 3 , 2 , 1 , 0 , 0 , 0 , 1 , 2 , 3 , 4 , 6 , 8 , 11 , 14 , 17 , 21 , 24 , 28 , 33 , 37 , 42 , 47 , 53 , 58 , 64 , 70 , 76 , 82 , 88 , 95 , 101 , 108 , 114 , 121 , 128
Die ZeileCode:$regfile = "m32def.dat" $crystal = 16000000 $framesize = 80 $hwstack = 80 $swstack = 80 $baud = 19200 Dim X As Single Dim Y As Single Do For X = 0 To 90 Step 5 Y = Sin(x) Y = Y * 250 Print "Ausgabewert: " ; Y Print "" Wait 1 Next X Loop End
y = y * 250
ist nur dazu da, damit ich Werte zwischen ca. 0 und 250 bekomme, welche ich dann direkt auf den Portc geben möchte, da dort mein DAC angeschlossen ist!
Allerdings kommen dabei bei der
y = sin(x)
funktion ganz andere Werte als beim Taschenrechner raus, teilweise sind diese auch negativ!
Ist das ein Bug meiner Version (1.11.9.1) oder mache ich etwas falsch??
Danke schon mal für eure Antworten!
Gruß
Chris
"0 to 90" klingt irgendwie nach "Grad"
die SIN() braucht aber Bogenmass, das ist am PC genauso
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
hallo Robert,
wie muss ich es dann machen?
Mit Sinus, Cosinus und Tangens kenn ich mich noch nicht so aus!
Welche Werte brauche ich für X??
0<X<1 oder wie?
Oder sollte ich eine andere Funktion benutzen, z.B. Rad2Deg oder so?
Gruß
Chris
Hi!
Winkel[rad] = Winkel[°] / 180 * PI
Für einen Winkel zwischen 0° und 360° bekommst du daher einen Winkel in rad zwischen 0 und 6,28 heraus (6,28 entspricht 2 * PI).
Ob Bascom eine eigene Funktion für die Winkelumrechnung hat weiss ich nicht...
Viele Grüße, William
-> http://william.thielicke.org/
Hallo William,
danke für deine Antwort!
Jedoch habe ich es entweder falsch verstanden oder falsch umgesetzt...
Hier mal mein Code:
Vielleicht kannst du dir den Code ja mal ansehen, oder hast du vielleicht ein konkretes Beispiel??Code:$regfile = "m32def.dat" $crystal = 16000000 Config Portc = Output Portc = 0 'Winkel[rad] = Winkel[°] / 180 * PI Dim X As Single Dim Y As Single Dim Z As Single Const Div_1 = 180 * 3.14159265 Do For X = 0 To 90 Y = X / Div_1 Z = Rad2deg(y) Z = Z * 20 Portc = Z Waitus 10 Next X Loop End
Gruß
Chris
Hallo Chris,
du dividierst ja durch pi, anstatt mit pi zu multiplizieren, wie William vorgeschlagen hat.
/ 180 * pi
heisst nicht
/ (180 * pi)
sondern
pi / 180
multipliziere deine Gradwerte einfach mit der Konstanten 3.14 / 180.0 .
grüsse,
Hannes
Zusätzlich zu vohopris Korrektur:
Ersetze Z = Rad2deg(y) durch Z= sin(y) und schon nimmt z einen Wert zwischen 0 und 1 an (den du dann mit 255 multiplizieren kannst und an deinen DAC schickst)
Viele Grüße, William
-> http://william.thielicke.org/
Lesezeichen