TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Mc_bimi en 16 de Noviembre de 2010, 07:11:40
-
Hola a todos,
Tengo un pequeño gran problema que me está volviendo loco. Quiero controlar un motor con la salida CCP1 y el PWM. El motor debe estar funcionando hasta que se pulsa un botón y para. El caso es que a veces me funciona y el motor para correctamente, y otras la salida se me queda a '1' constante y el motor gira a maxima velocidad.
Este es mi programa:
#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=8000000)
#use standard_io(b)
#use standard_io(d)
#use standard_io(a)
#use standard_io(c)
#use standard_io(e)
#define BOTON PIN_B1
void main (void)
{
enable_interrupts(GLOBAL); /*Habilita interrupción global*/
enable_interrupts(INT_RTCC); /*Habilita interrupción del TIMERO*/
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
setup_timer_2(T2_DIV_BY_16,125,1);
setup_ccp1(CCP_PWM);
set_PWM1_duty(0);
while (BOTON)==0)
{
set_pwm1_duty(125);
}
set_pwm1_duty(0);
}
Que puede ser?? Alguna idea?
por favooorrr ayudaaaa!!! llevo ya bastantes días probando y no consigo dar con el problema!!!
Muchas gracias de antemano
-
Esto no funciona en CCS tal y como has definido BOTON
while (BOTON)==0)
ya que lo has definido así
#define BOTON PIN_B1
Prueba a definirlo así:
#define BOTON input(PIN_B1)
Además, tal y como está tu programa, sólo se enterará de la pulsación del botón si estaba pulsado antes de ejecutarse, ya que de no estarlo sale del bucle y el programa finaliza.
-
Ademas estan mal puestos los parentesis, fijate
while (BOTON)==0)
abris un parentesis y cerras dos.
saludos!!
-
Gracias por vuestras respuestas chic@s. Lo del paréntesis es un error que cometí al escribirlo aquí pero gracias de todas formas. Y la definición de BOTON ya lo cambié aunque seguí ocn el mismo problema.
Pero al final encontré la solución:
El caso era que al salir del bucle iba a otra instrucción que se llamaba 'sleep();' y debía permanecer asi hasta que pulsase otro botón.
while (ON==0)
{
sleep();
}
y la salida CCP1 a veces se quedaba en '1' y a veces si que paraba.
Al final quité esa función y deje ese bucle vacío y ya me funciona.
Un saludo.
Mc_bimi
-
Es que si envías al pic a Sleep(), si el pin no tiene asignada una interrupción, no despertara jamas, por eso no te funciona.