Timer Con Dspic30F4011
División de Ingenierías Campus Irapuato‐Salamanca
Diseño Lógico con Microprocesadores
Práctica: #03 Profesor: Dr. J. Jesús Escobedo Ala Torre. Integrantes del Equipo: Ramírez Montalvo Ana Luisa. Angel Saldaña Ismael A. Laguna Pérez José Jesús. Flores Martínez Eduardo
Fecha: 2/Marzo/2012
OBJETIVO:
Implementar en nuestro dspic30f4011 un programa que controle el ancho de pulso de una señal cuadrada para así poder controlar el nivel de iluminación de un LED utilizando un par de timer’s de nuestro circuito.
DESCRIPCIÓN:
Como se sabe un TIMER es un dispositivo, con frecuencia programable, que permite medir un lapso de tiempo previamente definido. En esta práctica se trabajo con los timer’s internos de nuestro circuito. En esta práctica se desarrollo por así decirle un modificador de ancho de pulso de una señal, esto se logró con el empleo de 2 timer´s. Uno de los timer´s fue utilizado para controlar el ancho total del periodo del pulso, el timer fue programado para dar tener una frecuencia de 1khz o sea que se repitiera cada un milisegundo, y el segundo timer fue utilizado para controlar el ancho de la onda, este se podría modificar desde 0 hasta 1, o sea desde un ancho de onda de 0 hasta el ancho total de un milisegundo. Tenemos nuestro Timer 1, que será constante con una frecuencia de 1Khz y que controlará el periodo de nuestra señal, como se puede ver nuestro Timer 2 es variable y controlará el ancho de pulso y como se sabe la energía total es igual al área del pulso, por lo tanto podemos variar la energía suministrada por nuestra señal ya sea aumentando o disminuyendo nuestro Timer 2. Por lo tanto al disminuir nuestro Timer 2 la energía suministrada será menor y por el contrario al aumentar el Timer 2 la energía suministrada irá aumentando hasta un máximo el cual es controlado por nuestro Timer 1.
CÓDIGO: • Inicializar timer 1: En esta función es donde inicializamos nuestro timer 1, con sus respectivas especificaciones. void ini_tmr1(unsigned int TIME) { IPC0=0x1000; //Define prioridad 1 al TMR1 IEC0bits.T1IE=1; //se habilita con 1 TMR1=0; //Se inicializa con cero T1CON=0x8000; //configuración TMR1 PR1= variando_TIME(); //Valor tope del TMR1 } Nuestro timer 2 se define de la misma manera, solo cambia la primera línea donde se define la prioridad, es este caso la línea es: IPC0=0x2000; • Función para variar el tiempo
Se podría decir que esta es la función más importante de nuestro programa, donde se llevará a cabo la variación del periodo de nuestro timer, para asi modficar el ancho de pulso y así mismo con este cambio de periodo tambien habrá un cambio en la energía suministrada de salida, que en este caso alimentará a nuestro LED. En esta función se declaran los límites que podrá alcanzar nuestro timer a modificar, tales límites están definidos por el periodo de nuestro timer constante. En esta parte del programa también se programaron los pushbutton los cuales tendrán el control de aumentar o disminuir el ancho de nuestra señal (o sea aumentar o disminuir nuestro timer variable). Estos pushbutton tienen programado también un eliminador de rebotes, el cual se utiliza para que al presionar el botón una vez solo nos mande una señal y no varias, debido a las oscilaciones que se producen debido a que este se controla por fuerza mecánica. unsigned int variando_TIME(void) { if (PORTDbits.RD1==1) { _delay(); while(PORTDbits.RD1!=0){} TIME = TIME+0x000A; //Time Aumenta 10 ...
Regístrate para leer el documento completo.