Post on 10-Sep-2015
description
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