Hallo,

ich habe schon einige Threads gelesen und bin mir unschlüssig, ob die SERVO Funktion in Bascom die beste Möglichkeit zur Ansteuerung eines Servos darstellt.

Grundsätzlich sollte die Steuerung der Servos auch über PWM funktionieren, jedoch habe ich noch eine Unwissenheitslücke:
Wie kann ich in PWM Mode den Zähler einschränken, damit ich genau auf meine gewünschte Trägerfrequenz komme.
Quarz 3686400 Hz, Prescale 64, 10bit, Zielfrequenz=50Hz bekomme ich nach 575 Zähler (Formel: fziel=fclk/(2*prescaler*(1+Zähler))

Den Timer allein kann ich zb.: mit einem Interrupt vorstellen, damit ich die Frequenz erhalte.
Wie macht man das jedoch bei PWM? Kann ich hier auch einen Interrupt festlegen und den Timer vorstellen?
Beiliegend findet ihr meinen unvollständigen Code, bitte gebt mir eine Empfehlung, was besser ist und ob man es eventuell so programmieren könnte.
Lg
Code:
' 0 sind Eingänge; 1 sind Ausgänge
' digitaler EIngang Pullup Widerstand ergibt 0 wenn Spannung anliegt
' PortB3 Endschalter Schloss-Servo nicht verriegelt
' PortB4 Endschalter Sperrelemt offen
' PortB5 Endschalter Sperrelemt geschlossen
' PortC0 Antriebsmotor ein/aus Relais
' PortC1 Ansteuerung Relais Umschalter für Antriebsmotor
'        (dreht sich links..schließen bei 0 und rechts..öffnen bei 1)
' PortC2 Relais Schalten für Servo Antrieb 0..aus/ 1..ein
' PortC3 Analoger Eingang Messung Spannungsabfall, ob Servo dreht oder nicht
' PortB1 PWM Signal für Servowinkelsollsignal

$regfile = "m8def.dat"
$crystal = 3686400                                          'externer Quarz

Config Adc = Single , Prescaler = Auto                      'Analoger Eingang eingeschalten
Start Adc

Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Prescale = 1
On Timer1 Timerroutine:
Enable Timer1
Start Timer1
Enable Interrupts
Pwm1a = 741                                                 '7 Zähler entspricht ca. 40° Servobewegung



Dim X As Bit

Ddrb = &B00000111                                           'Alle unbenützten Eingänge auf Pullup Widerstand gesetzt
Portb = &B11111000

Ddrc = &B00000111
Portc = &B11111000



Do

'HAuptprogramm

Loop


Timerroutine:
Timer1 = 735                                                '50HZ entspricht 575 Schritte, Start TIMER1 bei 1023-(575+1)/2=735

Return



End