hallo, ich habe eine problem mit der PWM meines PIC24F128GA106. der duty cycle und die periodendauer lassen sich irgendwie nicht verändern bzw nicht so wie ich mir das gedacht hätte. ich messe auf dem pin immer nur eine pwm mit 50% duty cycle, egal was ich mache. soweit ich das verstanden habe stellt man mit dem register RPx die periodendauer ein und mit OC1RS den duty cycle. wenn ich aber RPx ändere, passiert nix und beim ändern von OC1RS ändert sich die periodendauer, duty cycle bleibt dabei aber trotzdem auf 50%. wäre nett wenn mir irgendwer dabei helfen könnte. hier noch der code zur pwm initialisierung void Timer3_init(void){ _RP25R = 0; // unmap pin _RP25R = 18; // map pin RP25 (pin 52) auf output compare 1 PR3 = 1000; OC1R = 100; OC1RS = 100; OC1CON2bits.SYNCSEL = 0x1f; OC1CON2bits.OCTRIG = 0; OC1CON1bits.OCTSEL = 1; OC1CON1bits.OCM = 3; T3CONbits.TCKPS = 0; T3CONbits.TON = 1; } vielen dank im vorraus mfg markus
Du weist dem Pin das PWM Modul 1 zu: _RP25R = 18; // map pin RP25 (pin 52) auf output compare 1 setzt aber dann die Periode des PWM-Moduls 3 PR3 = 1000; Und verschrieben hast Du Dich wohl hier: stellt man mit dem Register RPx die periodendauer ein Die einzelnen Einstellungen habe ich mir nicht angesehen. Das kannst Du selbst nochmal nachprüfen. Aber Du musst Dir erst im Klaren darüber sein, welches der PWM-Module Du benutzen willst. Soweit ich weiß gibt es 5 davon!
hallo, danke für den hinweis. bei RP und PR verschreibe ich mich immer. ich hab natürlich gemeint dass man mit dem PRx register die periodendauer einstellt. ich hätt das eigentlich so gesehen, dass ich mit dem PR3 register den wert einstelle bis zu dem der Timer 3 zählt, den dann die output compare unit als referenzwert nimmt. welches pwm modul man verwendet kann sollte man in den OxCON1/2 registern einstellen können. hab ich das alles richtig verstanden? mfg
so ich habs jetzt hinbekommen. falls es jemanden interessiert, hier ist der initialisierungscode: void pwm_init(void){ _RP25R = 18; OC1CON1 = 0; /* It is a good practice to clear off the control bits initially */ OC1CON2 = 0; OC1CON1bits.OCTSEL = 0x07; /* This selects the peripheral clock as the clock input to the OC module */ OC1CON2bits.SYNCSEL = 0x1f; OC1R = 1000; /* This is just a typical number, user must calculate based on the waveform requirements and the system clock */ OC1RS = 10000; /* Determines the Period */ OC1CON1bits.OCM = 6; /* This selects and starts the Edge Aligned PWM mode*/ }
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.