Professional Documents
Culture Documents
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.
2. GENERALIDADES
2.1. Registros
• 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
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
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.
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:
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, Phase Correct and Phase and Frequency Correct PWM
3. GENERACIÓN DE PWM
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.
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