Ya hay varias preguntas cercanas a este tema, pero son para otra familia de µC, o voltajes analógicos de lectura objetivo u otros casos especiales.
Así que aquí va: me gustaría leer un botón y controlar un LED desde el mismo pin de E/S en el ATmega32U4. ¿Hay algo malo con:
Luego, por supuesto, el pin se pondría en modo de entrada (con pullup interno) muy a menudo, y estaría en modo de salida la mayor parte del tiempo.
Por lo que puedo decir, el pullup interno es 50-100K en ese µC, por lo que los 22K con el botón deberían poder hundir eso lo suficiente.
En el modo de salida, cuando no se presiona el botón, todo es normal; si se presiona el botón, esto agregará una ruta a través de 22K a GND, lo que podría o no hacer que el LED se oscurezca un poco; de todos modos, en mi aplicación no importaría en absoluto cómo se ve el LED mientras se presiona ese botón.
¿Alguna posibilidad de dañar algo? ¿Algún escollo que no sea obvio?
No hagas esto de la forma en que lo describes. Como entiendo, su circuito se vería así:
simular este circuito : esquema creado con CircuitLab
Ahora, suponga que el GPIO está en modo de entrada (alta impedancia) y el botón no está presionado. El voltaje en el GPIO será aproximadamente el voltaje directo del LED. De hecho, aunque habrá muy poca corriente, hay un camino a través de Rpullup-R2-D1, y habrá alrededor de 1,8 V ~ 2,5 V (dependiendo del tipo de LED que esté usando) en el pin MCU, que significa que el nivel lógico estará fuera de las especificaciones (depende del voltaje de suministro que esté usando, pero lo más probable es que esté entre los límites de voltaje alto y bajo). Por lo tanto, la MCU no se comportará de manera consistente y realmente no podrá saber si el botón está presionado o no. La MCU también puede consumir energía excesiva en este caso.
Esto es lo que se me ocurrió:
Debe conducir el GPIO a bajo nivel para encender el LED, o configurarlo en alta impedancia para apagar el LED y, finalmente, leer el estado del botón. El GPIO nunca debe ser elevado de forma activa desde el software, porque si se presiona el botón al mismo tiempo, el pin se cortocircuitará.
El inconveniente obvio del circuito anterior es que, cuando se presiona el botón, el LED estará completamente encendido. Pero parece no ser un problema en su caso, y aparte de esto, este circuito es simple, seguro para la MCU (si sigue la regla anterior) y garantiza niveles de entrada correctos.
La solución simple es colocar la resistencia LED, el LED y el botón en una fila, y conectar la E/S entre el LED y el botón.
La E/S está configurada para abrir la salida de drenaje, lo que significa que solo se activa el transistor de extracción. Ahora puede leer el pin para probar el botón mientras el circuito de salida está flotando y encender el LED poniendo el circuito de salida en bajo.
Anónimo