Introducir rutinas ATmega en entorno Arduino

Buenas Noches

Estuve ojeando la documentación del ATmega168 y la gestión de rutinas de interrupcion(ISR), la duda que tengo es si estas funciones (que vienen en las librerias de avr) se pueden utilizar desde el entorno de arduino o si por el contrario tendria que programarlo en c compilarlo y cargarlo en el microcontrolador.

Perdon! no busque bien en el foro encontre esto:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1195141905/1
pero no especifica si las rutinas de c se pueden usar en el entorno de arduino.

Hola,

Puedes utilizar en el entorno Arduino las funciones de C de libc (avr-libc: <avr/interrupt.h>: Interrupts).

Para usar interrupciones, incluye en tu programación
#include <avr/interrupt.h>

Para definir las rutinas de cada interrupción, tienes ISR().

Hay bastantes ejemplos por la red. Un manual donde puedes aprender a usar los timers y ver sus interrupciones:
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=50106

Saludos :wink:

Igor R.

Hice un pequeño programa de prueba en en el que creaba una rutina de interrupciòn para el vector USART_RX_vect para que cada vez que se completara la recepción del dato encendiera un led , pero el led no se enciende. (Busco el codigo y subo el post de nuevo).

#include <avr/interrupt.h>
boolean status = HIGH;
int a = 0;
ISR(UART_RX_vect) {
Serial.flush();
status = !status;
a++;
}
void setup() {
Serial.begin(9600);
interrupts();
pinMode(13,OUTPUT);
}

void loop() {
digitalWrite(13,status);
Serial.println(a);
delay(500);
}

Segun el compilador del IDE de arduino ya hay una interrupción asociada en el header wiring_serial.c , sin embargo no he encontrado ninguna interrupción asociada :S

He abierto wiring_serial.c y he visto que tenia un SIGNAL(SIG_USART_RECV) ó SIGNAL(SIG_UART_RECV)

Signal es para capturar la interrupcion, pero ahora se usa ISR() en vez de signal().

Ha sido un vistazo rápido...

Ah vale ... eso no venia en la documentacion que he estado siguiendo!... seguire la pista