Usar interrupciones con Arduino.

Publicado en General.

Me he enterado de que en Arduino habían incluido el uso de interrupciones de una forma bastante sencilla.

Arduino, tiene dos fuentes de interrupciones externas, los pines 2 y 3. Eso quiere decir que al producirse un evento(configurable) en alguno de estos pines, se interrumpirá al Atmega y se ejecutará el código asociado a esa interrupción.

Para declarar una interrupción lo haremos en el cuerpo del setup, de la siguiente forma:

/* attachInterrupt(A, B, C)
* A   can be either 0 or 1 for interrupts on pin 2 or 3.
*
* B   Name of a function you want to execute while
* in interrupt A.
*
* C   Trigger mode of the interrupt pin. can be:
*             LOW        a low level trigger
*             CHANGE     a change in level trigger
*             RISING     a rising edge of a level trigger
*             FALLING    a falling edge of a level trigger
*
* In all but the IDLE sleep modes only LOW can be used.
*/

Por ejemplo,

attachInterrupt(0, ArCanInterrupt, FALLING);

El primer parámetro define el uso de la interrupción 0, la que está en el Pin 2. Cuando en el Pin 2 se detecta un flanco de bajada(3º parámetro), es decir, pasa de 1 a 0, entonces ejecutará el código que definamos en ArCanInterrupt().

Por ejemplo,

void ArCanInterrupt()
{
//Almacenamos el mensaje en el buffer_rx
ArCan.get_message_rx_buffer()
}

En las próxima versión de la librería estará incluido el uso de interrupciones.

Consejo: El código que se ejecuta en una interrupción debe ser lo más rápido posible.

Comentarios (0) Mar 15 2011


Interrupciones!

Publicado en General.

El mcp2515, el CanController que monta ArCan, tiene un buffer interno con capacidad para alojar 2 mensajes CAN, si nuestro programa fuera muy lento en ir recogiendo esos mensajes, llegaría un punto en el que empezaríamos a perderlos. Así que solo tenemos dos alternativas, hacer programas muy rápidos, que no siempre será posible, o usar interrupciones.

¿Qué es eso de interrupciones? Una interrupción, como su propio nombre indica, significa eso, interrumpir, sacar al micro de lo que está haciendo y obligarle a atender un evento nuevo, es decir, a procesar la interrupción. Una vez que ha terminado, volverá al punto en el que estaba antes de producirse dicha interrupción como si no hubiese pasado nada.

¿Qué mejora aporta el uso de interrupciones en ArCan? Antes, si llegaban mensajes muy rápidos era posible perder algunos, sin embargo, con el uso de interrupciones lo que podemos hacer es que siempre que llegue un mensaje lo almacenamos en un buffer, así no dejamos que se sature el buffer interno del mcp2515, y cuando podamos los iremos procesando. De esta forma es prácticamente imposible que perdamos información.

Voy a estudiar la forma de usarlas con ArCan… en breve os daré noticias, estad atentos!

Comentarios (0) Mar 13 2011


Librería v1.10

Publicado en General.

Estoy retomando el proyecto, una vez más… y estoy reescribiendo el código de la librería. Me estoy basando en la v1.10 que había publicado hace bastante tiempo.

He estado navegando por mi propio blog y veo que en su momento subí está versión de la librería, mencionando solo la mejora para elegir la velocidad del bus, pero esta no es la única modificación que tiene implementada, la 1.10 tiene cambios sustanciales, no solo es el hecho de poder elegir la velocidad, esta librería tiene la estructura para trabajar usando interrupciones, en lugar de un polling al pin 9, ArCan_INT.

Esta versión es beta y no está probada correctamente por lo que desaconsejo su uso, la mejor opción es basarse en la versión 1.00, que está bastante probada y funciona.

Durante los próximos días estaré trabajando sobre el código de ArCan, podéis seguir los cambios a través de la página del proyecto alojada en Sourceforge, además, por su puesto, desde el blog, donde os mantendré informado.

Un saludo y perdonar las molestias.

Comentarios (0) Mar 12 2011