4
Creado por David Álvarez para tallerarduino.worpress.com Bajo licencia creative commons Cap 3. Interrupciones (II) Que es un Timer? A grandes rasgos, es un contador interno que puede funcionar a la frecuencia que marca un reloj. Este reloj puede ser interno o externo. Como funciona? Funciona mediante un aumento del “counter register”, según como se configure, su contaje será a una frecuencia mayor o menor, y una vez finalice el contaje (desbordamiento) para el que lo hemos configurado activará el bit flag (bandera), el cual nos indica que el timer ha acabado de contar y empezará de nuevo. Debido a que el timer depende de una fuente reloj, tal y como hemos dicho al principio, la unidad más pequeña medible será el periodo: ! = ! ! = ! !"#$% = !" ! !"# Tipos de Timers. En los chips AVR Atmega 168 y Atmega 328 disponemos de 3 Timers, en los Atmega 1280 y Atmega 2560 contamos con 6. Timer 0: Temporizador de 8 bits (registrará como máximo 256 valores). Es usado en las funciones delay() y millis(), por lo que debemos tenerlo en cuenta a la hora de programar. Timer 1: Temporizador de 16 bits (registrará como máximo 1024 valores). Es usado en la librería servo, por lo que deberemos tenerlo en cuenta a la hora de programar. Timer 2: Temporizador de 8 bits. Es muy similar al Timer 0 y es usado por la función tono(). Timer 3, 4 y 5: Estos tres Timers son usados por los chips Atmega 1280 y Atmega 2560. Los tres son de 16 bits y funcionan de manera muy similar al Timer 1.

interrfupciones con arduino

Embed Size (px)

DESCRIPTION

inicio en el manejo de las interrupciones con la placa arduino uno r3

Citation preview

  • Creado por David lvarez para tallerarduino.worpress.com

    Bajo licencia creative commons

    Cap 3. Interrupciones (II) Que es un Timer? A grandes rasgos, es un contador interno que puede funcionar a la frecuencia que marca un reloj. Este reloj puede ser interno o externo. Como funciona? Funciona mediante un aumento del counter register, segn como se configure, su contaje ser a una frecuencia mayor o menor, y una vez finalice el contaje (desbordamiento) para el que lo hemos configurado activar el bit flag (bandera), el cual nos indica que el timer ha acabado de contar y empezar de nuevo. Debido a que el timer depende de una fuente reloj, tal y como hemos dicho al principio, la unidad ms pequea medible ser el periodo: ! = !! = !!"#$% = !"!!"#

    Tipos de Timers. En los chips AVR Atmega 168 y Atmega 328 disponemos de 3 Timers, en los Atmega 1280 y Atmega 2560 contamos con 6. Timer 0: Temporizador de 8 bits (registrar como mximo 256 valores). Es usado en las funciones delay() y millis(), por lo que debemos tenerlo en cuenta a la hora de programar. Timer 1: Temporizador de 16 bits (registrar como mximo 1024 valores). Es usado en la librera servo, por lo que deberemos tenerlo en cuenta a la hora de programar. Timer 2: Temporizador de 8 bits. Es muy similar al Timer 0 y es usado por la funcin tono(). Timer 3, 4 y 5: Estos tres Timers son usados por los chips Atmega 1280 y Atmega 2560. Los tres son de 16 bits y funcionan de manera muy similar al Timer 1.

  • Creado por David lvarez para tallerarduino.worpress.com

    Bajo licencia creative commons

    Configurar y ejecutar Timer. Para poder usar los Timers o contadores, deberemos modificar sus registros. Para este segundo ejemplo vamos a usar el Timer 1 (16 bits, al modificarlo no podremos usar la funcin servo), por lo que nos centraremos en los registros TCCR1A, TCCR1B y TIMSK (TCCR Timer Counter Control Register, TIMSK Timer/counter Interrupt Mask register). Los registros tienen la siguiente composicin:

  • Creado por David lvarez para tallerarduino.worpress.com

    Bajo licencia creative commons

    s

    1er ejemplo ! = 1! = 116!"# = !"!!"# 2!"!! = 65535 65535 62!5!" = 0!0041! !!!"# Como vemos el tiempo de parpadeo es tan rpido que ser prcticamente imperceptible para el ojo humano.

  • Creado por David lvarez para tallerarduino.worpress.com

    Bajo licencia creative commons

    2 ejemplo Para evitar el problema del primer ejemplo vamos a hacer que la velocidad de parpadeo sea de 1s gracias al uso del preescaler y del CTC. ! = 1!/!"##$%&'#" = 116!"#/1024 = 102416!"# = !"#$ 2!"!! = 65535 64!" = !!!"#$ Con el uso del preescaler provocamos que el timer finalice su ciclo cada 4194s por lo que debemos finalizar el ciclo 3194s antes, para ello vamos hacer uso del CTC. !"#$% !"! = !"#$%& !"#"$!%!!"#$%&'! !"#$% 1 !"! = 1!64!" 1 = !"#$% Este valor se almacenar en el registro OCR1A, el cual se comparar por constantemente con el Timer.