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