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.
Für bascom fragen besser roboternetz.de/phpBB2 verwenden... erfahrungsgemäß sind da mehr bascom benutzer
kommazahlen kann man mit dim var as single generieren. Unter BASCOM gibt es schon Routinen für die Servoansteuerung. such mal unter config servo
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
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?)
@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]...)
-- >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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.