Kommazahlen in Bascom?

Gast #267424
Lesenswert?
• ▲
▼
Hallo,
ich habe folgendes Problem:
Um ein Servoansteuerung zu programmieren muss ichvon 1ms bis 2ms
warten.
Diese Zeitspanne definiert die Stellung des Servos.
Wie kann ich Kommazahlen in eine Variabele Formen bringen?
Hier mein prog das nicht funzt:

$regfile = "m8def.dat"
$crystal = 1000000
Config Portd = Output
declare sub serv(a as integer)
dim a as integer
dim b as integer
dim i as integer
dim y as integer

do
for y = 0 to 100
call serv(y)
wait 2
next
for y = 100 to 0 step -1
call serv(y)
wait 2
loop


sub serv(a as integer)                   "a = zahl 0-100
a = a / 100                              "a = zahl 0 - 1
a = a + 1                                "a = zahl 1 - 2
b = a / 2
b = 20 - b                               "b = zahl 19,5 - 20

for I = 1 to 100
portd.0 = 0
waitms B
portd.0 = 1
waitms A
next
end sub

Leider kann man nicht waitus benutzen weil hier die wartezeit nicht
variabel sein darf. Hat jemand eine Idee was ich machen kann?
Mit freundlichen Grüßen
Jan Weber

PS: Der Befehl "Servo" von Bascom ist für mich nichst ausreichend,
weil das Servo da ca. 10grad große schritte macht.
Gast #267428
Lesenswert?
• ▲
▼
Warten ist immer schlecht ....der
AVR kann dann nichts anderes machen .
Besser einen Interrupt alle (100ms ?)
diese zählen und je nach Servostellung Portpin
setzen oder rücksetzen


außerdem mußt du das Servosignal immer „halten“ und
kannst das nicht nur mal kurz aufrufen ,
wenn die Impulse ausfallen verändert auch das Servo seine
Stellung wieder (oder ist das heute anders als früher?)
#267429
Lesenswert?
• ▲
▼
@HansHans: Was soll der Interrupt alle 100ms machen, wenn das Signal nur
1-2ms lang ist? ;)
Da Servos auf einen Impuls warten, verharren sie auch in ihrer letzten
Position, sofern von Aussen keine Kraft einwirkt.

@Jan: (Hast du was mit Football zutun?) Kannst du nicht einen der Timer
benutzen und dann per Compare-Register /-Interrupt die Signale
erzeugen?
Bei jedem Timer-Überlauf werden die Pins gesetzt, bei Erreichen des
Compare-Wertes (nicht CTC), wird der jeweilige Pin gelöscht.
Der Mega8 sollte das können (ob Bascom sowas unterstützt, weiß ich
nicht. In C geht es [problemlos]...)
Gast #267430
Lesenswert?
• ▲
▼
-- >Was soll der Interrupt alle 100ms machen, wenn das Signal nur 1-2ms
lang ist?
OK, ist logisch war halt nicht genau bedacht, dann halt schneller ....
-- >Da Servos auf einen Impuls warten, verharren sie auch in ihrer
letzten Position.
Das macht die sache einfacher ,
dann nehme ich meine Aussage zurück ....
Das Servo welches ich hier habe läuft in die Endlage :-(

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren