Interrupciones de Arduino

Interrupciones

Esta es una guía sobre la implementación de interrupciones para su código Arduino. Hay mucha buena información sobre las interrupciones, pero esta guía es parte de una serie sobre cómo ejecutar su Arduino con un consumo de energía reducido. Y nos referimos a pequeño. Estamos hablando de años de operación dependiendo de la aplicación ... En una batería de botón. Esto es lo que necesita saber para crear sus futuros proyectos integrados o de Internet de las cosas. Francamente, es ridículo cuánto poder desperdicia un stock de Arduino. ¡Usando los diversos trucos en esta serie de guías, podrá reducir el consumo de energía en más de un factor de 1000! ¿Suena interesante? ¡Entonces esta es la guía para ti! Si le gusta esta guía, o quiere ver cómo implementamos las interrupciones en nuestro propio proyecto, visite nuestro sitio web en:

//doteverything.co/

¿Por qué necesito interrupciones?

La respuesta es simple, de verdad. Necesita interrupciones porque sin interrupciones no puede poner su Arduino a dormir y esperar que se despierte nuevamente (en general. Hay formas de despertarse sin interrupciones en situaciones limitadas). Y si no puedes conciliar el sueño, estarás consumiendo poder como un maratonista corriendo por el Valle de la Muerte en pleno verano. El modo de suspensión consume muy, muy poca energía ... pero requiere un esfuerzo especial para configurarlo. Lo primero que debe saber es cómo escribir su código para aprovechar las interrupciones, luego puede usar las técnicas más potentes.

¿Qué es una interrupción?

Una interrupción son algunas cosas. Pero en esencia, es un código que se llama cuando ocurre una acción especial. ¿Qué acción especial? Básicamente, cuando cierto pin tiene su voltaje cambiado. En Duemilanove / UNO, solo hay 2 pines que pueden calificar. Pero como puede ver, este es un requisito muy amplio. Puede usar cualquier cosa para cambiar el voltaje en esos pines. Puede ser ingresado por el usuario a través de un botón, puede ser un dispositivo periférico como un sensor, puede ser otro microchip, incluso puede ser un temporizador interno. Lo primero que debe hacer para comenzar a usar las interrupciones es descubrir cómo se puede convertir su aplicación para que tenga un disparador eléctrico externo. A menudo, otros dispositivos que desea interactuar con su Arduino usan interrupciones para llamar su atención. Nuestro anterior instructable, Cómo agregar Bluetooth a su proyecto Arduino, es un ejemplo perfecto de la interfaz de un dispositivo externo de tal manera.

Esta guía demostrará cómo conectar un circuito de ejemplo para disparar interrupciones. Luego, proporcionaremos un código de ejemplo. Con suerte, después de ver cómo se hace, entrará en el estado de ánimo adecuado para descubrir cómo aplicar una interrupción a su proyecto.

Digamos que no me importa el consumo de energía. ¿Todavía necesito interrupciones?

¡Si! Incluso si no planea poner el procesador en suspensión, ¡es posible que necesite interrupciones! Las interrupciones son esenciales si tiene una aplicación dependiente del tiempo. Esto puede significar que necesita que ocurra una acción cada x milisegundos, o que necesita que ocurra una acción inmediatamente después de que ocurra un evento externo. Si está familiarizado con los conceptos básicos de la programación de Arduino, es posible que se pregunte por qué no puede usar un ciclo while para verificar cuándo es el momento de realizar su acción. La solución típica es hacer que su bucle while "sondee" el estado del pin tan rápido como sea posible. Este método a menudo funcionará, pero no es confiable. ¿Qué sucede si está sondeando la presión de un botón, pero el botón se presiona y se suelta antes de que el bucle while vuelva a verificar el estado del botón? Te perderás la presión del botón. ¿Qué sucede si está buscando un evento muy rápido, como una señal de un sensor? Tendrá que votar constantemente y su programa no puede hacer nada más por temor a perderse el evento crítico. Pero con las interrupciones, está 100% garantizado de atrapar el evento. El uso de una interrupción también le evita tener que verificar el estado constantemente, lo que ahorra potencia de cálculo y permite que su bucle while llegue a sus otras tareas más rápido.

Paso 1: Descripción general del circuito

Aquí está el circuito que debe construir para crear su primera interrupción:

... O al menos es el circuito que DEBERÍAS construir. Afortunadamente, la mayoría de las placas Arduino ya tienen el LED y la resistencia incorporados, exactamente en esta configuración. Se pueden habilitar en software. ¡Desafortunadamente, solo usar la funcionalidad incorporada no muestra todo lo que está sucediendo! Por lo tanto, vale la pena estudiar este esquema y comprender lo que está haciendo. El hecho de que este circuito exacto esté integrado en Arduino ya debería darte una pista importante de lo importante que es.

La parte más importante de este circuito es la resistencia de 20k conectada a + 5V. Esto se llama resistencia pull-up. Si la resistencia se hubiera conectado a GND en lugar de + 5V, se llamaría una resistencia pull-down (Arduino no tiene resistencias pull-down incorporadas, debe agregarlas externamente). La resistencia pull-up sostiene el pin con el que está asociado a + 5V normalmente. Entonces, solo, el pin siempre leerá ALTO. Si conecta el pin directamente a GND (por ejemplo, al cerrar el botón), el pin se reducirá a 0V y se leerá BAJO. Si no tuviéramos el pull-up, no podríamos obtener el botón para hacer algo significativo. Cualquier pin Arduino se puede conectar a + 5V internamente especificando pinMode (pin #, INPUT_PULLUP). Tenga en cuenta que el pullup solo es significativo cuando el pin está configurado como entrada. Para obtener más información sobre pull-ups, consulte la página DigitalPins.

INTERRUPT_PIN debe ir al pin 2 o 3 en su Arduino UNO (u otro Arduino basado en 328p). Para otros Arduinos, consulte esta página para encontrar un pin con capacidad de interrupción. Para nuestro ejemplo de código, lo conectaremos al pin 2. El LED conectado a ANY_PIN es un circuito directo. Arduino ya tiene un LED conectado al pin 13, por lo que lo utilizaremos, pero puede modificar el circuito con su propio LED en un pin diferente. El LED Arduino tiene una "L" al lado.

Los botones a menudo tienen 4 pines, por lo general, dos de los pines están conectados internamente al otro pin en el mismo lado del botón. Si presiona el botón y no sucede nada, compruebe que realmente conectó su circuito a través de los pines que se conectan cuando se presiona el botón, no a través de los pines que siempre están conectados.

Paso 2: cableado real

Con todo eso en mente, si desea utilizar los pullups internos de Arduino y el LED incorporado, este es el circuito súper simple que realmente tiene que cablear.

Paso 3: el código

Hay algunas cosas que vale la pena señalar aquí. Lo más interesante es la línea 10, donde configuramos la interrupción. attachInterrupt () toma 3 argumentos. El primero es el número de interrupción, no el número de pin. No tiene que preocuparse por esto, solo asegúrese de usar siempre digitalPinToInterrupt (Pin #) y se traducirá automáticamente. Recuerde, solo ciertos pines pueden convertirse en pines de interrupción. El segundo argumento es el nombre de la función a la que desea que salte su código cada vez que se dispara la interrupción. Puede ver cómo se define esta función en la línea 21.

El tercer argumento para attachInterrupt () es, en este caso, la palabra clave FALLING. Esto significa que la interrupción se activará cuando el voltaje en el pin 2 pase de ALTO a BAJO. También puede especificar RISING, que se activará cuando el voltaje vaya de BAJO a ALTO; o puede usar CHANGE, que se activará cuando el voltaje cambie en cualquier dirección. En nuestro circuito, cuando se presiona el botón, el voltaje irá de mayor a menor, y cuando se suelta el botón, irá de mayor a menor. No queremos activar el código dos veces cada vez que se alterna el botón, por lo que elegimos RISING o FALLING. Su aplicación puede requerir algo diferente.

Probándolo

Si carga el código, encienda el Monitor de serie y haga clic en el botón, notará que el LED no se comporta exactamente como pretendíamos. Queremos que el LED cambie entre encendido y apagado cada vez que se presiona el botón. Pero para usted, es probable que parpadee varias veces cada vez que presione el botón. Esto sucede porque los botones no son perfectos. Su dedo podría estar presionando el botón, pero si observa el nivel microscópico, el botón rebota en los contactos varias veces antes de cerrarse por completo. Cada rebote provocará una interrupción. ¡Nuestro sistema es tan preciso y sensible que hemos introducido un nuevo problema! Para solucionar esto, empleamos una rutina conocida como antirrebote para que la detección de interrupciones sea menos sensible.

Paso 4: ejemplo

Aquí hay uno que preparé. No es perfecto, ciertamente hay mejores formas, pero debería ser suficiente para comenzar a usar los botones.

La idea básica es registrar la última vez que se presionó el botón con la función millis (). (La función millis () le indica cuántos milisegundos han transcurrido desde que el boceto comenzó a ejecutarse). Si el disparador de interrupción anterior ocurrió menos de 200 milisegundos antes del actual, es probable que el botón rebote, por lo que no se toma ninguna acción. De lo contrario, todo sucede normalmente. Cualquier variable que desee modificar dentro de una función de interrupción debe declararse como volátil para que la interrupción y el bucle principal nunca estén en desacuerdo con el valor.

Paso 5: ¿Qué sigue?

¡Eso es! Cada vez que hace clic en el botón, el LED debe cambiar de estado. Ahora tiene una interrupción de trabajo. Depende de usted imaginar formas de incorporar interrupciones en su proyecto. Como puede ver, las interrupciones son esenciales cuando el tiempo y el poder de cálculo son importantes. En la siguiente guía cubriremos cómo poner el ATMega328p en modo de reposo de potencia ultrabaja, confiando en las interrupciones para despertarnos nuevamente. Hasta entonces, suscríbase en Instructables y consulte nuestra página de productos en www.doteverything.co. ¡Estamos construyendo Dot, un dispositivo de Internet de las Cosas que esperamos que encuentres genial y útil, y a través de esta serie de guías te mostraremos exactamente cómo construir tu propia versión del hardware!

Artículos Relacionados