Hallo Sand64,
der "Servo"-Befehl läuft erst ab Taktfrequenzen von mindestens (!) 8 MHz korrekt. Warum weiss ich auch nicht, hab´s aber mal bei 1 MHz probiert, und grotesk falsche Pulsweiten mit dem Oszi gemessen (die jedes Servo sofort an den Anschlag zwingen).
Wie Besserwessi ja schon vorgeschlagen hat, solltest Du als erstes checken, mit welchem Takt Dein µC läuft. Das stellt man nicht mit $Crystal ein, sondern mit den Fusebits. Die $Crystal-Angabe ist "nur" wichtig, damit der Compiler programmierte Zeiten (wie z.B. bei waitms XX) richtig berechnen kann. Läuft der Controller mit einer anderen Frequenz als bei $Crystal geschrieben, kommen falsche Zeiten raus - Und so kannst Du es auch checken:
Wenn Deine LED an PortX.Y mit 1 Hz blinkt, stimmen Taktfrequenz und $Crystal-Angabe überein.Code:$Crystal = 80000000 DDRX.Y = 1 'Port X.Y als Ausgang konfigurieren Do Toggle PortX.Y 'logischen Zustand von PortX.Y wechseln waitms 500 '0,5 Sekunden Pause Loop
Nicht ganz - der Befehl Servo generiert Rechteckimpulse und schickt sie automatisch alle 20ms raus. Die Länge der Impulse ist Servo(x) * Reload (in µS). Bei Reload = 10 und Servo(1) = 90 dauert der Impuls also 900µS, wobei Servos i.d.R Impulsbreiten zwischen 800 und 2200µS verarbeiten.Servo(1) ist eine Variable die die mit Reload 10 alle 10 ms an den Servo geschickt wird ?
Wenn Du schon ein Oszi hast, schau Dir die Impulse doch mal an!
Lesezeichen