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