Interrupts()

Hola a todos, llevo poco tiempo haciendo cositas con Arduino y actualmente estoi atascado con un problema.El codigo es para un reloj programador usando un ds1307 ,el codigo recoje los datos del RTC y los muestra en un LCD, hasta aqui todo bien ,el problema lo tengo a la hora de crear una funcion para setear las "alarmas" para conectar y desconectar dispositivos, lo intento con interrupcciones externas,pero mientras que estan activadas las interrupciones externas no me funcionan las partes de la función que tienen que ver con contadores o temporizadores. A parte de esto ¿alguien me puede dar una clase magistral sobre "interrupts ()"?, ¿alguna sujerencia sobre como hacer la funcion de "seteo" de las alarmas?..... Muchisimas gracias por anticipado a esta comunidad que me esta aportando muchos conocimientos.

Hola! Este es mi primer mensaje en el foro, de hecho me acabo de registrar, así que espero hacerme entender ;) Soy estudiante de ingeniería técnica industrial, con la especialidad de electrónica.

El funcionamiento de las interrupciones es un poco complejo, así que no voy a entrar en detalles "técnicos" sobre tiempos y demás, ya que no creo que en tu caso sea importante y varía de un micro a otro. Pero lo común es lo siguiente: el micro no es multitarea, es decir, no puede realizar varias instrucciones a la vez. En el mejor de los casos, mientras ejecuta una puede buscar otra, pero esto ni siquiera lo hacen todos los micros. Por lo tanto, si usas al micro como reloj, una vez que tengas que hacer cualquier otra cosa, como manejar una interrupción, leer un registro o cualquier cosa que se te ocurra (por mínima que sea) estarás retrasando la cuenta. Hay periféricos que permiten que el micro haga cosas, como los timers, que cuentan gracias a las pulsaciones de la señal de reloj. Gracias a esto puedes hacer cosillas mientras cuentan, pero sólo porque el "micro" no interviene en esta operación.

Sin embargo, cuando quieres representar la hora en el display, si que lo haces con el micro, por lo que si en ese momento se vectoriza una interrupción, la ejecución del programa sufrirá un parón, ya que las interrupciones tienen prioridad. Por ejemplo, es como si estas en un cruce con el semaforo en rojo, pero un policia te dice que pases... el policia tiene prioridad, por lo que te olvidas del semáforo y le haces caso.

Cuando la interrupción se vectoriza, se ejecuta el código asociado a esta y, cuando se termine, salta de nuevo a donde estaba antes, continuando con el programa.

Por lo tanto, si necesitas llevar una cuenta exacta del tiempo, como es el caso, debes usar un reloj externo y preguntarle con el micro la hora que es. Hay bastantes relojes que muchas posibilidades, yo use uno en mis practicas de informática industrial, que es donde aprendí lo que se de uC, si lo necesitas/quieres te puedo buscar el nombre e incluso mandarte la hoja de características, aunque no se si la tengo en formato electrónico.

Espero haberme explicado, es difícil explicar ciertos temas sin hablar de cosas más "ásperas", pero bueno, si tienes más dudad pregunta. Suerte con tu proyecto.

Edito: no me di cuenta que ya usas un reloj externo, de todos modos la explicación te sirve, ya que el tema de porque no te funciona el "programa" a la vez que las interrupciones ya te lo comenté. Perdón por andar medio despistado ;)