PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bascom Config-Servo -Reload verändert Timer?



m_priester
22.03.2007, 21:07
Hallo zusammen,

ich bin neu in der Welt der Mikroprozessoren und versuche mich an der Programmierung mit Hilfe von Bascom. Hat soweit auch alles wunderbar funktioniert, jedoch fällt mir eine Sache negativ auf und würde gerne einmal wissen ob dies ein "Problem" oder normal ist:

Ich habe ein kleines Programm geschrieben, dass jede Sekunde einen Pin von high auf low und umgekehrt schaltet. Durch Mitzählen würde ich sagen dass es auch wirklich eine Sekunde ist.

Wenn ich jetzt jedoch durch den "Config Servos" Befehl ein Servo konfiguriere ändert sich diese "Sekunde" je nach reload-Wert.

Da ich recht neu auf dem Gebiet bin kann ich mir das nicht wirklich erklären.
Bascom wird ja einen Timer benutzen, um das PWM Signal zu erzeugen, aber kann/darf sich das auf den waitms befehl auswirken?

Falls es wichtig ist: ich benutze einen 16MHZ Quarz als Taktgeber.

besten Dank schonmal,
Stephan

linux_80
22.03.2007, 21:42
Hallo,

es kann sich schon auf den Wait-Befehl auswirken, denn der Wait-Befehl ergibt in Bascom nix anderes als eine Schleife, die bis zu einem bestimmten Wert zählt.
Wenn jetzt ein Servo angesteuert wird, wird dieses Steuern in einer ISR (Timer-Interrupt) erledigt, und in dieser Zeit kann der Wait-Befehl nicht zählen. Das dürfte zwar nicht viel ausmachen, aber man merkt es.
Wie schon erkannt wird ein Timer für das Timing des Servos benutzt.
Je mehr Servos man hat umso langsamer wird der Rest.

plusminus
22.03.2007, 23:51
wie lang ist denn die sekunde danach :?:

m_priester
23.03.2007, 01:38
1,4 Sekunden, also schon merklich.

Auch wenn ich das Servo garnicht per Befehl bewege, alleine durch

Config Servos = 1 , Servo1 = Portc.1 , Reload = 10


Kann nicht normal sein, oder?

plusminus
23.03.2007, 17:02
zeig mal deine schleife, bzw wie oft updatest du denn die Servo-Position im Code ?

linux_80
23.03.2007, 18:57
Wenn ein Servo Configuriert ist, ist es egal an welcher Position der ist oder gestellt wird, das dauert immer gleich lang. Denn die Routine läuft immer gleich im Hintergrund. Es ändert sich nur die Zeit, wenn es mehr Servos werden.

m_priester
25.03.2007, 17:29
hallo zusammen, hier mal der Code:

hier ist eine Sekunde ach eine Sekunde:

$regfile = "m32def.dat"

$crystal = 16000000


'Servo Config
'Config Servos = 1 , Servo1 = Portc.1 , Reload = 15
Config Portc = Output
'Servo Config

Enable Interrupts

Portc.2 = 0

Do
Toggle Portc.2
Waitms 1000
Loop


End

und hier der Code wo in 60 Sekunden die LED nur 42 mal blinkt --> eine Sekunde sind 1,4 Sekunden:

$regfile = "m32def.dat"

$crystal = 16000000


'Servo Config
Config Servos = 1 , Servo1 = Portc.1 , Reload = 15
Config Portc = Output
'Servo Config

Enable Interrupts

Portc.2 = 0

Do
Toggle Portc.2
Waitms 1000
Loop


End

linux_80
25.03.2007, 21:30
Du solltest bei der Servoconfig keinen so grossen Reload-Wert angeben, sonst kann es sein das der Servo stottert und ruckelt, der Wert sollte max. 10 sein, und wenns mehr Servos werden noch kleiner !

Wenn Du genaue Blink- oder Wartezeiten brauchst, musst Du das auch mit einem Timer machen, und nicht mit Wait. Denn Wait zählt nur vor sich hin, und, wie oben schon gesagt, lässt sich gern unterbrechen dabei, und deshalb wirds ungenau !