Post on 02-Jun-2018
8/11/2019 SESION 4 ATMEGA8.pdf
1/9
PONTIFICIA UNIVERSIDAD CATLICA DEL PERFACULTAD DE CIENCIAS E INGENIERASECCIN DE ELECTRICIDAD Y ELECTRNICA
Curso de Microcontroladores ATmega8 1
SESIN 04TEMPORIZADORES
PARTE TERICA
TEMPORIZADORES.TEMPORIZADOR CONTADOR 0 (TIMER0)TEMPORIZADOR CONTADOR 1 (TIMER1)
PARTE PRCTICA
PROBLEMA DESARROLLADO 1 (Timer0)PROBLEMA DESARROLLADO 2 (Timer1 modo CTC)
8/11/2019 SESION 4 ATMEGA8.pdf
2/9
PONTIFICIA UNIVERSIDAD CATLICA DEL PERFACULTAD DE CIENCIAS E INGENIERASECCIN DE ELECTRICIDAD Y ELECTRNICA
Curso de Microcontroladores ATmega8 2
TEMPORIZADORES
Los temporizadores son mdulos que lo utilizamos para trabajar con periodos de tiempo, ya sea paragenerar eventos a perodos de tiempo deseados (generar seales PWM, muestrear una seal a perodosde tiempo fijo, etc.) o para calcular perodos de tiempo de eventos externos al microcontrolador(calcular la frecuencia de una onda cuadrada).
El microcontrolador ATmega8 cuenta con tres temporizadores, dos de ellos de 8 bits y uno de 16 bits.En el presente trabajo se explicar brevemente dos de ellos.
TEMPORIZADOR CONTADOR 0 (TIMER0)
En el manual del microcontrolador pueden observar el siguiente diagrama:
Expliquemos brevemente el funcionamiento de este mdulo:
Para el TIMER0, en el grfico se reemplazan las n por 0, as tenemos TCCR0, TCNT0, T 0 y clkT0.El registro TCNT0es un contador de carrera libre de 8 bits (es decir una vez que llega a $FF vuelve a$00), cada vez que se produce un desborde el bit TOV0 toma el valor lgico de1.
TCNT0 se incrementa segn la seal clkT0 , que puede ser el reloj del sistema, una sealque venga de un pre escalador o una seal externa la microcontrolador en el pin T0.
Para configurar la fuente de clkT0 , es decir la frecuencia a la que se va a incrementarnuestro contador se tiene el registro TCCR0:
8/11/2019 SESION 4 ATMEGA8.pdf
3/9
PONTIFICIA UNIVERSIDAD CATLICA DEL PERFACULTAD DE CIENCIAS E INGENIERASECCIN DE ELECTRICIDAD Y ELECTRNICA
Curso de Microcontroladores ATmega8 3
CS02 CS01 CS00 Descripcin0 0 0 No hay fuente de reloj (TCNT0 detenido)0 0 1 clkI/O (Sin pre escalamiento)
0 1 0 clkI/O / 8 (Del pre escalador)0 1 1 clkI/O / 64 (Del pre escalador)1 0 0 clkI/O / 256 (Del pre escalador)1 0 1 clkI/O / 1024 (Del pre escalador)1 1 0 Reloj externo en el pin T0 (Flanco de bajada)1 1 1 Reloj externo en el pin T0 (Flanco de subida)
Recordar que en los mdulos del laboratorio, la frecuencia de c lkI/Opor defecto es 1MHz.
La manera de temporizar con este mdulo es fijar el perodo con el que se va a incrementar elcontador y de esta manera se puede saber cada cuanto tiempo se va a producir un desborde
y fijarnos constantemente en TOV0, cuando tome el valor de 1, es que se ha producido eldesborde.
Para obtener una mayor resolucin en la temporizacin podemos escribir, inmediatamentedespus de producido el desborde, un valor ($XX) en el registro TCNT0 de tal manera que lacuenta no vaya necesariamente de $00 a $FF, sino del valor escrito ($XX) a $FF.
TEMPORIZADOR CONTADOR 1 (TIMER1)
El TIMER1 es un temporizador de 16 bits. Al igual que el TIMER0 tiene un registro contadorde carrera libre, pero este registro es de 16 bits (TCNT1).
La frecuencia de incremento de cuenta del TCNT1 es configurable por los bits de controlCS12, CS11 y CS10 ubicados en el registro TCCR1B.
Para temporizar podemos utilizar el mismo mtodo usado que en el TIMER0, es decir
muestrear el bit TOV1, que toma el valor lgico de 1 cada vez que hay un desborde, es decircuando TCNT1 pasa de $FFFF a $0000.
Pero este temporizador cuenta adems con dos unidades de comparacin, cada una de estasunidades cuenta con un registro de 16 bits (OCR1A y OCR1B). Cuando el contador alcanza a
estos registros se dice que se ha producido una comparacin exitosa, al producirse unacomparacin exitosa un bit toma el valor lgico de uno.
El bit OCF1A se pone a 1 si TCNT1 iguala al registro OCR1A.
8/11/2019 SESION 4 ATMEGA8.pdf
4/9
PONTIFICIA UNIVERSIDAD CATLICA DEL PERFACULTAD DE CIENCIAS E INGENIERASECCIN DE ELECTRICIDAD Y ELECTRNICA
Curso de Microcontroladores ATmega8 4
El bit OCF1B se pone a 1 si TCNT1 iguala al registro OCR1B.
De esta manera podemos temporizar a una frecuencia deseada. Conociendo la frecuencia deincremento de TCNT1 (frecuencia configurable) podemos calcular el valor que debemos dar aOCR1X para que la comparacin exitosa se produzca a la frecuencia deseada.
Modo de trabajo CTC
Cuando usamos las unidades de comparacin del TIMER1 podemos trabajar en lo que seconoce como modo CTC (Clear Timer on Compare Match), en este modo de trabajo cada vezque se produce la comparacin exitosa el contador TCNT1 vuelve a $0000; es decir elcontador TCNT1 contar desde $0000 a $XXXX, donde $XXXX es el valor que hemos fijado enuno de los registros de comparacin (OCF1X). Jugando con el valor de $XXXX y la frecuenciacon la que se incrementa TCNT1 podemos temporizar a una frecuencia deseada.
8/11/2019 SESION 4 ATMEGA8.pdf
5/9
PONTIFICIA UNIVERSIDAD CATLICA DEL PERFACULTAD DE CIENCIAS E INGENIERASECCIN DE ELECTRICIDAD Y ELECTRNICA
Curso de Microcontroladores ATmega8 5
PARTE PRCTICATemporizadores
I. OBJETIVOAprender a programar el temporizador que presenta el microcontrolador Atmega8
II. MATERIALES 1 mdulo de entrenamiento AvrPUCP -Mega8. 1 Mdulo de entrada/salida. 1 Cable de programacin 1 computadora personal. Entorno de desarrollo VMLAB Cables de conexin
III.PROCEDIMIENTO
Problema 1 (Timer0)
Se va a desarrollar un programa que genere una seal cuadrada con periodo de 20ms. La salidaser por el pin PB0.
20ms
10ms
Para hacer esto vamos a temporizar cada 10ms para cambiar el valoro lgico de PB0 de 0 a 1
y viceversa.
INICIO
Configuramos puerto de
salida
Configurar temporizador
(preescalamiento 1:64)
Tmr0_sondeo
Desborde ?NO
TCNT0100
Cambiamos valor lgico de
PB0
SI
8/11/2019 SESION 4 ATMEGA8.pdf
6/9
PONTIFICIA UNIVERSIDAD CATLICA DEL PERFACULTAD DE CIENCIAS E INGENIERASECCIN DE ELECTRICIDAD Y ELECTRNICA
Curso de Microcontroladores ATmega8 6
;**********************************************************************;**********************************************************************;***** PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU *****;***** Laboratorio de Sistemas Digitales *****;***** *****;***** Nombre: Tmr0Sond.asm *****;***** Autor: Rolando Snchez *****;***** Fecha: Diciembre 2006 *****;***** *****;***** Descripcin: Se enva al PB0 una seal cuadrada con un *****;***** periodo de 20ms. Utilizamos el TIMER0 *****;***** *****;**********************************************************************;**********************************************************************
.include "C:\VMLAB\include\m8def.inc"
.DSEG.ORG $60
.CSEG.ORG $000
rjmp INICIO
;**********************************************************************;***** PROGRAMA PRINCIPAL *****;**********************************************************************
INICIO: LDI R16, HIGH(RAMEND) ; Inicializamos la pilaOUT SPH, R16LDI R16, LOW(RAMEND)OUT SPL, R16
LDI R16, $FF ; Configuramos PORTB como salidaOUT DDRB, R16LDI R16, $00OUT PORTB, R16
LDI R16, $03OUT TCCR0, R16 ; Preescalamiento del TIMER0 1:64
SONDEA_TOV0: IN R16, TIFR ; Sondeamos TOV0 (bit0 de TIFR)ANDI R16, $01 ; esperamos que sea 1CPI R16, $01BRNE SONDEA_TOV0
LDI R16, $64 ; TCNT0
8/11/2019 SESION 4 ATMEGA8.pdf
7/9
PONTIFICIA UNIVERSIDAD CATLICA DEL PERFACULTAD DE CIENCIAS E INGENIERASECCIN DE ELECTRICIDAD Y ELECTRNICA
Curso de Microcontroladores ATmega8 7
PROBLEMA 2 (Timer1_modo CTC)
El siguiente ejemplo muestra una cuenta en 8 leds que se incrementa cada 250ms. Vamos a trabajarcon el Timer1 en modo CTC. Cada vez que se produce la comparacin exitosa el bit OCF1A toma el
valor de 1. Se va a sondear el estado de este bit y cada vez que tome el valor lgico de 1incrementamos la cuenta. Es necesario poner el OCF1A en 0 para volver a sondear (Notar que paraque este bit tome el valor de 0 tenemos que escribir un 1).
El hardware de este problemaest conformado por ocho ledsconectados al puerto B.
Aadir al archivoTimer1_sondeo.prj las siguientes lneas:
D1 VDD N1
R1 N1 N2 180
X1 ND2 PB0 PB0 N2
D2 VDD N3
R2 N3 N4 180
X2 ND2 PB1 PB1 N4
D3 VDD N5
R3 N5 N6 180
X3 ND2 PB2 PB2 N6
D4 VDD N7
R4 N7 N8 180
X4 ND2 PB3 PB3 N8
D5 VDD N9
R5 N9 N10 180
X5 ND2 PB4 PB4 N10
D6 VDD N11
R6 N11 N12 180
X6 ND2 PB5 PB5 N12
D7 VDD N13
R7 N13 N14 180
X7 ND2 PB6 PB6 N14
D8 VDD N15
R8 N15 N16 180
X8 ND2 PB7 PB7 N14
8/11/2019 SESION 4 ATMEGA8.pdf
8/9
PONTIFICIA UNIVERSIDAD CATLICA DEL PERFACULTAD DE CIENCIAS E INGENIERASECCIN DE ELECTRICIDAD Y ELECTRNICA
Curso de Microcontroladores ATmega8 8
INICIO
Configurar puertos desalida para leds
cuenta0
Se cumpli el
tiempo ?
LEDScuenta
SI
NO
Tmr1_sondeo
Configurar el
Temporizador
cuentacuenta+ 1
;**********************************************************************;**********************************************************************;***** PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU *****;***** Laboratorio de Sistemas Digitales *****;***** *****;***** Nombre: Tmr1Sond.asm *****;***** Autor: Rolando Snchez *****;***** Fecha: Mayo 2004 *****;***** *****;***** Descripcion: Mostramos en ocho leds, conectados al *****;***** Puerto B una cuenta que se incrementa cada *****;***** 250ms. Utilizamos la interrupcin por *****;***** Comparacin exitosa del TIMER1 en modo CTC A. *****;***** *****;**********************************************************************;**********************************************************************
.include "m8def.inc"
.DSEG.ORG $60
CUENTA: .byte 1
.CSEG
;**********************************************************************;***** PROGRAMA PRINCIPAL *****;**********************************************************************
INICIO: LDI R16, HIGH(RAMEND) ; Inicializamos la pilaOUT SPH, R16LDI R16, LOW(RAMEND)OUT SPL, R16
LDI R16, $FF ; Configuramos PORTB como salidaOUT DDRB, R16
RCALL CONFIGURA_TMR1
8/11/2019 SESION 4 ATMEGA8.pdf
9/9
PONTIFICIA UNIVERSIDAD CATLICA DEL PERFACULTAD DE CIENCIAS E INGENIERASECCIN DE ELECTRICIDAD Y ELECTRNICA
Curso de Microcontroladores ATmega8 9
LDI R16, $00 ; Inicializamos CUENTA y PORTB con $00OUT PORTB, R16STS CUENTA, R16
SONDEA_OCF1A: IN R16, TIFR ; Sondeamos OCF1A (bit4 de TIFR)ANDI R16, $10 ; esperamos que sea 1
CPI R16, $10BRNE SONDEA_OCF1A
IN R16, TIFR ; Se pone 0 el bit OCF1AORI R16, $10OUT TIFR, R16
LDS R16, CUENTA ; Incrementamos el valor de CUENTAINC R16STS CUENTA, R16
OUT PORTB, R16 ; Lo visualizamos en el puerto
RJMP SONDEA_OCF1A ; Regresamos al lazo
;**********************************************************************;***** Subrutina que Configura la Interrupcin TIMER1 COMPA *****;**********************************************************************
CONFIGURA_TMR1:; Preescalamiento 1:1024; Modo CTC
LDI R16, (0