sesión 09: timer como base de tiempo.. 2009/1 circuitos digitales iii 2010/1 circuitos digitales...

Post on 02-Feb-2016

227 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Sistemas Digitales IISesión 09: TIMER como base de tiempo.

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

A continuación…A continuación…

TIMER 2

TIMER 1

TIMER 0

TIMER como base de tiempoTIMER como base de tiempo

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

Antes de ComenzarAntes de Comenzar

Conociendo la CPU y sus Periféricos…

IRQIRQ

SIMSIME/SE/S

SCISCI

CPUCPU MEMORIAMEMORIA

ADCADC

TIMERTIMER

CAJA NEGRACAJA NEGRA

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

Antes de ComenzarAntes de Comenzar

Se requiere del uso del Timer cuando necesitamos suplir los siguientes requerimientos:

Reloj Sistema

1ms100ms

250ms1s

0.5s

5msCAJA NEGRACAJA NEGRA

Generador de Bases de Tiempo

Generador de Bases de Tiempo

Base de tiempo configurable…

Base de tiempo configurable…

CPUProcesando…

CPUProcesando…

Mínima intervención de

la CPU

Mínima intervención de

la CPU

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

Antes de ComenzarAntes de Comenzar

Se requiere del uso del Timer cuando necesitamos suplir los siguientes requerimientos:

t

CAJA NEGRACAJA NEGRA

Tiempo de evento: X seg.

Medición de Tiempo

Medición de Tiempo

Mínima intervención de

la CPU

Mínima intervención de

la CPU

Midiendo…

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

Antes de ComenzarAntes de Comenzar Se requiere del uso del Timer cuando

necesitamos suplir los siguientes requerimientos: Comunicación de datos, usando señales moduladas

(Modulación de pulso o PWM). Suponga la transmisión de ‘H’ ‘O’ ‘L’ ‘A’ NULL

CAJA NEGRA

CAJA NEGRATIMERTIMER

Equipo A

CAJA NEGRA

CAJA NEGRATIMERTIMER

Equipo B

Línea de Transmisión

‘H’ ‘O’ ‘L’ ‘A’ NULL

Generación de señales

cuadradas

Mínima intervención de

la CPU

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

Antes de ComenzarAntes de Comenzar

Se requiere del uso del Timer cuando necesitamos suplir los siguientes requerimientos:

MOTOR DC

VDC

t

VDC

t

VDC

t

VDC

t

CAJA NEGRA

PWM

CAJA NEGRA

PWM

Generación de PWM

Generación de PWM

Mínima intervención de

la CPU

Mínima intervención de

la CPU

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

Módulo TIMERMódulo TIMER

Periódicos Bases de Tiempo.

Detectar Eventos Externos Medida de Frecuencia. Medida de ancho de dureza.

Generar Señales Modulación de Ancho de Pulso.

Combinaciones Control de Motores, Comunicaciones, etc…

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

Módulo TIMERMódulo TIMER

Temporizadores.

Medida del tiempo de eventos externos.

Generación de Señales Cuadradas.

TIMERTIMEREvento o INTEvento o INT543210

TIMEREvento I.C.

TIMEREvento I.C.

EventoEventot1t2t3t4

TIMEREvento O.C.

TIMEREvento O.C.

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

Módulo TIMERMódulo TIMER

Este módulo provee varias funciones Contador Rueda Libre con overflow programable. Captura de tiempos cuando ocurre un evento

externo (Input Capture). Generación de señales cuadradas con polaridad,

duración y frecuencia programables (Output Compare).

Se pueden generar señales PWM haciendo uso de Output Compare y Toggle on Overflow.

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

Módulo TIMERMódulo TIMER

TIMER como Base de Tiempo

MÓDULONFIN FOUT

CONT. 16-BITSFBUS

PRES: ÷1, ÷2, ÷4, ÷8, ÷16, ÷32, … FOVERFLOW

SEL. PS.

TIMER

CARGA

COMP

CONT

CARGA5

PTOF

Tiempo

INT_TIMER

INT. a CPU

012345010 ... 5ACK_SW

COMP

Componente Central: Contador 16

Bits

Componente Central: Contador 16

Bits

Divide la frecuencia de bus, el contador se

incrementa más lentamente

Divide la frecuencia de bus, el contador se

incrementa más lentamente

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

Timer OverflowTimer Overflow Inicialización

Detener el conteo Resetear el contador del timer Seleccionar el preescalado Establecer el valor del módulo Quitar la máscara de interrupción Habilitar el conteo

Reconocimiento de la interrupción Leer el registro de estado y control Llevar la bandera de interrupción a cero

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

A continuación…A continuación…

TIMER 2

TIMER 1

Timer 0

TIMER como base de tiempo

TIMER 0

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 0TIMER 0

El bloque funcional TIMER0/WATCHDOG es: Un contador (registro) de 8 bits. Incrementado por hardware y programable. La cuenta máxima es de 255. El incremento es constante e independiente.

Pude usarse como: Contador: cuenta los eventos externos (a través del pin

RA4/TOCK1). Temporizador: cuenta los pulsos internos de reloj.

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 0TIMER 0

Se puede insertar un preescalador (divisor de frecuencia programable) 2, 4, 8, 16,32, 64,128 o 256. La frecuencia de conteo es una cuarta parte de la

frecuencia de reloj (fosc/4).

Con el uso del preescalador se puede dividir la frecuencia.

El bloque del TIMER0 puede funcionar como WATCHDOG.

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 0TIMER 0

Los registros implicados en la configuración del TIMER0/WDT son los siguientes: OPTION_REG: configura el "hardware" del

TIMER0/WDT. INTCON: permite trabajar con la interrupción del

TIMER0/WDT. TRISA: habilita el pin RA4.

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 0TIMER 0

Los registros configuran los siguientes elementos: T0CS: Procedencia de las señales:

• 1 = RA4/TOCK1.• 0 = Reloj interno.

T0SE: Tipo de flanco en el T0CK1/RA4:• 1 = Flanco descendente.• 0 = Flanco ascendente.

PSA: Asignación del divisor de frecuencias:• 1 = WDT.• 0 = TMR0.

Seleccionar el divisor de frecuencias a actuar (preescalador)

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 0TIMER 0

El tiempo de desbordamiento del TIMER0 se calcula según la siguiente ecuación:

T = TCM·Prescaler·(256 - Carga TMR0)

Donde TCM es el ciclo máquina que se puede calcular mediante la ecuación:

TCM = 4/FOSC

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 0 en CTIMER 0 en C

La función para configurar el TlMER0 es:

setup_timer_0 (modo);

Donde modo está definido en el fichero de cabecera

Modo Descripción

RTCC_INTERNALProcedencia de la señal reloj interno flaco de subida

RTCC_EXT_L_TO_HProcedencia de la señal reloj externo flaco de subida

RTCC_EXT_H_TO_LProcedencia de la señal reloj externo flaco de bajada

RTCC_DIV_2 Preescalador 2

RTCC_DIV_4 Preescalador 4

RTCC_DIV_8 Preescalador 8

RTCC_DIV_16 Preescalador 16

RTCC_DIV_32 Preescalador 32

RTCC_DIV_64 Preescalador 64

RTCC_DIV_128 Preescalador 128

RTCC_DIV_256 Preescalador 256

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 0 en CTIMER 0 en C

Los distintos modos se pueden agrupar mediante el empleo de símbolo |.

setup_timer_0(RTCC_DIV_2 | RTCC_EXT_L_TO_H);

El compilador C suministra una serie de funciones para leer o escribir en el TlMER0/WDT. Para escribir un valor en el registro:

• set_timer0 (valor);

Para leer el valor actual del registro:• valor = get_timer0 ();

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 0 en CTIMER 0 en C

Para activar TIMER0 es necesario utilizar bits de configuración mediante la directiva #FUSES:

#fuses NOWDT //Watchdog Desactivado.

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 0 en CTIMER 0 en C

Para trabajar con las interrupciones del TIMER0, se la siguiente directiva:

#INT_TIMER0 Esta indica que la función que esté a continuación

será la subrutina de atención de interrupción del módulo TIMER0.

Para habilitar la interrupción se emplea:

enable_interrups (INT_TIMER0);

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

EjemploEjemplo

Generar una señal Cuadrada de 1KHz utilizando la interrupción del TIMER0.

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

EjemploEjemplo

Solución: Para generar una señal de 1Khz se necesita un

semiperiodo de 500us. Según la ecuación de desbordamiento, utilizando un cristal de 4 MHz y un preescalador de 2:

T = TCM·Prescaler·(256 - CargaTMR0)

500us = (4/4000000)·2·(256 - Carga)

Carga = 6

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

EjemploEjemplo

Generar una señal Cuadrada de 1Hz utilizando la interrupción del TIMER0.

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

EjemploEjemplo

Solución: Para generar una señal de 1Hhz se necesita un

semiperiodo de 500ms. Según la ecuación de desbordamiento, utilizando un cristal de 4 MHz y un preescalador de 256:

T = TCM·Prescaler·(256 - CargaTMR0)

500ms = (4/4000000)·256·(256 - Carga)

Carga = -1697 ???

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

A continuación…A continuación…

Timer 2

Timer 1

Timer 0

TIMER como base de tiempo

Timer 1

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 1TIMER 1

El modulo TIMER1 es otro temporizador/contador con las siguientes características: Trabaja con 16 bits (con dos registros de 8 bits: TMR1H

y TMR1L). Ambos registros se pueden leer y escribir. Interrupción por desbordamiento de FFFFh a 0000h. Reset por disparo del módulo CCP Controlado por el registro T1CON. Con el bit TMR10N

(T1CON<0>) se puede habilitar o deshabilitar.

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 1TIMER 1

Los registros configuran los siguientes elementos: Selección del valor del preescalador del reloj del TMR1. Habilitación del oscilador del TMR1. Sincronización de la entrada de reloj. Selección de la fuente de reloj para el TMR1: Habilitación del TMR1.

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 1TIMER 1

El TlMER1 puede operar en los siguientes modos: Como temporizador. Como contador síncrono. Como contador asíncrono.

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 1TIMER 1

El tiempo de desbordamiento del TIMER1 se calcula según la siguiente ecuación:

T = TCM·Prescaler·(65536 - Carga TMR1)

Donde TCM es el ciclo máquina que se puede calcular mediante la ecuación:

TCM = 4/FOSC

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 1 en CTIMER 1 en C

La función para configurar el TlMER1 es:

setup_timer_1 (modo);

Donde modo está definido en el fichero de cabecera

Modo Descripción

T1_DISABLED Habilitar TIMER1

T1_INTERNALProcedencia de la señal reloj interno

T1_EXTERNALProcedencia de la señal reloj externo asíncrono

T1_EXTERNAL_SYNCProcedencia de la señal reloj externo síncrono

T1_CLK_OUT Oscilador habilitado

T1_DIV_BY_1 Preescalador 1

T1_DIV_BY_2 Preescalador 2

T1_DIV_BY_4 Preescalador 4

T1_DIV_BY_8 Preescalador 8

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 1 en CTIMER 1 en C

Los distintos modos se pueden agrupar mediante el empleo de símbolo |.

La lectura y escritura en el módulo TMR1 se realiza a través de las siguientes funciones: valor = get_timer1 (); set_timer1 (valor);

Donde valor es un entero de 16 bits.

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 1 en CTIMER 1 en C

Para trabajar con las interrupciones del TIMER1, se la siguiente directiva:

#INT_TIMER1 Esta indica que la función que esté a continuación

será la subrutina de atención de interrupción del módulo TIMER1.

Para habilitar la interrupción se emplea:

enable_interrups (INT_TIMER1);

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

EjemploEjemplo

Generar una función que permita realizar retardos de 1 segundo empleando el TIMER1

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

EjemploEjemplo

Solución: Para generar retardos de 1seg se necesita un

semiperiodo de 500ms (¿por qué?). Según la ecuación de desbordamiento, utilizando un cristal de 4 MHz y un preescalador de 8:

T = TCM·Prescaler·(65536 - CargaTMR0)

500ms = (4/4000000)·8·(65536 - Carga)

Carga = 3036

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

A continuación…A continuación…

Timer 2

Timer 1

Timer 0

TIMER como base de tiempo

Timer 2

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 2TIMER 2

El TIMER2 es un modulo temporizador con las siguientes características: Temporización de 8 bits (registro TMR2). Registro de periodo de 8 bits (PR2). Ambos registros se pueden leer o escribir. Preesacalador programable por programa (1,4,16). Postescalador programable por programa (1 a 16). Interrupción controlada por PR2. El módulo SSP utiliza opcionalmente el TlMER2 para

generar una señal de reloj.

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 2TIMER 2

Los registros configuran los siguientes elementos: Selección del valor del postescalador del TMR2. Habilitación del TMR2: Selección del valor del preescalador del TMR2.

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 2TIMER 2

El tiempo de desbordamiento del TIMER1 se calcula según la siguiente ecuación:

T = TCM·Prescaler·(Carga TMR2+1)·Postescalador

Donde TCM es el ciclo máquina que se puede calcular mediante la ecuación:

TCM = 4/FOSC

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 2 en CTIMER 2 en C

La función para configurar el TlMER2 es:

setup_timer_2 (modo, periodo, postscaler);

Donde: Periodo es un valor entero de 8 bits (0-255). Postscaler es el valor del postescalador (1 a 16). modo está definido en el fichero de cabecera

Modo Descripción

T2_DISABLED Habilitar TIMER2

T1_DIV_BY_1 Preescalador 1

T1_DIV_BY_4 Preescalador 4

T1_DIV_BY_16 Preescalador 16

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 2 en CTIMER 2 en C

Los distintos modos se pueden agrupar mediante el empleo de símbolo |.

La lectura y escritura en el módulo TMR2 se realiza a través de las siguientes funciones: valor = get_timer2 (); set_timer2 (valor);

Donde valor es un entero de 8 bits.

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

TIMER 2 en CTIMER 2 en C

Para trabajar con las interrupciones del TIMER2, se la siguiente directiva:

#INT_TIMER2 Esta indica que la función que esté a continuación

será la subrutina de atención de interrupción del módulo TIMER0.

Para habilitar la interrupción se emplea:

enable_interrups (INT_TIMER2);

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

EjemploEjemplo

Generar una señal cuadrada de 1 KHz utilizando la interrrupción del TlMER2.

2009/1Circuitos Digitales III 2010/1Circuitos Digitales III 2010/1Circuitos Digitales IIICircuitos Digitales III 2010/1Sistemas Digitales II Universidad Santo Tomás

EjemploEjemplo

Solución: Para generar una señal de 1 Khz se necesita un

semiperiodo de 500us, según la ecuación del desbordamiento del TIMER2, utilizando un cristal de 4 MHz, un preescalador de 4 y un postescalador de 1:

T = TCM·Prescaler·(Carga TMR2+1)·Postscaler

500us = (4/4000000)·4·(Carga+1)·1

Carga = 125

Sistemas Digitales IIFin de la sesión 09

top related