Interrumpir debouncer para cambiar el sensor

0

Quiero leer el estado de un sensor de interruptor (contacto magnético). Estoy pensando en conectar el interruptor entre un pin de interrupción de mi micro y tierra, escuchando el estado de CAMBIAR. De esta manera, tengo problemas de rebote, así que me pregunto cuál es la mejor manera de resolver este problema:

1: desactiva la escucha de interrupción cuando se dispara y habilítala después de que el programa haya leído el valor (0 - > ground- > switch cerrado O 1- > floating- > switch abierto) No creo que un estado flotante pueda ser bueno, pero si configuro el pin de entrada de interrupción como INPUT_PULLUP ya no es flotante y podría ser bueno, ¿verdad?

2 - Conecte el interruptor a un pin de interrupción y también a un pin de entrada digital a través de un transistor como interruptor. De esta manera, cuando se activa la interrupción, leo el valor del pin de entrada digital. Por otro lado, de esta manera complico el circuito.

3 - Para usar un circuito de rebote de hardware

¿Son estas tres soluciones válidas? ¿Hay más mejores que estos?

MÁS CONTEXTO: Estoy usando estos interruptores como interruptor de límite para una puerta de garaje. En mi código, estoy usando un temporizador para elevar la puerta del garaje durante diez segundos O hasta que se active la interrupción del interruptor de límite

EDITAR: con un cambio en mi código resolví el problema usando interrupciones. Sin embargo, sugiere utilizar el sondeo ya que no es una aplicación en tiempo real, así que me pregunto: no es lo mismo usar interrupciones para poder usar un modo de ahorro de energía para mi micro y activarlo solo cuando hay una interrupción de hardware. se dispara? Si utilizo una solución de sondeo, el sistema no sería adecuado para la alimentación de la batería; ¿no es así?

    
pregunta Nicola

3 respuestas

3

La respuesta real es que no deberías usar interrupciones para esto en absoluto. Debe conectar el interruptor a un pin de entrada y sondear el pin periódicamente. El período del sondeo debe ser mayor que el intervalo de tiempo durante el cual el transitorio de conmutación (rebote) disminuye.

También, debe levantar su pin con una resistencia de pull-up. Simplemente conectando el interruptor entre GND y el pin no es suficiente; Algunos microcontroladores tienen resistencias de pull-up internas que puede activar desde el software, por lo que no necesita usar uno externo.

    
respondido por el Cerike
0
  

Estoy usando estos interruptores como interruptor de límite para una puerta de garaje. En mi código, estoy usando un temporizador para levantar la puerta del garaje durante diez segundos O hasta que se active la interrupción del interruptor de límite.

Esta es una aplicación de baja velocidad y no se requiere una interrupción para dar una parada adecuada. El tiempo de desaceleración del motor será cientos de veces más largo de lo que un simple sondeo de entrada y circuito de rebote podrían manejar cómodamente.

    
respondido por el Transistor
0

Pienso en estos pocos puntos

  • ¿Tiene que preocuparse por el rebote cuando simplemente espera hasta que la puerta toque el sensor por primera vez?
  • El circuito de hardware podría ser tan fácil como el filtro RC. RC Filter ayuda mucho y es muy simple.
  • Si el cable del sensor es más largo que un pie, recomendaría un levantamiento externo, para hacer al menos 10 mA. Es mucho más robusto contra EMP causado por tormentas, etc.
  • La interrupción es mejor para eventos muy cortos, como milisegundos o menos. Levantar la puerta de su caseta sin duda tomará más tiempo. Recomiendo leer cada uno, digamos, 20ms. El viejo ZX Spectrum hace lo mismo. Al menos es un buen comienzo.

El filtro RC con extracción externa y eliminación de software es la mejor opción aquí. Si lees el mismo valor después de 20 ms, puedes estar seguro de que es correcto

Volver a sus preguntas:

  1. Creo que pasará mucho tiempo sintonizando esto
  2. Como dices, esto complica las cosas. También desperdicias más alfileres.
  3. RC Filter con puerta Schmidt es la opción de alta fidelidad, pero no es necesario en este caso.

De todos modos, ganas experiencia al fallar. Eso es, después de todo, lo que cuenta.

    
respondido por el Combinatix

Lea otras preguntas en las etiquetas