Vamos, que tú lo que quieres es controlar un servo, no? Me equivoco?
Lo que pasa es que la PWM tiene unos máximos y unos mínimos de frecuencia. Dependen eso del timer.
Te comento, que con 4MHz no puedes llegar a esa frecuencia... Deberías usar un reloj más bajo.
Comprueba según las fórmulas.
Con cristal de 1MHz, división por 16 y 255 en PR2 saldría una frecuencia de 61Hz. Eso sería lo mínimo a lo que podrías llegar.
Por tanto, necesitarías un cristal aun más bajo para conseguir los 50Hz.
El cambio se realiza a nivel no se realiza por el timer... el timer se usa para crear la frecuencia. El cambio lo realiza el módulo CCP, cuando coincide con un número, que sería el duty. Va comparando el valor del timer y del duty. Cuando coinciden cambia el estado del pin. Al llegar el timer a desbordarse, comenzaría un nuevo ciclo de la onda, cuadrada en este caso.
De ahí que en el caso del ejemplo, en el PWM2, como nunca llega a ser igual el duty y el valor del timer, siempre estará en nivel alto. Osea, continua de 5v.
Puedes usar el timer2, sin PWM, ingeniándotelas para conseguir controlar el servo (suponiendo que sea eso) haciendo uso de el postscale. Esto hace que la interrupción se cree cada X veces, siendo X la post-escala. Si eliges por ejemplo una postscale de 16, se produce la interrupción al desbordamiento 16 del timer.
Otro sería usar el timer1 con un cristal externo, que te de base de tiempo para esos 50hz, así no tendrás que bajar el cristal del micro. Aunque también tendrías que ingeniártelas.
Y la última... hacerlo con bucles de retardo... No es muy elegante, pero depende de que más tenga que hacer el programa. Si te sirve esa opción... valida pues.
Saludos!!