Practica 7. Uso del TMR0 como contador de eventos PDF

Title Practica 7. Uso del TMR0 como contador de eventos
Course Microcontroladores
Institution Instituto Tecnológico de Tijuana
Pages 11
File Size 631.8 KB
File Type PDF
Total Downloads 63
Total Views 185

Summary

Tecnológico Nacional de MéxicoInstituto Tecnológico de TijuanaMicrocontroladoresPractica 7. Uso del temporizador o del PIC 16F877A como contadorde eventosCalvillo López Alejandro – 16212214Sánchez Saavedra Eduardo Francisco – 16212267ABRIL 2019ObjetivoCrear un sistema basado en el PIC 16F877A que ut...


Description

Tecnológico Nacional de México Instituto Tecnológico de Tijuana Microcontroladores

Practica 7. Uso del temporizador o del PIC 16F877A como contador de eventos

Calvillo López Alejandro – 16212214 Sánchez Saavedra Eduardo Francisco – 16212267

ABRIL 2019

Objetivo Crear un sistema basado en el PIC 16F877A que utilice el temporizador o y su entrada al microcontrolador T0CKI para contar los eventos del pin de entrada de pulsos.

Marco teórico Introducción a los Temporizadores En muchas aplicaciones el microcontrolador debe trabajar con la variable tiempo, como es el caso de cuando se requiere generar señales a una determinada frecuencia o medir el periodo de una señal. En los microcontroladores PIC de clase media se presentan hasta tres módulos básicos para temporizar, denominados Timer0, Timer1 y Timer2, además de uno o dos módulos de Comparación, Captura y Modulación de Pulsos o CCP. Cada uno de los temporizadores posee integrado como elemento esencial un contador síncrono ascendente de 8 o 16 bits. Dichos contadores pueden ser programados para contar pulsos internos o externos. El número del contador puede ser leído o modificado mediante la lectura o escritura de los registros de las funciones especiales vinculadas con el timer. Por tal razón, el desbordamiento de los contadores queda reportado en bits indicadores disponibles en dichos registros, además de la posibilidad de conllevar a una interrupción del microcontrolador. Además del contador síncrono, los temporizadores cuentan con un contador asíncrono auxiliar que se inserta en el camino de los pulsos, de tal manera que puede actuar como un predivisor si se posiciona antes del contador síncrono, o postdivisor si se posiciona después del contador síncrono.

Predivisor

Contador síncrono

Postdivisor

Pulso de entrada Desbordamiento

Figura 1. Esquema de Bloques general de un temporizador

Configuración de Temporizadores Timer0 El modulo del Timer0 consta básicamente de un predivisor de 8-bits, un contador/temporizador de 8-bis, selectividad entre fuente de señal de reloj interna o externa y una interrupción en la sobrecarga de FFh a 00h. Si opera mediante los ciclos de máquina, entonces se dice que opera como un temporizador, en cambio, si cuenta los pulsos externos, el modulo opera como contador de pulsos que llegan por medio de la terminal T0CKI.

Figura 2. Diagrama de Bloques del Timer0

A su paso por el Timer0, los pulsos llegan al bloque de sincronización, siendo mostrados en dos instantes de tiempo dentro de cada ciclo de máquina, de lo que resulta una señal cuyos flancos suceden en fase con el reloj interno del microcontrolador. Cuando el Timer0 opera en el modo contador, el bloque de sincronización determina el valor mínimo del periodo de los pulsos que entran por medio de la terminal T0CKI. Si

es el periodo del oscilador principal y P es el factor

de división del predivisor, entonces el periOdo Ti de los pulsos que entran por la terminal T0CKI debe cumplir la condicional

.

Para calcular el tiempo de desbordamiento del Timer0, si N es la cantidad de pulsos que deben llegar al Timer0 para que se desborde, operando como temporizador, y Ti es el periodo de un ciclo máquina, entonces el tiempo Td que tarda en desbordarse es

.

En modo de bajo consumo, el oscilador del microcontrolador se paraliza y, por tanto, no funciona el bloque de sincronización del Timer0.

El registro OPTION_REG es un registro en el cual se pueden realizar las acciones de lectura y escritura, y en el que se contienen múltiples bits de control para la configuración del predivisor del Timer0/Watch Dog Timer. Numero de bit 7 6

Nombre del bit RBPU INTEDG

Accion Para 0 Habilita los pull-ups debiles Interrupcion por flanco de bajada

Para 1 Deshabilita los pull-ups débiles Interrupcion por flanco de subida La fuente del contador a partir del pin 5 T0CS La fuente del contador interna T0CKI Incremento por transición de Incremento por transición de alto a 4 T0SE bajo a alto bajo El predivisor se asigna al módulo El predivisor se asigna al módulo del 3 T0SE del Timer0 WDT Los bits 2 al 0 corresponden a la razón del predivisor, dependiendo si se asignó al módulo del Timer0 o al módulo del WatchDog Timer Valor de los bits Razón del Timer0 Razón del WatchDog Timer 000 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 1:128 Debido a que la salida del predivisor esta sincronizada con los impulsos internos de la señal de reloj, se presenta un pequeño retraso entre el tiempo que el flanco de la señal externa ocurre y el tiempo en que el modulo del Timer0 incrementa.

Figura 3. Retardo de propagación del predivisor

Timer1 El módulo de Timer1 es un contador/temporizador de 16-bit que consta de dos registros de 8-bits, denominados TMR1H y TMR1L). Este par de registros incrementa desde 0000h hasta FFFFh. La interrupción del Timer1, si se encuentra habilitada, es generada por el sobreflujo a través de la bandera de interrupción en el bit TMR1IF. Dicha interrupción puede ser habilitada o deshabilitada estableciendo en set o en clear el bit de habilitación TMT1IE. Por tanto, el modulo del Timer1 puede actuar como un contador síncrono o asíncrono, o como un temporizador síncrono. El modo de operación es determinado por el bit de selección de reloj, TMR1CS o T1CON (bit-1) y el bit de sincronización T1SYNC. En modo de temporizador, el módulo Timer1 incrementa cada ciclo de instrucción. Caso similar, en modo de contador, incrementa en cada filo de subida de la señal de reloj de entrada por el pin T1CKI. El modulo del Timer1 a su vez, puede ser prendido o apagado mediante el bit de control TMR1ON o T1CON (bit-0), además de operar gracias a un cristal externo, en donde el oscilador del Timer1 es habilitado, o el bit T1OSCEN se encuentra en alto, y los pines T1OSI y T1OSO se convierten en entradas.

Figura 4. Diagrama de Bloques del Timer1

Para que no se pierdan pulsos en la sincronización, es necesario que los pulsos que entran en el bloque de sincronización permanezcan en 1 o en 0 al menos durante la mitad del tiempo que dura un ciclo de máquina. Con ello se determina el valor mínimo del periodo de los pulsos que entran en el Timer1 en el modo de contador sincronizado. Si

es el periodo del oscilador principal del microcontrolador y P es el factor de división del

predivisor, entonces el periodo Ti de los pulsos en T1CKI debe cumplir la condicional

.

Si el Timer1 está programado como contador asíncrono, este continúa aperando incluso cuando el microcontrolador se encuentra en modo de bajo consumo. En el registro T1CON están los bits de control del Timer1. Accion

Numero

Nombre del

de Bit

Bit

Para 0

Para 1

7y6

-

No implementado

No implementado

Apaga el oscilador. El inversor 3

T1OSCEN

del oscilador y el resistor de

El oscilador se habilita

retroalimentación se apagan para eliminar el drenado de voltaje

2

T1SYNC

Ignorado si TMR1CS=0, de otra

Ignorado si TMR1CS=0, de otra

forma, sincronización con el

forma, no se sincroniza con el reloj

reloj externo

externo

1

TMR1CS

Señal de reloj interna (Fo/4)

0

TMR1ON

Frena el Timer1

Señal de reloj externa del pin T1OSO/T1CKI en flanco de subida Habilita el Timer1

Los bits 5:4 o T1CKPS1:T1CKPS0 indican la escala del predivisor del reloj de entrada en el módulo del Timer1. T1CKPS1:T1CKPS0

Escala del predivisor

00

1:8

01

1:4

10

1:2

11

1:1

Con el circuito de oscilador de cristal, entre los pines T1OSI (entrada) y T1OSO (salida amplificada), se habilita por medio de establecer en set el bit de control T1OSCEN. El oscilador continuara operando en estado de bajo consumo, principalmente para cristales de 32kHz, la cual es una frecuencia ideal para el conteo del tiempo real. Tipo de Oscilador

LP

Frecuencia

C1

C2

32kHz

33µ

33µ

100kHz

15µ

15µ

200kHz

15µ

15µ

Timer2 El modulo del Timer2 es un temporizador de 8-bits con un predivisor, un postdivisor y un registro de periodo. Empleando el predivisor y el postdivisor al máximo, el tiempo de la sobrecarga es el mismo que para un contador de 16-bits.

Figura 5. Diagrama de Bloques del Timer2

Asimismo, el modulo del Timer2 está basado en la modulación de amplitud de pulso cuando el módulo CCP se encuentra en modo de PWM. El predivisor puede ser programado con factores de división de 1,4 o 16, mientras que el postdivisor para factores desde 1 hasta16. El Timer2 no se incrementa mientras el microcontrolador está en el modo de bajo consumo, y el conteo se reanuda cuando el PIC se despierta.

En el registro T2CON están los bits de control del Timer2.

Número del bit

Nombre del bit

7 2

Accion Para 0

Para 1

-

Sin implementar

Sin implementar

TMRAON

Apaga el Timer2

Enciende el Timer2

Los bits 6:3 o TOUTPS3:TOUTPS0 indican el postdivisor de la salida del módulo de Timer2 TOUTPS3:TOUTPS0

Razón del postdivisor

0000

1:1

0001

1:2

0010

1:3

0011

1:4

0100

1:5

0101

1:6

0110

1:7

0111

1:8

1000

1:9

1001

1:10

1010

1:11

1011

1:12

1100

1:13

1101

1:14

1110

1:15

1111

1:16

Los bits 1:0 o T2CKPS1:T2CKPS0 indican el predivisor de entrada del Timer2 T2CKPS1:T2CKPS0

Razón del predivisor

00

1:1

01

1:4

1X

1:16

Procedimiento Se escribió en MPLAB X IDE el siguiente código de un contador ascendente de 8-bits en donde se realiza un incremento con 16 pulsos de la señal de reloj de entrada.

__CONFIG _WDT_OFF&_PWRTE_OFF&_XT_OSC&_LVP_OFF&_CP_OFF ; Configuración para el programador LIST p=16F877A INCLUDE ;Include file correspondiente al PIC16F877A ORG 0x00 ;Inicio de programa BSF STATUS,RP0 clrf TRISB ;Habilitar el puerto B como salida movlw b'00110011' ;REAL E7 movwf OPTION_REG BCF STATUS,RP0 clrf PORTB ;Limpia puerto B inicio ;------------------------- INICIO DE CÓDIGO PRINCIPAL MOVFW TMR0 ; valor de recarga byte bajo MOVWF PORTB ; ponerlo en registro TMR1L nop goto inicio END;------------------------- FIN DE CÓDIGO PRINCIPAL Posteriormente se construyó el proyecto principal y se exporto el archivo .hex, asimismo, en el laboratorio se implementó el circuito y se comparó en el osciloscopio Tektronix TDS 2012 B la señal del bit RB0 contra la señal de reloj obtenida por el RIGOL DG 1022 2 Channel Function/Arbritary Waveform Generator.

Figura 6. Prueba a 1kHz

Figura 7. Señal del reloj (Canal 1) contra señal del bit RP0 (Canal 2).

Desarrollo Se configura el PIC16F877A con la directiva CONFIG, bajo los parámetros del Watch Dog Timer apagado, el Power-Up Timer Enable apagado, se declara el oscilador XT de cristal de 4MHz, el apagado del Low-Voltage Programming y del Flash Program Memory Code Protection. La directiva LIST le indica al lenguaje ensamblador que encienda el listado de archivos, es decir, la combinación de los códigos fuente, las direcciones de memoria y los opcodes. La directiva INCLUDE permite añadir el archivo P16F877A.INC que consta del nombre y la localidad de los registros de memoria del PIC16F877A. Con la línea BSF STATUS, RP0 se accede al banco 1, permitiendo habilitar el PORTB como salidas limpiando TRISB con la instrucción CLRF. Se movio la literal 51 binario al registro de trabajo W, y del registro de trabajo W al registro OPTION_REG para configurar el Timer0 activando las resistencias pull-up internas del PORTB,

marcando la interrupción por flanco de bajada, estableciendo el bit T0CS en set para que el Timer1 actué como contador, el bit T0SE en set para que cuente por flanco de bajada, se asignó el predivisor de razón 1:16 al Timer1. Con las líneas BCF STATUS, RP0 y CLRF PORTB se accede al banco 0 y se limpia el contenido del PORTB. En la subrutina Inicio se mueve el contenido del registro TMR0 al registro de trabajo W y posteriormente del registro W al PORTB. Con la instrucción nop se consumen ciclos de reloj. Con la instrucción GOTO retornamos a la subrutina Inicio, estableciendo un ciclo sin interrupciones de un contador ascendente de 00h a FFh.

Observaciones y conclusión En contraste con otras prácticas, debido a la experiencia y habilidad adquirida a lo largo del curso, el desarrollo del código resulto relativamente sencillo, y su implementación en el protoboard no causo ningún inconveniente debido a que ya se había conectado en una práctica pasada un circuito con leds en el PORTB, solamente requiriendo reconfigurar el PIC para que fuese un contador ascendente en lugar del registro de desplazamiento. La tarea principal consistió en analizar el apartado del Timer0 en el datasheet del PIC16F877A y comprender los códigos de inicialización y declaración del predivisor. Los temporizadores nos permiten llevar a cabo un registro de control de una determinada señal. A diferencia de la práctica anterior sobre la modulación de la amplitud de los pulsos, en la práctica presente se empleó el predivisor para analizar las instancias de tiempo en lo que, sin el mismo, hubiese tenido un sobreflujo.

Referencias PIC 16F87XA Datasheet. Disponible en: http://ww1.microchip.com/downloads/en/devicedoc/39582b.pdf Valdez, Pallas, “Microcontroladores. Fundamentos y aplicaciones con PIC”, Alfaomega, 2007...


Similar Free PDFs