¿Pin como entrada (para un interruptor) y salida (para LED) con ATmega32U4?

1

Ya hay varias preguntas cerca de este tema, pero son para otra familia µC o para voltajes analógicos de lectura de 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:

  • Pin = > Resistencia 22K = > botón = > GND
  • Pin = > Resistencia LED = > LED = > GND

Entonces, por supuesto, el pin se pondría en modo de entrada (con pullup interno) muy a menudo, y estará en modo de salida la mayor parte del tiempo.

Por lo que puedo decir, el pullup interno es de 50-100K en ese µC, por lo que el 22K con el botón debería poder hundirlo 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 vuelva un poco más oscuro; De todos modos, en mi aplicación no importaría en absoluto el aspecto del LED mientras se presiona ese botón.

¿Alguna posibilidad de dañar algo? ¿Alguna trampa que no sea obvia?

    
pregunta AnoE

2 respuestas

1

No hagas esto de la manera que lo describiste. Como entiendo, tu cicruit se vería así:

simular este circuito : esquema creado usando 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 estará en 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á aproximadamente 1.8V ~ 2.5V (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 de la tensión de alimentación que esté utilizando, pero lo más probable es que esté entre los límites de alta y baja tensión). 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ó:

simular este circuito

Debe conducir el GPIO a un nivel bajo 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 activarse activamente desde el software, ya que 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 que no es un problema en su caso, y aparte de esto, este circuito es simple, seguro para la MCU (si sigue la regla anterior) y garantiza los niveles de entrada correctos.

    
respondido por el dim
0

La solución simple es colocar el resistor 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 tracció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 a bajo.

    
respondido por el Janka

Lea otras preguntas en las etiquetas