Programación Específica > Microcontroladores
Interrupcion Pines Rb 4-7
Nash7:
Por lo visto es un problema de rebotes... Por ahi he leido esta solución y me ha funcionado
Creo que lo que te pasa es que como la interrupcion es por cambio de estado en cualquiera de las patillas, te salta la interupcion cuando pulsas el pulsador y cuando lo sueltas vuelve a entrar a la interrupcion. Prueba a usar esta mascara.
delay_ms(70); // esperamos para evitar rebotes
if(!(port_b^0xF0)) // si se produce al soltar el pulsador
return; // salimos de la interrupcion.
Salu2
Gracias Jonathan por tu time!!
© Jonathan ©:
Bueno. esa era la idea que tire de principio.. me alegra que lo hayas resuelto.. yo te decia 5 ms pero veo que es poco, en esa solucion usan 70 :o ... Bueno!!>. me alegro que vaya todo bien.. cualquier duda me consultas que para eso estamos!.. Un Abrazo! :D :comp:
Huguen_aus_Tirol:
Hola! Bueno, una vez ya me pasó... En primer lugar, al atender la interrupción por cambio en RB, hay que resetear el bit RBIF (INTCON.0) por soft; caso contrario, al salir de la rutina el micro volverá a entrar y asi for ever... :(
En segundo lugar, la interrupción es por cambio. Es decir que si nuestra rutina es muy rápida (por lo general es así), es muy probable que presionemos el pulsador, se atienda la rutina y cuando soltemos el pulsador (así sea un click) ya hayan pasado muchos ciclos desde que se salió de la rutina de interrupción deseada y volvamos a entrar a la interrupción(hubo un cambio en RB). No son rebotes del pulsador ni nada de eso...
Algo que funciona: deja los pulsadores ahí donde están, pero no uses la interrupción por cambio en RB. Casi siempre se necesita, en cualquier proyecto, una base de tiempos. Yo uso el timer0 para las rutinas de demora de milisegundos, segundos, etc. Entonces, cada vez que tengas una interrupción del timer0 (cada 5, 10 ó 20 ms, por ejemplo) copias el estado de RB a un registro, filtras para que queden los pulsadores, si hay uno pulsado, activas un flag (por ejemplo, el bit 7 de tu registro de teclas) y listo! :)
En el programa principal chequeas el flag de tecla y sabes que hacer si hay tecla, sin que estar chequeandolo en el codigo principal...
Bueno, confuso, no? :blink: pero prueba, que funciona y da buen resultado!
Saludos y suerte!
Ah! como dice Jonathan, con unos 5 o 10 ms se tienen resultados más que buenos...
Navegación
[*] Página Anterior
Ir a la versión completa