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,778 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
bastian
Respuestas: 384
(@bastian)
Ardero
Registrado: hace 17 años

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!

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

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

Responder
ranganok
Respuestas: 3875
(@ranganok)
Ardero
Registrado: hace 19 años

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

Responder
luison
Respuestas: 495
(@luison)
Reputable Member
Registrado: hace 17 años

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.

Responder
Página 1 / 3
Compartir: