Forum: Mikrocontroller und Digitale Elektronik PIC24F PWM problem


von Markus R. (Firma: tu wien) (specht)


Lesenswert?

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

von Blaukraut (Gast)


Lesenswert?

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!

von Markus R. (Firma: tu wien) (specht)


Lesenswert?

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

von Markus R. (Firma: tu wien) (specht)


Lesenswert?

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
Noch kein Account? Hier anmelden.