Vous êtes sur la page 1sur 11

INSTITUTO POLITCNICO NACIONAL

UNIDAD PROFESIONAL INTERDISCIPLINARIA DE INGENIERIA Y TECNOLOGIAS


AVANZADAS

Practica 2: Manejo de
Interrupcin Timer

Microprocesadores, Microcontroladores e Interfaz Profesor:


ValorCreativo.blogspot.com
Trejo Salazar David Benjamn
Equipo B1
Integrantes:

Grande Roldn Carlos


Medina Torres Jael Sebastian
Snchez Mata Mario Israel
Tovar Jaimes Daphne Mara
Grupo: 2MV4

-Practica 2: Manejo de Interrupcin Timer -

Practica 2: Manejo de
Interrupcin Timer
Contenido
Objetivo: ........................................................................................................................................ 3
Introduccin terica: ..................................................................................................................... 3
Desarrollo: ..................................................................................................................................... 4
Conclusiones: .............................................................................................................................. 11

-Practica 2: Manejo de Interrupcin Timer Objetivo:


Que el alumno aprenda el funcionamiento y el manejo de la rutina de interrupcin Timer .

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.

El timer0 del ATmega16 es un contador/temporizador de 8 bits (puede contar hasta 255)


sncrono, es decir, que depende del reloj del CPU (slo su reloj, no el CPU) para funcionar, es
un mdulo independiente del ncleo del AVR lo que reduce la carga del micro.

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.

El timer0 tiene 4 modos de funcionamiento que se pueden configurar programando sus


registros asociados:

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.

Fig. 1 Control de un motor a pasas

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

-Practica 2: Manejo de Interrupcin Timer .org 0x0 rjmp inicio;


.org 0x020 jmp int_timer_on
inicio:
ldi R16, low (ramend) ;carga la parte baja del R16
out SPL, R16; spl=set pointer
ldi R16, high (ramend)
out SPH, R16
clr
out
ldi
out
ldi
sts

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, 0x1


loop:
out portb, paso
rcall delay
lsr paso
cpi paso, 0x10
brne loop
ldi paso, 0x1
jmp loop*/

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

-Practica 2: Manejo de Interrupcin Timer cpi paso,0x10


brne final
ldi paso,0x01
comp_2:
cpi sw,1 ;si el sw de on esta activado (y adems ya verifiqu que sw giro
no est activado), realizo mi secuencia de giro a la izq
brne comp_3
out portb, paso2
lsl paso2
cpi paso,0x00
brne final
ldi paso,0x08
comp_3:
ldi paso, 0x00
out portb, paso

final: reti ;realiza un retorno desde una interrupcin. La direc. de retorno es


cargada desde la pila y el flag de interrupcin global est a set.
;Note que el registro de estado no se guarda automticamente al
entrar en una rutina de interrupcin, y no se restaura al volver de
;una rutina de la interrupcin.
.org 0x3C20 jmp int_timer_on

Paso 2. Ya generado el cdigo, se procede a la simulacin con el software de apoyo


Proteus:

Fig. 2. Simulacin de control del motor a pasos

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:

-Practica 2: Manejo de Interrupcin Timer .include "m328Pdef.inc"


.def temp= r18
.def paso= r17
.org 0x00
rjmp config
config:
ldi R16, low (ramend) ;carga la parte baja del R16
out SPL, R16; spl=set pointer
ldi R16, high (ramend)
out SPH, R16
ldi R16, 0b00000000
out ddrb, temp
ser R16
out DDRD, R16

out
ldi
out
ldi
sts

ldi R16, 0b10000011


TCCR0A, R16
r16, 0b00000010
TCCR0B, R16
R16, 0b00000010
TIMSK0, R16

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

-Practica 2: Manejo de Interrupcin Timer dec paso


out OCR0A,paso
rcall mini
rjmp loop
mini:
; =============================
;
delay loop generator
;
1000 cycles:
; ----------------------------; delaying 999 cycles:
;ldi R20, $03
ldi R20, $60
WGLOOP00: ldi R21, $6E
WGLOOP11: dec R21
brne WGLOOP11
dec R20
brne WGLOOP00
; ----------------------------; delaying 1 cycle:
nop
; =============================
ret

Paso2. Ya generado el cdigo, se procede a la simulacin con el software de apoyo


Proteus:

Fig. 3 Simulacin del control de la intensidad de un led

Ejercicio 3.- Realizar un generador de frecuencias con la ayuda de la interrupcin timer


CTC. Este generador debe de tener las frecuencias de las notas musicales como se
muestra en la figura, de tal manera que se elabore un pequeo teclado. Este teclado cada
vez que se presiones un botn, debe de sonar la nota musical 0.5 segundos, mostrar las
frecuencias en un osciloscopio.

-Practica 2: Manejo de Interrupcin Timer -

Paso.1 Se introduce el cdigo:


include"m328Pdef.inc"
;se definen los registros universales
.def MASK
= r17
.cseg
.org 0x0000
;Vector de interrupciones
rjmp DELAY_05S

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

-Practica 2: Manejo de Interrupcin Timer MI:


FA:
SOL:
LA:
SI:

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

DELAY_05S: com r18


mov r19, MASK
and r19, r18
out PORTB, r19
reti

Fig. 4 Simulacin tercer ejercicio

10

-Practica 2: Manejo de Interrupcin Timer Conclusiones:


En la segunda practica se estudio el manejo de la interrupcin timer , que es muy util cuando
se tiene un conjunto de codigo que se tiene que ejecutar cada determinado tiempo , mientras
que en el codigo principal puede seguir ejecutando y cuando se llama a la interrupcion regresa
al mismo momento que fue llamado.Tambien se hace el uso de PWM para poder variar la
intensidad y frecuencia.

Grande Roldn Carlos


Para esta prctica, pude darme cuenta del uso general de las Interrupciones dentro del
lenguaje ensamblador mediante la herramienta de utilizacin Atmel Studio. Mediante la
prctica, al trabajar con el uso del timer en sus diferentes configuraciones como lo son OverFlow, fast PWM o CTC, pude darme cuenta de la utilidad que estas tienen dentro de la
programacin de nuestro integrado 328P. Sin duda considero que el manejo de estas
instrucciones es una parte fundamental que debemos manejar para la programacin en AVR.
Medina Torres Jael Sebastian

Las interrupciones en el mundo de los microcontroladores son extremadamente tiles y


comunmente utilizadas en todo tipo de proyectos. Hacen que el chip est atento a un
particular evento y una vez detectado, detiene su ejecucin actual para ejecutar un trozo de
cdigo especfico. Pueden ser utilizadas para un amplio abanico de cosas como para despertar
el microcontrolador
Snchez Mata Mario Israel

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

Vous aimerez peut-être aussi