Temporizadores Para Pic

download Temporizadores Para Pic

of 18

Transcript of Temporizadores Para Pic

  • 8/11/2019 Temporizadores Para Pic

    1/18

    TEMPORIZADORESEl tiempo est presente en todo momento, y medirlo es un aspecto importante en casi cualquieraplicacin electrnica. Una de las primeras aplicaciones desarrolladas en el mundo de laelectrnica digital fueron los circuitos para medir el tiempo, y estos adquirieron tal importancia,que estn presentes en casi cualquier dispositivo electrnico moderno. En nuestro caso,hablaremos de los circuitos temporizadores de los microcontroladores.

    El elemento fundamental del temporizador es un contador binario, encargado de contar lospulsos suministrados por algn circuito oscilador, con una base de tiempo estable y conocida.

    La estructura bsica de un temporizador est compuesto por tres bloques fundamentales:Contador binario : es el elemento bsico del temporizador y su misin es contar los pulsos del

    reloj. Sus caractersticas son:La cantidad de pulsos que puede contar. Controlar el evento de cuenta: ascendente o descendente.

    Circuitos de configuracin y control: es la interfaz entre el contador binario y elementos

    externos.Circuitos especializados de salida: Se utilizan para notificar, a otro elemento del sistema,sobre el estado del temporizador o acerca de la ocurrencia de un determinado evento.

    Caractersticas Las caractersticas de un temporizador son: Longitud del contador : Determina la cantidad mxima de pulsos que se pueden contar. Los

    ms comunes son de 8 16 bits. Lectura/escritura : En general, los temporizadores pueden ser escritos o ledos por el

    procesador. En algunos casos, donde el temporizador est vinculado a algn perifrico muyespecfico, esta opcin puede no existir o estar limitada.

    Modos de trabajo : Existen, en principio dos modos:

  • 8/11/2019 Temporizadores Para Pic

    2/18

    Contador : cuenta los pulsos desde una fuente externa al procesador. Los pulsos contadospueden tener perodo variable.

    Temporizador : cuentan los pulsos suministrados por una fuente estable y conocida, quepuede ser externa, o interna

    Forma de conteo: El conteo tpico es ascendente, sin embargo, existen contadores con laopcin de configurar el modo de conteo (ascendente o descendente).

    Configuracin de activacin por flanco: Permite establecer cuando se produce el conteo, sien el flanco de subida del reloj o en el flanco de bajada del reloj.

    Configuracin del reloj: Permite configurar la base de tiempo del reloj. Para ello usa unbloque funcional denominado Pre-escalador: Un pre-escalador , es bsicamente otro contador que se coloca antes del contador principal

    del temporizador y su funcin es dividir la seal del reloj a la entrada del contador principal.Generalmente la longitud es configurable, pero no se permite leerlos o escribirlos porsoftware.

    Interrupciones: En la mayora de casos, los temporizadores tienen interrupciones asociadas,con el objetivo de notificar al procesador que ha ocurrido el cruce por cero o algn valorespecfico en el registro de conteo.

    TIMER0El Timer0 tiene una amplia gama de aplicaciones. Se utiliza para generar pulsos de duracinarbitraria, en medir tiempo o en contar los pulsos externosU (eventos).El Timer0 es un temporizador/contador de 8 bits con las siguientes caractersticas:Temporizador/contador de 8 bits. Pre-escalador de 8 bits, el cual es compartido con el WDT (Temporizador Perro Guardin).Generacin de interrupcin pordesbordamiento.Fuente de reloj interna o externa programable. Seleccin del flanco de reloj externo programable.

    Los registros utilizados para configurarlo y trabajar con el Timer0 son:

  • 8/11/2019 Temporizadores Para Pic

    3/18

    REGISTRO OPTION_REGEl registro OPTION_REG contiene varios bits de control para configurar el pre-escalador, elTimer0, la interrupcin externa y las resistencias pull-up en el puerto PORTB.

  • 8/11/2019 Temporizadores Para Pic

    4/18

    RBPU: Resistencia Pull-Up del PORTB INTEDG: Bit selector de flanco activo de la interrupcin externa T0CS: Bit selector de tipo de reloj para el Timer0

    1: Pulsos introducidos a travs del RA4/TOCKI (contador). 0: Pulsos de reloj internos Fosc/4 (temporizador).

    T0SE - TMR0Bit selector de tipo de flanco en RA4/TOCKI. Selecciona el flanco (ascendente o descendente)

    contado por el Timer0, por el pin RA4/T0CKI.1: Incrementa en flanco descendente en el pin RA4/TOCKI. 0: Incrementa en flanco ascendente en el pin RA4/TOCKI.

    PSABit que asigna el pre-escalador (hay slo uno) al Timer0 o al WDT.1: Pre-escalador se le asigna al WDT.0: Pre-escalador se le asigna al Timer0.

  • 8/11/2019 Temporizadores Para Pic

    5/18

    PS2, PS1, PS0:Prescaler Rate Select bits (bit selector del valor del divisor de frecuencia). El valor del divisor defrecuencia se selecciona al combinar estos tres bits. Como se muestra en la siguiente tabla, elvalor del divisor de frecuencia se le asigna al Timer0 o al WDT.

    La siguiente figura muestra el esquema del Timer0 con todos los bits que determinan sufuncionamiento. Estos bits se almacenan en el registro OPTION_REG.

  • 8/11/2019 Temporizadores Para Pic

    6/18

    El registro del pre-escalador de 8 bits no est disponible al usuario, lo que significa que no esposible leerlo o escribir en l directamente

    Al asignarle el pre-escalador al temporizador, el pre-escalador se pondr a 0 con cualquierescritura en el registro TMR0.Al escribir en el registro TMR0, utilizado como un temporizador, no se inicia el conteo de lospulsos inmediatamente, sino con retraso de dos ciclos de instrucciones. Por consiguiente, esnecesario ajustar el valor escrito en el registro TMR0

  • 8/11/2019 Temporizadores Para Pic

    7/18

    Registro INTCON

    GIE (Global Interrupt Enable): controla simultneamente todas las fuentes de interrupcionesposibles.

    PEIE (Peripheral Interrupt Enable): controla interrupciones habilitadas por los perifricos. Esosignifica que no influye en interrupciones causadas por el temporizador Timer0 o por elcambio del estado en el puerto PORTB o por el cambio en el pin RB0/INT.

    TMROIE (TMR0 Overflow Interrupt Enable): controla interrupciones causadas por eldesbordamiento del Timer0.1: Habilita interrupciones por Timer0.

    0: Deshabilita interrupciones por Timer0. TMR0IF (TMR0 Overflow Interrupt Flag): detecta el desbordamiento en el registro deltemporizador Timer0, o sea el contador se pone a cero.1: En el registro del Timer0 ha ocurrido desbordamiento (esta bandera debe volverse a 0 por

    software).0: En el registro del Timer0 no ha ocurrido desbordamiento.

    Pasos para configurar TIMER0

    Para utilizar el Timer0 apropiadamente, es necesario:Paso 1: Seleccionar el modo

    El modo de Timer0, se selecciona por el bit TOSC del registro OPTION_REG: TOCS = 0, es modo temporizador .TOCS = 1, es modo contador .

    Cuando se asigna el pre-escalador al temporizador se debe poner a cero el bit PSA delregistro OPTION_REG. El valor del divisor de frecuencias se configura al utilizar los bits PS2,PS1 y PS0 del mismo registro. Al utilizar una interrupcin, los bits GIE y TMR0IE del registro INTCON deben estar a uno.

    Paso 2: Medir o contar Para medir tiempo:

    Reiniciar el registro TMR0 o escribir un valor conocido en l. El tiempo transcurrido (en microsegundos al utilizar el oscilador de 4MHz) se mide al leer el

    registro TMR0. El bit de bandera TMR0IF del registro INTCON se pone a uno automticamente siempre

    que ocurra el desbordamiento del registro TMR0. Si est habilitada, ocurre una interrupcin. Para contar pulsos:

    La polaridad de pulsos a contar en el pin RA4/T0CKI se selecciona por el bit TOSE delregistro OPTION_REG: T0SE = 0, flanco de subida. TOSE = 1, flanco de bajada.

    Varios pulsos se pueden leer del registro TMR0. El pre-escalador y la interrupcin se utilizande la misma forma que en el modo de temporizador.

  • 8/11/2019 Temporizadores Para Pic

    8/18

    Ejemplo: Manejo de Timer0 como temporizador sin InterrupcionesEn el presente ejemplo programaremos el Timer0 para que cuando llegue a un determinadovalor (CUENTA) cambie el valor lgico del bit 0 de PORTC. Configuraremos el pre-escalador y elvalor de la variable CUENTA para que la frecuencia de oscilacin sea lo ms cercano a 120 Hz.

    Debemos recordar que el Timer0 cuenta desde 0 (o el valor que almacenemos en dicho registro)hasta FF, luego de lo cual se reinicia nuevamente a 0.

    Debemos averiguar qu valor de pre-escalador requerimos para tener un valor de frecuencia losms cercano a 120 Hz. para ello debemos hacer pruebas con el siguiente programa:

    El circuito en Proteus es el siguiente:

  • 8/11/2019 Temporizadores Para Pic

    9/18

    Ojo que estamos empleando dos instrumentos virtuales del Proteus: Osciloscopio yContador/Timer:

  • 8/11/2019 Temporizadores Para Pic

    10/18

    Si comenzamos a probar con diversos valores de pre-escalador tendremos los siguientes

    resultados:

    Observamos que el mejor resultado es para el pre-escalador de 1:32 y con el valor de cuentaigual a 0x82.

    Ejemplo: Manejo del Timer0 como contador, sin interrupcionesEl presente programa contar los pulsos que ingresan por el pin RA4/TOCKI (flanco de subida) ycada 8 pulsos, incrementar la cuenta que se visualiza en los display. Emplearemos el pre-escalador y lo configuramos a 1:8. El programa en assembler es:

  • 8/11/2019 Temporizadores Para Pic

    11/18

    El circuito en Proteus es el siguiente:

  • 8/11/2019 Temporizadores Para Pic

    12/18

    Ejemplo: Manejo del Timer0 como contador, sin interrupciones

    El presente programa contar los pulsos que ingresan por el pin RA4/TOCKI (flanco de subida) ycada 10 pulsos, incrementar la cuenta que se visualiza en los display. El programa enassembler es:

    El circuito en Proteus es el siguiente:

  • 8/11/2019 Temporizadores Para Pic

    13/18

    Ejemplo: Manejo de Timer0 como temporizador y con InterrupcionesEn el presente ejemplo programaremos el Timer0 para que inicie la cuenta a partir de un cierto

    valor y cuando cambie de FF a 00, invierta el valor lgico de PORTC. Configuraremos el pre-escalador y el valor de la variable CUENTA para que la seal que se genera en el PORTC seade 120 Hz.

  • 8/11/2019 Temporizadores Para Pic

    14/18

    El circuito a emplear es el mismo que el primer ejemplo:

  • 8/11/2019 Temporizadores Para Pic

    15/18

  • 8/11/2019 Temporizadores Para Pic

    16/18

    TAREA 6

    Elaborar un programa que permita disparar un tiristor segn el circuito mostrado. Lascaractersticas del programa son:El circuito de cruce por cero gener un pulso cada vez que la seal alterna (AC) pasa por cero

    voltios.Dicha seal debe ser usada para generar interrupcin al microcontrolador por el pin RBO. Cada vez que se genera interrupcin por RBO. El programa de atencin a la interrupcinconfigura un timer para que realice una cuenta de tiempo proporcional al valor ledo en elPORTC. Dicho tiempo es el equivalente al ngulo de disparo, por lo tanto debe variar entre 0 a8.33 milisegundos aproximadamente.PORTC = 0x00, equivale aproximadamente a un ngulo de disparo igual a cero grados. PORTC = 0xFF, equivale aproximadamente a un ngulo de disparo de 180 grados Una vez que el timer llegue al finalde la cuenta gener un interrupcin. El programa deatencin a la interrupcin deber activar el pin RB1 por un tiempo que debe estar enmicrosegundos (revisar el datasheet de algn Tiristor para tener una referencia de tiempo). Estetiempo debe ser generado por una rutina de delay (no use timer). Finalizado el tiempo deberdesactivar el pin RB1.El programa pirncipal debe estar mostrando una cuenta del 0 a 255 por el PORTD a unfrecuencia "visible al ojo humano".

    Observar que el programa de atencin a la interrupcin debe "atender" a dos tipos deinterrupciones:La interrupcin generada por el cruce por cero (RBO). La interrupcin generada por el timer.

    Analice que algoritmo emplear para atender a estas dos interrupciones. El plazo de entregavence el domingo 31 de agosto a las 23:55 horas.

  • 8/11/2019 Temporizadores Para Pic

    17/18

  • 8/11/2019 Temporizadores Para Pic

    18/18