Professional Documents
Culture Documents
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
Microcontroladores: Tema 7
10
Microcontroladores: Tema 7
11
Microcontroladores: Tema 7
Microcontroladores: Tema 7
Microcontroladores: Tema 7
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
Microcontroladores: Tema 7
Timers (Temporizadores)
El PIC18F45K50 provee
18
Microcontroladores: Tema 7
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
Microcontroladores: Tema 7
23
Microcontroladores: Tema 7
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,
26
Microcontroladores: Tema 7
27
Microcontroladores: Tema 7
28
Microcontroladores: Tema 7
4Mhz/16
29
Microcontroladores: Tema 7
Microcontroladores: Tema 7
31
Microcontroladores: Tema 7
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
40
Microcontroladores: Tema 7
41
Microcontroladores: Tema 7
42
Microcontroladores: Tema 7
43
Microcontroladores: Tema 7
Timer 2
44
Microcontroladores: Tema 7
Timer 2
45
Microcontroladores: Tema 7
46
Microcontroladores: Tema 7
Funcionamiento
EQ
TMRx 00h,01h,02h,... 32h,00h,01h,02h,... 32h,00h,01h,02h,... 32h,
Microcontroladores: Tema 7
48
Microcontroladores: Tema 7
49
Microcontroladores: Tema 7
50
Microcontroladores: Tema 7
51
Microcontroladores: Tema 7
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
57
Microcontroladores: Tema 7
58
Microcontroladores: Tema 7
59
Microcontroladores: Tema 7
60
Microcontroladores: Tema 7
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
66
Microcontroladores: Tema 7
67
Microcontroladores: Tema 7
68