Saludos zira!
Bueno te felicito por esforzarte en hacer las cosas tú mismo y aprender leyendo...eso es excelente.
Tu mensaje creo que deberíamos colocarlo en alguna parte como ejemplo de lo que debe ser un mensaje pidiendo ayuda.
1- Describes muy bién qué es lo que necesitas hacer (Hay otros foreros que casi no explican y uno tiene que meterse a adivino
).
2- Incluyes código que ya has hecho tu solito, o sea, primero te esforzaste, luego pediste ayuda (otros quieren que les resuelvan todo el problema
)
Bueno ahora si, yendonos a lo que nos ocupa, percibo varios errores en tu código, te diré los que noté a simple vista, ya alguien te dirá otros:
- El más grave creo, es que no tienes ningún while(TRUE) o sea que no se va a ejecutar el código indefinidamente como debe ser.
- Tienes todas las variables declaradas como int, cuando a veces necesitas int16 (por ejemplo período, que no más por ahí vi un 4000) o float (como d1, pues estás guardando el resultado de multiplicar por 0.5 y 0.1; yo te recomendaria que guardaras el resultado en una variable float, por ejemplo d1_float, y luego hicieras casting y convirtieras d1_float nuevamente en entero, guardándolo en d1, para hacer el set_pwm1_duty(d1), si no sabes como hacer el casting busca en el foro, hay bastante información de eso).
Ahora bien, la pregunta obligada es: has tratado de simularlo en proteus? Trata simulándolo y ves qué tal... corrígele esos errores y algún otro que te des cuenta o que otro te haya dicho....
Veo tu código bastante lógico y limpio, aunque no lo he detallado completamente... te felicito!
Ok nos leemos!