Académique Documents
Professionnel Documents
Culture Documents
Practica 2: Manejo de
Interrupcin Timer
Practica 2: Manejo de
Interrupcin Timer
Contenido
Objetivo: ........................................................................................................................................ 3
Introduccin terica: ..................................................................................................................... 3
Desarrollo: ..................................................................................................................................... 4
Conclusiones: .............................................................................................................................. 11
Introduccin terica:
Los timers o temporizadores son caractersticas estndar de casi todos los microcontroladores,
as que es muy importante aprender su uso. Los microcontrolador AVR tiene temporizadores
muy poderosos y multifuncionales, pueden medir tiempo, generar frecuencias, contar eventos
externos, hacer comparaciones, sincronizar tareas, generar una onda PWM, etc.
El tema de los timers es un tanto complicado y extenso, en esta serie de post se trata de dar
una breve explicacin del funcionamiento y programacin del timer0 en el ATmega16.
Cada timer tiene asociado un reloj que fija el paso que debe marcar y una o ms unidades
compradoras. El reloj del timer0 es derivado del reloj del CPU y puede tener dos fuentes
distintas: si se usa la fuente de reloj interna del CPU, el reloj del CPU pasa primero por un
divisor de frecuencia (prescaler) y la salida de este divisor va al timer, si se usa una fuente de
reloj externa por el pin T0, primero ser sincronizada con el reloj interno antes de pasar al
prescaler.
Los valores de divisin (prescaler) ya estn establecidos para cada timer, en el caso del timer0
la frecuencia del CPU puede ser dividida por un factor de 1, 8, 64, 256 o 1024, generando as la
frecuencia de conteo. Por cada unidad comparadora existe un pin asociado a ella,
normalmente marcado como OCx (Output Compare x) que es donde se puede generar una
frecuencia de salida por la unidad comparadora del timer.
Modo Normal: El timer cuenta desde 0 a 255 y se desborda reiniciando la cuenta. Puede
generar interrupcin al desbordarse o cuando la comparacin del conteo concuerde con un
valor determinado.
-Practica 2: Manejo de Interrupcin Timer Modo CTC: En este modo el timer0 es reiniciado a 0 cuando una comparacin entre el timer
y un valor determinado coincide. Opcional mente puede configurarse para que al haber una
coincidencia genera una interrupcin o cambie el estado de un pin.
Modo Fast PWM: Este modo permite generar una onda PWM de alta frecuencia. El timer
cuenta desde 0 a 255 y reinicia la cuenta. Con cada cuenta el valor del timer0 se compara con
un valor determinado que cuando coinciden cambia el estado de uno de los pines de salida
PWM, y cuando se reinicia el timer este pin vuelve a cambiar su estado.
Modo Phase Correct PWM: Este modo ofrece una onda PWM de alta resolucin, a diferencia
del modo Fast PWM, el timer cuenta hacia adelante y hacia atrs antes de hacer el cambio de
estado del pin PWM, es decir cuenta de 0 a 255 al llegar a 255 cuenta de 255 a 0, obteniendo
una salida PWM ms limpia pero de menor frecuencia.
Desarrollo:
Ejercicio 1.-Realizar un programa que controle un motor a pasos con la ayuda de la
interrupcin timer overflow (calcular una frecuencia de paso a 240Hz), el control debe de
considerar el encendido y apagado, tener en cuenta que no se debe de energizar ninguna
bobina cuando este apagado; en el control tambin se debe considerar el cambio de giro
(a favor y en contra a las manecillas del reloj). Antes de conectar el motor se debe de
mostrar la secuencia con ayuda de 4 led. Los puertos a utilizar son definidos por el
programador.
Paso1. Como en las prcticas anteriores se procede a realizar los pasos para poder
introducir el cdigo en AVRStudio, quedando de la siguiente forma:
.include "m328pdef.inc" ;uso de librera
.def paso=R17 ;asignacin directa a un solo registro
.def paso2=R18 ;asignacin directa a un solo registro
.def sw=R19
R16
TCCR0A, R16
R16, 0x02
TCCR0B, R16
R16, 0x01
TIMSK0, r16
ldi R16, 0x0F ;set register $FF, para hacer el puerto B de salida
out DDRB, R16
ldi R16, 0xFC ;asigno ceros a los 2 primeros bits para declararlos como mis
entradas (0b 1111 1100)
out DDRD, R16
sei ;interrupcin global (flag) habilitada
ldi paso, 0x01 ;CHECAR SI NO AFECTA ESTA INSTRUCCIN (SI NO SE QUEDA PASO
SIEMPRE EN ESTE ESTADO DE ASIGNACIN 1)
ldi paso2, 0x08
loop:
in sw,pind ;asignas sw on/off y sw giro al puerto D
sbrc sw,1; salta la siguiente linea si el sw giro no est activado
ldi sw,2 ; si hay un 1 en mi sw 1 (giro), asigno el valor dos decimal (10) a mi
switch
sbrc sw,0 ;salta la siguiente linea si el sw on/off no est activado
ldi sw, 1 ; si hay un 1 en mi sw 0 (on/off) asigno el valor de uno decimal
ldi sw,0
;out portb, sw
;SE ESTAN HACIENDO PRUEBAS QUITANDO Y PONIENDO ESTA INSTRUCCIN
;out portb, paso ;CHECAR SI LA SALIDA DEL PASO RUMBO A LOS LEDS VA AQUI O AL
PRINCIPIO DEL LOOP*/
jmp loop
int_timer_on:
cpi sw,2 ;si el sw giro esta activado, realizo mi secuencia de giro a la der
brne comp_2
out portb, paso
lsr paso
Ejercicio 2.- Con la ayuda del timer/counter 0, en la configuracin fast PWM, realizar el
control de intensidad de Luz de un Led ultra-brillante, tener en cuenta las siguientes
especificaciones para su control. Voltaje Max 4V, Voltaje Minimo, corriente mxima 20
mA. La intensidad se debe de controlar con dos botones (int - y int +).
Paso1. Se introduce el cdigo en AVRStudio, quedando de la siguiente forma:
out
ldi
out
ldi
sts
ldi paso, 3
out OCR0A, paso
sei
loop:
rcall mini
sbic pinb,0
rjmp decrementa
sbic pinb,1
rjmp incrementa
rjmp loop
incrementa:
ldi temp, 0b00000010
out portb, temp
inc paso
inc paso
inc paso
inc paso
inc paso
inc paso
out OCR0A,paso
rcall mini
rjmp loop
decrementa:
ldi temp, 0b00000001
out portb, temp
dec paso
dec paso
dec paso
dec paso
dec paso
ldi
out
ldi
out
r16,
SPL,
r16,
SPH,
LOW (RAMEND)
r16
HIGH (RAMEND)
r16
ser
out
clr
out
ldi
out
ldi
out
ldi
sts
sei
r16
DDRB,
r16
DDRD,
r16,
TCCR0A,
r16,
TCCR0B,
R16,
TIMSK0,
r16
;Salida de datos
R16
0b10000011
r16
0b00000010
r16
0b00000010
r16
;Entrada de fatos
loop:
DO:
RE:
sbic
jmp
sbic
jmp
sbic
jmp
sbic
jmp
sbic
jmp
sbic
jmp
sbic
jmp
jmp
PIND,
DO
PIND,
RE
PIND,
MI
PIND,
FA
PIND,
SOL
PIND,
LA
PIND,
SI
FINAL
0b0001
ldi
jmp
ldi
r16,
SONAR
r16,
239
0b0010
0b0011
0b0100
0b0101
0b0110
0b111
213
jmp
ldi
jmp
ldi
jmp
ldi
jmp
ldi
jmp
ldi
jmp
SONAR: out
ldi
rcall
ldi
FINAL: jmp
SONAR
r16,
SONAR
r16,
SONAR
r16,
SONAR
r16,
SONAR
R16,
SONAR
190
179
159
142
127
OCR0A, r16
MASK, 1
DELAY_05S
MASK, 0
loop
10
En esta prctica se vio que las interrupciones son eventos especiales que se generan interna
o externamente en el microcontrolador que pausa momentneamente la ejecucin del
programa para realizar una tarea breve, y despus volver al punto donde se qued ejecutando
el programa. Esto sirve para que el microcontrolador no este siempre trabajando, por ejemplo,
en checar el estado de una entrada constantemente, y solo poner atencin cuando el evento
deseado ocurre.
Tovar Jaimes Daphne Mara
11