Você está na página 1de 68

Tema 7

MANEJO BSICO DE TIMERS

Microcontroladores: Tema 7

Reloj
El microcontrolador es un sistema digital
secuencial que requiere de una base de
tiempo para transitar por sus estados de
operacin (fetch y ejectucin).
La base de tiempo es provista por una
fuente de reloj.
El PIC18 provee un mdulo que permite la
seleccin de mltiples fuentes de reloj
2

Microcontroladores: Tema 7

Reloj
El mdulo de reloj permite:
Seleccin por software de mltiples osciladores
Modo de velocidad dual para minimizar
latencia durante el inicio del oscilador externo
Monitor de falla de oscilador (FSCM)
Temporizador de inicio de oscilador (OST) que
asegura la estabilidad del reloj

Microcontroladores: Tema 7

Osciladores
Las alternativas de oscilador para el reloj
principal son:

Microcontroladores: Tema 7

Osciladores

Microcontroladores: Tema 7

Oscilador Primario

Microcontroladores: Tema 7

Oscilador Secundario

Microcontroladores: Tema 7

Oscilador Interno

Microcontroladores: Tema 7

Fuentes externas de reloj

Microcontroladores: Tema 7

Fuentes externas de reloj

10

Microcontroladores: Tema 7

La frecuencia a la cual fue configurado


el programa monitor de su tarjeta es de
FOSC = 16Mhz usando cristal externo
El tiempo de duracin de instruccin es
Tcy = 4/FOSC = 0.25usec

11

Microcontroladores: Tema 7

Como se selecciona a que frecuencia


operar y con que oscilador ?
Mediante los registros de configuracin
(quedan grabados en el flash en la
programacin)
Mediante el registro SFR llamado
OSCCON, OSCCON2, OSCTUNE
12

Microcontroladores: Tema 7

Puedo incrementar la frecuencia de


operacin en mi tarjeta ?

(12Mhz x 4)/1 = 48Mhz


(16Mhz x 3)/1 = 48Mhz
13

Microcontroladores: Tema 7

Pero NO lo hagan porque puede afectar la


velocidad de comunicacin si es que estn
operando un enlace con la computadora

14

Microcontroladores: Tema 7

Fail safe

Revisar DS30684A-page 47
15

Microcontroladores: Tema 7

Timers (Temporizadores)
Cuando se desea contar y medir tiempo se
puede hacer mediante ciclos de programa
ya que conocemos cuanto tiempo tarda en
ejecutarse una instruccin (4/FOSC)
El conteo de tiempo por ciclos no permite la
ejecucin de otros procesos y es muy
limitado.

16

Microcontroladores: Tema 7

Timers (Temporizadores)
En un sistema digital el tiempo es
representado por la cuenta en un timer.
Los timers sirven para:

17

Registro de tiempo en eventos


Generacin de interrupciones peridicas
Medicin de anchos de pulso y perodos
Medicin de ciclos de trabajo y frecuencia
Generacin de formas de onda
Referencias de tiempo
Conteo de eventos

Microcontroladores: Tema 7

Timers (Temporizadores)
El PIC18F45K50 provee

18

TIMER 0 configurable de 8 y 16 bits


TIMER 1 de 16 bits
TIMER 2 de 8 bits
TIMER 3 de 16 bits

Microcontroladores: Tema 7

Cantidad de bits en el timer


La cantidad de bits en el timer indica su
resolucin o hasta cuanto puede contar
antes de desbordarse.
Timer de 8 bits contara desde 0x00 hasta
0xFF (256 cuentas considerando el 0)
Timer de 16 bits contar desde 0x0000
hasta 0xFFFF (65536 cuentas considerando
el 0)
19

Microcontroladores: Tema 7

Timer 0
Es configurable para operar como 8 o 16
bits
Se puede seleccionar una fuente interna o
externa de reloj para exitarlo
Cuando opera con fuente interna se le llama
TIMER, cuando es externa COUNTER
La fuente de reloj se puede pre-escalar
(dividir)
20

Microcontroladores: Tema 7

Timer0 (8 bits)
FUENTE

21

ESCALA

CUENTA

Microcontroladores: Tema 7

Timer0 (16 bits)

Retiene la parte alta ya que el bus de datos


s de 8 bits
22

Microcontroladores: Tema 7

Registro de control Timer0

23

Microcontroladores: Tema 7

Registros asociados al Timer0

24

Microcontroladores: Tema 7

Funcionamiento
El timer empezar a contar a partir del valor que
haya sido inicializado en el registro TMR0
Cada ciclo de la fuente de reloj, el valor de TMR0
se incrementa en 1
Cuando la cuenta pasa de 0 a su valor mximao
(0xFF o 0xFFFF) la bandera TMR0IF se enciende.
La bandera puede ser indagada (polled) o generar
una interrupcin

25

Microcontroladores: Tema 7

Funcionamiento
Bandera TMR0IF
00h,01h,02h,..FDh,FEH,FFH,00h,01h,02h,..FDh,FEH,FFH,

Valor inicial de registro TMR0 = 0x00


Bandera TMR0IF
25h,26h,27h,.FDh,FEH,FFH,00h,01h,02h,---.FDh,FEH,FFH,

Valor inicial de registro TMR0 = 0x25

26

Microcontroladores: Tema 7

Programacin del Timer0


Hacer una rutina de retardo que utilice el Timer 0. El
retardo debe de ser de 100msec y el oscilador del
microcontrolador es de 16Mhz. Aprovechar esa rutina
para genenar una seal de 5 hz en todo el puerto D
16Mhz/4 = 4Mhz

27

Microcontroladores: Tema 7

Programacin del Timer0


Sin usar pre-escalador vemos si funciona
Cada cuenta sera 1/4Mhz = 0.25usec
Queremos contar 100ms, entonces 0.1/0.25usec = 400,000
cuentas. Se pasa del mximo en 16 bits que es 65535
16Mhz/4 = 4Mhz

28

Microcontroladores: Tema 7

Programacin del Timer0


El pre-escalador divide entre 2,4,8,16,32,64,128,256
Usemos el pre-escalador en 16, cada cuenta se dar en 16/4Mhz = 4usec
Queremos contar 100ms, entonces 0.1/4usec = 25,000 cuentas. Si cabe
en el registro de cuentas de 16 bits
16Mhz/4 = 4Mhz

4Mhz/16

29

Microcontroladores: Tema 7

Configuracin registro T0CON


1

Inicia conteo al momento de hacerlo 1


30

Microcontroladores: Tema 7

Configuracin registro TMR0


Como la cantidad a contar es 25,000 y
nuestro registro de cuenta permite 65536
Tenemos que contar a partir de 6553625000= 40536
El valor inicial del registro TMR0 debe ser
40536 o 0x9E58

31

Microcontroladores: Tema 7

Configuracin registro TMR0

32

Microcontroladores: Tema 7

Programacin
Inicializar el registro TMR0 para definir el
valor inicial de la cuenta
Inicializar el registro T0CON para definir el
comportamiento del timer
Esperar por encendido de bandera TMR0IF
que indica que se llego al deborde
Usar la rutina de delay para generar una
seal cuadrada de 5Hz,
33

Microcontroladores: Tema 7

Programacin
5Hz
T= 1/F
0.2

34

Microcontroladores: Tema 7

Programacin
INCIO

DELAY 100msec

INICIALIZA TIMER0
INICIALIZAR
PUERTOS
ARRANCA TIMER
No

DELAY
100msec

TMR0IF = 1 ?

TMR0IF=0

PORTD = PORTD

35

FIN

Microcontroladores: Tema 7

Programacin

36

Microcontroladores: Tema 7

Uso de interrupciones
Se puede implementar el programa anterior
utilizando interrupciones.
La ISR contendra la re-inicializacin del
timer y el cambio de estado del puerto.

37

Microcontroladores: Tema 7

Timer 1/3

38

GATE CTL

Microcontroladores: Tema 7

Timer 1/3

39

Microcontroladores: Tema 7

Registo de Control Timer 1/3

40

Microcontroladores: Tema 7

Registo de Control Timer 1/3

41

Microcontroladores: Tema 7

Registo de Control Timer 1/3

42

Microcontroladores: Tema 7

Registos Asociados Timer 1/3

43

Microcontroladores: Tema 7

Timer 2

44

Microcontroladores: Tema 7

Timer 2

45

Microcontroladores: Tema 7

Registro de Control Timer 2/4/6

46

Microcontroladores: Tema 7

Funcionamiento

EQ
TMRx 00h,01h,02h,... 32h,00h,01h,02h,... 32h,00h,01h,02h,... 32h,

Valor del registro Prx = 0x32


47

Microcontroladores: Tema 7

Registos Asociados Timer 2

48

Microcontroladores: Tema 7

Funciones en libreria timers.h


C:\Proyectos\Microcontroladores\TEMA_07\PIC18F Peripheral Library Help Document.chm
https://sites.google.com/site/ucitesm/home/tema-04/mplab_c18_libraries_51297f.pdf

49

Microcontroladores: Tema 7

Funciones en libreria timers.h

50

Microcontroladores: Tema 7

51

Microcontroladores: Tema 7

Programacin del Timer1/3


Hacer una rutina de retardo que utilice
el Timer 3. El retardo debe de ser de
10msec y el oscilador del
microcontrolador es de 16Mhz.
Aprovechar esa rutina para genenar una
seal de 50 hz en todo el puerto RD0
El control de gate (arranque) del timer
se realizar por programa
52

Microcontroladores: Tema 7

Timer 1/3

16Mhz
53

4Mhz

Microcontroladores: Tema 7

Timer 3
Al igual que el Timer 0, el Timer 3 (1) contar a
partir del valor inicial del registro de cuenta TMR3
hasta 0xFFFF
Cuando la cuenta pasa de 0xFFFF a 0x0000 se
encender la bandera TMR3IF
Si deseamos contar una cierta cantidad de
CUENTAS hasta el encendido de la bandera, el
valor a configurar en el registro TMR3 ser de:
TMR3 = 65536 - CUENTAS

54

Microcontroladores: Tema 7

Timer 3
El tiempo que tardar en encenderse la bandera
TMR3IF desde el momento de que se arranca el
timer estar dado por:
TTM3IF = Treloj * Prescala * CUENTAS
TTM3IF = Treloj * Prescala * [65536 TMR3]
Para operacion timer con fuente del oscilador Treloj
puede ser 4/Fosc o 1/Fosc
55

Microcontroladores: Tema 7

Timer 3
Podemos jugar entonces con la seleccin de Treloj,
Prescala y TMR3 para obtener el valor deseado.
TTM3IF = Treloj * Prescala * [65536 TMR3]
Suponiendo que usamos Treloj = 4/Fosc = 0.25usec
Suponiendo una prescala igual a 1:
10x10-3 = 0.25x10-6 *1 * [65536 TMR3]
El valor TMR3:
TMR3 = [65536 - (10x10-3)/(0.25x10-6 *1)]
TMR3 = [65536-40000] = 25536 = 0x63C0
56

Microcontroladores: Tema 7

Control del Gate (arranque)


0

57

Microcontroladores: Tema 7

Registo de Control Timer 1/3


0

58

Microcontroladores: Tema 7

59

Microcontroladores: Tema 7

Programacin del timer 2


Al ejemplo anterior, agregue el codigo
requerido para generar una seal cuadrada en
el puerto RD1 con una frecuencia de 500hz
utilizando el Timer 2 con un mtodo de
interrupciones.

60

Microcontroladores: Tema 7

Programacin del timer 2

61

Microcontroladores: Tema 7

Timer 2
EL Timer2 es de 8 bits, comienza a contar de 0
El valor del registro de cuenta es comparado contra
el contenido del registro PR2
Cuando ambos registros son iguales, se genera una
seal que reinicia el contador a 0 para volver a
empezar
La seal de renicio puede ser de nuevo dividida por
un post-escalador.
La division de frecuencia que producen la
combinacin de TMR2 y PR2 es de PR2+1
62

Microcontroladores: Tema 7

Timer 2
El tiempo que tardar en encenderse la bandera
TMR2IF desde el momento de que se arranca el
timer estar dado por:
TTM2IF = Tosc *4* Prescala *(PR2+1)*Postscala
Podemos jugar con Prescala, PR2 y Postscala

63

Microcontroladores: Tema 7

Timer 2
Para nuestro problema, la frecuencia a generar
500Hz pero ocupamos generar interrupciones al
doble (1Khz), vamos a intentar primero con
prescala en un valor intermedio o sea 4
Queremos TTM2IF = 1/1000 = 1x10-3
Como Fos = 16x106 Tosc = 1/Fosc = 6.25x10-8
Dado lo anterior tenemos:
TTM2IF = Tosc *4* Prescala *(PR2+1)*Postscala
1x10-3 = 6.25x10-8*4* [4] *(PR2+1)*Postscala
64

Microcontroladores: Tema 7

Timer 2
TTM2IF = Tosc *4* Prescala *(PR2+1)*Postescala
1x10-3 = 6.25x10-8*4* [4] *(PR2+1)*Postescala
(PR2+1)*Postescala = 1000
Si hacemos (PR2+1) = 125 y Postescala = 8
125* 8 = 1000
PR2 tendr un valor de 124 decimal

65

Microcontroladores: Tema 7

Registro de Control Timer 2/4/6


X

66

Microcontroladores: Tema 7

67

Microcontroladores: Tema 7

68

Você também pode gostar