Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Buenas de nuevo a todos, bueno, esto es una consulta-comentario que quería hacer.
Después de seguir el consejo de JM y comprar un par de motores copal, una caja Tamiya y un par de ruedas a USA (www.robotmarketplace.com), me he puesto manos a la obra a probar el PWM del PIC18F4455 con el que haré el robot (o el 18F4550, que es casi lo mismo). Bueno, pues despues de muchas pruebas infructuosas, me he bajado un ejemplo de internet, lo he modificado para que valiese para mi micro y vualá, funciona.
Ahora cojo mi proyecto, lo modifico como el ejemplo y......... no funciona, caspitas! que leches pasa!, bueno, os resumo que me empiezo a enrollar, me he dado cuenta que si el el main, no pongo un While (1) o While(True), aunque sea vacio, mi PWM no funciona.
Comento esto por dos razones:
Una; si alguien se está dando de cabeza como yo contra la mesa para que funcione el PWM, que lo pruebe.
Dos; os ha pasado ya?? Tiene alguna solución??
Alucinado 😯 me encuentro.
Gracias mil
Por cierto, a los adminstradores, no sé si este es el subforo correcto, a lo mejor en programación C sería más correcto, lo siento.
Hola!
No se si lo he entendido bien... pero voy a intentarlo. de todas formas no estaria mal que colgases el codigo.
Supongo que el PWM funciona por interrupcion, pero lo del while(1) me suena a lo siguiente:
Un while(1) es un bucle infinito (aunque este vacio) eso provoca que el micro este ejecutando continuamente las instrucciones de dentro del bucle indefinidamente (hasta que se encuentra con un return).
Si no le pones un bucle infinito, cuando se ejecuta la ultima instruccion del programa este se termina (no vuelve a empezar). No se como afecta esto al funcionamiento del micro en el tema de interrupciones, no lo he probado, pero parece logico que no funcione... quizás alguien más versado que yo...
Salu2!
Lo explico otra vez, de todas formas, mañana cuelgo el codigo, así lo veis más claro.
Configuro el PWM con:
Setup_CCP1
Setup_TMR2
Set_Duty_Cycle
Con esto echo, el puerto CCP1 de mi Pic debería generar un PWM de una frecuencia determinada con un duty cycle determinado, según configuro con las instrucciones anteriores.
Bueno, pues lo raro es que no me funciona, si no pongo luego lo siguiente:
While(1){
}
Si quito estas dos últimas lineas no me funciona.
Mañana os pongo el código y lo veréis mejor.
Buenas Noches
mrp0t4t0, es lo que ha dicho Bastian. El while hace que se ejecute un bucle infinito y funcionen las interrupciones y el hardware. Si no lo pones el micro cuando llega al final se queda parado hasta que le hagas un reset.
S2
Ranganok Schahzaman
Claro, es lo que te comentan, es programación "básica". Un micro siempre tiene que estar ejecutando algo, cuanto más te aproximes al hard en programación más te darás cuenta (como en éste caso). Aunque programes el PWM, éste sólo consume una serie de ciclos cada x tiempo, el resto de tiempo el micro debe de hacer algo, sino, se para y termina la ejecución, por eso pones ese while(1) que en ensamblador lo habrás visto mil veces como:
bucle:
JUMP bucle
Un saludo.