Está en la página 1de 35

MICROCONTROLADORES-DSPIC

TIMERS DEL DSPIC30F

SESION5

MSc- Jacob Astocondor Villar -2016B 1


TIMERS DEL DSPIC30F
La familia dsPIC30F dispone de hasta cinco temporizadores de 16 bits
, de los cuales algunos poseen la características de poder combinarse
con el objetivo de formar temporizadores de 32 bits.
Los temporizadores ademas de controlar el tiempo autónomamente,
proporcionan la base de tiempo a otros perifericos como el de captura o
el de Comparador/PWM.
Cada temporizador/contador de 16 bits dispone de los siguientes registros
que son susceptibles de leerse y escribirse.

• TMRx: Registro Contador del Temporizador (16 bits).


• PRx: Registro de periodos asociados al temporizador (16 bits).
• TxCON: Registro de control asociado al temporizador (16 bits).

Por otra parte cada temporizador tiene asociado a su vez una serie de bits
para el control de interrupciones:
• TxIE: Bit de control para permiso de interrupción del Timer.
• TxIF: Bit de estado del señalizador de desbordamiento.
• TxIP <2:0>: Bits para determinar la prioridad de la interrupción
TIPOS DE TEMPORIZADORES

Todos los temporizadores de 16 bits de la familia dsPIC


son practicamente identicos en cuanto a su funcionalidad,
existiendo minimas diferencias. Se pueden clasificar en
tres grandes categorias:

1. Temporizadores tipo A (TIMER 1)


2. Temporizadores tipo B (TIMER 2 y TIMER 4)
3. Temporizadores tipo C (TIMER 3 y TIMER 5
TIPO A (TIMER 1)

Algunas características especiales de este tipo de temporizadores son las


siguientes:
 Pueden ser utilizados en modo oscilador LP (Low Power) u oscilador
secundario de 32 Khz para aplicaciones de reloj de tiempo real (RTC).
 Pueden funcionar de forma asíncrona a través de una señal de reloj
externa.
TIPO B (TIMER 2 – TIMER 4)
Sus características especificas son las siguientes:
 Los temporizadores tipo B pueden concatenarse con los tipo C para
formar temporizadores de 32 bits. El registro TxCON del temporizador
tipo B contiene el bit de control T32, que cuando tiene valor 1 permitirá
el funcionamiento del temporizador de 32 bits.
 La sincronización de reloj se realiza después de atravesar la lógica del
divisor de frecuencia (Prescaler).
La estructura interna es similar a la del temporizador tipo A pero no cuenta
con la lógica que posibilitaba la sincronización con el reloj externo ni con la
opción del oscilador LP.
TIPO C (TIMER 3 y TIMER 5)

Algunas características especiales de este tipo de


temporizadores son las
siguientes:
 Pueden concatenarse con los tipo B para formar
temporizadores de 32 bits.

 En un dispositivo dado, al menos un temporizador tipo C


tiene la capacidad de disparo (trigger) en una conversión
analogico/digital (A/D
PR1

OSC1 COMPRADOR T1IF


pin Reloj Ton Preescaler
pin U1:A
. 1 TCKPS1 TCKPS0
3
OSC2 2 TMR1
TCS 7409

oin
Entrada
Pulsos
T1CK Externos
ESTRUCTURA INTERNA DEL TEMPORIZADOR TIPO A
(TIMER 1)
ESTRUCTURA INTERNA DEL TEMPORIZADOR TIPO B
(TIMER 2 y TIMER 4)
ESTRUCTURA INTERNA DEL TEMPORIZADOR TIPO B
(TIMER 2 y TIMER 4)
ESTRUCTURA INTERNA DEL TEMPORIZADOR TIPO C
(TIMER 3 y TIMER5)
ESTRUCTURA INTERNA DEL TEMPORIZADOR TIPO C
(TIMER 3 y TIMER5)
REGISTROS DE CONTROL
Registro base tipo A (TxCON)

Byte superior

 TON: Activación del temporizador. Es un bit que gobierna el permiso o


la prohibición del funcionamiento del temporizador. En caso de poner
un ‘0’ en dicho bit, el temporizador no funcionara. Dado que es
susceptible de ser modificado, el bit es leible,borrable y escribible.
 TSIDL: Detención del temporizador en modo IDLE. Cuando TSIDL=1
indica que el temporizador estara detenido cuando se encuentra en el
modo de espera IDLE,y para que pueda continuar nuevamente, sera
necesario poner un 0. Se trata de un bit leible, borrable y escribible

El bit 14 y los 12 – 9 no se encuentran implementados y son leidos como


cero.
 TGATE=1,encendido y en caso contrario, desactivado. Cuando
TGATE=1, el bit TCS debera tomar el valor 0 ya que en caso
contrario TGATE sera leido siempre como 0.
 TCKPS<1:0>: Bits para el prescaler.
 TSYNC: Sincronización con señal externa de reloj.
Si TCS=1 y TSYNC=1 entonces se realizara la sincronizacion;
si TCS=0, este bit sera ignorado.

 TCS: Selección de fuente de reloj. Cuando este bit se encuentra


activado, se utiliza un reloj externo aplicado a la patita TxCK. En
cambio,cuando TCS=0 el reloj interno es el que se emplea. Es un bit
leible, borrable y escribible.

 Los bits 7, 3 y 0 no se encuentran implementados y son leidos como


0.
Registro base tipo B TxCON (TIMER 2 y TIMER 4

TON: Activación del temporizador. Es el encargado de la activación del


temporizador y dependiendo del valor que posea el bit T32,se activara o
detendra el temporizador de 16 bit o el de 32 bits,el bit es leible,borrable
y escribible.
Si T32=1 (Modo temporizador de 32 bits)
1= Activa el temporizador de 32 bits.
0= detiene el temporizador de 32bits.
TSIDL: Detención del temporizador en modo IDLE. Cuando TSIDL=1
indica que el temporizador estara detenido cuando se encuentra en el
modo de espera IDLE,y para que pueda continuar nuevamente, sera
necesario poner un 0. Se trata de un bit leible, borrable y escribible.
El bit 14 y los bits 12 – 9 no se encuentran implementados y son leidos
como 0
Byte inferior

 GATE (solo timer 2): Este bit se usa para habilitar el modo de
disparo por acumulación de tiempo. El bit es leible, borrable y
escribible.
 TCKPS<1:0>: Bits para el prescaler. Son 2 bits ambos
leibles,borrables,escribibles.
 T32 (timer 2 y 3), T45 (timer 4 y 5): Selección del modo
temporizador de 32 bits. Este bit posibilita la opción de elegir el
modo temporizador de 32 bits si T32=1, TMRx y TMRy forman un
temporizador de 32 bits.
 TCS: Selección de fuente de reloj. Cuando este bit se encuentra
activado, se utiliza un reloj externo aplicado a la patita TxCK. En
cambio, cuando TCS=0 el reloj interno es el que se emplea. Es un
bit leible, borrable y escribible.

Los bits 7, 2 y 0 no se encuentran implementados y son leidos como 0


Registro base tipo C TxCON (TIMER 3 y TIMER 5)

Byte superior

 TON: Activación del temporizador. Es un bit que controla el permiso


o la prohibición de funcionamiento del temporizador.

 TSIDL: Detención del temporizador en modo IDLE. Cuando


TSIDL=1 indica que el temporizador estara detenido cuando se
encuentra en el modo de espera IDLE,y para que pueda continuar
nuevamente, sera necesario poner un 0. Se trata de un bit leible,
borrable y escribible.

El bit 14 y los bits 12 – 9 no se encuentran implementados y son leidos


como 0.
 TCKPS<1:0>: Bits para el prescaler. Son 2 bits ambos
leibles,borrables,escribibles.

 TCS: Selección de fuente de reloj. Cuando este bit se encuentra


activado, se utiliza un reloj externo aplicado a la patita TxCK. En
cambio, cuando TCS=0 el reloj interno es el que se emplea. Es un
bit leible, borrable y escribible.

Los bits 7, 3 , 2 Y 0 no se encuentran implementados y son leidos


como 0
MODOS DE FUNCIONAMIENTO

Los temporizadores tienen la posibilidad de funcionar en 4


modos:
 Temporizador sincrono.
 Contador Sincrono.
 Contador Asincrono.
 Contaje por disparo por acumulación del tiempo <Gated
time accumulation>

El modo de funcionamiento del temporizador vendrá


determinado por el valor de los bits de control
TCS (TxCON)<1>), TCYNC (T1CON)<2>) y
TGATE(TxCON)<6>).
NOTA: hay una restricción en el modo contador asíncrono
que solo permite a los temporizadores tipo A trabajar en el.
MODO TEMPORIZADOR SINCRONO
Los tres tipos de temporizadores antes comentados (tipo A, tipo B y tipo
C) pueden funcionar en este modo.
Para ello la señal de reloj utilizada sera la del reloj interno del sistema
(FOSC/4).
La selección del modo temporizador sincrono se lleva a cabo cuando el
bit TCS del registro de control del temporizador (TxCON) tiene valor ‘0’.

MODO CONTADOR SINCRONO


En este modo pueden funcionar los 3 tipos de temporizadores.
Para operar en este modo el bit TCS del registro de control del
temporizador (TxCON) debera tener valor 1 para que señal de reloj sea
externa.
Para los temporizadores tipo A ademas de poner el valor de TCS=1, el
bit TSYNC (TxCON)<2>) debera igualmente tomar valor 1 para realizar
la sincronización con la señal de reloj externa.
Los temporizadores trabajando en modo contador sincrono no
funcionaran dentro del modo de reposo(SLEEP)
MODO TEMPORIZADOR ASINCRONO

Este modo solo es posible en temporizadores tipo A.


La señal de reloj sera la misma que en el modo contador sincrono, es
decir, la externa.
La ventaja es que el temporizador sigue funcionando cuando el
dispositivo se encuentra en reposo y que se puede generar una
interrupción que saque al dispositivo de dicho estado, es importante
destacar que podrían producirse resultados no deseados
MODO DE CONTAJE POR DISPARO POR ACUMULACIÓN DE
TIEMPO

Este modo de funcionamiento permite que el registro


contador del temporizador se incremente en función de la
duración de los pulsos aplicados en la patita TxCK y utiliza
la señal de reloj interna.
DIVISOR DE FRECUENCIA (PRESCALER)

Para la configuración del prescaler se utilizaran los bits de


control TCKPS <1:0> del registro TxCON.
La tabla muestra los cuatro posibles valores que pueden
tomar esos bits para cada rango de prescaler

El divisor de frecuencia se borrara cada vez que se realice


alguna de las siguientes acciones:
• Escritura en el registro (TMRx).
• TON = ‘0’
• Cualquier Reset del dispositivo.
LAS INTERUPCIONES DE LOS TEMPORIZADORES
Los temporizadores de 16 bits pueden provocar una interrupción
cuando se produce la coincidencia de periodos o un flanco
descendente de la señal externa, dependiendo del modo de
trabajo en el que funcione. Para que los temporizadores sean
capaz de provocar una interrupción en dichas situaciones se debe
habilitar el bit de control TxIE e inicilizar el valor de los bits que
indican la prioridad de la interrupción TxIP<2:0> con un valor
diferente de cero.
El bit que indica que se ha producido una interrupción es TxIF y se
pone a 1 cuando se produce alguna de las siguientes condiciones:
 El contador (TMRx) y el registro de periodo (PRx) coinciden y el
temporizador no esta funcionando en modo <<Gated time
accumulation>>
 Se detecta un flanco descendente operando en modo
<<Gated time accumulation>>
 La puesta a ‘0’ del bit TxIF debera realizarse mediante software
TEMPORIZADORES DE 32 BIT

Para formar temporizadores de 32 bits se deben concatenar


un temporizador tipo B y otro tipo C.

Los bits de control que se encargan de gobernar el nuevo


temporizador son los asociados al temporizador tipo B, por
los que los bits de registro TxCON del temporizador tipo C,
no tienen ningun efecto sobre el nuevo temporizador.

Para el control de las interrupciones se utilizan los bits (TxIE,


TxIF y TxIP <2:0>) del temporizador tipo C
ESTRUCTURA INTERNA DEL TEMPORIZADOR DE 32
BITS (Timers 2 y 3
EJERCICIO1

Para esta aplicación se utilizaron los temporizadores 1, 2 y


3 para la generación de señales a diferentes frecuencias y
tres diodos LED conectados al pin menos significativo de
los puertos B, E y F para la visualización de cada
temporizador.
Para ello se configuraron los periodos de cada
temporizador con distintos valores y se habilitaron las
Interrupciones.
Ejemplo1: dsPIC30f4013 COM TEMPORIZADOR
Realizar un programa que parpadear (en un periodo de un segundo),
algunos pines del puerto B, utilizando el modulo del timer1 del dsPIC.
.equ __30F4013, 1
.include "p30f4013.inc"
config __FOSC, FRC ;Trabajar con el Osc Interno
config __FWDT, WDT_OFF ;deshabilitar el Perro guardian
config __FBORPOR, MCLR_EN
.equ Fcy, #7370000 ;Frecuencia del Osc.Interno
.equiv LEDS, 0x00FF
.global __main ;The label for the first line of code.
.text ;Start of Code section
__main:
mov #__SP_init,w15 ;Initalize the Stack Pointer
mov #__SPLIM_init,w0
mov w0,SPLIM ;Initialize the Stack Pointer Limit Register
nop ;Add NOP to follow SPLIM initialization
;Conficuarcion de Pines
mov #0x00,w0 ;Port B all como salida Digital
mov w0,TRISB
mov #LEDS,w0 ;Initialize LED pin data to off state
mov w0,LATB
;------------------------------------------------------------------------------------------
;Configuración del Timer para un delay de 1s
clr T1CON ;Turn off Timer1 by clearing control register
clr TMR1 ;Start Timer1 at zero
mov #Fcy/1024,w0 ;Get period register value for 1/2 second
mov w0,PR1 ;Load Timer1 period register
mov #0x8030,w0 ;Get Timer1 settings (1:256 prescaler)
mov w0,T1CON ;Load Timer1 settings into control register
nop
bucle:
btss IFS0,#T1IF ;Check if Timer1 interrupt flag is set
bra bucle ;Loop back until set
bclr IFS0,#T1IF ;Clear Timer1 interrupt flag
com LATB ;cambia de alto a bajo o viciversa
bra bucle ;Retorno al Bucle
;----------------====================================
.end ;End del codigo .asm
include <30F4013.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES CKSFSM //Clock Switching is enabled, fail Safe clock monitor is enabled
#FUSES NOBROWNOUT //No brownout reset
#device ICSP=1
#use delay(clock=32MHz,crystal=8MHz)
#define LED PIN_A11
#bit RB7=0x06.7 //Identificador para el bit RB7
#INT_TIMER1
void timer1_isr(void)
{
RB7=~RB7; //Togle RB7
set_timer1(0x0BDC); //carga del TMR1
}
void main()
{
set_tris_b(0b01111111); //configura RB7 como salida el resto como entrada
RB7=0; //Inicializo RB7
setup_timer1(TMR_INTERNAL | TMR_DIV_BY_1, 2);
enable_interrupts(INT_TIMER1);
enable_interrupts(INTR_GLOBAL);
set_timer1(0x0BDC); //Carga del TMR1
while(true); //Bucle infinito hasta interrupción
}
hacer parpadear un led cada 2 segundos en cualquier puerto de un dspic30f4013,
usando una interrupcion interna.

También podría gustarte