Sunteți pe pagina 1din 22

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

Diseo de sistemas microprocesados


Sptimo laboratorio: El mdulo de temporizacin Timer 1 del dsPIC30F3014
Profesor: Mag. Ing. Sergio Salas Arriarn

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

El problema de la funcin __delay_ms()

Suponga que se quiere disear un cronmetro que cuente el nmero de horas, segundos en la pantalla LCD. Para esto se trata primero haciendo uso de la fun __delay_ms()

Mag. Ing. Sergio Salas

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

while(1) {

Implementacin del cronometro


Retardo de 2ms POS_CURSOR(1,4); Retardo de 0.3 us segLSB++; Retardo de 0.4 us if(segLSB == 10) { Retardo de 0.2 us segLSB=0; Retardo de 0.3 us segMSB++; if(segMSB==6) Retardo de 0.4 us { Retardo de 0.2 us segMSB=0; . . } ESCRIBE_CHAR(horMSB+0); Retardo de 2 ms ESCRIBE_CHAR(horLSB+0); Retardo de 2 ms __delay_ms(1000); Retardo de 1 segundo

El retardo total Para incrementar segLSB es de 1 segundo + varios mseg + varios seg.

Referencia: Reloj de 10MHz y PLL a factor de 4

Mag. Ing. Sergio Salas

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

Problema encontrado

Es muy difcil logar un retardo exacto de 1.0000 segundos haciendo uso de la __delay_ms(), ya que los retardos generados para obtener el tiempo esperado del procesador al igual que las rutinas que manejan el LCD y los clculos de la que manejan el cronmetro (horas, minutos y segundos). Se podra reducir el argumento de __delay_ms() para compensar retardos adi hasta 1 milisegundo. Pero, los retardos en el orden de los seg no pueden ser con lo cual no se puede garantizar 1.0000 segundo preciso. Si se lograra obte exactitud buscada bastar una instruccin adicional (si es que se quiere realiz para que se pierda la exactitud. Para poder resolver el problema de inexactitud del reloj se requiere un tipo tem concurrente que pueda liberar al procesador de la tarea de generar un retardo

Mag. Ing. Sergio Salas

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

Los mdulos de temporizacin (Timers)

Los Timers son mdulos sumamente importantes que vienen incorporados en la Microcontroladores. Un Timer es un registro de 8, 16 o 32 bits capaz de realizar de forma automtica sin requerir recursos del microprocesador, por lo cual pued retardos de tiempo muy precisos. El tiempo de conteo t del Timer depende directamente de una seal de reloj qu externa o del mismo reloj del procesador. La seal elegida se conecta a un Pres divisor de frecuencia cuya funcin es reducir la velocidad de conteo a un valor q para la aplicacin a realizar.

Mag. Ing. Sergio Salas

Esquema de funcionamiento de un Timer


Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

Mag. Ing. Sergio Salas

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

Configuracin de t

El tiempo t es el intervalo que tarda el Timer en realizar una cuenta. Este tiempo depe seal de reloj cuyo periodo determina la base de tiempo de t. El tiempo t se puede configurar a travs de un Prescaler y de la seleccin de la seal que puede ser de diversos orgenes: Seal de reloj del cristal principal Seal de reloj del cristal secundario Seal de reloj externa
Suponga que una seal de reloj es de 10MHz. Y el Prescaler se ha configurado con un de 4. Entonces: t = (1/10MHz) x 4 = 0.4segundos

Mag. Ing. Sergio Salas

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

El tiempo de Overflow
0000000000000000 0000000000000001 . . . 1111111111111111 Evento de Overflow 0000000000000000 0000000000000001

La gran mayora de Timers tienen un modo para indicar el evento de Overflow. Este ev despus de un tiempo igual a 65535 x t para el caso de un Timer de 16 bits. Debe exi bandera de Overflow que indique la ocurrencia del evento. Este bit debe ponerse inme 0 lgico para permitir que el Timer siga contando el siguiente ciclo.

Mag. Ing. Sergio Salas

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

Modo de comparacin de cuenta

El evento de Overflow ocurre una vez cada 65535 x t, lo cual no da un tiempo muy pre se quieren generar retardos, de por ejemplo, 1 milisegundo. Algunos mdulos de tempo incluyen registros de comparacin que permiten obtener un evento por igualdad de valo Cuando la cuenta del Timer alcanza al valor del comparador, el Timer retorna a 0 y se r Con esto se tienen 65535 niveles de temporizacin diferentes. Timer 0000000000000000 0000000000000001 0000000000000010 . Registro comparador: . 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0000000001100100 0 0000000000000000 Evento de comparacin 0000000000000001 . . El retardo obtenido es: t x valor de comparacin

Mag. Ing. Sergio Salas

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

Ejemplo de clculo del tiempo de retardo

Suponga que t = 0.1seg. Y que el registro de comparacin se ha fijado en 200 (0x Obtenga el intervalo de tiempo donde se generar un el evento de comparacin. Ad Indique cunto tardara en generarse un Overflow para este t. El tiempo es: t x 200 = 0.1seg x 200 = 20seg. El tiempo de Overflow es: TO = t x 65535 = 0.1 seg x 65535 = 6553.5 seg = 6.5535 mseg.

Mag. Ing. Sergio Sala

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

Interrupciones en los temporizadores

La utilidad tanto de los eventos de Overflow como de comparacin es que se pueden co Eventos de interrupcin si es que son activados, con lo cual se puede obtener una interr Exacta cada 20seg, 100seg, 1 mseg, etc. Con lo cual se podra solucionar el problema

La interrupcin se puede fijar en un tiempo T y dentro de la rutina de servicio de interrup colocar las instrucciones que sean necesarias para realizar rutinas cada tiempo T, siemp tiempo requerido por estas instrucciones no sobrepase de T.

La interrupcin por Overflow al igual que la de comparacin requiere el borrado de las ba Indicadoras del evento ya que de no realizarse esto el Timer con continuar contando y en 0.

Mag. Ing. Sergio Salas

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

Los Timers del dsPIC30F3014


Existen tres modos de configuracin de los Timers en el dsPIC30F3014: Timer A (Timer 1) Timer B (Timer 2, Timer 3 y Timer 4) Timer C (Timer 3, Timer 4 y Timer 5)

El Timer A permite generar retardos de tiempo a partir de frecuencias base del cristal, externo de 32kHz. Este tipo de modo trabaja nicamente con el Timer 1. El Timer B utiliza a los Timers 2, 3 y 4 y puede concatenarse con el Timer C para form de 32 bits. El Timer C utiliza a los Timers 3, 4 y 5 y tambin puede concatenarse con el Timer B p un temporizador de 32 bits. Adicionalmente, cada Timer tiene funciones especiales. El Timer 2 permite generar se y el Timer 3 puede operar para este modo y el de comparacin de salida.

En la presente clase se trabajar con el Timer 1 que es el temporizador bsico de los

Mag. Ing. Sergio Salas

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

El Timer 1 del dsPIC30F3014

Mag. Ing. Sergio Salas

Registros de configuracin del Timer 1


Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

TMR1 PR1 T1CON


Bits de control:

T1IE -> Habilitador de interrupcin del registro IEC0 T1IF -> Bandera del evento de interrupcin del registr T1IP<2:0> -> Bits de prioridad de la interrupcin

Mag. Ing. Sergio Sala

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

Registro TMR1

El registro TMR1 es un contador de 16 bits que puede ser de lectura y escritura. El t configurar a partir de la seal de salida del PLL (Reloj del procesador) o tambin de u de baja frecuencia del orden de los 32 kHz.

Bit 15

Bit 0

Mag. Ing. Sergio Salas

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

El registro PR1

El registro PR1 contiene el valor de comparacin con el TMR1. Los temporizadores del d no contienen evento de Overflow. Solamente indican el evento de comparacin y dicho v en el registro PR1. Una vez que la cuenta del TMR1 iguala al valor de PR1, TMR1 pasa bandera T1IF se pone a 1 lgico indicando el evento de comparacin. TI1F debe poner a 0 lgico para permitir que el TMR1 siga contando.

TMR1 . . 1010101011110000 1010101011110001 1010101011110010 0000000000000000 0000000000000001

Evento de comparacin T1IF = 1

PR1 10101010111100 10

Mag. Ing. Sergio Salas

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

Registro T1CON
Es el registro de configuracin del TIMER1:

TON:

Bit habilitador del TIMER1 TCKPS: Selector del Prescaler 1: TIMER1 ON. 11: Prescaler 256 0: TIMER1 OFF. 10: Prescaler 64 TSIDL: Funcionamiento en modo bajo consumo Prescaler 8 01: 1: TIMER1 no opera en bajo consumo 00: Prescaler 1 0: TIMER 1 opera en modo bajo consumo TSYNC: Modo de sincronismo TGATE: Modo acumulativo (para clculo de periodos de 1: Sincronizacin habilitada seales externas) 0: Sincronizacin deshabilitada 1: Modo acumulativo habilitado TCS: Fuente de reloj del Timer1 0: Modo acumulativo deshabilitado 1: Seal externa del pin TxCK 0: Seal del PLL. Ing. Sergio Salas Mag.

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

El Registro OSCCON

Este es un registro de control de la seal de reloj del sistema. Cuando se inicia el progra configuran las macros para seleccionar el factor de PLL indirectamente se configuran re Oscilador. El bit LPOSCEN permite seleccionar como fuente de reloj del TIMER1 el cris de baja frecuencia entres los pines SOSC1 y SOSC0. El registro OSCCON posee prote Escritura ya que un acceso indebido puede resultar fatal para el dsPIC. Por esta razn, requiere de una rutina especial.

Mag. Ing. Sergio Salas

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

Ejemplo de un retardo de tiempo de 1 milisegundo


void __attribute__((__interrupt__)) _T1Interrupt(void); int main() { TRISB = 0xFF00;

IPC0 = IPC0 | 0x1000; // Nivel de prioridad 1 IEC0 = IEC0 | 0x0008; // Interrupcin Timer1 ON PR1 = 12500; // Periodo de interrupcin = 12500xAt T1CON = 0x8010; // Timer1 habilitado, Prescaler = 8 while(1);
return(0); }

void __attribute__((__interrupt__)) _T1Interrupt(void){ LATB++; IFS0 = IFS0 & 0xFFF7; // Borrado de la bandera de interrupcin } Mag. Ing. Sergio Sala

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

El Reloj en tiempo real (RTC)

Muchos sistemas electrnicos requieren de un Reloj en tiempo real que sea capaz de una simple tarea: contabilizar los segundos, minutos y horas. Esto solo es posible si se seal de reloj externa que tenga una frecuencia que sea potencia de 2. De tal manera, el divisor del Prescaler obtenga una frecuencia que sea un proporcional a 1 segundo e

El cristal de 32,768 kHz produce 215 ciclos por segundo. Si esto se divide entre factore 256, se obtienen seales que son capaces de producir un nmero de periodos enteros Con esto se puede disear un Reloj en tiempo real que garantice que al pasar los mes nunca se retrasar ni un solo segundo.

Los cristales de 32,768 kHz son estndares para circuitos que necesitan tener en cuen fecha. Por ejemplo, el BIOS de las placas madres de las computadoras utiliza este cris lo hacen muchos relojes digitales, calculadoras y telfonos celulares.

El mdulo de desarrollo del curso cuenta con un cristal de 32,768 kHz que puede ser h colocando los Jumpers entre le cristal y el dsPIC. La seal del reloj del cristal puede se como seal de reloj para el Timer1.

Mag. Ing. Sergio Sala

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

Configuracin del reloj de 32,768 kHz (Parte 1)


void __attribute__((__interrupt__)) _T1Interrupt(void);

int main() { TRISC = 0xFFFF; TRISB = 0xFF00; IPC0 = IPC0 | 0x1000; // Nivel de prioridad es 1 IEC0 = IEC0 | 0x0008; // La interrupcin est habilitada PR1 = 32768; //En un segundo hay 32768 periodos de reloj. T1CON = 0; //Timer1 OFF, Prescaler = 1 IFS0bits.T1IF = 1; //Interrupcin ON. /* Seleccin del reloj externo*/ T1CONbits.TCS = 1; //Seleccin de seal externa char a, b, c, *p; a = 2; b = 0x46; c = 0x57; p = (char *)&OSCCON; Mag. Ing. Sergio Sala

Facultad de Ingeniera Electrnica y Mecatrnica Carrera: Ingeniera Electrnica

Configuracin del reloj de 32,768 kHz (Parte 2)


/* Habilitar el oscilador de 32KHz en el registro OSCCON */ asm volatile ("mov.b %1,[%0] \n" "mov.b %2,[%0] \n" "mov.b %3,[%0] \n" : /* no outputs */ : "r"(p), "r"(b), "r"(c), "r"(a)); /* Habilitar el Timer 1 y comenzar el conteo*/ T1CONbits.TON = 1; while(1); return(0); } void __attribute__((__interrupt__)) _T1Interrupt(void) { LATB++; IFS0 = IFS0 & 0xFFF7; // Borrado de la bandera de interrupcin }

Mag. Ing. Sergio Sala

S-ar putea să vă placă și