La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Sesión 09: TIMER como base de tiempo.

Presentaciones similares


Presentación del tema: "Sesión 09: TIMER como base de tiempo."— Transcripción de la presentación:

1 Sesión 09: TIMER como base de tiempo.

2 A continuación… TIMER como base de tiempo TIMER como base de tiempo

3 Antes de Comenzar Conociendo la CPU y sus Periféricos… CPU MEMORIA ADC
CAJA NEGRA E/S SIM IRQ SCI TIMER

4 Antes de Comenzar Se requiere del uso del Timer cuando necesitamos suplir los siguientes requerimientos: Base de tiempo configurable… Generador de Bases de Tiempo Mínima intervención de la CPU 1s CAJA NEGRA 5ms 1ms 250ms 100ms 0.5s Reloj Sistema CPU Procesando…

5 Mínima intervención de la CPU
Antes de Comenzar Se requiere del uso del Timer cuando necesitamos suplir los siguientes requerimientos: Midiendo… Mínima intervención de la CPU Medición de Tiempo t CAJA NEGRA Tiempo de evento: X seg.

6 Generación de señales cuadradas Mínima intervención de la CPU
Antes 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 Generación de señales cuadradas ‘H’ ‘O’ ‘L’ ‘A’ NULL CAJA NEGRA TIMER Equipo A CAJA NEGRA TIMER Equipo B Mínima intervención de la CPU Línea de Transmisión

7 Mínima intervención de la CPU
Antes de Comenzar Se requiere del uso del Timer cuando necesitamos suplir los siguientes requerimientos: VDC t VDC t VDC t Generación de PWM VDC t CAJA NEGRA PWM Mínima intervención de la CPU MOTOR DC

8 Módulo TIMER Periódicos Detectar Eventos Externos Generar Señales
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…

9 Módulo TIMER Temporizadores. Medida del tiempo de eventos externos.
Generación de Señales Cuadradas. TIMER Evento o INT 2 1 5 4 3 TIMER Evento I.C. Evento t4 t3 t2 t1 TIMER Evento O.C.

10 Mó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.

11 Módulo TIMER TIMER como Base de Tiempo MÓDULO N PRES: ÷1, ÷2, ÷4, CONT
Divide la frecuencia de bus, el contador se incrementa más lentamente TIMER como Base de Tiempo Componente Central: Contador 16 Bits MÓDULO N FIN FOUT TIMER PRES: ÷1, ÷2, ÷4, ÷8, ÷16, ÷32, … CONT CONT. 16-BITS FBUS 1 3 4 5 1 2 FOVERFLOW ACK_SW SEL. PS. COMP Tiempo COMP PTOF CARGA CARGA INT_TIMER 5 INT. a CPU

12 Timer Overflow Inicialización Reconocimiento de la interrupció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

13 A continuación… TIMER como base de tiempo Timer 0 TIMER 0 TIMER 1

14 TIMER 0 El bloque funcional TIMER0/WATCHDOG es: Pude usarse como:
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.

15 TIMER 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.

16 TIMER 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.

17 TIMER 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)

18 TIMER 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

19 TIMER 0 en C La función para configurar el TlMER0 es:
Modo Descripción RTCC_INTERNAL Procedencia de la señal reloj interno flaco de subida RTCC_EXT_L_TO_H Procedencia de la señal reloj externo flaco de subida RTCC_EXT_H_TO_L Procedencia 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 La función para configurar el TlMER0 es: setup_timer_0 (modo); Donde modo está definido en el fichero de cabecera

20 TIMER 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 ();

21 TIMER 0 en C Para activar TIMER0 es necesario utilizar bits de configuración mediante la directiva #FUSES: #fuses NOWDT //Watchdog Desactivado.

22 TIMER 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);

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

24 Ejemplo 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/ )·2·(256 - Carga) Carga = 6

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

26 Ejemplo 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/ )·256·(256 - Carga) Carga = ???

27 A continuación… TIMER como base de tiempo Timer 0 Timer 1 Timer 1

28 TIMER 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.

29 TIMER 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.

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

31 TIMER 1 El tiempo de desbordamiento del TIMER1 se calcula según la siguiente ecuación: T = TCM·Prescaler·( Carga TMR1) Donde TCM es el ciclo máquina que se puede calcular mediante la ecuación: TCM = 4/FOSC

32 TIMER 1 en C La función para configurar el TlMER1 es:
Modo Descripción T1_DISABLED Habilitar TIMER1 T1_INTERNAL Procedencia de la señal reloj interno T1_EXTERNAL Procedencia de la señal reloj externo asíncrono T1_EXTERNAL_SYNC Procedencia 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 La función para configurar el TlMER1 es: setup_timer_1 (modo); Donde modo está definido en el fichero de cabecera

33 TIMER 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.

34 TIMER 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);

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

36 Ejemplo 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·( CargaTMR0) 500ms = (4/ )·8·( Carga) Carga = 3036

37 A continuación… TIMER como base de tiempo Timer 0 Timer 1 Timer 2

38 TIMER 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.

39 TIMER 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.

40 TIMER 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

41 TIMER 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

42 TIMER 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.

43 TIMER 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);

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

45 Ejemplo 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/ )·4·(Carga+1)·1 Carga = 125

46 Fin de la sesión 09


Descargar ppt "Sesión 09: TIMER como base de tiempo."

Presentaciones similares


Anuncios Google