fraser9999
27.09.2016, 19:26
Hallo,
Habe 2 Servos vom Typ Modelcraft MC-410 die ich nach diversen
Anleitungen aus dem Netz auf endlos Rotation umgebaut haben.
Potentiometer entfernt , 2 Stk. 2.2K Ohm Wiederstände als Spannungsteiler
eingelötet und den Zahnrad Endanschlag entfernt , sowie
im großen Zahnrad die fehlenden Zähne mit einer Feile nachgefeilt.
(Zahnrad ist nur bis zum Anschlagspunkt mit Zähnen versehen!)
alles soweit so gut, Servos an PIC16F Microcontroller angeschlossen
und Software aufgespielt.
Servos drehen sich vor,zurück und bleiben auch stehen
wenn ich 1-2ms Impulse sende.
Sample Source der bei mir funktioniert:
__________________________________
#chip 16F628A, 4
#config OSC = INT
#config MCLR = OFF
DIR PORTB.5 OUT
main:
pulseout PORTB.5,100 10us
wait 20 ms
goto main
__________________________________
Jetzt zum Problem:
Wenn das Computer Programm komplexer wird, z.B
durch Unterprogramme mit Call Subroutine oder Gosub
Anweisungen , dann bleibt das Servo
nach ein paar Sekunden stehen und rührt sich
nicht mehr.
Sample Source der bei mir nicht funktioniert:
_______________________________________
'Chip und Takt
#chip 16F628A, 4
' Interner Takt
#config OSC = INT
' MCLR Pin as Digital Input Port nutzbar
#config MCLR = OFF
' Watchdog aus
#config WDT = OFF
'LED PIN
DIR PORTB.6 OUT
#define SoundOut PORTB.7
'Servo 1
DIR PORTB.4 OUT
'Sevo 2
DIR PORTB.5 OUT
dim za1 as integer
SET PORTB.6 ON
main:
call vor()
' wait 3000 ms
call re()
' wait 3000 ms
call re()
' wait 3000 ms
call vor()
' wait 3000 ms
call li()
' wait 3000 ms
call li()
' wait 3000 ms
goto main
sub vor
for za1 = 1 to 50
'Li vor
pulseout PORTB.5,200 10us
'Re vor
pulseout PORTB.4,100 10us
wait 20 ms
next
end sub
sub rue
for za1 = 1 to 50
'Li zurück
pulseout PORTB.5,100 10us
'Re zürück
pulseout PORTB.4,200 10us
wait 20 ms
next
end sub
sub re
for za1 = 1 to 50
'Li vor
pulseout PORTB.5,200 10us
'Re vor
'pulseout PORTB.4,100 10us
wait 20 ms
next
end sub
sub li
for za1 = 1 to 50
'Li vor
'pulseout PORTB.5,200 10us
'Re vor
pulseout PORTB.4,100 10us
wait 20 ms
next
end sub
__________________________________________________ __
Auch das ändern in gosub-return Anweisungen bringt leider nichts.
Ich benutze zur Programmierung
die Sprache Great Cow Basic (aktuelle Version)
Geprüft habe ich die Hard und Software mit einem
Oszilloskop das ein PWM Signal von ca. 20ms LOW
und 1-2ms High anzeigt.
Die Software wurde mit Oshonsoft Simulator IDE geprüft
und zeigt auch nornmales Verhalten.
Also: Servohardware funktioniert , Software funktioniert
wenn ein ganz simpler Sourcecode nur
die Motore ein und aus schaltet.
Was kann das Problem verursachen?
Hatte jemand schon mal den gleichen Fehler?
Bitte um Anregungen!
Vielen Dank!
Grüße Hermann
Habe 2 Servos vom Typ Modelcraft MC-410 die ich nach diversen
Anleitungen aus dem Netz auf endlos Rotation umgebaut haben.
Potentiometer entfernt , 2 Stk. 2.2K Ohm Wiederstände als Spannungsteiler
eingelötet und den Zahnrad Endanschlag entfernt , sowie
im großen Zahnrad die fehlenden Zähne mit einer Feile nachgefeilt.
(Zahnrad ist nur bis zum Anschlagspunkt mit Zähnen versehen!)
alles soweit so gut, Servos an PIC16F Microcontroller angeschlossen
und Software aufgespielt.
Servos drehen sich vor,zurück und bleiben auch stehen
wenn ich 1-2ms Impulse sende.
Sample Source der bei mir funktioniert:
__________________________________
#chip 16F628A, 4
#config OSC = INT
#config MCLR = OFF
DIR PORTB.5 OUT
main:
pulseout PORTB.5,100 10us
wait 20 ms
goto main
__________________________________
Jetzt zum Problem:
Wenn das Computer Programm komplexer wird, z.B
durch Unterprogramme mit Call Subroutine oder Gosub
Anweisungen , dann bleibt das Servo
nach ein paar Sekunden stehen und rührt sich
nicht mehr.
Sample Source der bei mir nicht funktioniert:
_______________________________________
'Chip und Takt
#chip 16F628A, 4
' Interner Takt
#config OSC = INT
' MCLR Pin as Digital Input Port nutzbar
#config MCLR = OFF
' Watchdog aus
#config WDT = OFF
'LED PIN
DIR PORTB.6 OUT
#define SoundOut PORTB.7
'Servo 1
DIR PORTB.4 OUT
'Sevo 2
DIR PORTB.5 OUT
dim za1 as integer
SET PORTB.6 ON
main:
call vor()
' wait 3000 ms
call re()
' wait 3000 ms
call re()
' wait 3000 ms
call vor()
' wait 3000 ms
call li()
' wait 3000 ms
call li()
' wait 3000 ms
goto main
sub vor
for za1 = 1 to 50
'Li vor
pulseout PORTB.5,200 10us
'Re vor
pulseout PORTB.4,100 10us
wait 20 ms
next
end sub
sub rue
for za1 = 1 to 50
'Li zurück
pulseout PORTB.5,100 10us
'Re zürück
pulseout PORTB.4,200 10us
wait 20 ms
next
end sub
sub re
for za1 = 1 to 50
'Li vor
pulseout PORTB.5,200 10us
'Re vor
'pulseout PORTB.4,100 10us
wait 20 ms
next
end sub
sub li
for za1 = 1 to 50
'Li vor
'pulseout PORTB.5,200 10us
'Re vor
pulseout PORTB.4,100 10us
wait 20 ms
next
end sub
__________________________________________________ __
Auch das ändern in gosub-return Anweisungen bringt leider nichts.
Ich benutze zur Programmierung
die Sprache Great Cow Basic (aktuelle Version)
Geprüft habe ich die Hard und Software mit einem
Oszilloskop das ein PWM Signal von ca. 20ms LOW
und 1-2ms High anzeigt.
Die Software wurde mit Oshonsoft Simulator IDE geprüft
und zeigt auch nornmales Verhalten.
Also: Servohardware funktioniert , Software funktioniert
wenn ein ganz simpler Sourcecode nur
die Motore ein und aus schaltet.
Was kann das Problem verursachen?
Hatte jemand schon mal den gleichen Fehler?
Bitte um Anregungen!
Vielen Dank!
Grüße Hermann