4 int ext timers pwm

74
4. Interrupciones Externas, Temporizadores y PWM Microcontroladores M. C. Felipe Santiago Espinosa Abril de 2015

Upload: michael-castro-vasquez

Post on 10-Sep-2015

292 views

Category:

Documents


25 download

DESCRIPTION

micro

TRANSCRIPT

  • 4. Interrupciones Externas,

    Temporizadores y PWM

    Microcontroladores

    M. C. Felipe Santiago Espinosa

    Abril de 2015

  • Introduccin

    Los AVR tienen una gama amplia de recursos internos.

    En este captulo revisaremos las interrupciones externas y los temporizadores.

    Las seales PWM se generan con algunos de los modos de operacin de los temporizadores.

    Todos los recursos son manejados por medio de los Registros I/O.

    2

  • 4.1 Interrupciones Externas

    Microcontroladores

    M. C. Felipe Santiago Espinosa

    Abril de 2015

  • Interrupciones Externas

    Dos fuentes:

    INT0 (PortD 2, terminal 4)

    INT1 (PortD 3, terminal 5)

    Tres fuentes:

    INT0 (PortD 2, terminal 16)

    INT1 (PortD 3, terminal 17)

    INT2 (PortB 2, terminal 3)

    ATMega 8 ATMega 16

    Sirven para detectar un estado lgico o un cambio de estado en

    algunas terminales de entrada del microcontrolador.

    tiles para monitorear Interruptores, Botones o Sensores con salida

    a relevador.

    Pueden activarse por un nivel bajo de voltaje o por flancos de subida

    o bajada (INT2 slo por flancos).

    4

  • Interrupciones Externas

    Pueden generarse aun cuando sus respectivas terminales son configuradas como salidas.

    Para que ocurra la interrupcin por flanco para INT0/INT1 debe existir una seal de reloj en los recursos I/O, el cual es anulado

    por la mayora de los modos SLEEP, excepto el modo IDLE.

    Las interrupciones por nivel bajo sobre INT0/INT1 y por flanco en INT2, son asncronas (no requieren seal de reloj), por lo que

    son adecuadas para despertar al microcontrolador sin importar

    el modo de reposo.

    5

  • Configuracin

    La configuracin de las interrupciones INT0/INT1 se define en los 4 bits

    menos significativos del registro MCUCR (MCU Control Register):

    Para INT1 Para INT0

    ISCx1 ISCx0 Activacin de la Interrupcin 0 0 Por nivel bajo 0 1 Cualquier cambio lgico 1 0 Por flanco de bajada 1 1 Por flanco de subida

    ISC - Interrupt Sense Control

    6

  • Configuracin

    La interrupcin INT2 (ATMega16) slo es activa por flanco, su

    sentido se define en el bit 6 del registro MCUCSR (MCU Control and

    Status Register):

    ISC2 Activacin de la Interrupcin 0 Por flanco de bajada 1 Por flanco de subida

    Dado que esta interrupcin es asncrona, para que pueda

    ser detectada, requiere que el pulso generado por el

    evento tenga una duracin de al menos 50 ns.

    7

  • Habilitacin y Estado

    El habilitador global de las interrupciones es el bit I del registro de

    Estado (SREG), ubicado en la posicin nmero 7.

    Los habilitadores individuales de las interrupciones externas se

    encuentran en el registro GICR (General Interrupt Control Register).

    El estado de las interrupciones se refleja en el registro GIFR (General

    Interrupt Flag Register) :

    Las banderas se limpian automticamente por hardware, cuando la

    ISR es ejecutada.

    8

  • 9

    Ejemplo 1: Conmutar el bit menos significativo de Port B, cada que se presiona un botn

    INT0 PortB.0

    ATMega 8

  • Ejemplo 2: Contador de eventos UP/DOWN

    INT0

    INT1

    PO

    RT

    B

    El puerto B se incrementar cada vez que se presiona el

    botn 1 y tendr un decremento al presionar al botn 2.

    10

  • Ejercicio 1: Control simple para un horno

    Se pretende mantener la temperatura de un horno en una

    temperatura de referencia.

    INT0

    PB0

    INT1

    Horno

    Hot

    Cold

    hot

    Tref

    cold

    Hot

    Cold

    Horno

    11

  • 4.2 Temporizadores

    Microcontroladores

    M. C. Felipe Santiago Espinosa

    Abril de 2015

  • Temporizadores/Contadores Una labor habitual de los controladores suele ser la determinacin

    de intervalos de tiempo concretos.

    Esto se hace a travs de un elemento denominado Temporizador (Timer).

    Un temporizador bsicamente es un registro de n-bits que se incrementa de manera automtica en cada ciclo de instruccin o cuando ocurre un evento externo.

    Si la fuente de temporizacin es externa, se le conoce como contador de eventos.

    El registro puede ser pre-cargado para iniciar su conteo a partir de un valor determinado.

    Cuando ocurre un desbordamiento en el registro (una transicin de 1s a 0s) se genera alguna sealizacin.

    En el caso de los microcontroladores AVR, pueden generarse otros tipos de eventos relacionados con el temporizador.

    13

  • El ATMega8 y el ATMega16 tienen tres temporizadores y manejan tres tipos de eventos. Los eventos quedan registrados en TIFR (Timer Interupt Flag Register).

    Temporizadores/Contadores

    Temporizador Tamao Registros

    Timer 0 8 bits TCNT0 (0x32)

    Timer 1 16 bits TCNT1H (0x2D), TCNT1L (0x2C)

    Timer 2 8 bits TCNT2 (0x24)

    14

  • Eventos en los temporizadores Sobreflujo o desbordamiento

    El evento ocurre cuando el timer alcanza su mximo valor (MAXVAL) y se reinicia en cero.

    Se indica con la puesta en alto la bandera TOVn ( Timer/Counter Overflow).

    TCNTn puede ser pre-cargado con un valor entre 0 y MAXVAL para que la bandera TOVn se genere a diferentes intervalos de tiempo.

    TCNTn TOVn

    CARGA

    (Sealizador)

    MAXVAL = 2 - 1 Tamao (TCNTn)

    n = 0, 1 2

    15

  • Eventos en los temporizadores Coincidencia de comparacin (Compare match)

    Un registro puede ser cargado con un valor entre 0 y MAXVAL (OCRn - Output Compare Register) y es comparado con el valor del timer en cada ciclo de reloj, una coincidencia produce un evento. El evento se indica con la bandera OCFn (Output Compare Flag).

    Se puede configurar al temporizador para que se reinicie despus de una coincidencia y algunas terminales relacionadas pueden ajustarse, limpiarse o conmutarse automticamente en cada evento.

    OCRn

    TCNTn

    = OCFn

    16

  • Eventos en los temporizadores

    Captura de entrada (Input Capture)

    Con el Temporizador 1 es posible capturar eventos externos, un

    cambio en la terminal ICP1 provocar que el timer sea ledo y

    almacenado en el registro ICRn (Input Capture Register). Indicando el

    evento en la bandera ICFn (Input Capture Flag), pueden ser tiles para

    medir el ancho de pulsos externos.

    TCNTn

    ICRn

    ICF1 ICP1

    17

  • Respuesta a los eventos de los temporizadores

    Existen 3 formas de detectar eventos y actuar ante ellos.

    Sondeo (polling).

    El programa principal evala de manera frecuente el estado de las banderas. Requiere un sobre manejo de instrucciones e implica tiempo de procesamiento.

    Ejemplo: Se espera un evento por desbordamiento del Timer 0.

    Bajo este esquema, las banderas se deben limpiar por software, re-escribindoles un 1 lgico.

    LOOP: IN R16, TIFR SBRS R16, TOV0 RJMP LOOP

    while ( ! ( TIFR & 1

  • Respuesta a los eventos de los temporizadores

    Uso de Interrupciones

    Para que los eventos de los temporizadores generen interrupciones, stas se deben habilitar en el registro TIMSK (Timer Interrupt Mask Register), adems del habilitador global de interrupciones (bit I en SREG).

    El programa principal se ejecutar de manera normal y cuando ocurra un evento se dar paso a la ISR correspondiente.

    Ejemplo: Configurar el timer 2 para que pueda detectar eventos de comparacin

    En este caso, las banderas son limpiadas automticamente por hardware.

    LDI R16, 1

  • Respuesta a los eventos de los temporizadores

    Reaccin automtica sobre eventos

    Los timers 1 y 2 (y el timer 0 en el ATMega-16) soportan la

    posibilidad de reaccionar slo con hardware ante eventos de

    comparacin. Algunas terminales relacionadas pueden ponerse en

    alto, en bajo o conmutarse de manera automtica.

    La atencin a eventos se realiza de manera paralela a la ejecucin del

    programa principal.

    20

  • Pre-escalador

    A la entrada de los temporizadores se incluye un pre-escalador,

    bsicamente es un divisor de frecuencia con diferentes salidas

    conectado a un multiplexor. Los temporizadores 0 y 1 comparten al

    pre-escalador, pero con seleccin independiente.

    21

  • Pre-escalador

    El temporizadores 2 tiene un pre-escalador independiente, con la

    posibilidad de ser manejado por un oscilador externo.

    22

  • Temporizacin externa

    Los temporizadores 0 y 1 permiten el manejo de una seal externa

    para su incremento (T0 T1). En estos casos se les denomina contadores de eventos.

    Se puede configurar para detectar flancos de bajada o subida.

    Los eventos externos se sincronizan con la seal de reloj interna, por

    lo que no pueden tener una frecuencia mxima de fCLKIO/2.

    23

  • Temporizacin por reloj asncrono

    El temporizador 2 puede ser manejado por un reloj asncrono

    externo.

    Est optimizado para manejarse con un cristal de 32.768 KHz, la

    cual es una frecuencia adecuada para un reloj de tiempo real, ya que

    en combinacin con su pre-escalador, genera fracciones o mltiplos

    de segundos reales.

    La ventaja principal del reloj asncrono es que el temporizador 2

    trabaja con una frecuencia independiente al resto del sistema.

    24

  • Registros de los timers TIFR (Timer/Counter Interrupt Flag Register), es un registro de estado

    compartido por los tres temporizadores:

    TOVn (Timer/Counter Overflow): Sobre flujo del Temporizador, evento manejable por los tres temporizadores.

    OCFn (Output Compare Match Flag): Indica una coincidencia en la comparacin. Para el ATMega-8, el bit OCF0 est sin uso, su temporizador 0 no maneja este evento . El temporizador 1 puede manejar dos eventos diferentes de comparacin.

    ICF1 (Input Capture Flag): Indica que se ha realizado un evento de captura, solo lo maneja el temporizador 1.

    7 6 5 4 3 2 1 0

    OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 OCF0 TOV0

    25

  • TIMSK (Timer/Counter Interrupt Mask Register), es un registro de

    configuracin compartido por los tres temporizadores:

    TOIEn (Timer/Counter Overflow Interrupt Enable): Habilita las interrupciones por sobre flujo en los temporizadores, aplicable a los tres temporizadores.

    OCIEn (Output Compare Match Interrupt Enable): Habilita interrupciones por coincidencia en la comparacin. OCIE0 no existe en el ATMega 8.

    TICIE1 (Timer/Counter Input Capture Interrupt Enable): Habilita las interrupciones por eventos de captura, solo para el temporizador 1.

    7 6 5 4 3 2 1 0

    OCIE2 TOIE2 TICIE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0

    26

  • Los vectores de interrupcin implicados con los temporizadores son:

    Direccin Evento Descripcin

    ATMega 8 ATMega 16

    0x003 0x006 TIMER2 COMP Coincidencia por comparacin del Timer 2

    0x004 0x008 TIMER2 OVF Desbordamiento del Timer 2

    0x005 0x00A TIMER1 CAPT Captura de entrada con el Timer 1

    0x006 0x00C TIMER1 COMPA El Timer 1 coincide con el comparador A

    0x007 0x00E TIMER1 COMPB El Timer 1 coincide con el comparador B

    0x008 0x010 TIMER1 OVF Desbordamiento del Timer 1

    0x009 0x012 TIMER0 OVF Desbordamiento del Timer 0

    0x026 TIMER0 COMP Coincidencia por comparacin del Timer 0

    27

  • Temporizador/Contador 0

    28

  • Registros propios del Temporizador/Contador 0

    TCNT0 (Timer/Counter 0), es el registro de 8 bits del temporizador/ contador 0.

    OCR0 (Output Compare Register 0), registro con el que continuamente se comparar el temporizador para generar eventos de coincidencias

    por comparacin. No est implementado en el ATMega8.

    TCCR0 (Timer/Counter Control Register 0), registro de control del temporizador/contador 0.

    Los bits del 3 al 7 son para eventos de comparacin, estos bits no estn implementados en el ATMega 8.

    7 6 5 4 3 2 1 0

    FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00

    29

  • Bit FOC0 (Force Output Compare): Obliga un evento de coincidencia por comparacin generando un cambio en la terminal OC0 de acuerdo con los bits COM01 y COM00.

    Bits WGM0[1:0] (Waveform Generation Mode): Modo de generacin de forma de onda. Con los dos bits se definen 4 modos de

    operacin.

    Modo 0: Operacin normal del temporizador, slo se generan eventos de sobre flujo.

    Modos 1 y 3: Modos para la generacin de PWM, se revisarn en una seccin posterior.

    Modo 2: Limpia al registro del temporizador tras una coincidencia en la comparacin, debido a este evento, se genera la bandera OCF0.

    30

  • Bits COM0[1:0] (Compare Output Mode): En el modo normal o CTC (no PWM) estos bits definen el comportamiento de la salida OC0 (Output Compare 0), para dar una respuesta automtica ante un evento de comparacin.

    Modo WGM01 WGM00 Descripcin

    0 0 0 Normal

    1 0 1 PWM, con fase correcta

    2 1 0 CTC: Clear Timer/Counter on Compare Match

    3 1 1 Fast PWM

    COM01 COM00 Descripcin

    0 0 Operacin normal OC0 desconectado

    0 1 Conmuta OC0, sobre una coincidencia por comparacin.

    1 0 Limpia OC0, sobre una coincidencia por comparacin.

    1 1 Ajusta OC0, sobre una coincidencia por comparacin.

    31

  • Bits CS0[2:0] (Clock Select): Bits de seleccin de la fuente de reloj.

    CS02 CS01 CS00 Descripcin

    0 0 0 Sin fuente de reloj (temporizador detenido)

    0 0 1 CLK I/O (Sin pre-escalador)

    0 1 0 CLK I/O/8 (Desde el pre-escalador)

    0 1 1 CLK I/O/64 (Desde el pre-escalador)

    1 0 0 CLK I/O/256 (Desde el pre-escalador)

    1 0 1 CLK I/O/1024 (Desde el pre-escalador)

    1 1 0 Fuente externa (en T0), con flanco de bajada

    1 1 1 Fuente externa (en T0), con flanco de subida

    32

  • Temporizador/Contador 1

    33

  • Registros propios del Temporizador/Contador 1

    El temporizador 1 es de 16 bits, por lo que muchos de sus registros se

    componen de dos registros de 8 bits. Puede manejar dos eventos de

    comparacin y uno de captura.

    TCNT1 (Timer/Counter 1), el temporizador/contador 1 se compone con dos registros de 8 bits: TCNT1H y TCNT1L.

    OCR1A (Output Compare Register 1 - A), registro A para la contina comparacin del temporizador 1. Tambin se forma con dos registros de 8 bits: OCR1AH y OCR1AL.

    OCR1B (Output Compare Register 1 - B), registro B para la contina comparacin del temporizador 1. Formado por: OCR1BH y OCR1BL.

    ICR1 (Input Capture Register 1), registro para capturar el valor de TCNT1 ante un evento en la terminal ICP1. Se forma con: ICR1H y ICR1L.

    34

  • TCCR1A (Timer/Counter 1 Control Register A), registro A para el control del temporizador/contador 1.

    TCCR1B (Timer/Counter 1 Control Register B), registro B para el control del temporizador/contador 1.

    Bits COM1A[1:0] y COM1B[1:0] (Compare Output Mode): Para el modo normal o los modos CTC (no PWM) estos bits definen el comportamiento de las salidas OC1A o OC1B (Output Compare 1), respectivamente. Para dar una respuesta automtica ante eventos de comparacin.

    7 6 5 4 3 2 1 0

    ICNC1 ICES1 - WGM13 WGM12 CS12 CS11 CS10

    7 6 5 4 3 2 1 0

    COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10

    35

  • Bits FOC1A/ FOC1B (Force Output Compare): Obliga un evento de coincidencia por comparacin generando un cambio en la terminal

    OC1A o OC1B, de acuerdo con los bits COM1A[1:0] y COM1B[1:0].

    Bits WGM1[3:0] (Waveform Generation Mode): Modo de generacin de forma de onda. Con los cuatro bits (2 en TCCR1A y 2 en

    TCCR1B) se definen 16 modos de operacin. De los cuales, slo 4

    no tienen que ver con PWM, stos son:

    COM1A1/ COM1B1

    COM1A0/COM1B0

    Descripcin

    0 0 Operacin normal OC1A/OC1B desconectado

    0 1 Conmuta OC1A/OC1B.

    1 0 Limpia OC1A/OC1B.

    1 1 Ajusta OC1A/OC1B.

    36

  • Modo 0: Operacin normal, slo eventos de sobre flujo.

    Modo 4 y 12: Limpia al registro del temporizador tras una coincidencia con OCR1A o ICR1, segn el modo.

    Modo 13: Sin uso, en estas versiones de dispositivos.

    Los modos restantes se relacionan con PWM y se revisarn ms

    adelante.

    Modo WGM13 WGM12 WGM11 WGM10 Descripcin

    0 0 0 0 0 Normal

    4 0 1 0 0 CTC - El mximo est en OCR1A

    12 1 1 0 0 CTC - El mximo est en ICR1

    13 1 1 0 1 Reservado

    37

  • Bits ICNC1 (Input Capture Noise Canceler): Activa un eliminador de ruido para captura de entrada. Si est activo, la entrada se filtra de

    manera que un cambio es vlido slo si cuatro muestras sucesivas

    as lo indican. Lo que implica que un evento de captura se retrasar

    por cuatro ciclos de reloj.

    Bits ICES1 (Input Capture Edge Select): Selecciona el flanco de activacin de la captura.

    Un evento externo hace que el contador se copie en ICR1 y que la

    bandera ICF1 sea puesta en alto. Cuando ICR1 es usado como

    mximo para el modo CTC (WGM = "1100"), la terminal ICP1 est

    desconectada, por lo tanto la funcin de captura no puede

    habilitarse.

    0 Flanco de bajada

    1 Flanco de subida

    38

  • Bits CS1[2:0] (Clock Select): Bits de seleccin de la fuente de reloj. Similar al temporizador 0, con los mismos factores de divisin, excepto que la entrada externa se debe hacer en T1.

    CS02 CS01 CS00 Descripcin

    0 0 0 Sin fuente de reloj (temporizador detenido)

    0 0 1 CLK I/O (Sin pre-escalador)

    0 1 0 CLK I/O/8 (Desde el pre-escalador)

    0 1 1 CLK I/O/64 (Desde el pre-escalador)

    1 0 0 CLK I/O/256 (Desde el pre-escalador)

    1 0 1 CLK I/O/1024 (Desde el pre-escalador)

    1 1 0 Fuente externa (en T1), con flanco de bajada

    1 1 1 Fuente externa (en T1), con flanco de subida

    39

  • Acceso a registros de 16 bits

    Puede ocurrir un problema al accesar registros de 16 bit desde un bus de 8

    bits. Los registros: TCNT1, OCR1A, OCR1B y ICR1 del temporizador 1 son de

    16 bits.

    Por ejemplo, suponiendo que el temporizador no se detiene y se va a leer

    cuando tenga el valor 0x03FF, qu pasara si su acceso es por 8 bits?

    Pareciera que el valor contenido en el temporizador es 0x04FF, generando un error bastante grande.

    Para evitar estos conflictos, se incorpora un registro temporal de 8 bits para

    apoyar las lecturas/escrituras de 16 bits.

    03 FF 04 00

    R16 0xFF R17 0x04

    40

  • Cuando se escribe o lee la parte alta de los registros de 16 bits en realidad se hace la escritura o lectura en el registro temporal.

    Cuando se tiene acceso a la parte baja, se hacen lecturas o escrituras de 16 bits tomando como parte alta al registro temporal.

    Esto significa que se debe tener un orden en el acceso a los registros de 16 bits.

    Para la lectura se debe leer primero la parte baja (menos significativa).

    Para escritura se debe iniciar con el byte ms significativo.

    41

    Acceso a registros de 16 bits (2)

  • Ejemplo 1: Leer el registro ICR1 y dejar el resultado en R17:R16.

    IN R16, ICR1L ; lee 16 bits, el byte alto queda en el

    ; registro temporal IN R17, ICR1H ; lee del registro temporal

    Ejemplo 2: Escribir 1500 en OCR1A.

    LDI R16, HIGH (1500) ; escribe al registro temporal OUT OCR1AH, R16 LDI R16, LOW (1500) ; escribe 16 bits OUT OCR1AL, R16

    En Alto nivel no hay conflicto, puesto que se pueden emplear variables o registros de 16 bits.

    42

    Acceso a registros de 16 bits (3)

  • Temporizador/Contador 2

    43

  • Registros propios del Temporizador/Contador 2

    TCNT2 (Timer/Counter 2), registro de 8 bits del temporizador/ contador 2.

    OCR2 (Output Compare Register 2), registro de comparacin para eventos de coincidencias por comparacin.

    TCCR2 (Timer/Counter Control Register 2), registro de control del temporizador/contador 2.

    Bit FOC2 (Force Output Compare): Obliga un evento de coincidencia por comparacin generando un cambio en la terminal OC2 de acuerdo con los bits COM21 y COM20.

    7 6 5 4 3 2 1 0

    FOC2 WGM20 COM21 COM20 WGM21 CS22 CS21 CS20

    44

  • Bits WGM2[1:0] (Waveform Generation Mode): Modo de generacin

    de forma de onda. Con los dos bits se definen 4 modos de

    operacin.

    Modo 0: Operacin normal del temporizador, slo se generan

    eventos de sobre flujo.

    Modos 1 y 3: Modos para la generacin de PWM, se revisarn en

    una seccin posterior.

    Modo 2: Limpia al registro del temporizador tras una coincidencia

    en la comparacin, debido a este evento, se genera la bandera OCF2.

    Modo WGM21 WGM20 Descripcin

    0 0 0 Normal

    1 0 1 PWM, con fase correcta

    2 1 0 CTC: Clear Timer/Counter on Compare Match

    3 1 1 Fast PWM

    45

  • Bits COM2[1:0] (Compare Output Mode): En el modo normal o CTC (no PWM) estos bits definen el comportamiento de la salida OC2

    (Output Compare 2), para dar una respuesta automtica ante un

    evento de comparacin.

    COM21 COM20 Descripcin

    0 0 Operacin normal OC2 desconectado

    0 1 Conmuta OC2, sobre una coincidencia por comparacin.

    1 0 Limpia OC2, sobre una coincidencia por comparacin.

    1 1 Ajusta OC2, sobre una coincidencia por comparacin.

    46

  • Bits CS2[2:0] (Clock Select): Bits de seleccin de la fuente de reloj.

    CS22 CS21 CS20 Descripcin

    0 0 0 Sin fuente de reloj (temporizador detenido)

    0 0 1 CLK T2S (Sin pre-escalador)

    0 1 0 CLK T2S/8

    0 1 1 CLK T2S/32

    1 0 0 CLK T2S/64

    1 0 1 CLK T2S/128

    1 1 0 CLK T2S/256

    1 1 1 CLK T2S/1024

    47

  • ASSR (Asynchronous Status Register), registro para habilitar la operacin asncrona del temporizador 2 y mostrar su estado.

    Bit AS2 (Asynchronous Timer/Counter) Habilita la operacin asncrona

    Al activar al oscilador externo, los valores de los registros TCNT2, OCR2 y TCCR2 pueden alterarse, es conveniente que se ajuste AS2 y luego que se definan los valores correctos para los otros registros.

    Bits TCN2UB, OCR2UB, TCR2UB (UB: Update Busy)

    UB significa que el registro correspondiente est ocupado por actualizacin. Estas banderas se ajustan o limpian de manera automtica. Son tiles para sincronizar con el resto del sistema cuando el timer 2 es manejado de manera externa.

    7 6 5 4 3 2 1 0

    - - - - AS2 TCN2UB OCR2UB TCR2UB

    0 El temporizador es manejado desde CLKIO

    1 El temporizador es manejado desde un oscilador externo conectado en TOSC1 y TOSC2

    48

  • Generacin de desbordamientos al usar un oscilador externo de

    32.768 kHz para el temporizador 2.

    Factor de pre-escala Frecuencia Periodo de desbordamiento

    1 32, 768 kHz 1/128 s

    8 4, 096 Hz 1/16 s

    32 1, 024 Hz 1/4 s

    64 512 Hz 1/2 s

    128 256 Hz 1 s

    256 128 Hz 2 s

    1024 32 Hz 8 s

    49

  • Ejercicios

    Escribir una secuencia de instrucciones para generar una seal de 10 KHz (Suponer que se est usando el oscilador interno a 1 MHz). Utilizando:

    Desbordamientos atendidos por interrupcin. Coincidencias por comparacin atendidas por interrupcin. Respuesta automtica ante coincidencias por comparacin.

    Repetir el ejercicio anterior, pero ahora la frecuencia de la seal deber ser de 500 Hz. Utilice el mtodo ms eficiente.

    Combinar los dos ejercicios anteriores de manera que el microcontrolador genere ambas seales en forma simultnea.

    50

  • Configure al ATMega8 para que funcione como un

    timbre, de manera que genere un tono de 400 Hz

    durante 3 segundos cuando se presione un botn. En la

    figura se muestra el acondicionamiento del hardware

    con la salida esperada.

    51

  • Problema 3 Libro de Texto Empleando los recursos de captura del temporizador 1, desarrolle un

    programa que reciba y decodifique una secuencia serial de 8 bits de informacin modulada por el ancho de pulsos activos en bajo, como se muestra en la figura:

    Despus de detectar al bit de inicio deben obtenerse los 8 bits de datos, iniciando con el bit menos significativo, concluida la recepcin, debe mostrarse el dato en cualquiera de los puertos libres (sugerencia: utilice 2 mS y 1 mS como referencias, si el ancho del pulso es mayor a 2 mS es un bit de inicio, menor a 2 mS pero mayor a 1 mS es un 1 lgico, menor a 1 mS, se trata de un 0 lgico).

    52

  • Problema 4 Libro de Texto En un supermercado se ha determinado premiar a cada cliente

    mltiplo de 200.

    Desarrolle un sistema basado en un AVR, el cual debe detectar al cliente nmero 200 y generar un tono de 440 Hz (aproximadamente), por 5 segundos, cuando eso ocurra.

    Los clientes deben presionar un botn para ser considerados.

    Se trata de una aplicacin para los temporizadores, utilice al temporizador 0, manejado con eventos externos, para llevar el conteo de clientes.

    Al temporizador 1 para generar el tono de 440 Hz y al temporizador 2 para el conteo de segundos, empleando un oscilador externo de 32.768 KHz.

    53

  • 4. 3 Modulacin por ancho de pulso

    (PWM)

    Microcontroladores

    M. C. Felipe Santiago Espinosa

    Abril de 2015

  • Modulacin por Ancho de Pulso

    (PWM - Pulse Width Modulation)

    La modulacin por ancho de pulso es una tcnica para controlar circuitos analgicos con salidas de procesadores digitales.

    Puede usarse para controlar la velocidad de un motor, la intensidad de una lmpara, etc.

    La base de PWM es la variacin del ciclo til (Duty Cycle) de una seal cuadrada.

    T ON T OFF

    OFFON

    ON

    TT

    TDutyCycle

    55

  • Al cambiar el ciclo de trabajo se modifica el voltaje promedio (VAVG).

    Para un ciclo de trabajo de 50%:

    Para generar una seal analgica es posible usar un filtro pasivo RC

    pasa-bajas.

    T

    TVpVpdt

    TV ON

    T

    AVG

    ON

    01

    2

    TTON

    2

    VpVAVG

    56

  • Generacin de PWM con los AVR

    Los microcontroladores AVR pueden manejar tres tipos de PWM:

    PWM rpido (Fast PWM).

    PWM con fase correcta (Phase Correct PWM).

    PWM con fase y frecuencia correcta (Phase and Frequency Correct PWM).

    Las seales PWM se generan con los modos de operacin de los

    temporizadores, en sus respectivas terminales OCx. Los posibles modos

    para los diferentes temporizadores son:

    AVR Temporizador PWM

    Rpido

    PWM con fase

    correcta

    PWM con fase y

    frecuencia correcta

    ATMega8

    0

    1 X X X

    2 X X

    ATMega16

    0 X X

    1 X X X

    2 X X

    57

  • PWM Rpido

    Es una opcin para generar una seal PWM a una frecuencia alta.

    El temporizador cuenta de cero a su valor mximo y se reinicia.

    Cuando ocurre una coincidencia por comparacin, la salida OCx se

    pone en bajo y cuando el contador alcanza su mximo, OCx se pone

    en alto. A este modo se conoce como No Invertido.

    En el modo Invertido ocurre lo contrario para OCx.

    58

  • La modulacin del ancho de pulso se realiza al modificar el valor del registro OCRx. Por el comportamiento del temporizador, al modo de PWM Rpido se le conoce como un Modo de Pendiente nica.

    La frecuencia de la seal de salida esta dada por:

    y se puede cambiar al usar el preescalador.

    El registro OCRx se accesa a travs de un bfer doble. Cualquier instruccin que intente escribir en OCRx lo har en un bfer intermedio y la CPU realiza la escritura real en OCRx en el momento que el temporizador pasa de su valor mximo a cero. Esto para generar seales con el mismo periodo.

    PWM Rpido

    59

  • PWM con Fase Correcta

    El temporizador cuenta de forma ascendente (0-MAX), una vez alcanzado el mximo valor se mantiene un ciclo y despus contar de manera descendente (MAX-0).

    La modificacin de la terminal OCx se realiza en las coincidencias de comparacin.

    En el modo No Invertido la salida se pone en bajo tras una coincidencia mientras el temporizador se incrementa y en alto cuando ocurra la coincidencia durante el decremento.

    En el modo Invertido ocurre lo contrario para la salida OCx.

    El doble bfer de escritura para OCRx hace que las escrituras reales se realicen cuando TCNTx alcanza su valor mximo.

    60

  • Cuando este modo de PWM es manejado por el temporizador 1, es

    posible modificar el valor del mximo durante la generacin de las seales.

    61

  • El inconveniente de modificar el mximo es que se pueden generar seales

    que no son simtricas:

    PWM con Fase Correcta

    62

  • Muy similar a PWM con Fase Correcta. Ambos modos son de

    pendiente doble (el timer incrementa y disminuye).

    La diferencia est en el momento de actualizar el registro OCRx: El

    modo de Fase Correcta actualiza a OCRx al llegar al mximo y el

    modo de Frecuencia y Fase Correcta lo hace al alcanzar un cero.

    Ambos pueden manejar mximos variables.

    Si se utiliza un mximo constante tiene el mismo efecto usar uno u

    otro modo, pero si el mximo es variable, con Fase Correcta se

    pueden generar formas asimtricas, cosa que no ocurre con

    Frecuencia y Fase Correcta.

    PWM con Frecuencia y Fase Correcta

    63

  • La seal de salida es simtrica.

    Este modo solo existe en el temporizador 1 (de 16 bits).

    PWM con Frecuencia y Fase Correcta

    64

  • TCCR0 (Timer/Counter Control Register 0), registro de control del temporizador/contador 0.

    Bits WGM0[1:0] (Waveform Generation Mode): Modo de generacin de forma de onda. Con los dos bits se definen 4 modos de operacin.

    7 6 5 4 3 2 1 0

    FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00

    El temporizador 0 y PWM

    (slo ATMega16)

    Modo WGM01 WGM00 Descripcin

    0 0 0 Normal

    1 0 1 PWM, con fase correcta

    2 1 0 CTC: Clear Timer/Counter on Compare Match

    3 1 1 Fast PWM

    65

  • Bits COM0[1:0] (Compare Output Mode): Bajo ambos modos de PWM, estos bits se comportan de la siguiente manera:

    COM01 COM00 Descripcin

    0 0 Operacin normal OC0 desconectado

    0 1 Reservado (sin uso)

    1 0 Modo No Invertido

    1 1 Modo Invertido

    66

  • TCCR1A (Timer/Counter 1 Control Register A), registro A para el control del temporizador/contador 1.

    TCCR1B (Timer/Counter 1 Control Register B), registro B para el control del temporizador/contador 1.

    El temporizador 1 y PWM

    7 6 5 4 3 2 1 0

    ICNC1 ICES1 - WGM13 WGM12 CS12 CS11 CS10

    7 6 5 4 3 2 1 0

    COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10

    67

  • Bits WGM1[3:0] (Waveform Generation Mode): Modo de generacin de forma de onda.

    Modo WGM13 WGM12 WGM11 WGM10 Descripcin MAX

    0 0 0 0 0 Normal 0xFFFF

    1 0 0 0 1 PWM con Fase Correcta, 8 bits 0x00FF

    2 0 0 1 0 PWM con Fase Correcta, 9 bits 0x01FF

    3 0 0 1 1 PWM con Fase Correcta, 10 bits 0x03FF

    4 0 1 0 0 CTC OCR1A

    5 0 1 0 1 PWM Rpido, 8 bits 0x00FF

    6 0 1 1 0 PWM Rpido, 9 bits 0x01FF

    7 0 1 1 1 PWM Rpido, 10 bits 0x03FF

    8 1 0 0 0 PWM con Frecuencia y Fase Correcta ICR1

    9 1 0 0 1 PWM con Frecuencia y Fase Correcta OCR1A

    10 1 0 1 0 PWM con Fase Correcta ICR1

    11 1 0 1 1 PWM con Fase Correcta OCR1A

    12 1 1 0 0 CTC ICR1

    13 1 1 0 1 Reservado -

    14 1 1 1 0 PWM Rpido ICR1

    15 1 1 1 1 PWM Rpido OCR1A 68

  • Bits COM1A[1:0] y COM1B[1:0] (Compare Output Mode): Para definir las salidas OC1A y OC1B, respectivamente:

    COM1A1/ COM1B1

    COM1A0/COM1B0

    Descripcin

    0 0 Operacin normal OC1A/OC1B desconectado

    0 1 Reservado (sin uso)

    1 0 Modo No Invertido

    1 1 Modo Invertido

    69

  • TCCR2 (Timer/Counter Control Register 2), registro de control del temporizador/contador 0.

    Bits WGM2[1:0] (Waveform Generation Mode): Modo de generacin de forma de onda. Con los dos bits se definen 4 modos de

    operacin.

    7 6 5 4 3 2 1 0

    FOC2 WGM20 COM21 COM20 WGM21 CS22 CS21 CS20

    El temporizador 2 y PWM

    Modo WGM21 WGM20 Descripcin

    0 0 0 Normal

    1 0 1 PWM, con fase correcta

    2 1 0 CTC: Clear Timer/Counter on Compare Match

    3 1 1 Fast PWM

    70

  • Bits COM2[1:0] (Compare Output Mode): Bajo ambos modos de PWM, estos bits se comportan de la siguiente manera:

    COM21 COM20 Descripcin

    0 0 Operacin normal OC2 desconectado

    0 1 Reservado (sin uso)

    1 0 Modo No Invertido

    1 1 Modo Invertido

    71

  • Ejercicios:

    Genere una seal PWM en modo No Invertido donde el ancho est

    determinado por el valor del puerto D. Cul es la frecuencia de la

    seal de salida?

    Para el manejo de un servomotor se requiere de una seal PWM con un

    periodo de 20 mS. Con ese periodo, el servomotor est en su extremo

    izquierdo (0 ) si el tiempo en alto es de 0.9 mS, en su posicin central

    (90 ) con un tiempo de 1.5 mS y en su extremo derecho (180 ) con

    2.1 mS.

    Muestre los valores de configuracin del temporizador 1 para generar

    esta seal e indique los valores de los registros de comparacin para la

    posicin central y para cada uno de los extremos.

    72

  • 73

    Cul es la resolucin del servomotor?

  • Empleando PWM, controle el encendido de un

    conjunto de LEDs ultra-brillantes, manejando 5 niveles

    de intensidad. El sistema deber contar con un botn

    para el cambio de intensidad, la cual ser modificada

    con incrementos de un 20 % cada vez que el botn es

    presionado (al encender el sistema los LEDs estarn

    apagados).

    Configure para que la seal de salida tenga una

    frecuencia de 100 Hz, para una adecuada operacin de

    los LEDs.

    74

    Problema 5 Libro de Texto