Hola compañeros:
Estoy intentando obtener 8 PWM independientes con dicho PIC y Power PWM pero por más que lo intento no sé como se hace, alguno sabría como realizarlo.
Ha modo introductorio os dejo una aplicación que genera 10 PWM pero 4 de ello son dependientes. Ya que los PWM0/1, PWM2/3, PWM4/5, PWM6/7 son complementarios dos a dos por tanto 4 de ellos son independientes.
#include <18F4431.h>
#fuses NOWDT, NOPROTECT, NOBROWNOUT, PUT, NOLVP
#use delay(clock=12000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#define POWER_PWM_PERIOD 1999 // 1 KHz pwm freq with 8 MHz osc.
void main()
{
setup_ccp1(CCP_PWM); // Configure CCP1 as a PWM
setup_ccp2(CCP_PWM); // Configure CCP2 as a PWM
setup_timer_2(T2_DIV_BY_16, 255, 1);//Temporizador del PWM
set_pwm1_duty(63);
set_pwm2_duty(125);
//PWM_BOTH_ON -> La misma señal para los dos
//PWM_ODD_ON -> ¿No sé?
//PWM_COMPLEMENTARY -> Señales complementarias
//PWM_OFF -> "Apaga" una de las señales
//setup_power_pwm_pins(PWM_COMPLEMENTARY,PWM_COMPLEMENTARY,PWM_COMPLEMENTARY,PWM_COMPLEMENTARY);
setup_power_pwm(PWM_FREE_RUN, 1, 0, POWER_PWM_PERIOD, 0, 1,0);
set_power_pwm0_duty((int16)((POWER_PWM_PERIOD *4) * .1));
set_power_pwm2_duty((int16)((POWER_PWM_PERIOD *4) * .4));
set_power_pwm4_duty((int16)((POWER_PWM_PERIOD *4) * .6));
set_power_pwm6_duty((int16)((POWER_PWM_PERIOD *4) * .75));
while (TRUE)//Bucle infinit
{}
}
Podeis ver como queda en Proteus en el adjunto.
Muchas gracias compañeros foreros.