sesión 09: timer como base de tiempo.. 2009/1 circuitos digitales iii 2010/1 circuitos digitales...
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