fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Avisos
Vaciar todo

Extrañezas de mi PWM

12 Respuestas
7 Usuarios
0 Reactions
3,777 Visitas
mrp0t4t0
Respuestas: 17
Topic starter
(@mrp0t4t0)
Active Member
Registrado: hace 17 años

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.

Responder
11 respuestas
mrp0t4t0
Respuestas: 17
Topic starter
(@mrp0t4t0)
Active Member
Registrado: hace 17 años

Vale, vale, ya me aclaro, pero una preguntilla, el micro hace todo el main, y cuando llega al final, que hace?? Se resetea solo via software?? Se queda parada la ejecución y se queda ahí hasta un reset via hardware??

Pero no me queda muy claro lo que me ha dicho Bastian de las interrupciones, si no hay que habilitarlas para hacer el PWM, que tiene que ver con la ejecución de estas??

Gracias Mil

Responder
bastian
Respuestas: 384
(@bastian)
Ardero
Registrado: hace 17 años

Hola!

Cuando no le pones el bucle infinito, y el programa llega a la ultima instrucción el micro se para y no hace nada. Cuando le haces un reset hardware, el programa empieza de nuevo desde el pricipio.

Una interrupción es un mecanismo que interrumpe la ejecucion del programa principal cuando sucede "algo". Si pasa ese "algo", la ejecucion salta del programa principal a una funcion que "atiende" la interrupcion. Cuando termina esta rutina el flujo de ejecución vuelve al programa principal en el punto donde se interrumpio.

Cuando configuras el PWM tambien configuras la interrupción, basicamente por que no estas continuamente pendiente del estado de la "cuenta" del timer para cambiar el estado del la salida del PWM, si no que cuando el timer termina la cuenta (interrupcion) cambia el estado automaticamente.
El problema de todo esto de las interrupciones es que se necesita "una instruccion" del programa principal a la que volver, si cuando atiendes la interrupcion el programa principal ya ha terminado no hay ninguna instruccion en ejecución y entonces ¿a que parte del programa vuelve?. Imagino que es por esto que el PWM no va sin un bucle infinito.

Espero haberlo aclarado un poco mas.
Salu2!

Responder
mrp0t4t0
Respuestas: 17
Topic starter
(@mrp0t4t0)
Active Member
Registrado: hace 17 años

Vamos a ver, todo eso lo entendí en la universidad 😕 , gracias de todos modos por recordarmelo, pero la duda que me surge es:, yo no he configurado ninguna interrupción, ni las he habilitado, esto me lleva a pensar, lo hace el micro solo cuando yo configuro el PWM??
Es una interrupción que es transparente a nosotros? Vamos, que cuando se genere yo no puedo aprovecharla para hacer nada??

Perdonad que sea tan insistente, pero creo que sin PWM, haré pocos robots, creo que es esencial en este mundillo, y quiero que me quede muy clarito 😆

Responder
_jm_
Respuestas: 961
 JM
(@_jm_)
Prominent Member
Registrado: hace 19 años

Estas programando en c, tienes que ver que hace cada función que pones, ahí tienes un setup_tmr2 que no se que será, pero si configura el timer activará su interrupción. El micro sólo no hace nada, el compilador que usas y sus funciones si.

Cada vez que se produce una interrupción te vas a una posición de memoria, y ahí tienes que ver que interrupción es y ejecutar el código que quieras.

Si quieres comprender lo que estás haciendo programa en ensamblador, y después en c, así tendrás una idea buena de como funciona el pic.

Responder
bastian
Respuestas: 384
(@bastian)
Ardero
Registrado: hace 17 años

Hola!

Sin el código no te puedo decir mucho mas, pero si te puedo decir que estas programando en C, y además utilizando una funcion de alguna libreria, que además esta utilizando elementos hardware del micro (modulo CCP y Timer) que funcionan a base de interrupciones.... me parece que es la propia funcion en C la que configura la interrupcion de forma transparente...

Por decirlo de otra forma.... si tu haces un programa en C para PC y utilizas la funcion cin>>...¿estas programando la interrupcion del teclado del PC?... lo que es seguro, es que el procesador no lee el teclado por polling. 😉

Salu2!

Responder
Página 2 / 3
Compartir: