Hallo Leute ! Hab vorhandene Beiträge zum Thema durchforstet und bin leider nicht ganz auf meine Frage gestoßen, deshalb stell ich sie hier! Also ich möchte ein handelsüblichen Modellbauservo ansteuern. Die PWM-Periode ist sodann 20ms und die Duty-Cycle-Dauer 1-2ms. Ich habe ein PIC 16F627 mit 4Mhz Quarz und möchte den hardwaremäßigen vorhandenen PWM-Erzeuger nutzen. Nach diverser Lektüre von Microchip hab ich eine Formel gefunden um die PWM-Periode auszurechnen. So tat ich dies. PWM-Periode = [(PR2)+1] 4 Tosc * (TMR2 prescale value) 20ms = [(PR2)+1] 4 1/4Mhz * 16 (höchster Teiler) 20ms = [(PR2)+1] * 16µs 20ms/16µs = (PR2)+1 1250 = (PR2)+1 1249 = PR2 also müsste ich die Zahl 1249 ins PR2 Register laden. und nu kommts da dieses Register nur 8 Bit groß ist kann ich die Perioden dauer gar nicht erreichen. die maximalste Periode die ich erreichen kann wäre 4,1ms. dies reicht leider nicht. erkennt ihr ein fehler in meiner rechnung? wie wird das den üblicherweise gemacht? wenn ich den PIC mit 1Mhz Quarz betreibe würd ich zumindest bis 16,4ms kommen.. Würd mich sehr um Kommentare und Anregungen freuen...
Hallo Tobi, deine Rechnung stimmt. Nimm am besten den Timer 1 und lass alle 20 ms einen Interrupt auslösen der dir dann deinen Ausgang setzt. Ist der Ausgang gesetzt, startest du Timer 2, der nach der benötigten Periodendauer (1 - 2ms) den Ausgang wieder löscht. Diese Methode benötigt zwar zwei Timer, aber alles läuft interruptgesteuert ab, und so hast du genügend Zeit für andere Aufgaben.
Habe genau das gleiche Problem! Kann eventuell einer mir zeigen, wie ich dann das interrupt genau dahinter setzte? Danke!
Es gibt da so einen HW-Modus, mit TMR2, daß der PWM für eine gewisse Zeit ausgesetzt wird, un erst danach wieder startet, aber da nur 2 Kanäle, habe ich immer die andere Methode bevorzugt, daß es jedoch in HW-PWM machbar ist, ist mir bekannt.
Kann mir irgendwer helfen? Ich will einen Servo ansteuern aber ich hab keine ahnung wie ich das verhältniss richtig einstelle... es geht um die void main (void) { OpenTimer2( TIMER_INT_OFF & T0_8BIT & T0_SOURCE_INT & T0_PS_1_8 ); OpenPWM2(0xff); SetDCPWM2(31); <---- welche zahl???? (Verhältnis) }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.