Forum: Mikrocontroller und Digitale Elektronik Kommazahlen in Bascom?


von Jan Weber (Gast)


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.

von Sebastian H. (basti_h)


Lesenswert?

Für bascom fragen besser roboternetz.de/phpBB2 verwenden...
erfahrungsgemäß sind da mehr bascom benutzer

von Karsten (Gast)


Lesenswert?

kommazahlen kann man mit dim var as single generieren.

Unter BASCOM gibt es schon Routinen für die Servoansteuerung.
such mal unter config servo

von Jan Weber (Gast)


Lesenswert?

Hallo
Danke!
werd ich direckt mal mit single versuchen.
möcht nicht den Servo Befehl benutzen, weil das Servo dann 10Grad
schritte macht!
MfG
Jan

von HansHans (Gast)


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?)

von Rahul D. (rahul)


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]...)

von HansHans (Gast)


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 :-(

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.