Está en la página 1de 10

LABORATORIO DE MICROPROCESADORES II

LABORATORIO N°4
TEMPORIZADORES DEL MICROCONTROLADOR ATMEGA 32

1. Objetivos: El estudiante al finalizar este laboratorio:


a. Conoce el funcionamiento general de los temporizadores que incorpora el
microcontrolador ATMEGA32
b. Conoce y utiliza los registros encargados de la configuración de los
temporizadores del microcontrolador ATMEGA 32.
c. Desarrolla programas utilizando los temporizadores del microcontrolador
ATMEGA 32.
2. Fundamento teórico:
Los microcontroladores AVR incorporan en su arquitectura temporizadores (Timer
en inglés) para el conteo de eventos o para generar retardos de tiempo. Los
temporizadores que incorporan los microcontroladores ATMEGA pueden contar
eventos o generar retardos de tiempo en función de la frecuencia del oscilador o
cristal externo conectado a sus pines. Como la frecuencia del cristal oscilador es
conocido es posible podemos conocer el periodo entre pulsos y por tanto el tiempo
transcurrido.

Uso del temporizador/contador del microcontrolador ATMEGA32, fuente: AVR


microcontroller and embedded systems, Mazidi, Naimi, Naimi

En el microcontrolador ATMEGA32 se tienen tres temporizadores: Timer 0, Timer 1


y Timer 2. El Timer 0 y el Timer 2 son de 8 bits en tanto que el Timer 1 es de 16 bits.
2.1 Programación de los temporizadores 0, 1 y 2
Cada temporizador necesita un pulso de reloj para cambiar de estado o contenido.
La fuente de reloj puede ser interna o externa. Si utilizamos una fuente de reloj
interna la frecuencia de reloj del temporizador será alimentada al temporizador, de
esta manera podremos generar retardos de tiempo y estaremos haciéndolo trabajar
como temporizador. En tanto que si alimentamos al temporizador con pulsos por
medio de un pin externo del microcontrolador, estaremos haciendo funcionar al
temporizador como contador.

E.H.G.M. W.M.
2.2 Registros básicos del temporizador
En cada uno de los temporizadores existe un registro TCNT que es el encargado de
almacenar el conteo de eventos. Después del reset todos los registros TCNT tienen
un valor igual a 0. Con cada pulso el valor del registro TCNT se incrementa en uno.
Este registro permite cargar valores en él o leer valores del mismo. Cada
temporizador tiene una bandera de desbordamiento TOV que se coloca en uno
cuando el conteo supera el valor máximo y retorna a 0.
Cada temporizador tiene también un registro de control TCCR para configurar los
modos de operación. Además se tiene un registro OCR para comparar su contenido
con el del registro TCNT, cuando ambos registros son iguales la bandera OCF se
coloca en 1 lógico.
Los registros temporizadores se encuentran en la memoria de entrada salida en la
sección de memoria RAM, por lo tanto es posible escribir valores en los registros
con la instrucción OUT y leer de ellos mediante la instrucción IN.

E.H.G.M. W.M.
Diagrama funcional de los temporizadores/contadores del microcontrolador
ATMEGA32, fuente: AVR microcontroller and embedded systems, Mazidi, Naimi,
Naimi

2.3 Programación del temporizador 0


2.3.1 Registro TCNT0
El registro TCNT0 del temporizador es de 8 bits por tanto su conteo va desde 0
hasta 255.

2.3.2 Registro TCCR0


El registro de control del temporizador contador 0 TCCR0 utilizado para controlar el
funcionamiento del temporizador.

E.H.G.M. W.M.
CS02:CS00 (Fuente de reloj del temporizador 0)
Estos bits se utilizan para configurar la fuente de reloj. Si se elige CS02:CS00 = 000
el contador es detenido, si se elige un valor entre 001 y 101 el oscilador es utilizado
como fuente de reloj y el temporizador funciona como tal, pudiéndose generar
retardos de tiempo.
CS02 CS01 CS00 DESCRIPCIÓN
0 0 0 Temporizador/contador detenido
0 0 1 Temporiza a la frecuencia de reloj
0 1 0 Divide la frecuencia de reloj clk/8
0 1 1 Divide la frecuencia de reloj clk/64
1 0 0 Divide la frecuencia de reloj clk/256
1 0 1 Divide la frecuencia de reloj clk/1024
1 1 0 Fuente de reloj externa en el pin T0. Flanco descendente.
1 1 1 Fuente de reloj externa en el pin T0. Flanco ascendente.

WGM01:WGM00 (Modo de trabajo del temporizador)


El temporizador 0 puede funcionar en cuatro modos de operación: Normal, limpia el
temporizador una vez alcanzado el valor de comparación (CTC), PWM y PWM
rápido.
WGM01 WGM00 FUNCIÓN
0 0 Normal
0 1 PWM, con corrección de fase
1 0 CTC (Limpia el temporizador alcanzado
el valor de comparación)
1 1 PWM de alta velocidad

Por el momento no utilizaremos los otros bits del registro TCCR0 y no los
explicaremos en detalle.
2.3.3 Registro TIFR
El registro TIFR contiene los bits bandera de los tres temporizadores del
microcontrolador ATMEGA 32.

E.H.G.M. W.M.
TOV0: Bit bandera de desbordamiento del temporizador 0
0: Timer0 no desborda
1: Timer0 se desborda

OCF0: Bit bandera de comparación de salida del temporizador 0


0: La comparación no ocurre
1: Se cumple con la comparación del valor del temporizador

TOV1: Bit bandera de desbordamiento del temporizador 1


OCF1B: Bandera de comparación B del temporizador 1
OCF1A: Bandera de comparación A del temporizador 1
ICF1: Bandera de captura de entrada
TOV2: Bit bandera de desbordamiento del temporizador 2
OCF2: Bit bandera de comparación de salida del temporizador 2
De este registro TIFR nos interesa el comportamiento del bit TOV0 que se coloca
en 1 lógico una vez que se desborda el conteo esto quiere decir cuando el registro
TCNT0 pasa de 255 a 00 ($FF a $00). El bit TOV0 = 1 a menos que sea borrado
por software. Para borrarlo es necesario escribir un 1 sobre el bit.
2.4 Pasos para programar el temporizador 0 en modo normal
1. Cargar el registro TCNT0 con el valor inicial de conteo.
2. Cargar el valor binario al registro TCCR0 que permita configurar el
temporizador 0 con o sin pre escaladores.
3. Monitorear el bit TOV0 para determinar si este se ha puesto en 1 lógico, si
es que se ha desbordado terminar el monitoreo del bit TOV0.(Debes salir del
bucle cuando TOV0 se pone alto.)
4. Detener el temporizador desconectando la fuente de reloj usando las
siguientes instrucciones:
LDI R20,0x00
OUT TCCR0,R20
5. Limpiar la bandera TOV0 para una siguiente temporización, usando las
siguientes instrucciones:
LDI R20,0x01
OUT TIFR,R20
6. Volver al paso 1 y cargar el registro TCNT0 de nuevo.
Es importante notar que los retardos del temporizador serán dependientes de la
frecuencia del oscilador que utilice el microcontrolador. Por tanto si no se usa pre
escaladores el tiempo de retardo utilizando los temporizadores será muy pequeño,
por ejemplo si cargamos el registro TCCR0 con el valor 0x01 se configura al

E.H.G.M. W.M.
temporizador 0 en modo normal, sin pre escalador. Considerando un cristal externo
de 4 MHz. tenderemos entonces un retardo de:
1
𝑇= = 0.250𝜇𝑠
4𝑀𝐻𝑧
Calculando que el temporizador 0 empiece en 0 su conteo y deba desbordarse
pasando 255 tendremos un retardo de:
255 ∙ 0.250𝜇𝑠 = 63.75𝜇𝑠
Retardo en muchos casos insuficiente para aplicaciones como el manejo de relojes
o control de motores paso.
2.5 Pasos para encontrar valores para cargar en el temporizador
Suponiendo que conocemos la cantidad de retardo del temporizador que
necesitamos, la pregunta es cómo encontrar los valores necesarios para el registro
TCNT0. Para calcular los valores a ser cargados en los registros TCNT0, podemos
usar los siguientes pasos:
1. Calcule el período del reloj temporizador utilizando la siguiente fórmula:
1
𝑇𝑐𝑙𝑘 =
𝑓𝑡𝑖𝑚𝑒𝑟
Donde 𝐹𝑡𝑖𝑚𝑒𝑟 es la frecuencia del reloj utilizada para el temporizador. Por
ejemplo, si configuramos el temporizador 0 en modo normal, sin pre
escalador 𝑓𝑡𝑖𝑚𝑒𝑟 = 𝑓𝑜𝑠𝑐𝑖𝑙𝑎𝑑𝑜𝑟
2. Divida el retardo de tiempo deseado por 𝑇𝑐𝑙𝑘 · Este resultado nos indica
cuántos ciclos de reloj necesitamos.
3. Realice 256 − 𝑛, donde 𝑛 es el valor decimal que obtuvimos en el Paso 2.
4. Convierta el resultado del paso 3 en hexadecimal, donde 𝑍𝑍 es el valor
hexadecimal inicial que debemos cargar en el registro del temporizador.
5. Establezca 𝑇𝐶𝑁𝑇0 = 𝑍𝑍.
3 Trabajo de laboratorio:
1. Transcribir el siguiente programa para el microcontrolador ATmega32 donde
se genera una señal cuadrada de ciclo útil 50% a través del pin 2 del puerto
B. Se utiliza el temporizador 0 para generar el retardo de tiempo con el pre
escalador en la escala 𝑓𝑜𝑠𝑐𝑖𝑙𝑎𝑑𝑜𝑟 /1024. Se sugiere un cristal oscilador de
4𝑀𝐻𝑧 o menor. Visualizar la frecuencia y el periodo de la señal mediante un
osciloscopio. Este es un ejemplo del uso del temporizador por Polling.
;
; Timer0_MetodoPolling.asm
;
; Created: 27/9/2021 10:54:16 a. m.
; Author : Erick Gutierrez MW
;

E.H.G.M. W.M.
.INCLUDE"M32DEF.INC" ;BIBLIOTECA CON LAS DEFINICIONES DEL MICRO
.ORG 0x00 ;INICIAMOS EN LA DIRECCIÓN 0
RJMP INICIO ;SALTO A LA ETIQUETA INICIO
INICIO: LDI R20,HIGH(RAMEND)
OUT SPH,R20
LDI R20,LOW(RAMEND)
OUT SPL,R20 ;INICIALIZACION DEL PUNTERO DE PILA

SBI DDRB,2 ;BIT 2 DEL PUERTO B CONFIGURADO COMO SALIDA


LDI R16,1<<2 ;R16=0b00000100
LDI R17,0 ;R17=0b00000000
OUT PORTB,R17 ;LIMPIAMOS EL PUERTO B
PRINCIPAL: RCALL RETARDO ;LLAMAMOS A LA RUTINA RETARDO
EOR R17,R16 ;OREX PARA CONMUTAR EL ESTADO DEL BIT PB2
OUT PORTB,R17 ;SE MUESTRA EL RESULTADO DE LA OPERACIÓN
RJMP PRINCIPAL ;BUCLE INFINITO
;***********************************************************************************
;RETARDO GENERADO CON EL TIMER0
RETARDO: LDI R20,0x06 ;R20=0x06
OUT TCNT0,R20 ;CARGAMOS EL TIMER0
LDI R20,0x05 ;R20=0b00000101
OUT TCCR0,R20 ;CONFIGURAMOS TIMER0 MODO NORMAL Y CLK/1024
BUCLE: IN R20,TIFR ;LEEMOS EL REGISTRO TIFR
SBRS R20,TOV0 ;SI TOV0=1, SALTA SIGUIENTE INSTRUCCIÓN
RJMP BUCLE ;SALTA A LA ETIQUETA BUCLE SI TOV0=0
LDI R20,0x00 ;R20=0b00000000
OUT TCCR0,R20 ;DETENEMOS EL TIMER0
LDI R20,(1<<TOV0) ;R20=0b00000001
OUT TIFR,R20 ;LIMPIAMOS LA BANDERA TOV0
RET ;RETORNO

Laboratorio Microprocesadores II
Uso del Timer0 por Polling
Elaborado por Erick WM

RESET
10k
22pF

4MHz 9
RESET PC0/SCL
22
23
PC1/SDA
22pF 13 24
XTAL1 PC2/TCK
12 25
XTAL2 PC3/TMS

f = 7.8125 Hz
26
PC4/TDO
OSCILADOR EXTERNO 40
39
PA0/ADC0 PC5/TDI
27
28 señal
PA1/ADC1 PC6/TOSC1
38 29
PA2/ADC2 PC7/TOSC2
Elaborado por Erick WM 37
PA3/ADC3 Erick WM
36
PA4/ADC4 PD0/RXD
14
128ms
- ATmega32 35
34
PA5/ADC5 PD1/TXD
15
16
PA6/ADC6 PD2/INT0
- Cristal de 4MHz 33
PA7/ADC7 PD3/INT1
17
18
PD4/OC1B
- Capacitores de 22pf 1
2
PB0/T0/XCK PD5/OC1A
19
20
PB1/T1 PD6/ICP1
- Botón Pulsador 3
4
PB2/AIN0/INT2 PD7/OC2
21
PB3/AIN1/OC0
- LED 5
6
PB4/SS 64ms
PB5/MOSI
- RESISTENCIAS 220R 7
PB6/MISO AREF
32
8
PB7/SCK Erick WM AVCC
30

ATMEGA32

LED

E.H.G.M. W.M.
2. Transcribir el siguiente programa para el microcontrolador ATmega32 donde
se genera una señal cuadrada de frecuencia 1𝐾𝐻𝑧. Este es un ejemplo del
uso del temporizador por medio de interrupciones.
;
; Timer0_MetodoInterrupciones.asm
;
; Created: 27/9/2021 2:11:46 p. m.
; Author : Erick Gutierrez MW
;

.INCLUDE"M32DEF.INC" ;BIBLIOTECA CON LAS DEFINICIONES DEL MICRO


.ORG 0x00 ;VECTOR DE RESET
RJMP INICIO ;SALTO A LA ETIQUETA INICIO
.ORG 0x16 ;VECTOR DE INTERRUPCIÓN DEL TIMER0 POR DESBORDAMIENTO
RJMP TIMER0_OVF ;SALTO A LA ETIQUETA TIMER0_OVF

INICIO: LDI R20,HIGH(RAMEND)


OUT SPH,R20
LDI R20,LOW(RAMEND)
OUT SPL,R20 ;INICIALIZACIÓN DEL PUNTERO DE PILA

SBI DDRB,2 ;BIT 2 DEL PUERTO B CONFIGURADO COMO SALIDA


LDI R16,1<<2 ;R16=0b00000100
LDI R17,0 ;R17=0b00000000
OUT PORTB,R17 ;LIMPIAMOS EL PUERTO B

LDI R20,0x06 ;R20=0x06


OUT TCNT0,R20 ;PRECARGAMOS EL TIMER0
LDI R21,0x02 ;R20=0b00000010
OUT TCCR0,R21 ;CONFIGURAMOS TIMER0 MODO NORMAL Y CLK/8
LDI R21,1<<TOIE0 ;R20=0b00000001
OUT TIMSK,R21 ;HABILITAMOS INTERRUPCIÓN TIMER0 POR DESBORDAMIENTO
SEI ;HABILITADOR GLOBAL DE INTERRUPCIONES

PRINCIPAL: RJMP PRINCIPAL ;BUCLE INFINITO


;***********************************************************************************
TIMER0_OVF: EOR R17,R16 ;OPERACION OREX PARA CONMUTAR EL ESTADO DEL BIT PB2
OUT PORTB,R17 ;SE MUESTRA EL RESULTADO DE LA OPERACIÓN
OUT TCNT0,R20 ;CARGAMOS EL TIMER0 PARA LA PROXIMA RONDA
RETI ;VOLVER DE LA INTERRUPCIÓN

E.H.G.M. W.M.
Laboratorio Microprocesadores II
Uso del Timer0 por Interrupciones
Elaborado por Erick WM

Elaborado por Erick WM


RESET
10k - ATmega32
22pF
- Cristal de 4MHz
- Capacitores de 22pf
4MHz 9
RESET PC0/SCL
22
23 - Botón Pulsador
PC1/SDA
22pF 13
12
XTAL1 PC2/TCK
24
25 - LED
XTAL2 PC3/TMS
PC4/TDO
26
- RESISTENCIAS
OSCILADOR EXTERNO 40
PA0/ADC0 PC5/TDI
27
39
38
PA1/ADC1 PC6/TOSC1
28
29 - Osciloscopio
PA2/ADC2 PC7/TOSC2
37
PA3/ADC3

f = 1KHz
36 14
PA4/ADC4 PD0/RXD
35 15
PA5/ADC5 PD1/TXD
34 16 señal
PA6/ADC6 PD2/INT0
33 17
PA7/ADC7 PD3/INT1
18
PD4/OC1B
Elaborado por Erick WM 1
PB0/T0/XCK PD5/OC1A
19
Erick WM
2
3
PB1/T1 PD6/ICP1
20
21 1ms
A PB2/AIN0/INT2 PD7/OC2
4
PB3/AIN1/OC0
5
B PB4/SS
6
PB5/MOSI
220R 7 32
C PB6/MISO AREF
8
PB7/SCK Erick WM AVCC
30
D
ATMEGA32

LED
0.5ms

3. Desarrollar un programa para el microcontrolador ATMEGA 32 que permita


generar cuatro diferentes frecuencias en KHz determinadas por los
siguientes dígitos del C.I. del estudiante con el apellido más corto:
Ejemplo: Si el C.I. tiene los siguientes dígitos: 2477389, realizaremos un
programa que por medio del temporizador genere las frecuencias:
9, 3, 7 y 2, lo que quiere decir que seleccionaremos los dígitos de derecha a
izquierda, saltando uno (2 4 7 7 3 8 9).
Ejemplo: Si el C.I. tiene los siguientes dígitos: 4921333 el programa deberá
generar las frecuencias 3 3 2 y 4, sin embargo como se repite el 3 dividimos
el segundo dígito 3 por 2, lo que nos da 1,5 la cual será nuestra segunda
frecuencia. Entonces debemos generar: 3KHz, 1,5KHz, 2KHz y 4KHz. En
caso de que un dígito del C.I. sea 0 se debe generar una frecuencia de 9
KHz. La selección de la frecuencia se realizara mediante un dipswitch
conectado al puerto B y la salida se verificara en el pin 3 del puerto D. Este
ejercicio se debe realizar en forma completa para obtener la primera
firma.

E.H.G.M. W.M.
4. Configure al ATmega32 para que funcione como un timbre, de manera que
genere un tono de 400 Hz durante 3 segundos cuando se presione un botón.
En la figura se muestra el acondicionamiento del hardware con la salida
esperada. Este ejercicio se debe realizar en forma completa para obtener
la segunda firma.

Laboratorio Microprocesadores II
Esquema para la firma 2
Elaborado por Erick WM

RESET
10k
22pF

4MHz 9
RESET PC0/SCL
22
23
PC1/SDA
22pF 13 24
XTAL1 PC2/TCK
12 25
XTAL2 PC3/TMS
26
PC4/TDO
OSCILADOR EXTERNO 40
39
PA0/ADC0 PC5/TDI
27
28
PA1/ADC1 PC6/TOSC1
38 29
PA2/ADC2 PC7/TOSC2
Elaborado por Erick WM 37
36
PA3/ADC3
14
ACTIVACION POR FLANCO DESCENDENTE
PA4/ADC4 PD0/RXD 10k
35 15
PA5/ADC5 PD1/TXD
34 16
PA6/ADC6 PD2/INT0
3s SOUNDER
33
PA7/ADC7 PD3/INT1
17
18
PD4/OC1B
1 19
PB0/T0/XCK PD5/OC1A
Erick WM 2
3
PB1/T1 PD6/ICP1
20
21
PB2/AIN0/INT2 PD7/OC2
4
PB3/AIN1/OC0
5
PB4/SS

INT0
6
PB5/MOSI
7 32
PB6/MISO AREF
400Hz 8
PB7/SCK Erick WM AVCC
30

ATMEGA32

Erick WM

E.H.G.M. W.M.

También podría gustarte