Autor Tema: Ayuda, como se cuanto tiempo se presiona un boton??  (Leído 3309 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Ayuda, como se cuanto tiempo se presiona un boton??
« 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.



"Nada es imposible, no si puedes imaginarlo"

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Ayuda, como se cuanto tiempo se presiona un boton??
« Respuesta #1 en: 23 de Febrero de 2010, 20:05:34 »
acá hay algunas ideas.

saludos.
.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Ayuda, como se cuanto tiempo se presiona un boton??
« Respuesta #2 en: 24 de Febrero de 2010, 01:38:58 »
Hola.

Si se puede hacer, lo que debes es habilitar las interrupciones globales dentro de la interrupción y ya.

Saludos
El papel lo aguanta todo

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Ayuda, como se cuanto tiempo se presiona un boton??
« Respuesta #3 en: 24 de Febrero de 2010, 09:19:06 »
Hola, AQUI mas información.

Saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Ayuda, como se cuanto tiempo se presiona un boton??
« Respuesta #4 en: 11 de Marzo de 2010, 20:47:49 »
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
"Nada es imposible, no si puedes imaginarlo"

micronoob

  • Visitante
Re: Ayuda, como se cuanto tiempo se presiona un boton??
« Respuesta #5 en: 11 de Marzo de 2010, 22:03:45 »
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

« Última modificación: 11 de Marzo de 2010, 22:13:16 por micronoob »