nuja ... bei 4 MHz sind 1 ms = 4000 Takte (war nen denk und tipfehler von mir da oben)
Der Ansatz mit der Variable könnte funzen ..
du musst halt alle 20 Durchläufe den Pin auf den Timer schalten ...
Hallo
Also wenn ich das richtig verstanden habe dann ist bei 4Mhz 1ms nach 1000 Takten "vorbei". Diese 1000 Takte kann man ja mit dem Prescaler für den Counter begrenzen also z.B. 1000 / 8 = 125. Dann setzt man alle 19 Timerdurchläufe den PWM-Kanal auf high. Dazu schreibe ich dann z. B. 62 in das Compare Register. Damit wäre rein rechnerisch die Pulslänge bei 0,496ms(+1ms also 1,496ms) und das Servo würde in die Mittelstellung gehen...oder?
Wie mache ich es am besten das der PWM-Kanal nur alle 19 mal aktiviert wird? Mein Ansatz wäre dass ich in einer Variable mitzähle...
Grüße
BlueEagle
nuja ... bei 4 MHz sind 1 ms = 4000 Takte (war nen denk und tipfehler von mir da oben)
Der Ansatz mit der Variable könnte funzen ..
du musst halt alle 20 Durchläufe den Pin auf den Timer schalten ...
ich habe 4 servo(5 euro von conrad) am küchenbot und steuere die frei ,siehe beispiel (180 grad), frage den srf04ultra ab und sende die daten zum pc mit dem easy-radio-funkmodul , ich scanne den raum damit ab,
1 waitus braucht gemäss ausrechnung der asmlaufroutine 10us , darum sind die servowertzahlen um den teiler 10 kleiner :
Code:Sub scan_vorn() For servo_wert = 1 To 180 servo_wert1=servo_wert+50 servo_wert2=2000-servo_wert1 PORTB.0=1 WaitUs (servo_wert1) PORTB.0=0 WaitUs (servo_wert2) srf04_vorn() Print #1,Str(srf04_w_vorn) Next wert For servo_wert = 180 To 1 Step -1 servo_wert1=servo_wert+50 servo_wert2=2000-servo_wert1 PORTB.0=1 WaitUs (servo_wert1) PORTB.0=0 WaitUs (servo_wert2) srf04_vorn() Print #1,Str(srf04_w_vorn) Next wert End Sub
Lesezeichen