Sunteți pe pagina 1din 5

Ejemplos con Microcontroladores PIC TEMPORIZACIONES LARGAS CON CCP1 Y TMR0 Este ejemplo pretende ilustrar cmo se pueden

realizar temporizaciones muy largas mediante la generacin interna desde el propio microcontrolador de una seal peridica (mediante el mdulo CCP en modo comparacin) y utilizando luego dicha seal como patrn de cuenta para el mdulo TMR0 que trabajar en modo contador de flancos externos. La nica condicin es que se deben conectar entre s la lnea de salida de uno de los mdulos CCP (CCP1 en este ejemplo) con la entrada de cuenta de flancos del mdulo TMR0.

Figura 1.- Esquema de conexiones Se va a realizar una temporizacin larga para hacer que parpadee el led que est conectado al pin 0 del PORTB con una cadencia de 10 s encendido y 10 s apagadom, utilizando las conexiones que se muestran en la figura 1. 1. Generacin de la seal peridica Se emplea el mdulo CCP1 trabajando en modo comparacin para que, en cada coincidencia de los registros de TMR1 con los registros de CCPR1, se site el pin RC2/CCP1 a uno y a cero alternativamente y se genere as una seal peridica de periodo conocido.

ATE-Universidad de Oviedo

1 de 5

Ejemplos con Microcontroladores PIC

Figura 2.- Forma de onda que se va a generar en RC2/CCP1 Se configura TMR1 en modo temporizador y CCP1 en modo comparador de manera que los tiempos que tardan en cambiar seran: T1 = 4ToscPrescalerTMR1CCPR1T1 T2 = 4ToscPrescalerTMR1CCPR1T2 Y el periodo total de la seal sera: T = T1 + T2 Si hacemos T1 = T2, entonces: T = 2(4ToscPrescalerTMR1CCPR1T1) 2. Cuenta de flancos de entrada mediante TMR0 Se configura TMR0 para contar flancos de entrada que aparezcan en el pin RA4/T0CKI y se activar el flag cuando se desborde la cuenta de TMR0, luego el tiempo que tarda en desbordar TMR0 sera: TTMR0 = TPrescalerTMR0(256-PrecargaTMR0) Se programan interrupciones generadas por TMR0 para que desborde al cabo de 10 s y cambie el estado del bit 0 del PORTB:
10 s = [2(4ToscPrescalerTMR1CCPR1T1)] PrescalerTMR0(256-PrecargaTMR0)

Hay una expresin a verificar y 4 valores en la misma, luego existen 3 grados de libertad a la hora de cumplir con la anterior expresin, teniendo en cuenta que todos los valores son enteros y que se tienen que ATE-Universidad de Oviedo 2 de 5

Ejemplos con Microcontroladores PIC cumplir una serie de limitaciones de tamao dado el nmero de bits empleados en cada caso.
PrescalerTMR1 8 PrescalerTMR0 256 CCPR1 < 65536 PrecargaTMR0 < 256

Teniendo en cuenta estos condicionantes, se toman los valores:


PrecargaTMR0 = 0 PrescalerTMR0 = 1 PrescalerTMR1 = 8 (para evitar tener que hacer precargas)

Y despejando, se obtiene:

CCPR1 = d2441 = 0x0989 CCPR1H = 0x09 CCPR1L = 0x89

Luego, se deben cargar los registros:

NOTA: La temporizacin ms larga que se podra conseguir mediante este procedimiento sera:
Tmax = [2(4ToscPrescalerTMR1CCPR1T1)] PrescalerTMR0(256-PrecargaTMR0) Tmax = 24Tosc865536256256 = 238Tosc

As por ejemplo si se utiliza un oscilador de 4MHz, resultara: Tmax = 68719476736 s = 68.719,476736 s = 19 h 5 min 19 s

ATE-Universidad de Oviedo

3 de 5

Ejemplos con Microcontroladores PIC Algoritmo utilizado: INICIALIZACIN PUERTOS: Se carga un 1 en el bit 0 del PORTB para que salga as al principio Direccin de datos en los Puertos: PORTB con bit 0 como salida PORTC con bit 2 como salida Resto de los pines de entrada Temporizadores: TMR0 en modo contador de flancos de bajada externos y sin prescaler. TMR0 a cero al principio TMR1 en modo temporizador, con prescaler de 8 y parado Puesta a cero de TMR1: TMR1H y TMR1L

Mdulo CCP Modo comparacin y configuracin para que RC2 pase a 1 cuando coincidan TMR1 y CCPR1 Se carga CCPR1H con 0x09 y CCPR1L con 0x89

INTERRUPCIONES Se ponen a cero los flags de interrupciones: T0IF y CCP1IF Se habilitan las de TMR0 cuando desborde TMR0 al cabo de 10s Se habilitan las de CCP1 cuando coincidan TMR1 y CCPR1

Se pone en marcha TMR1

PROGRAMA PRINCIPAL: BUCLE DE EJECUCIN INFINITA Slo se sale de este bucle cuando se produzca una interrupcin, bien de CCP1 o bien de TMR0

ATE-Universidad de Oviedo

4 de 5

Ejemplos con Microcontroladores PIC PROGRAMA DE TRATAMIENTO DE INTERRUPCIN No sera necesario guardar el contexto ya que el programa principal es un bucle infinito que no emplea ni W ni STATUS ni ningn otro registro Si T0IF ==1 es que desbord TMR0 y han transcurrido 10 s o Cambiamos el estado del bit 0 del PORTB o Ponemos a cero el flag T0IF Si CCP1IF == 1 es que ha coincidido TMR1 con CCPR1 y ha cambiado el pin RC2 o Ponemos a cero TMR1 (reset de ese contador) o Modificamos CCP1CON para que en la prxima coincidencia cambie el estado del pin RC2 (hay que cambiar solo el ltimo bit de CCP1CON) o Ponemos a cero el flag CCP1IF Retorno de programa de tratamiento de interrupcin

ATE-Universidad de Oviedo

5 de 5

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

  • PÁGINAS
    PÁGINAS
    Document1 pagină
    PÁGINAS
    Antony Charles Tejada
    Încă nu există evaluări
  • NAT, OSPF y VLAN
    NAT, OSPF y VLAN
    Document3 pagini
    NAT, OSPF y VLAN
    Antony Charles Tejada
    Încă nu există evaluări
  • IPv6 Direccionamiento
    IPv6 Direccionamiento
    Document33 pagini
    IPv6 Direccionamiento
    Antony Charles Tejada
    Încă nu există evaluări
  • Mascara S
    Mascara S
    Document6 pagini
    Mascara S
    Antony Charles Tejada
    Încă nu există evaluări
  • U1 - S2 - Ejercicios para Actividad Virtual
    U1 - S2 - Ejercicios para Actividad Virtual
    Document1 pagină
    U1 - S2 - Ejercicios para Actividad Virtual
    Antony Charles Tejada
    Încă nu există evaluări
  • Subnetting 2
    Subnetting 2
    Document5 pagini
    Subnetting 2
    Antony Charles Tejada
    Încă nu există evaluări
  • Comandos v2
    Comandos v2
    Document9 pagini
    Comandos v2
    Antony Charles Tejada
    Încă nu există evaluări
  • Comandos v2
    Comandos v2
    Document9 pagini
    Comandos v2
    Antony Charles Tejada
    Încă nu există evaluări
  • Mascara S
    Mascara S
    Document6 pagini
    Mascara S
    Antony Charles Tejada
    Încă nu există evaluări