Este problema tiene décadas de antigüedad, pero no veo una respuesta directa en este sitio. Quiero lo siguiente:
Este circuito solo permite verificar el estado del botón desde el interior del microcontrolador. Nada sofisticado. Mis preguntas:
- ¿Hay algo mejor que este diseño simple?
- ¿El valor de la resistencia de 100 kilo ohmios es adecuado para nuestros dispositivos CMOS actuales, como dsPIC30FXXXX y no para una aplicación de alta potencia?
Respuestas:
Primero, muchos microcontroladores y controladores de señales digitales tendrán resistencias pull up internas. Aquí hay un ejemplo, un Atmel ATMega164.
Por lo general, habrá un registro que permite activar y desactivar los pull ups internos. Debido a las variaciones en el proceso de fabricación, estos pullups internos vienen en un rango muy amplio, y no son una buena opción si necesita un control muy estricto sobre el consumo de corriente en aplicaciones de ultra baja potencia. Si es importante mantener un recuento bajo de componentes, esta es una manera fácil de hacerlo. El uso de pull ups internos para el rebote de hardware no sería una buena idea, ya que no es posible predecir su valor exacto.
Si el valor de 100 es adecuado depende. Si se trata solo de un interruptor que un usuario activará periódicamente, entonces 100 sería una buena opción para minimizar el consumo de energía. Para las cosas que van a cambiar más rápidamente, como los codificadores rotativos, el proceso que seguiría esk Ω k Ω
Entonces, si la corriente de sumidero máxima por pin GPIO fuera de 10 mA y funcionara a 5V:R =Vyo=5 V10 m A= 500 Ω . Mantener este valor R lo más pequeño posible permitirá los bordes más agudos y las frecuencias de conmutación más altas.
fuente
Puedes ser más simple que eso.
Simplemente use una resistencia interna pull-up / pull-down en su microcontrolador.
100k es adecuado, pero los pullups internos podrían ser un poco más bajos en algunas MCU, por ejemplo, en AVR atmega8 es 30-80kOhm para reinicio pull-up y 20-50kOhm para todos los demás pines de E / S.
fuente
Mejor no se puede responder sin criterios específicos para medir, que no ha proporcionado. En la mayoría de los casos, la topología que muestra está bien. Dos variaciones pueden ser "mejores" dependiendo de la situación:
Muchos microcontroladores tienen pullups internos en algunos de sus pines. Estos están destinados a exactamente este tipo de situación. La resistencia es interna al micro y se configura un poco en algún lugar para habilitarla. La única parte externa requerida es solo el botón en sí.
Otra variante útil a tener en cuenta es para diseños de baja potencia donde el botón podría ser un interruptor que se puede cerrar por largos períodos de tiempo. En ese caso, desea minimizar la corriente promedio a largo plazo a través de la resistencia pullup. Lo haces lo más grande posible, pero hay límites y desventajas para hacerlo demasiado grande. En cambio, enciende el pullup por solo unos pocos µs a la vez para tomar la lectura de un botón. Si marca el botón cada 1 ms y el pullup está activado durante 10 µs, la corriente de pullup promedio se reduce en 100x. Con una resistencia externa, usa otro pin para conducir el lado superior del pullup. Con un pullup interno, lo habilita / deshabilita en el firmware según sea necesario.
Ya he respondido esto extensamente aquí .
fuente
¿Mejor que ese diseño simple? Si. Agréguele una tapa y tendrá un simple interruptor de rebote de hardware.
El condensador sería una tapa de cerámica común de 0.1 uf. La resistencia sería un 10k. Este sitio tiene todos los detalles sobre por qué. En resumen, un circuito antirrebote evita que el microcontrolador falsifique el registro de múltiples prensas cuando presiona el botón. La configuración de resistencia / condensador suaviza el rebote mecánico del botón para que sea una transición constante.
fuente
EDITAR: el comentario que hice a continuación tenía la intención de hacer un seguimiento de lo que Olin había dicho más tarde sobre el circuito con un condensador para supuestamente agregar rebote. Lamento que parezca aparecer en el lugar equivocado, ¡tal vez alguien pueda arreglar esto porque obviamente soy demasiado ciego o estúpido para ver cómo debería haberlo hecho!
Estoy de acuerdo con Olin, no proporciona un buen rechazo. También agregaría que el cortocircuito del condensador puede causar una gran oleada de corriente que puede reiniciar el microprocesador si el diseño de la PCB no es realmente bueno. Algunos interruptores necesitan una corriente de humectación para funcionar de manera correcta y confiable y 100k pueden ser demasiado altos para algunos interruptores (especialmente los interruptores de membrana).
fuente