Arduino AttachInterrupt


Las interrupciones son útiles para hacer que las acciones o eventos sucedan automáticamente en los programas y pueden ayudar a resolver problemas de tiempo.

oscar Escrito por oscar 04 April 2020 4926 0

Descripción

Las interrupciones son útiles para hacer que las acciones o eventos sucedan automáticamente en los programas de microcontrolador y pueden ayudar a resolver problemas de tiempo y ejecución de los mismos. Las buenas tareas para usar una interrupción pueden incluir leer un interruptor o pulsador, hasta codificador rotatorio o monitoreo la entrada del usuario.[1]

Pines digitales con interrupciones

El primer parámetro para attachInterrupt() es un número de interrupción. Normalmente debe usar digitalPinToInterrupt(pin) para traducir el pin digital real al número de interrupción específico. Por ejemplo, si te conectas al pin 3, úsalo digitalPinToInterrupt(3) como primer parámetro para attachInterrupt().

La siguiente tabla muestra los pines de interrupción que posee cada placa de arduino:

Tablero Pines digitales utilizables para interrupciones
Uno, Nano, Mini, otros basados ​​en 328 2, 3
Uno WiFi Rev.2, nano cada todos los pines digitales
Mega, Mega2560, MegaADK 2, 3, 18, 19, 20, 21
Micro, Leonardo, otro basado en 32u4 0, 1, 2, 3, 7
Cero todos los pines digitales, excepto 4
Tableros de la familia MKR 0, 1, 4, 5, 6, 7, 8, 9, A1, A2
Nano 33 IoT 2, 3, 9, 10, 11, 13, 15, A5, A7
Nano 33 BLE, Nano 33 BLE Sense todos los pines
Debido todos los pines digitales
101 Todos los pines digitales (solo los pines 2, 5, 7, 8, 10, 11, 12, 13 funcionan con CHANGE)

Acerca de las rutinas de servicio de interrupción

Los ISR son tipos especiales de funciones que tienen algunas limitaciones únicas que la mayoría de las otras funciones no tienen. Un ISR no puede tener ningún parámetro, y no debe devolver nada.

En general, un ISR debe ser lo más corto y rápido posible. Si su programa usa múltiples ISR, solo uno puede ejecutarse a la vez, otras interrupciones se ejecutarán después de que finalice la actual en un orden que depende de la prioridad que tengan. millis() se basa en las interrupciones para contar, por lo que nunca se incrementará dentro de un ISR. Dado que delay() requiere interrupciones para funcionar, no funcionará si se llama dentro de un ISR. La funciona micros() inicialmente comenzará a comportarse de manera errática después de 1-2 ms. delayMicroseconds() no utiliza ningún contador, por lo que funcionará normalmente.

Por lo general, las variables globales se utilizan para pasar datos entre un ISR y el programa principal. Para asegurarse de que las variables compartidas entre un ISR y el programa principal se actualicen correctamente, declare como volatile.

Números de interrupción

Normalmente debería usar digitalPinToInterrupt(pin), en lugar de colocar un número de interrupción directamente en su boceto. Los pines específicos con interrupciones y su número de mapeo a interrupción varían para cada tipo de placa. El uso directo de números de interrupción puede parecer simple, pero puede causar problemas de compatibilidad cuando su programa se ejecuta en una placa diferente.

Syntax

attachInterrupt(digitalPinToInterrupt(pin), ISR, mode) //recomendado
attachInterrupt(interrupt, ISR, mode) //no recomendado
attachInterrupt(pin, ISR, mode) //(No recomendado. Además, esta sintaxis solo funciona en las placas SAMD Arduino, Uno
                                //WiFi Rev2, Due y 101.)

Parámetros

  • interrupt El número de la interrupción. Tipos de datos permitidos: int.
  • pin El número pin de Arduino.
  • ISR El ISR a llamar cuando se produce la interrupción; Esta función no debe tomar parámetros y no devolver nada. Esta función a veces se denomina rutina de servicio de interrupción.
  • mode Define cuándo se debe activar la interrupción. Cuatro constantes están predefinidas como valores válidos:
  • LOW Para activar la interrupción siempre que el pin esté bajo
  • CHANGE Para activar la interrupción siempre que el pin cambie de valor
  • RISING Para disparar cuando el pin va de bajo a alto
  • FALLING Para cuando el pin va de mayor a menor.
  • HIGH Para activar la interrupción siempre que el pin esté alto

Devoluciones

Nada

Referencias

[1] arduino https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/, Consultado Abril 2020


Comentario

Debe aceptar antes de enviar