Go Down

Topic: Necesito una Interrupción Interna (Read 2162 times) previous topic - next topic

Valen

Hola, necesito poder usar una interrupción interna, de forma que me asegure de que cada x milisegundos, se ejecuta una adquisición de datos en la entrada analógica (independientemente de lo que estuviera haciendo el Arduino en ese momento).

¿Es posible configurar alguna interrupción para ello?

Veo en la documentación del micro, que el Watchdog se puede configurar como simple Interrupción, pero no sé si sirve para esto....

¿Hay librerías para hacerlo?

Gracias por vuestro tiempo, dedicado a responder.

complubot

Hola

Depende de lo que llames "x milisegundos" y de como sea el resto de tu programa lo puedes hacer de una manera u otra.

1 - Por polling. Dentro de tu bucle principal haces una comprobación del número de milisegundos transcurrido desde la última vez que llamaste a tu función de lectura de la entrada analógica.  Solo necesitas la función milis() y una variable para almacenar el momento de la última llamada.

2 - Por interrupciones. Usando la librería MsTimer2 http://www.arduino.cc/playground/Main/MsTimer2
Centro de Robótica Educativa
www.complubot.com

javilolo

Según comenta Complubot, la segunda opción es más precisa. En la primera opción, el tiempo es algo variable en función de lo que hagas en el bucle principal. Si solo lees la entrada analógica, no percibirás la diferencia.

Valen

#3
Feb 22, 2011, 02:48 pm Last Edit: Feb 22, 2011, 02:50 pm by Valen Reason: 1
Gracias, me queda la duda si los timer disponibles son hardware, o una subrutina software de algún tipo (y que por tanto no sería muy precisa).

Me parece que la librería mencionada "MsTimer2" emplea los timer hardware del propio chip, según se describe en:

http://www.uchobby.com/index.php/2007/11/24/arduino-interrupts/

Si  estoy equivocado, por favor, decídmelo...



javilolo

Creo que las interrupciones "hardware" son las que pueden provocar dispositivos externos, en las entradas apropiadas del arduino (o de cualquier otro micro). Me temo que la interrupción interna símplemente utiliza algún tipo de contador para generar la interrupción cuando llega al final de cuenta (previamente programado). Aunque dicho contador se incrementa (o decrementa) independientemente de lo que está haciendo el micro, por eso no pierde precisión, salvando la deriva que tiene el micro en largos periodos de tiempo en funcionamiento (el XTAL del que saca la frecuencia el micro tiene un pequeñísimo error)

Go Up