ATmega328P leyendo interruptores DIP utilizando la potencia más baja posible

Actualmente estoy buscando algunos consejos sobre cómo hacer que mi circuito tenga el menor consumo de energía posible.

Necesito usar tres interruptores DIP para configurar la dirección de mi placa ATmega328P en una red personalizada LoRa .

He visto que una de las soluciones más utilizadas es conectar las resistencias pull-up externas a V CC , como se informa a continuación:

Interruptores desplegables

... pero este enfoque es extremadamente ineficiente para mis propósitos (mi hardware, durante el sueño profundo, necesita alcanzar 1-5 µA de consumo de corriente).

Entonces, mi intención es quitar las resistencias pull-up externas y usar las resistencias pull-up internas de la entrada digital del ATmega328P.

Este enfoque me permitirá habilitar las resistencias pull-up internas solo cuando necesite leer el estado de los interruptores (durante el arranque por un tiempo muy limitado).

Entonces, teóricamente, esto será muy eficiente y de baja potencia.

Este será el esquema resultante (tomado de aquí ):

Resistencias pull-up internas

Esta es mi idea para resolver este problema. De todos modos, aún no he probado. Me encantaría que alguien compartiera sus pensamientos al respecto.

Hacen interruptores DIP SPDT; ¿O esa parte ya está configurada?
Tenga en cuenta que con las resistencias externas 1) la corriente fluirá solo cuando se cierre un interruptor. 2) El valor de las resistencias externas se puede hacer tan alto que fluya menos corriente que cuando se usan los pull-ups internos. 3) si conecta las conexiones superiores de las resistencias externas no a +5 V sino a una E/S utilizada como salida, también puede deshabilitarlas y solo habilitarlas cuando sondee las entradas.
@Bimpelrekkie, esta fue mi idea inicial, pero considere que el Atmega328p tiene un pull-up interno que va de 20kOhm a 50kOhm, por lo que el consumo de corriente va de 165uA a 66uA (usando una potencia de 3.3V), creo que usando el pull-up interno Las resistencias ascendentes serán un buen compromiso en términos de uso de piezas y consumo de corriente. Además, usar una resistencia de 100 kOhm como pull-up externo puede ser demasiado débil... creo.
Si solo lee el estado de esos interruptores durante el tiempo de arranque y suponiendo que el circuito no se reinicia cada hora, entonces realmente no importa lo que haga, pullups internos o externos. La resistencia de 100 kOhm como pull-up externo puede ser demasiado débil. Usaría 1 Mohm sin preocuparme por eso. Un ATMega usa tecnología CMOS, por lo que las entradas son de muy alto óhmico, no es necesario usar menos de 1 Mohm. Podría ser que entrara alguna señal de RF, pero eso simplemente se resuelve con un condensador (10 nF) a través de los interruptores.
Pero nuevamente, si la corriente solo fluye por un corto tiempo durante el arranque y luego desactiva esa parte del circuito para que no fluya corriente, entonces realmente, no hay necesidad de preocuparse por esto, incluso cuando fluyen 200 uA. Lo que importa es la corriente en standby y cuando el micro está activo.
No hay pregunta que responder. Estás solicitando a las personas que compartan pensamientos. Edite en una pregunta respondible.
@VirtApp este es un sitio de preguntas y respuestas... no un foro de chat

Respuestas (4)

No recomiendo apagar el pull-up. Esto tiene dos problemas:

  • El pin de entrada es vulnerable a la captación de ruido
  • El pin puede flotar a un estado medio, lo que aumenta la potencia del búfer de entrada

Si puede prescindir de un pin más, conecte los comunes del interruptor a ese pin en lugar de GND, y baje ese común solo cuando lea los interruptores. Luego, durante el tiempo de no lectura, los pines siempre están atados por el pull-up (interruptor abierto) o al común elevado (interruptor cerrado), pero no tienen ningún sorteo en espera. Como esto:

esquemático

simular este circuito : esquema creado con CircuitLab

Incluso entonces, el pull-up interno (30K o más) es un poco débil, especialmente si se va a implementar en un entorno hostil. Agregar algo de capacitancia al pin (30 pF más o menos) evitará el ruido del pin y mejorará su inmunidad. También puede cambiar los pines al modo de salida durante el tiempo de no lectura para obtener la mejor inmunidad al ruido posible.

Pero, ¿por qué los interruptores DIP? Tal vez eliminarlos por completo y almacenar este estado en EEPROM junto con la información de configuración de su otro dispositivo.

Pero... ¿por qué molestarse incluso con eso? Aproveche el hecho de que es un dispositivo conectado de forma inalámbrica con una identificación única. Idea: use el identificador único del dispositivo LoRa (DevEUI) y asigne su posición física en el nivel de la aplicación a medida que lo instala. Si los nodos están muy espaciados, use una coordenada de geolocalización; si son parte de un conjunto compacto, use alguna ubicación de rejilla en la planta o en el equipo.

Más sobre el direccionamiento de LoRa aquí: https://www.thethingsnetwork.org/docs/lorawan/addressing/

Por último, un pequeño consejo no solicitado. Como experto en hardware, es fácil caer en la solución directa y aparentemente obvia, como sucede a menudo con los interruptores DIP, los puentes y similares. Lo animo a pensar fuera de la caja de hardware y buscar una solución de software en su lugar. La industria de las PC luchó durante años con puentes y conmutadores hasta que finalmente alguien dijo 'basta' y aparecieron Plug'n'Play y sus descendientes (PCMCIA, Cardbus y PCIe CIS).

tl; dr: Los saltadores son malvados. Evítalos si puedes.

+1 No usar interruptores DIP para empezar es la verdadera respuesta.
En mi experiencia como constructor de computadoras, PnP tardó unos 15 años en pasar de significar "Plug and Pray" a "Plug and Play". Los puentes son mucho más fáciles de corregir que la configuración automática del software.
Si las tuplas de hardware y CIS se configuraron correctamente, PnP funcionó bastante bien. Diseñé varias tarjetas ISA y PCMCIA que lo usaban.
No hay problema con apagar los pull-ups. En este chip, las entradas están deshabilitadas en modo de suspensión y no hay problema con tener pines flotantes mientras está en suspensión. Y: no creo que el 70% de la respuesta que es simplemente una diatriba contra los interruptores pertenezca aquí.
Los pines no terminados son vulnerables a la captación de ruido, incluso si tienen un 'guardián débil' en forma de entrada de disparador Schmitt. He escrito sobre la susceptibilidad de EMC en otros lugares, e incluso con el pull-up habilitado, eso no es suficiente para evitar este problema.
@hacktastical No hay captación de ruido si la entrada está apagada. Sin guardián, sin gatillo Schmitt, a nadie le importa el nivel de voltaje, solo un pin desconectado.
Discrepar. Cualquier pin que pueda flotar o que pueda ser impulsado por el ruido disipará el exceso de energía si está en modo lineal. Tenga en cuenta también que esta cosa tiene una radio , que sin duda se acoplará a cualquier pin que no se pase por alto o que esté sólidamente atado/conducido a un estado conocido. También se puede colocar cerca de otras radios.
Discuto este problema aquí: electronics.stackexchange.com/questions/573298/… En resumen, cualquier tipo de pull-up débil que tenga una señal de 'antena' conectada (como un interruptor DIP en este caso) es vulnerable a la interferencia EM.
Lea la hoja de datos antes de hacer estas afirmaciones. ¡El chip está diseñado para eso! El puerto está apagado.
Lo hice, y no dice nada sobre este punto.
Echaba de menos todos esos dolores de dentición de PnP, pero estaba en el mundo de Mac en ese momento.
@hacktastical Leer de nuevo. Está absolutamente claro. Capítulos 14.2.5 y 10.10.6.
El muestreo rápido mediante pull-ups es una solución sencilla y fiable. Necesitaría mucho ruido para superar esos pullups, pero si está realmente preocupado, puede leerlos repetidamente a intervalos de 1 ms hasta obtener 10 lecturas idénticas seguidas. Luego puede deshabilitar los búferes de entrada para que el uso de energía flotante no sea un problema (ATmega328P: sección 23.9.5, Rev. 8161D).

Esto funcionará. Los pull-ups internos en los pines de entrada son para usar así. Elija pines de E/S que se puedan configurar como entrada y salida, y cuando no esté leyendo los interruptores (el 99 % del tiempo), puede configurar ese pin para que sea una salida y bajarlo para eliminar la corriente a través de la tensión interna. UPS.

Puede apagar la resistencia pullup y dejar el pin de E/S como entrada. En estado de suspensión, esta es la configuración de corriente más baja para los pines de E/S.
@JackCreasey, la respuesta de hacktastical brinda algunas buenas razones para no dejarlas como entradas por razones de ruido. No estoy familiarizado con este micro, así que confío en su juicio sobre la corriente de fuga en estado de suspensión. Siempre que el OP no haga algo tonto como habilitar el cambio de activación o interrupciones en esos pines, dejarlos como entradas debería estar bien.

Si observa la hoja de datos , sección 35.6, puede ver que la corriente pull-up no será insignificante, para su caso de uso: 75uA a 2.7V y 140uA a 5V, si las entradas están conectadas a tierra. Los pull-ups internos están especificados para ser de 20 a 50kOhms (30.2).

No se especifica una impedancia de entrada, pero se cita que la "resistencia de entrada analógica" es 100MO y la corriente de fuga GPIO 1uA. Por lo tanto, es seguro usar un pull-up externo de un valor realmente alto (1MO). Yo no iría por encima de esto ya que el ruido puede captarse fácilmente, especialmente con cables largos y/o una radio cerca.

Para abreviar una larga historia: para una máxima simplicidad, habilitaría pull-ups internos solo mientras leo los datos. Para una mejor confiabilidad, usaría resistencias pull-up externas de 200k-1M.

Use las resistencias Pull Up para el micro VCC o use las resistencias pull up del puerto. El otro lado de los interruptores se conecta a un pin de puerto. Cambie el puerto a nivel bajo cuando desee leer y luego vuelva a configurarlo a nivel alto. Si tiene un pin de puerto que está impulsando un indicador, podría usarse para el control del interruptor, pero deberá tener un poco de precaución. Si el indicador se ilumina al bajar el pin del puerto, lo tiene hecho; de lo contrario, debe invertir las polaridades. Durante el funcionamiento normal, a los interruptores no les importará lo que esté haciendo el puerto y durante la configuración, el ciclo será lo suficientemente rápido como para que el indicador parpadee muy rápido.