TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: rivale en 23 de Febrero de 2010, 19:39:38
-
Hola a todos, espero puedan ayudarme, veran, mi problema es el siguiente.
Tengo un programa que al presionarse un boton aumenta un contador, esto lo hace mediante la interrupcion del pin_b0, pero ahora lo que quiero hacer es que si dejo presionado el boton 3 segundos por ejemplo, en lugar de hacer eso realice otra funcion.
Como puedo hacer para saber cuanto tiempo se presiona el boton??? ya lo intente actiando la interrupcion por timer1 y que cuando entre a la interrupcion por medio del boton empiece a contar el tiempo, el problema es que la interrupcion del timer 1 no se puede hacer mientras se esta ejecutando la del int_ext.
Entonces, como puedo hacer para que en funcion del tiempo que se tenga presionado el boton, realice una accion un otra.
-
acá (http://www.todopic.com.ar/foros/index.php?topic=29209.0) hay algunas ideas.
saludos.
-
Hola.
Si se puede hacer, lo que debes es habilitar las interrupciones globales dentro de la interrupción y ya.
Saludos
-
Hola, AQUI (http://picmania.garcia-cuervo.net/picc.php) mas información.
Saludos.
-
Gracias por las ideas, les comento como lo logre por si a alguien mas le sirve:
dentro de la interrupcion externa, coloque un while, para que no salga de la interrupcion mientras el boton este presionado, dentro del while hay un delay de 1ms, y cuando termina el delay se le suma 1 a una variable auxiliar, en cuanto el boton se suelte, checo cuantas veces ocurrio el ciclo, que es de 1 ms, y con eso conozco el tiempo que duro el boton presionado
-
Gracias por las ideas, les comento como lo logre por si a alguien mas le sirve:
dentro de la interrupcion externa, coloque un while, para que no salga de la interrupcion mientras el boton este presionado, dentro del while hay un delay de 1ms, y cuando termina el delay se le suma 1 a una variable auxiliar, en cuanto el boton se suelte, checo cuantas veces ocurrio el ciclo, que es de 1 ms, y con eso conozco el tiempo que duro el boton presionado
felicidades por tu solución
hay flujos que te permitirían librar el processor tanto de el interrupt que del while dentro de el
si usas interrupciones y lo que presiona el boton y un humano y no una maquina jejejej (lo digo por lo de la velocidad entre down-up)
recuerda que la interrupción entra solo cuando cambia el estado no todo el tiempo que lo tienes presionado
1)entra interrupt boton (down)
2)x=tiempo contador
3)sales de la interrupción
el processor es libre de hacer otras cosas
3)entra interrupt boton (up)
4)y=tiempo contador
5)sales de la interrupción
y al final y-x=tiempo de presión del boton
el contador tiene que estar incrementando sobre algun timer
si usas un pooling del boton pasa lo mismo cada ves
miras el estado del boton cuando el boton deja de estar presionado
lees el contador y tienes tu resultado.
es buena practica evitar introducir código en las interrupciones y meno aun meter ciclos
saludos y felicidades