SESION 4 ATMEGA8.pdf

Embed Size (px)

Citation preview

  • 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