You are on page 1of 5

ATMega32

TIMER 1 - MANEJO DE PWM


UTILIZANDO LENGUAJE ENSAMBLADOR

1. INTRODUCCIÓN

El microcontrolador ATMega32 tiene 3 Timers/Counters (T/C) los cuales tienen diferentes modos
de operación. Uno de los T/C más versátiles es el 1.

Las principales características del T/C1 son (pag. 86 de [1]):

2. GENERALIDADES

2.1. Registros

Los registros de 16 bits son:

• TCNT1 (Timer/Counter): donde se almacena el valor de timer/contador.


• OCR1A, OCR1B (Output Compare Registers): se utilizan para comparar su valor con el del
TCNT1 todo el tiempo y el resultado de esa comparación puede ser utilizado para generar
señales de PWM en los pines OC1A y OC1B (Output Compare).

Los registros de 8 bits son:

• TCCR1A, TCCR1B (Timer/Counter Control Register): son los registros utilizados para
configuración del T/C1.
• TIFR (Timer Interrupt Flag Register): es el registro donde se encuentran las banderas
correspondientes a las interrupciones.
• TIMSK(Timer Interrupt Mask Regiseter): es el registro donde se pueden activar o activar
las interrupciones asociadas al T/C1.

La escritura/lectura de los registros de 16 bits debe realizarse a través de los registros de 8 bits que
corresponden al byte alto y bajo. Para la escritura primero debe escribirse el byte alto y luego
el byte bajo, para la lectura primero debe leerse el byte bajo y luego el byte alto. Por ejemplo,
para el registro OCR1A:

;Operación de escritura
ldi r17,0x01
ldi r16,0xFF
out OCR1AH,r17
out OCR1AL,r16
; Operación de lectura
in r16,OCR1AL

1
in r17,OCR1AH

Si una interrupción ocurre entre las dos instrucciones utilizadas para acceder el registro de 16 bits,
el código asociado a la rutina de atención a la interrupción podría modificar el contenido del registro
de 16 bits y el resultado de la operación de lectura o escritura no sería el esperado. Por lo tanto,
podría ser necesario deshabilitar temporalmente las interrupciones durante el acceso a los
registros de 16 bits. Por ejemplo, en el siguiente código se utiliza un procedimiento para leer el
registro TCNT1:

TIM16_ReadTCNT1:
; Save global interrupt flag
in r18,SREG
; Disable interrupts
cli
; Read TCNT1 into r17:r16
in r16,TCNT1L
in r17,TCNT1H
; Restore global interrupt flag
out SREG,r18
ret

En el siguiente código se utiliza un procedimiento para escribir el registro TCNT1:

TIM16_WriteTCNT1:
; Save global interrupt flag
in r18,SREG
; Disable interrupts
cli
; Set TCNT1 to r17:r16
out TCNT1H,r17
out TCNT1L,r16
; Restore global interrupt flag
out SREG,r18
ret

2.2. Fuentes de reloj

El reloj del T/C1 puede ser interno o externo y es seleccionado por los bits CS12, CS11, CS10
(también pueden representarse como CS12:0) localizados en el TCCR1B (Timer/Counter Control
Register B). A continuación se muestra una breve descripción de las diferentes fuentes de reloj
(información adicional en la página 110 de [1]):

2
Donde clkI/O representa el reloj externo.

2.3. Modos de operación.

El modo de funcionamiento del T/C1 puede ser configurado a través de los bits WGM13:0
(WGM13, WGM12, WGM11 y WGM10) localizados en los registros TCCR1A y TCCR1B. A
continuación se listan los modos (información más detallada a partir de la página 97 de [1]):

Donde:

2.4. Unidad de salida de igualdad en la comparación (Compare Match Output Unit).

Los bits COM1A1:0 y COM1B1:0 (Compare Output Mode for channel A y B, respectivamente)
ubicados en el registro TCCR1A, permiten determinar el comportamiento de los pines OC1A y

3
OC1B (Output Compare channel A y B, respectivamente). En la siguiente tabla se muestran las
diferentes opciones (información más detallada en la página 107 de [1]):

Compare Output Mode, no PWM

Compare Output Mode, fast PWM

Compare Output Mode, Phase Correct and Phase and Frequency Correct PWM

3. GENERACIÓN DE PWM

De las diferentes opciones para la generación de PWM se utilizará el modo de funcionamiento


llamado Phase and Frequency Correct PWM Mode, ya que permite generar señales de PWM de
alta resolución con la fase y la frecuencia correcta. Su operación se basa en la doble pendiente. El
contador cuenta repetidamente desde BOTTOM (0x0000) hasta TOP y luego desde TOP hasta
BOTTOM. En el modo de operación no invertido del Compare Output, la salida OC1x es puesta a 0
cuando se presenta la igualdad entre TCNT1 y OCR1x durante la cuenta ascendente y puesta a 1
cuando se presenta igual en la cuenta descendente. En el modo de operación invertido los valores
de salida se invierten. Debido a la simetría de la señal de PWM generada en los modos de
operación que utilizan la técnica de la doble pendiente, estos modos son los más utilizados para las
aplicaciones de control de motores. En la siguiente figura se observa el funcionamiento en el Phase
and Frequency Correct PWM Mode.

4
Se utilizará el modo de operación 10, para lo cual se deben configurar los bits WGM13:0 ubicados
en los registros TCCR1B y TCCR1A, de la siguiente manera:
WGM13 = 1
WGM12 = 0
WGM11 = 1
WGM10 = 0

En este modo de operación el valor TOP se almacena en el registro ICR1, dejando libre el registro
ICR1A para ser utilizado en la generación de una señal PWM.

Se utilizará la salida OC1A no invertida, para lo cual se deben configurar los bits COM1A1:0
ubicados en el registro TCCR1A, de la siguiente manera:
COM1A1 = 1
COM1A0 = 0

Es importante tener en cuenta que el bit correspondiente en el registro DDR al OC1A o OC1B debe
estar configurado como salida con el fin de habilitar el driver de salida.

La frecuencia de la señal PWM se puede determinar mediante la siguiente ecuación:

Donde TOP es el valor que se debe asignar al registro ICR1 y N representa el valor del pre-
escalado (1, 8, 64, 256, or 1024).

4. REFERENCIAS

[1] http://www.atmel.com/dyn/resources/prod_documents/doc2503.pdf

You might also like