PWM VELOCE

?R:
ok ma a me servirebbe avere almeno 3 livelli di duty cycle tra cui scegliere e che i 4 canali possano essere controllati individualmente :~

Non è impossibile ma si complica un po' il codice da scrivere. Ammettendo 3 livelli di duty cicle al 25/50/75% (poi c'è lo 0% che possiamo far corrispondere ad un segnale LOW fisso, ed il 100%, che possiamo far corrispondere ad un segnale HIGH fisso), si hanno un po' di switch..case o di if..else.
Tutto fattibile, ma con un po' di codice in più.

però se mettiamo il duty cycle sempre al 50%, a frequenza di circa 200Hz, si risce ad avere un controllo di quei 4 pin in modo indipendente tra loro?

Beh, cerchiamo di accendere/spengere il PWM sui pin indicati in modo indipendente.
Si può creare una funzione activatePwm(pin, dutyCicle) che attivi il PWM software sul pin indicato col duty cicle indicato.
Tutto si può fare, va vista la complessità del resto del codice per capire le risorse a disposizione e se c'è qualcosa che va in conflitto con qualcos'altro.
Allo stato attuale, per far ciò che ti ho detto, serve avere libero accesso ad almeno 3 timer: t2, T3 e t4.

cioè se c'è il pwm al 50% poi anche se faccio digitalWrite il pin non resta sempre a livello alto o basso, no? è un casino... :stuck_out_tongue_closed_eyes:

Il finto PWM surclasserebbe il digitalWrite. Cioè se attivi un PWM al 25% su un pin, e poi su quello stesso pin ci fai un digitalWrite, il segnale imposto col digitalWrite dura fino al successivo richiamo dell'interrupt del timer che controlla quel pin. Poi il codice nella ISR reimposterebbe il pin secondo le sue impostazioni, quindi il digitalWrite se ne va. Va prima disattivato il segnale PWM software e poi si può riutilizzare il pin col digitalWrite.