
el Atmega168 tiene 6 PWM y muy baratos.
si busca en el foro nuestros de Atmel alli vera como lo hago

Aqui te pongo 4pwm del Atmega168
$regfile = "m168def.dat" ' aqui usamos el Atmega168 que posee 6 PWM Hw
$crystal = 8000000 'Interne Fuses Clock Division by 8
$hwstack = 40
$swstack = 16
$framesize = 32
$lib "mcsbyte.lbx " 'usaremos la libreria byte para optimatizar el codigo
'Configuration de los puertos
Config Portb.1 = Output ' LED1 Rojo
Config Portb.2 = Output 'LED2 Verde
Config Portb.3 = Output 'LED3 Azul
Config Portd.3 = Output 'LED4 Amarillo
Config Portd.2 = Input ' irR TSOP1738
Config Rc5 = Pind.2 'aqui activamos la resistencia interna del puerto D2
'Config Timer1 y Timer2 para PWM . atencion Timer0 trabaja interno con el protocologo GetRC5 de Bascom
'Timer0 trabaja con el protocologo RC5
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
Config Timer2 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
'Declaration Variable
Dim Pwmval1 As Byte ' Variable para Pwm1( PortB.1=OC1A )
Dim Pwmval2 As Byte ' Variable para Pwm2( PortB.2-=OC1B)
Dim Pwmval3 As Byte 'Variable para Pwm(PortB.3=OC2A)
Dim Pwmval4 As Byte 'Variable para Pwm(Port.D=OC2B
cada pwm puede poner el Dusty como quiera.
Saludo