ejercicio 07 timers

15
SISTEMAS MICROPROCESADOS: Uso de interrupciones generadas por el Timer1 Página 1 Ing. Jaime E. Velarde Departamento de Electrónica, Telecomunicaciones y Redes de Información EJERCICIOS DE CONFIGURACIÓN DEL TIMER1 PARA UTILIZAR LAS INTERRUPCIONES QUE GENERA ENUNCIADO DEL EJERCICIO 1: Modificar al programa del reloj digital que se muestra en seis displays de cátodo común; de manera que se reemplace al lazo de repetición que sirve para el incremento de los segundos por interrupciones generadas cada segundo mediante el Timer1, configurado en el Modo CTC. Las modificaciones que sea realizan en el programa principal son: 1. Adicionar el Vector de Interrupciones por emparejamiento del Timer1 con el Registro A de Comparación. 2. Incluir en el programa principal la programación del Timer1 y habilitación de las interrupciones para que se generen cada segundo. 3. Modificación en el programa principal el lazo de repetición donde se muestra el reloj digital en los displays, eliminando los incrementos cada segundo. Las modificaciones que sea realizan en las rutinas de interrupción son: 4. En rutina de la Interrupción Externa 2 incluir el cambio de estado del Timer1, entre detenido y corriendo. 5. Modificar las rutinas de las Interrupciones Externa 1 y Externa 0 para que se encarguen solo de los incrementos de los contadores; ya que el programa principal se encarga de publicarlos. 6. Incorporación de la rutina de Interrupción del Timer1 por emparejamiento con el Registro A de Comparación, que incrementa en un segundo al reloj digital para ser publicado por programa principal. ANÁLISIS PARA CONFIGURAR AL TIMER1, A FIN DE INCREMENTAR LOS CONTADORES CADA SEGUNDO MEDIANTE INTERRUPCIONES: La configuración del Timer1 que conviene para esta aplicación es la de Borrar el Timer al emparejar con el Comprador o CTC. Se debe mantener desactivada la salida del Timer, porque no se va a generar una señal. Y se necesita establecer el valor del registro de comparación OCR1A, con el fin de generar interrupciones cada segundo. Para que transcurra un segundo, considerando que el Timer tiene el mismo reloj que el microcontrolador (sin pre escalamiento) e igual a 1MHz, es necesario contar 1´000.000 de pulsos lo que no se puede hacer con 16 bits. La siguiente alternativa es que el Timer tenga como reloj el del microcontrolador divido para 8 (con pre escalamiento de 8), lo que significa que se deben contar 125.000 pulsos, que tampoco se puede contar con 16 bits. Como tercera opción es alimentar al Timer con el reloj del microcontrolador divido para 64 (con pre escalamiento de 64), lo que significa que se deben contar 15.265 pulsos, que si se puede contar con 16 bits; por lo tanto, está será la configuración para el escalamiento del reloj del Timer y el valor para el registro OCR1A. Finalmente se debe habilitar las interrupciones por emparejamiento con el OCR1A y reservar el respectivo vector.

Upload: jaime-e-velarde

Post on 01-Jul-2015

2.462 views

Category:

Education


6 download

DESCRIPTION

Ejercicio para utilizar el Timer 1 como generador de interrupciones cada segundo, cada 10 milisegundos o mediante una tabla de valores

TRANSCRIPT

Page 1: Ejercicio 07 Timers

SISTEMAS MICROPROCESADOS: Uso de interrupciones generadas por el Timer1 Página 1

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

EJERCICIOS DE CONFIGURACIÓN DEL TIMER1

PARA UTILIZAR LAS INTERRUPCIONES QUE

GENERA

ENUNCIADO DEL EJERCICIO 1:

Modificar al programa del reloj digital que se muestra en seis displays de cátodo

común; de manera que se reemplace al lazo de repetición que sirve para el incremento

de los segundos por interrupciones generadas cada segundo mediante el Timer1,

configurado en el Modo CTC.

Las modificaciones que sea realizan en el programa principal son:

1. Adicionar el Vector de Interrupciones por emparejamiento del Timer1 con el

Registro A de Comparación.

2. Incluir en el programa principal la programación del Timer1 y habilitación de las

interrupciones para que se generen cada segundo.

3. Modificación en el programa principal el lazo de repetición donde se muestra el

reloj digital en los displays, eliminando los incrementos cada segundo.

Las modificaciones que sea realizan en las rutinas de interrupción son:

4. En rutina de la Interrupción Externa 2 incluir el cambio de estado del Timer1,

entre detenido y corriendo.

5. Modificar las rutinas de las Interrupciones Externa 1 y Externa 0 para que se

encarguen solo de los incrementos de los contadores; ya que el programa

principal se encarga de publicarlos.

6. Incorporación de la rutina de Interrupción del Timer1 por emparejamiento con el

Registro A de Comparación, que incrementa en un segundo al reloj digital para

ser publicado por programa principal.

ANÁLISIS PARA CONFIGURAR AL TIMER1, A FIN DE INCREMENTAR

LOS CONTADORES CADA SEGUNDO MEDIANTE INTERRUPCIONES:

La configuración del Timer1 que conviene para esta aplicación es la de Borrar el Timer

al emparejar con el Comprador o CTC. Se debe mantener desactivada la salida del

Timer, porque no se va a generar una señal. Y se necesita establecer el valor del registro

de comparación OCR1A, con el fin de generar interrupciones cada segundo.

Para que transcurra un segundo, considerando que el Timer tiene el mismo reloj que el

microcontrolador (sin pre escalamiento) e igual a 1MHz, es necesario contar 1´000.000

de pulsos lo que no se puede hacer con 16 bits. La siguiente alternativa es que el Timer

tenga como reloj el del microcontrolador divido para 8 (con pre escalamiento de 8), lo

que significa que se deben contar 125.000 pulsos, que tampoco se puede contar con 16

bits. Como tercera opción es alimentar al Timer con el reloj del microcontrolador divido

para 64 (con pre escalamiento de 64), lo que significa que se deben contar 15.265

pulsos, que si se puede contar con 16 bits; por lo tanto, está será la configuración para el

escalamiento del reloj del Timer y el valor para el registro OCR1A.

Finalmente se debe habilitar las interrupciones por emparejamiento con el OCR1A y

reservar el respectivo vector.

Page 2: Ejercicio 07 Timers

SISTEMAS MICROPROCESADOS: Uso de interrupciones generadas por el Timer1 Página 2

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

CODIFICACIÓN DEL PROGRAMA PRINCIPAL Y DE LAS RUTINAS DE

INTERRUPCIÓN

.NOLIST

.INCLUDE "m164pdef.inc"

.LIST

; DEFINICIÓN DE ETIQUETAS PARA LOS REGISTROS

.DEF AUX1 = R16 ; REGISTRO AUXILIAR1

.DEF AUX2 = R17 ; REGISTRO AUXILIAR2

.DEF AUX3 = R18 ; REGISTRO AUXILIAR3

.DEF HORAS = R19 ; REGISTRO PARA LAS HORAS

.DEF MINUT = R20 ; REGISTRO PARA LAS MINUTOS

.DEF SEGUN = R21 ; REGISTRO PARA LOS SEGUNDOS

.DEF AUXI1 = R23 ; REGISTRO AUXILIAR 1 INTERRUPCIONES

.DEF AUXI2 = R24 ; REGISTRO AUXILIAR 2 INTERRUPCIONES

; SEGMENTO DE CÓDIGO o MEMORIA FLASH

.CSEG

JMP PROGP

.ORG $02 ; RUTINA DE LA INTERRUPCIÓN EXTERNA 0

JMP RUTINT0

.ORG $04 ; RUTINA DE LA INTERRUPCIÓN EXTERNA 1

JMP RUTINT1

.ORG $06 ; RUTINA DE LA INTERRUPCIÓN EXTERNA 2

JMP RUTINT2

.ORG $1A ; RUTINA DE LA INTERRUPCIÓN DEL TIMER1

JMP RUTTIM1

; INICIALIZACIÓN DEL PUNTERO DEL STACK Y DE LOS PÓRTICOS

PROGP: LDI AUX1,LOW(RAMEND)

OUT SPL,AUX1

LDI AUX1,HIGH(RAMEND)

OUT SPH,AUX1

LDI AUX1,0B00000100

OUT PORTB,AUX1 ; PULL-UP INT2 = PB2

LDI AUX1,0B00001100

OUT PORTD,AUX1 ; PULL-UP INT0/1 = PD2/3

; PROGRAMACIÓN DE LAS INTERRUPCIONES EXTERNAS

LDI AUX1,0B000101111

STS EICRA,AUX1 ; INT2 T. NEGAT. INT1/0 T. POS.

LDI AUX1,0B00000100

OUT EIMSK,AUX1 ; INT2 HABILITADA

LDI AUX1,0B00000111

OUT EIFR,AUX1 ; BORRAR LAS BANDERAS

; PROGRAMACIÓN DEL TIMER1

; COM1A1:0=00 DESCONECTADA DE LA SALIDA OC1A (PD5)

; COM1B1:0=00 DESCONECTADA DE LA SALIDA OC1B (PD4)

; DOS BITS RESERVADOS = 00

; WGM11:0=00 CONFIGURACIÓN CTC (MODO 4)

LDI AUX1,0B00000000

STS TCCR1A,AUX1

; ICNC1=0 DESHABILITA CANCELACIÓN DE RUIDO

; ICES1=0 TRANSICIÓN NEGATIVA PARA LA ENTRADA DE CAPTURA

; BIT RESERVADO = 0

; WGM13:2=01 CONFIGURACIÓN CTC (MODO 4)

; CS12:0=011 RELOJ IGUAL A Fosc/64

LDI AUX1,0B00001011 ; Fosc/64

STS TCCR1B,AUX1

; VALOR A COMPARAR EN OCR1A (ESCRITURA DE 16 BITS)

LDI AUX1,HIGH(15625)

LDI AUX2,LOW(15625)

STS OCR1AH,AUX1

STS OCR1AL,AUX2

M0DIFICACIÓN 1

M0DIFICACIÓN 2

Page 3: Ejercicio 07 Timers

SISTEMAS MICROPROCESADOS: Uso de interrupciones generadas por el Timer1 Página 3

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

; HABILITA INTERRUPCIÓN POR EMPAREJAMIENTO EN COMPARACIÓN A

LDI AUX1,0B00000010

STS TIMSK1,AUX1

; VALORES INICIALES DE HH:MM:SS

LDI HORAS,23

LDI MINUT,59

LDI SEGUN,49

; HABILITACIÓN GLOBAL DE INTERRUPCIONES

SEI

; TRANSFORMACIÓN A BCD DE LOS CONTADORES

RELOJ: LDI XL,LOW(DIGIT)

LDI XH,HIGH(DIGIT)

MOV AUX2,HORAS

RCALL BINBCD

MOV AUX2,MINUT

RCALL BINBCD

MOV AUX2,SEGUN

RCALL BINBCD

; TRANSFORMACIÓN A 7 SEGMENTOS

RCALL ASEG

; MOSTRAR EN EL DISPLAY EL RELOJ DIGITAL

RCALL SCAN

RJMP RELOJ

; TRANSFORMACIÓN DE BINARIO A BCD Y ALMACENAMIENTO

BINBCD: CLR AUX1

BINBCD1:SUBI AUX2,10

BRCS BINBCD2

INC AUX1

RJMP BINBCD1

BINBCD2:LDI AUX3,10

ADD AUX2,AUX3

ST X+,AUX1

ST X+,AUX2

RET

; ARRANCAR - DETENER EL RELOJ

RUTINT2:

IN AUXI1,EIMSK

LDI AUXI2,0B00000011

EOR AUXI1,AUXI2 ; COMPLEMENTAR LOS 2 BITS

OUT EIMSK,AUXI1 ; CAMBIAR HABILITACIÓN

OUT EIFR,AUXI2 ; BORRA INTF0 y INTF1

LDS AUXI1,TIMSK1

LDI AUXI2,0B00000010

EOR AUXI1,AUXI2 ; COMPLEMENTAR EL 2 BIT

STS TIMSK1,AUXI1 ; CAMBIAR HABILITACIÓN

FINR2: RETI

; IGUALAR MINUTOS

RUTINT1:

INC MINUT

CPI MINUT,60

BRNE RUT11

CLR MINUT

RUT11: RETI

; IGUALAR HORAS

RUTINT0:

INC HORAS

CPI HORAS,24

BRNE RUT01

CLR HORAS

RUT01: RETI

M0DIFICACIÓN 3

M0DIFICACIÓN 4

M0DIFICACIÓN 5

M0DIFICACIÓN 5

Page 4: Ejercicio 07 Timers

SISTEMAS MICROPROCESADOS: Uso de interrupciones generadas por el Timer1 Página 4

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

; INCREMENTO DE SEGUNDOS

RUTTIM1:

INC SEGUN

CPI SEGUN,60

BRNE FINRT1

CLR SEGUN

INC MINUT

CPI MINUT,60

BRNE FINRT1

CLR MINUT

INC HORAS

CPI HORAS,24

BRNE FINRT1

CLR HORAS

FINRT1: RETI

;

.INCLUDE "SUBCC.ASM"

;

.EXIT ; FIN DEL MODULO FUENTE

COMPROBACIÓN DEL RELOJ DE 24 HORAS CON INTERRUPCIONES

PRODUCIDAS POR EL TIMER1

ENUNCIADO DEL EJERCICIO 2:

Modificar al programa anterior, correspondiente al reloj digital para convertirlo en un

Cronómetro Digital Ascendente, que muestre Minutos, Segundos y Centésimas de

Segundos. El control del cronómetro se realiza mediante tres teclas:

La tecla CLEAR conectada a la Interrupción Externa 2 pone el cronómetro en

cero, solo cuando está detenido.

La tecla STOP conectada a la Interrupción Externa 0 detiene el cronómetro.

La tecla START conectada a la Interrupción Externa 1 arranca el cronómetro.

Además de la redefinición de los Contadores para el Cronómetro y de las funciones que

realizan las Rutinas de las Interrupciones Externas, el Timer1 debe ser configurado para

producir interrupciones cada 10 milisegundos en lugar de cada segundo.

M0DIFICACIÓN 6

Page 5: Ejercicio 07 Timers

SISTEMAS MICROPROCESADOS: Uso de interrupciones generadas por el Timer1 Página 5

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

ANÁLISIS PARA CONFIGURAR AL TIMER1, A FIN DE INCREMENTAR

LOS CONTADORES CADA CENTÉSIMA DE SEGUNDO:

Para producir interrupciones cada centésima de segundo con el Timer teniendo el

mismo reloj que el microcontrolador, igual a 1MHz, es necesario contar 10.000 pulsos

que si se puede hacer con 16 bits. Esto significa que el reloj del Timer es sin

escalamiento y 10.000 es el valor que se carga en el registro de comparación OCR1A.

CODIFICACIÓN DEL PROGRAMA PRINCIPAL Y DE LAS RUTINAS DE

INTERRUPCIÓN CON LAS MODIFICACIONES PARA CONVERTIR EL

RELOJ DIGITAL EN CRONÓMETRO ASCENDENTE

.NOLIST

.INCLUDE "m164pdef.inc"

.LIST

; DEFINICIÓN DE ETIQUETAS PARA LOS REGISTROS

.DEF AUX1 = R16 ; REGISTRO AUXILIAR1

.DEF AUX2 = R17 ; REGISTRO AUXILIAR2

.DEF AUX3 = R18 ; REGISTRO AUXILIAR3

.DEF MINUT = R19 ; REGISTRO PARA LAS MINUTOS

.DEF SEGUN = R20 ; REGISTRO PARA LAS SEGUNDOS

.DEF CENTI = R21 ; REGISTRO PARA LAS CENTÉSIMAS DE SEGUNDO

.DEF AUXI1 = R23 ; REGISTRO AUXILIAR 1 INTERRUPCIONES

.DEF AUXI2 = R24 ; REGISTRO AUXILIAR 2 INTERRUPCIONES

; SEGMENTO DE CÓDIGO o MEMORIA FLASH

.CSEG

JMP PROGP

.ORG $02 ; RUTINA DE LA INTERRUPCIÓN EXTERNA 0

JMP RUTINT0

.ORG $04 ; RUTINA DE LA INTERRUPCIÓN EXTERNA 1

JMP RUTINT1

.ORG $06 ; RUTINA DE LA INTERRUPCIÓN EXTERNA 2

JMP RUTINT2

.ORG $1A ; INTERRUPCIÓN POR EMPAREJAMIENTO TIMER 1

JMP RUTTIM1

; INICIALIZACIÓN DEL PUNTERO DEL STACK Y DE LOS PÓRTICOS

PROGP: LDI AUX1,LOW(RAMEND)

OUT SPL,AUX1

LDI AUX1,HIGH(RAMEND)

OUT SPH,AUX1

LDI AUX1,0B00000100

OUT PORTB,AUX1 ; PULL-UP INT2 = PB2

LDI AUX1,0B00001100

OUT PORTD,AUX1 ; PULL-UP INT0/1 = PD2/3

; PROGRAMACIÓN DE LAS INTERRUPCIONES EXTERNAS

LDI AUX1,0B000101010

STS EICRA,AUX1 ; INT2/1/0 TRANSICIÓN NEGAT.

LDI AUX1,0B00000010

OUT EIMSK,AUX1 ; INT1 HABILITADA (ARRANCAR)

LDI AUX1,0B00000111

OUT EIFR,AUX1 ; BORRAR LAS BANDERAS

; PROGRAMACIÓN DEL TIMER1

; COM1A1:0=00 DESCONECTADA DE LA SALIDA OC1A (PD5)

; COM1B1:0=00 DESCONECTADA DE LA SALIDA OC1B (PD4)

; DOS BITS RESERVADOS = 00

; WGM11:0=00 CONFIGURACIÓN CTC (MODO 4)

LDI AUX1,0B00000000

STS TCCR1A,AUX1

; ICNC1=0 DESHABILITA CANCELACIÓN DE RUIDO

; ICES1=0 TRANSICIÓN NEGATIVA PARA LA ENTRADA DE CAPTURA

Page 6: Ejercicio 07 Timers

SISTEMAS MICROPROCESADOS: Uso de interrupciones generadas por el Timer1 Página 6

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

; BIT RESERVADO = 0

; WGM13:2=01 CONFIGURACIÓN CTC (MODO 4)

; CS12:0=000 SIN RELOJ

LDI AUX1,0B00001000 ; TIMER DETENIDO

STS TCCR1B,AUX1

; VALOR A COMPARAR EN OCR1A (ESCRITURA DE 16 BITS)

LDI AUX1,HIGH(10000)

LDI AUX2,LOW(10000)

STS OCR1AH,AUX1

STS OCR1AL,AUX2

; HABILITA INTERRUPCIÓN POR EMPAREJAMIENTO EN COMPARACIÓN A

LDI AUX1,0B00000010

STS TIMSK1,AUX1

; VALORES INICIALES DE MM:SS:CS

LDI MINUT,0

LDI SEGUN,0

LDI CENTI,0

; HABILITACIÓN GLOBAL DE INTERRUPCIONES

SEI

; TRANSFORMACIÓN A BCD DE LOS CONTADORES

CRONO: LDI XL,LOW(DIGIT)

LDI XH,HIGH(DIGIT)

MOV AUX2,MINUT

RCALL BINBCD

MOV AUX2,SEGUN

RCALL BINBCD

MOV AUX2,CENTI

RCALL BINBCD

; TRANSFORMACIÓN A 7 SEGMENTOS

RCALL ASEG

; MOSTRAR EN EL DISPLAY EL CRONOMETRO

RCALL SCAN

RJMP CRONO

; TRANSFORMACIÓN DE BINARIO A BCD Y ALMACENAMIENTO

BINBCD: CLR AUX1

BINBCD1:SUBI AUX2,10

BRCS BINBCD2

INC AUX1

RJMP BINBCD1

BINBCD2:LDI AUX3,10

ADD AUX2,AUX3

ST X+,AUX1

ST X+,AUX2

RET

; PONER CEROS EN EL CRONÓMETRO

RUTINT2:

LDI MINUT,0

LDI SEGUN,0

LDI CENTI,0

RETI

; DETENER EL CRONÓMETRO

RUTINT0:

; CS12:0=000 SIN RELOJ

LDI AUX1,0B00001000 ; TIMER DETENIDO

STS TCCR1B,AUX1

LDI AUX1,0B00000111

OUT EIFR,AUX1 ; BORRAR LAS BANDERAS

LDI AUX1,0B00000110

OUT EIMSK,AUX1 ; INT2/1 HABILITADAS (ENCERAR - ARRANCAR)

RETI

Page 7: Ejercicio 07 Timers

SISTEMAS MICROPROCESADOS: Uso de interrupciones generadas por el Timer1 Página 7

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

; ARRANCAR EL CRONÓMETRO

RUTINT1:

; CS12:0=001 RELOJ IGUAL A Fosc/1

LDI AUX1,0B00001001 ; TIMER CONTANDO

STS TCCR1B,AUX1

LDI AUX1,0B00000111

OUT EIFR,AUX1 ; BORRAR LAS BANDERAS

LDI AUX1,0B00000001

OUT EIMSK,AUX1 ; INT0 HABILITADA (DETENER)

RETI

; INCREMENTO DE CENTÉSIMAS DE SEGUNDO

RUTTIM1:INC CENTI

CPI CENTI,100

BRNE FINRT1

CLR CENTI

INC SEGUN

CPI SEGUN,60

BRNE FINRT1

CLR SEGUN

INC MINUT

CPI MINUT,60

BRNE FINRT1

CLR MINUT

FINRT1: RETI

;

.INCLUDE "SUBCC.ASM"

;

.EXIT ; FIN DEL MODULO FUENTE

COMPROBACIÓN DEL CRONÓMETRO ASCENDENTE CON

INTERRUPCIONES PRODUCIDAS POR EL TIMER1

ENUNCIADO DEL EJERCICIO 3:

Elaborar el programa de control para un DIMMER de 19 pasos, que se pueden cambiar

mediante dos teclas, una para subir y otra para bajar. El DIMMER es un dispositivo

electrónico que permite controlar la intensidad de iluminación de lámparas

incandescentes, controlando el ángulo de disparo del TRIAC que alimenta a la lámpara;

Page 8: Ejercicio 07 Timers

SISTEMAS MICROPROCESADOS: Uso de interrupciones generadas por el Timer1 Página 8

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

por lo tanto, este programa tiene como objetivo escoger el ángulo de disparo del TRIAC

cada 10º, entre 0º y 180º de los semiciclos de la señal de 110 Vac.

ANÁLISIS Y ALGORITMO DE LA SOLUCIÓN:

Se necesita producir pulsos al inicio de los semiciclos de la señal de 110 Vac, mediante

un circuito externo al microcontrolador (detector de cruce por cero) y el programa se

encarga de generar los pulsos de disparo con un retardo de acuerdo al ángulo escogido,

tal como se muestra a continuación para el caso de 100º como ángulo de disparo.

CIRCUITO DEL DIMMER:

Señal de

110 Vac

Corriente

en la

lámpara

Señal de

6 Vac,

rectificada

Pulsos al

inicio

Pulsos de

disparo

Pulsos al

inicio

Pulsos de

disparo

Señal de

6 Vac,

rectificada

Page 9: Ejercicio 07 Timers

SISTEMAS MICROPROCESADOS: Uso de interrupciones generadas por el Timer1 Página 9

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

Los pulsos al inicio de los semiciclos se obtienen mediante el colector del transistor

NPN, conectado en el terminal de entrada de la Interrupción Externa 2, que tiene

activada la resistencia interna de pull-up. El transistor trabaja en corte y saturación,

controlado por la señal que ingresa por la resistencia de la base y que corresponde a una

señal de 6 Vac rectificada en onda completa.

La rutina de la Interrupción Externa 2 se encarga de arrancar al contador del Timmer1;

el cual, mediante la interrupción por emparejamiento con el valor del registro de

comparación OCR1A, controla el retardo del pulso de disparo del TRIAC. Los valores

de comparación se obtienen desde la tabla de constantes, que han sido calculadas para

tener ángulos de disparo cada 10 grados con señales de 60 Hz, considerando que el

Timer1 tiene el mismo reloj que el microcontrolador e igual a 1MHz.

Paso del Dimmer

Angulo en

grados

Tiempo en

microsegundos

1 0º 0

2 10º 463

3 20º 926

4 30º 1389

5 40º 1852

6 50º 2315

7 60º 2778

8 70º 3241

9 80º 3704

10 90º 4167

11 100º 4630

12 110º 5093

13 120º 5556

14 130º 6019

15 140º 6481

16 150º 6944

17 160º 7407

18 170º 7870

19 180º 8333

CODIFICACIÓN DEL PROGRAMA PRINCIPAL Y DE LAS RUTINAS DE

INTERRUPCIÓN PARA EL CONTROL DEL DIMMER

.NOLIST

.INCLUDE "m164pdef.inc"

.LIST

;

.DEF AUX1 = R16

.DEF AUX2 = R17

.DEF AUX3 = R18

;

.CSEG

JMP PROGP

Page 10: Ejercicio 07 Timers

SISTEMAS MICROPROCESADOS: Uso de interrupciones generadas por el Timer1 Página 10

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

JMP INTE0

JMP INTE1

JMP INTE2

.ORG $1A ; INTERRUPCIÓN POR EMPAREJAMIENTO ATMEGA164P

JMP INTT1

;

PROGP:

; UBICACIÓN DEL STACK AL FINAL DE LA SRAM

LDI AUX1,LOW(RAMEND)

OUT SPL,AUX1

LDI AUX1,HIGH(RAMEND)

OUT SPH,AUX1

; CONFIGURACIÓN COMO SALIDA (PA3)

LDI AUX1,0B00001000

OUT DDRA,AUX1

; PULL-UP EN LAS ENTRADAS INT0 e INT1 (PD2 y PD3)

LDI AUX1,0B00001100

OUT PORTD,AUX1

; PULL-UP EN LA ENTRADA INT2 (PB2)

LDI AUX1,0B00000100

OUT PORTB,AUX1

; PROGRAMACION DEL TIMER1

; COM1A1:0=00 DESCONECTADA DE LA SALIDA OC1A (PD5)

; COM1B1:0=00 DESCONECTADA DE LA SALIDA OC1B (PD4)

; FOC1A:0=1 OBLIGA A COMPARACIÓN CON OCR1A

; FOC1B:0=0 NO OBLIGA A COMPARACIÓN CON OCR1B

; WGM11:0=00 CONFIGURACIÓN CTC (MODO 4)

LDI AUX1,0B00001000

STS TCCR1A,AUX1

; ICNC1=0 DESHABILITA CANCELACIÓN DE

; ICES1=0 TRANSICIÓN NEGATIVA PARA LA ENTRADA DE CAPTURA

; BIT5=0 BITS RESERVADO

; WGM13:2=01 CONFIGURACIÓN CTC (MODO 4)

; CS12:0=001 RELOJ DETENIDO

LDI AUX1,0B00001000

STS TCCR1B,AUX1

; VALOR A COMPARAR EN OCR1A (ESCRITURA DE 16 BITS)

LDI ZL,LOW((TBLK+9)<<1)

LDI ZH,HIGH((TBLK+9)<<1)

LPM AUX3,Z+

LPM AUX2,Z+

STS OCR1AH,AUX2

STS OCR1AL,AUX3

; HABILITA INTERRUPCIÓN POR EMPAREJAMIENTO EN COMPARACIÓN A

LDI AUX1,0B00000010

STS TIMSK1,AUX1

; SEÑALES PARA INTERRUPCIONES EXTERNAS

; ISC11:0=10 INTERRUPCIÓN EXTERNA 1 TRANSICIÓN NEGATIVA

; ISC01:0=10 INTERRUPCIÓN EXTERNA 0 TRANSICIÓN NEGATIVA

; ISC21:0=10 INTERRUPCIÓN EXTERNA 2 TRANSICIÓN NEGATIVA

LDI AUX1,0B00101010

STS EICRA,AUX1

; HABILITACIÓN INTERRUPCIONES EXTERNAS

; INT1=1 INTERRUPCIÓN EXTERNA 1 DESHABILITADA

; INT0=1 INTERRUPCIÓN EXTERNA 0 DESHABILITADA

; INT2=0 INTERRUPCIÓN EXTERNA 2 HABILITADA

LDI AUX1,0B00000111

OUT EIMSK,AUX1

SEI ; HABILITACIÓN GLOBAL DE INTERRUPCIONES

; LAZO INFINITO

LOOP: RJMP LOOP

Page 11: Ejercicio 07 Timers

SISTEMAS MICROPROCESADOS: Uso de interrupciones generadas por el Timer1 Página 11

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

; RUTINA DE INTERRUPCIÓN DEL TIMER1

INTT1: LDI AUX1,0B00001000

STS TCCR1B,AUX1

LDI AUX1,0B00001000

OUT PORTA,AUX1

NOP

NOP

NOP

NOP

NOP

NOP

LDI AUX1,0B00000000

OUT PORTA,AUX1

RETI

; RUTINA DE LA INTERRUPCIÓN EXTERNA 2

INTE2: LDI AUX1,0B00001001

STS TCCR1B,AUX1

RETI

; RUTINA DE LA INTERRUPCIÓN EXTERNA 1

INTE1: CPI ZL,LOW((TBLK+1)<<1)

BREQ END1

DEC ZL

DEC ZL

DEC ZL

DEC ZL

LPM AUX3,Z+

LPM AUX2,Z+

STS OCR1AH,AUX2

STS OCR1AL,AUX3

END1: RETI

; RUTINA DE LA INTERRUPCIÓN EXTERNA 0

INTE0: CPI ZL,LOW((TBLK+19)<<1)

BREQ END0

LPM AUX3,Z+

LPM AUX2,Z+

STS OCR1AH,AUX2

STS OCR1AL,AUX3

END0: RETI

;

;CONSTANTES DE LOS TIEMPOS EN MICROSEGUNDOS PARA CADA 10 GRADOS

TBLK: .DW 0,463,926,1389,1852

.DW 2315,2778,3241,3704,4167

.DW 4630,5093,5556,6019,6481

.DW 6944,7407,7870,8333

.EXIT ; FIN DEL MODULO FUENTE

COMPROBACIÓN MEDIANTE EL SIMULADOR DEL PROTEUS

Para la comprobación se utiliza el osciloscopio de cuatro canales, con el que se observa:

CANAL A: el voltaje sobre la carga.

CANAL B: la señal de 6 Vac rectificada.

CANAL C: pulsos de inicio del semiciclo, para producir transiciones en la

entrada de la Interrupción Externa 2.

CANAL D: pulsos de disparo del TRIAC, que genera la Interrupción del Timer1

por el emparejamiento con el valor del OCR1A.

NOTA: Únicamente para la comprobación mediante el simulador, se ha incluido la

referencia de GND en el terminal común de la carga con el generador de 110 Vac y el

Page 12: Ejercicio 07 Timers

SISTEMAS MICROPROCESADOS: Uso de interrupciones generadas por el Timer1 Página 12

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

primario del transformador; en el circuito real no existe, para mantener el aislamiento

entre las secciones de corriente alterna y de corriente continua.

SEÑALES CON ÁNGULO DE DISPARO DE 0º

Solo para comprobar

mediante el Simulador

Page 13: Ejercicio 07 Timers

SISTEMAS MICROPROCESADOS: Uso de interrupciones generadas por el Timer1 Página 13

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

SEÑALES CON ÁNGULO DE DISPARO DE 60º

SEÑALES CON ÁNGULO DE DISPARO DE 90º

Page 14: Ejercicio 07 Timers

SISTEMAS MICROPROCESADOS: Uso de interrupciones generadas por el Timer1 Página 14

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

SEÑALES CON ÁNGULO DE DISPARO DE 100º

SEÑALES CON ÁNGULO DE DISPARO DE 140º

Page 15: Ejercicio 07 Timers

SISTEMAS MICROPROCESADOS: Uso de interrupciones generadas por el Timer1 Página 15

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

SEÑALES CON ÁNGULO DE DISPARO DE 180º