Creo que los registros TRIS deberías configurarlos antes de ingresar al ciclo while. También sería bueno que coloques un esquema de tu circuito para poder ver las cosas más claramente.
Así como está el programa me parece que estaría haciendo el ciclo una única vez ya que no veo ningún while-do o do-while. Tal vez esté pero yo no logro verlo.
Intentaré hacerme entender. Antes aclaro que no uso CCS, por lo tanto colocaré una especie de pseudocódigo para tratar de explicarmeCódigo: C
void main(void) { //declaraciones de variables unsigned int ciclo; // variable de 8 bits unsigned int ciclo_anterior; // variable de 8 bits //todas tus configuraciones, tanto de PWM como los tris while (1) // En ccs se suele utilizar while (TRUE) { //si esta presionada la tecla de incrementar ciclo..... if (ciclo <= 254) ciclo++; //si esta presionada la tecla de decrementar ciclo... if (ciclo >= 1) ciclo--; if (ciclo |= ciclo_anterior) { varias tu duty ciclo_anterior = ciclo; } //si esta presionada la tecla de parar llevas a 0 ambas salidas //si esta presionada únicamente la tecla de encendido arranca el motor hacia la derecha /* la funcion anterior tambien serviria para cambiar el giro hacia la derecha */ //si esta presionada únicamente la tecla de giro a la izquierda seteas tus salidas para que gire a la izquierda } }
Me parece que te está quedando fuera del while todo lo correspondiente al seteo del duty en el PWM.
Además cambias la velocidad muy lentamente, sería mejor poner algo así:
ciclo+=10;
de ese modo el PWM cambia en un valor apreciable. Si después necesitas un ajuste tan fino de velocidad lo puedes cambiar como dices pero para depurar lo mejor es cambiar "visiblemente" la velocidad.
Saludos
Reinier
Estando funcionando, si lo pares y lo vuelves a arrancar, ¿tampoco arranca inmediatamente?
El primer arranque puede fallar, ya que seteas el duty (inicialmente) a 0. Prueba dejando el duty inicial, por ejemplo a 100.