Go Down

Topic: Necesito una Interrupción Interna (Read 3233 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)

alexneu

Hola..
Una interrupción es una bifurcación del flujo normal del programa que se produce al detectar el evento que debe interrumpir la ejecución, para ejecutar una subrutina 'definida' de manera automática. Previo a la llamada de la funcion, se guardan los estados de la variables de entorno ( 'paginado', como en la recursividad), y luego se ejecuta la subrutina.

Hardware -> cambio de estado de un pin
Software  -> provocada por el propio programa

Sabiendo esto, debemos determinar si realmente necesitamos una interrupción, la cual, podría cortar un envío en una comunicación o alguna tarea en medio de su ejecución.

Si tenes que ejecutar algo cada 'X' tiempo, no es una interrupcion lo que necesitas, sino un contador..
Una interrupción, se utiliza cuando el evento no responde a alguna lógica ni metrica, y debe ser ejecutado con alta prioridad . 'ej. presionar una tecla de la computadora', a pesar de lo que se este procesado, ves la letra en apantalla de inmediato..


Te dejo un link muy claro slide


saludos

surbyte

Ultima respuesta  Feb 22, 2011, 06:26 pm

No se a quien le respondes.

surbyte


ehrja

Hola buenos días!

Metaconta

Hola:

Estos vídeos te podrá ayudar mucho a lo que buscas.

Vídeos Interrupciones Internas.
https://www.youtube.com/watch?v=x7knaKxkpCM

Vídeos Interrupciones externas
https://www.youtube.com/watch?v=vL9AVsyFpvI

Saludos.

ehrja

Hola buenos días!

surbyte

Metaconta no has leido que es un post reflotado de Feb 22, 2011, 06:26 pm no hay que responder nada

alexneu

Contesto a surbyte. No se porque te ha molestado la contestación a un post viejo, ya que las publicaciones sirven como referencia bibliográfica a personas pudieran tener la misma duda. Entonces si alguien tiene algo mas que aportar a un post viejo que lo haga, seguramente será aprovechado por los nuevos lectores del viejo post.

Que el post sea viejo, no queire decir que nadie mas lo leerá para evacuar dudas..

Te recomiendo que si te molesta... simplemente no lo leas..

surbyte

#13
Mar 10, 2015, 04:18 pm Last Edit: Mar 10, 2015, 04:21 pm by surbyte
Bueno ahora tenemos moderador.
Preguntale a el.
Si tiene mas de 120 dias no deberías responder.
Si esta mal esa regla entonces pide que se retire.
Te invito a que busques un mesaje viejo e intentes responderlo. Te aparecerá la advertencia de que tiene mas de 120 días y que es pasible de que el autor del post no te responda.

Lo que hay que hacer es crear un nuevo post, referenciar este, y aportar la solución.
Te invito, creo que hay miles solo en este subforo.

Se entiende ahora o no?
Es como poner enlaces sin tag o insertar códigos sin tag.

alexneu

Eres el policia de foro???? dedíca tu tiempo a ayudar y no a criticar a alguien que hace algo positivo..
Sabes que, tenia buen concepto tuyo, me has ayudado en algunas publicaciones.. En el fondo eres un egolatra que solo ayuda para figurar en una lista de 'inteligentes'....

ya no te contestaré mas

Go Up