Hallo, Hat jemand ein Beispiel zur nutzung der Match Outputs als PWM Ausgang. Ich nutze die LPCOpen bibliothek und würde wie folgt vorgehen. 1. Pin Multiplexing vornehmen und die Ausgänge als Match Output konfigurieren. 2. Timer konfigurieren 3. Match value setzen 4. Timer starten würde das genügen oder muss ich um die Match outputs zu nutzen noch mehr konfigurieren? Am besten wäre natürlich wenn mir jemand ein kurzes Beispiel zeigen könnte. Gruß Tobias
Hier mal ein Timer für 2 verschiedene PWMs (3 wären pro Timer möglich): void PWM_init(unsigned int pwm0, unsigned int pwm1) { SYSAHBCLKCTRL_bit.IOCON = 1; // pins clock // P0_8/CT16B0_MAT0 IOCON_PIO0_8_bit.FUNC = 0x2; // CT16B0_MAT0 IOCON_PIO0_8_bit.MODE = 0x0; // no pull // P0_9/CT16B0_MAT1 IOCON_PIO0_9_bit.FUNC = 0x2; // CT16B0_MAT1 IOCON_PIO0_9_bit.MODE = 0x0; // no pull // tick/sec->1sec, pwm0%, pwm1% CT16B0_init(1, pwm0, pwm1); } void CT16B0_init(unsigned int ticks, unsigned int pwm0, unsigned int pwm1) { SYSAHBCLKCTRL_bit.CT16B0 = 1; // CT16B0 clock TMR16B0TCR_bit.CE = 0; // counting disable TMR16B0TCR_bit.CR = 1; // timer: reset TMR16B0TCR_bit.CR = 0; // timer: reset release TMR16B0CTCR_bit.CTM = 0; // timer mode: rising PCLK edge // prescale counter is used to scale match registers to 1 sec TMR16B0PC = 0; // prescale counter: reset TMR16B0PR = (CLK/(SYSAHBCLKDIV))/(0xFFFF); // prescale value (timer is 16-bit) // timer period using MR3 (since there is no MAT3 pin) TMR16B0MR3 = (0xFFFF)/(ticks); // MR3 (scaled to 16-bit) TMR16B0MCR_bit.MR3R = 1; // MR3 reset enable TMR16B0PWMC_bit.PWM3ENA = 1; // MR3 used for PWM period // MAT0 pin duty cycle using MR0 TMR16B0MR0 = (0xFFFF)/(ticks)/(100/pwm0); // MR0 (scaled to 16-bit) TMR16B0EMR_bit.EMC0 = 0x3; // MAT0 toggle TMR16B0EMR_bit.EM0 = 1; // MAT0 start high TMR16B0PWMC_bit.PWM0ENA = 1; // MR0 used for PWM duty cycle // MAT1 pin duty cycle using MR1 TMR16B0MR1 = (0xFFFF)/(ticks)/(100/pwm1); // MR1 (scaled to 16-bit) TMR16B0EMR_bit.EMC1 = 0x3; // MAT1 toggle TMR16B0EMR_bit.EM1 = 1; // MAT1 start high TMR16B0PWMC_bit.PWM1ENA = 1; // MR1 used for PWM duty cycle TMR16B0TCR_bit.CE = 1; // timer start }
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.