Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
doc:tec:elo:uc_arduino:arduino_int:inicio [2025/03/25 13:59] – [Habilitación y configuración de la interrupción] fepgdoc:tec:elo:uc_arduino:arduino_int:inicio [2025/03/25 14:04] (actual) – [Habilitación y configuración de la interrupción] fepg
Línea 15: Línea 15:
 </code> Veamos sus parámetros a continuación: </code> Veamos sus parámetros a continuación:
  
-  * ''digitalPinToInterrupt'' -> Si damos el pin, el programa se encarga de buscar la interrupción.+  * ''digitalPinToInterrupt'' 
 +    * Si damos el pin, el programa se encarga de buscar la interrupción.
  
-  * ''P'' -> Es el pin que detecta la interrupción. **En el Arduino Nano es el ''2''**.+  * ''P'' 
 +    * Es el pin que detecta la interrupción. 
 +    * **En el Arduino Nano es el ''2''**.
  
-  * ''Funcion'' -> Función asociada a la interrupción. Se ejecuta al producirse la interrupción. En otro lugar del programa deberemos declararla ''void Funcion(){}''.+  * ''Funcion'' 
 +    * Función asociada a la interrupción. Se ejecuta al producirse la interrupción. Suele denominarse **ISR** (//Interruption Service Routines//) y, por definición, tiene que ser una función que no recibe nada y no devuelva nada. 
 +    * En otro lugar del programa deberemos declararla ''void Funcion(){}''.
  
   * ''flanco de activación''   * ''flanco de activación''
     * ''RISING'' -> Detecta el **flanco de subida** en el pin ''P'', llamando a la interrupción.     * ''RISING'' -> Detecta el **flanco de subida** en el pin ''P'', llamando a la interrupción.
     * ''FALLING'' -> Si se pone en lugar de ''RISING'', llama a la interrupción en el **flanco de bajada** de la señal de entrada al pin ''P''.     * ''FALLING'' -> Si se pone en lugar de ''RISING'', llama a la interrupción en el **flanco de bajada** de la señal de entrada al pin ''P''.
 +\\ 
 +===== Función ISR =====
 +
 +  * La función asociada a una interrupción se denomina **ISR** (//Interruption Service Routines//) y, por definición, tiene que ser una función que no recibe nada y no devuelva nada.
 +
 +  * Dos ISR no pueden ejecutarse de forma simultánea. En caso de dispararse otra interrupción mientras se ejecuta una ISR, la función ISR se ejecuta una a continuación de otra.
 +
 +  * **La ISR, cuanto más corta mejor**. Al diseñar una ISR debemos mantener el menor tiempo de ejecución posible, dado que mientras se esté ejecutando el bucle principal y todo el resto de funciones se encuentran detenidas.
 +    * Imaginemos, por ejemplo, que el programa principal ha sido interrumpido mientras un motor acercaba un brazo para coger un objeto. Una interrupción larga podría hacer que el brazo no para a tiempo, tirando o dañando el objeto.
 +
 +  * Frecuentemente la función de la ISR se limitará a activar un flag, incrementar un contador, o modificar una variable. Esta modificación será atendida posteriormente en el hilo principal, cuando sea oportuno.
 +
 +  * No emplear en una ISR un proceso que consuma tiempo. Esto incluye cálculos complejos, comunicación (serial, I2C y SPI) y, en la medida de lo posible, cambio de entradas o salidas tanto digitales como analógicas.
 \\  \\ 
 ===== Variables volátiles ===== ===== Variables volátiles =====
  • doc/tec/elo/uc_arduino/arduino_int/inicio.1742907596.txt.gz
  • Última modificación: 2025/03/25 13:59
  • por fepg