Tema 18 P08
ALCALÁ DE HENARES
(MADRID)
EL TIMER 1
Medida del Ancho de Pulso
PROBLEMA P08
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 08
Medida del ancho de un pulso con el Timer 1
Deseamos medir el ancho de un pulso y visualizarlo en un LCD.
Para realizar esta acción precisamos detectar el flanco de subida
y posteriormente el de bajada de dicho pulso, y medir eltiempo
que transcurre entre ambos sucesos.
Una de las posibles maneras es que al detectar el flanco de
subida es mediante la interrupción externa, seleccionando como
activo el flanco de subida.
Una vez detectada esta situación deberemos realizar dos
acciones:
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 08
1. Lanzar un timer para que cuente tiempo
2. Cambiar el flanco activo dela interrupción para que detecte
el flanco de bajada.
Una vez detectado el flanco de bajada, lo primero que
deberemos hacer es leer el valor del timer que es el tiempo en
alta de dicho pulso.
De lo anterior se deduce que se están utilizando los siguientes
recursos del micro:
Interrupción externa (INT/RB0)
Timer 1 en modo temporizador.
Si la visualización la deseamos realizar mediante un LCD,deberemos modificar el driver que nos facilita el compilador
para adaptarlo al puerto C, ya que utilizamos el PIN RB0 como
entrada de señal a medir.
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 08
El circuito que deseamos construir es:
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 08
Creación de proyecto:
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1PROBLEMA 08
Fijamos: modo temporizador; prescaler del Timer_1 (1:1),
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 08
Picamos en la pestaña de interrupciones, y en el cuadro de
selección habilitamos la interrupción externa.
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 08
El fichero.c que genera el propio compilador es:
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOSTIMER_1 PROBLEMA 08
El fichero.h que genera el compilador es:
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 08
Sobre los ficheros que genera el propio compilador, debemos
observar
1. En ningún lugar se han incluido las sentencias que
seleccionan el flanco activo para provocar la interrupción.
Luego deberemos escribirlo nosotros en main().
Si acudimos al HELP del compiladorobtenemos las funciones
que determinan el flanco activo:
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 08
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 08
En nuestro caso la funciones deberán ser:
ext_int_edge(0,L_TO_H); //flanco activo de L a H
Y
ext_int_edge(0,H_TO_L); //flanco activo de H a L.
También observamos que no se ha incluido el driver del LCD.
En nuestrocaso hemos modificado el driver que trae el propio
compilador para que nos sirva para el puerto C ya que el
original sirve para el puerto B y D.
Seguidamente se señalan las líneas modificadas:
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 08
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 08
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 08
Antes denada comprobemos si los cambios que hemos hecho en
el driver del LCD funcionan, para ello escribimos un sencillo
programa que escriba en la 1ª línea del LCD:
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 08
Veamos el resultado en Proteus:
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 08
Como podemos
correctamente:
13/01/2009
comprobar
el
nuevo
driverfunciona
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 08
Editemos el resto del programa:
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 08
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 08
13/01/2009
CCFF D.P.E. MÓDULO DE PROYECTOS TIMER_1 PROBLEMA 08
Comprobemos el funcionamiento del programa. Para ello
inyectamos un pulso a través de RB0, editamos las...
Regístrate para leer el documento completo.