adjunto uno con PWM utilizando el timer 0...
aquí controlo 6 servos utilizando el TIMER0,
en este caso, la diferencia radica en que aquí inicializo todos los servos a la vez, y voy apagandolos según se cumpla su tiempo en alto,
en este caso tenemos que ordenar los servos según su posición y según el tiempo que estén en alto, de menos a mayor.
de forma que los encendemos todos a la vez, y en el primer instante activamos el timer0 con el valor del servo que menos tiempo esta activo, al cumplirse este tiempo, apagamos este servo, y escribimos en el timer0 el valor del segundo servo menos el tiempo transcurrido en el primero, al cumplirse, apagamos el segundo servo, y escrivimos en timer0 el valor del tercer servo menos activo menos el tiempo transcurrido en los dos anteriores servos... y así hasta el final...
a diferencia que el servo de antes, en este caso podemos añadir tantos servos como nos permita el micro, ya que no tenemos limitación en software, si no limitación por hardware (patillas disponibles en el micro), esto se debe a que todos los servos se activan a la vez y se van apagando según se cumpla su tiempo.
en el código esta bien explicado y es fácil de entender, inicialmente esta para 6 servos, pero no hay problema para adaptarlo a tantos servos como se desee.. esta es una buena opción para un número elevado de servos, sin la necesidad de ir a algún hardware o pic específico pre-programado adrede para esto.
adjunto simulación en proteus y el proyecto en mplabx xc8