Professional Documents
Culture Documents
Laboratorio 4
PERFERICOS PROGRAMABLES. PARTE III
I.
II.
OBJETIVO
Realizar una aplicacin con el temporizador 0 para generar una onda PWM (modulacin por ancho
de pulsos).
Realizar una aplicacin con el temporizador 1, para medir intervalo de tiempo.
.
MATERIALES Y EQUIPOS
III.
INTRODUCCIN TERICA
Los temporizadores programables se utilizan para medir el tiempo o manejar eventos externos en
los pines de entrada del temporizador .
El Mdulo Temporizador de propsito general GPTM del Stellaris (General-Pupose Timer Moduler)
contiene cuatro bloques autnomos programables ( Timer 0, Timer 1, Timer 2, y timer 3 ) . Cada
bloque del GPTM proporciona dos temporizadores/contadores de 16 bits (denominados Timer A y
TimerB ) que se puede configurar para operar de forma independiente como temporizadores o
contadores de eventos , o ser configurado para funcionar como un temporizador de 32 bits o uno de
32 bits como reloj de tiempo real (RTC ) .
.
SEMESTRE 2014-2
-Pgina 1
IEE 256
SEMESTRE 2014-2
-Pgina 2
IEE 256
SEMESTRE 2014-2
-Pgina 3
IV. PROCEDIMIENTO
Desarrollo de Proyectos
Proyecto 1
Implemente un sistema, utilizando la tarjeta de desarrollo Stellaris LM3S6965, que permita generar una
seal PWM y cambiar el Duty Cycle entre el 90% (mximo) y 10% (mnimo) mediante el accionamiento
de los pulsadores UP (PE0 incremento) y DOWN (PE1-decremento). Los parmetros iniciales de la
seal son: Frecuencia = 4 Khz, Duty Cycle = 50 %.
Compruebe con un osciloscopio la seal de onda generada en el pin PD4, etiquetado como CCP0 en el
mdulo Stellaris.
Diagrama de flujo:
IEE 256
SEMESTRE 2014-2
-Pgina 4
Cdigo:
/* Proyecto: TIMER0_PWM
Autor: David Torres
Semestre: 2014-2
Descripcin: El programa genera una seal PWM (Modulacin por ancho de pulso) en el pin PD4,
utilizando el mdulo GPTM_TIMER0 en configuracin PWM de 16 bits.
Los parmetros iniciales de la seal son: Frecuencia = 4 Khz, Duty Cycle = 50 %. Mediante el
accionamiento de los pulsadores UP (PE0) y DOWN (PE1), se puede incrementar o decrementar
el Duty Cycle, respectivamente, en el rango de 10% (MINIMO) a 90% (MAXIMO).
*/
#include "lm3s6965.h"
#include "stdint.h"
/* Configuracin del mdulo GPTM_Timer0 en modo PWM de 16 bits, Fclk = 8 MHz */
void GPTM_Timer0_PWM_Config(void)
{
volatile uint32_t temp;
//1- Se activa la seal de reloj para el mdulo GPTM_Timer0.
SYSCTL_RCGC1_R |= SYSCTL_RCGC1_TIMER0; //SYSCTL_RCGC1_TIMER0 = 0x10000
//2- Retardo para la estabilizacin de la seal de reloj en el modulo
temp = SYSCTL_RCGC1_R; //3 ciclos aprox.
//3- Deshabilitar TIMER_A de GPTM_Timer0 previo a la configuracin
TIMER0_CTL_R &= ~(TIMER_CTL_TAEN); //TIMER_CTL_TAEN = 0x1
//4- Limpiar registro bits (2:0) y configurar como temporizador de 16 bits
TIMER0_CFG_R &= ~(TIMER_CFG_M); //TIMER_CFG_M = 0x7
TIMER0_CFG_R |= TIMER_CFG_16_BIT; //TIMER_CFG_16_BIT = 0x4
//5- Limpiar registro bits (3:0) y configurar modo PWM en Timer A
TIMER0_TAMR_R &= ~(0xF); // bit TACMR=0
//5.1- Se configura el modo PWM.
TIMER0_TAMR_R |= (TIMER_TAMR_TAAMS|TIMER_TAMR_TAMR_PERIOD); //TIMER_TAMR_TAAMS = 0x8
//TIMER_TAMR_TAMR_PERIOD = 0x2
//6- Se configura el modo de la seal de salida (invertido o no)
TIMER0_CTL_R |= TIMER_CTL_TAPWML; //El ancho de pulso se define en nivel alto '1'
//7- Configurar el periodo de la seal PWM:
//
La fuente de reloj del mdulo es 8 MHz y por ende el TIMER_A (contador decreciente)
// se decrementa a dicha frecuencia. Entonces, una cuenta se efecta en Tclk = 1/8 MHz, o
//
0.125 us.
//
Para generar una onda con frecuencia 4 KHz, el periodo es 1/4000 s o 250 us
//
Perodo PWM = (GPTMTAILR+1)*Tclk --> 250 us = (GPTMTAILR+1)* 0.125 us
//
GPTMTAILR = 1999
TIMER0_TAILR_R = 1999;
//8- Se configura el duty cycle de la seal PWM a 50%, tiempo del pulso en nivel alto
//
(TH) = 125 us
//
Duty cycle = TH / (TH + TL), TH + TL = Perodo de seal PWM = 250 us
//
(TIMER0_TAMATCHR_R + 1) = 0.5 (TIMER0_TAILR_R + 1), TIMER0_TAMATCHR_R = 999
TIMER0_TAMATCHR_R = 999;
//9- Se activa la seal de reloj para el mdulo GPIOD (Puerto D)
SYSCTL_RCGC2_R |= SYSCTL_RCGC2_GPIOD; //SYSCTL_RCGC2_GPIOD = 0x8
//Retardo para la estabilizacin de la seal de reloj en el mdulo GPIOD
temp = SYSCTL_RCGC2_R;
//Se activa la funcin alterna en el pin PD4 para trabajar con PWM
GPIO_PORTD_AFSEL_R |= 0x10;
//Configura el pin PD4 como salida
GPIO_PORTD_DIR_R |= 0x10;
//Activa el driver que maneja 8mA a la salida del pin PD4
GPIO_PORTD_DR8R_R |= 0x10;
//Habilita la funcin digital sobre el pin PD4
GPIO_PORTD_DEN_R |= 0x10;
//10- Habilitacin de TIMER_A de GPTM_Timer0
TIMER0_CTL_R |= TIMER_CTL_TAEN;
}
IEE 256
SEMESTRE 2014-2
-Pgina 5
/* Configuracin de los pines PE0 (UP) y PE1 (DOWN) del Puerto E como entradas */
void configura_puertos(void) //Pines PE0 (UP) y PE1 (DOWN) entradas
{
volatile uint32_t temp;
SYSCTL_RCGC2_R |= 0x10;
// Reloj activo en el puerto E
temp = SYSCTL_RCGC2_R; // Espera 3 ciclos de reloj
GPIO_PORTE_DIR_R &= ~0x03; // Configura 4 pines de entrada
GPIO_PORTE_AFSEL_R &= ~0x03; // Configura pines como GPIO
GPIO_PORTE_PUR_R |=0x03; // Activa resistencias pull up
GPIO_PORTE_DEN_R |=0x03; // Activa 4 pines para acceso digital
}
int main(void)
{
uint32_t pulsador, i;
configura_puertos();
GPTM_Timer0_PWM_Config();
while (1)
{
if ((GPIO_PORTE_DATA_R&0x1)==0) // Pulsador PE0 (UP)
{
for(i=0;i<10000;i++); //Retardo de estabilizacin
while((GPIO_PORTE_DATA_R&0x1)==0); //Espera liberacin del pulsador PE0
TIMER0_TAMATCHR_R = TIMER0_TAMATCHR_R + 50; //Incremento de 6.375 us (50)
//en el ancho de pulso
if (TIMER0_TAMATCHR_R > 1799) //Duty cycle mximo 90 %
TIMER0_TAMATCHR_R = 1799; // (2000)0.9 - 1 = 1799
}
if ((GPIO_PORTE_DATA_R&0x2)==0) // Pulsador PE1 (DOWN)
{
for(i=0;i<10000;i++); //Retardo de estabilizacin
while((GPIO_PORTE_DATA_R&0x2)==0); //Espera liberacin del pulsador PE1
TIMER0_TAMATCHR_R = TIMER0_TAMATCHR_R - 50; //Decremento de 6.375 us (50)
//en el ancho de pulso
if (TIMER0_TAMATCHR_R < 199) //Duty cycle mnimo 10 %
TIMER0_TAMATCHR_R = 199; // (2000)0.1 - 1 = 199
}
}
return 0;
}
IEE 256
SEMESTRE 2014-2
-Pgina 6
RESULTADOS OBTENIDOS
Conexin del osciloscopio al mdulo Stellaris LM3S6965 para ver la onda PWM:
Se utiliza la punta de prueba del modo siguiente:
En el lado izquierdo de la imagen se observa la punta de
prueba de color rojo que se debe conectar al pin CCP0 (PD4).
En la parte inferior se observa el conector a tierra de la
punta de prueba del osciloscopio.
Imgenes obtenidas
Duty Cycle 50%, periodo 250 us, frecuencia 4 KHz
IEE 256
SEMESTRE 2014-2
-Pgina 7
Proyecto 2
En el siguiente ejemplo se utilizar el temporizador 1 A como capturador de entrada de tiempo para
medir el intervalo que transcurre entre cada accionamiento (presionar y soltar) del pulsador Up
conectado al PE0 en el mdulo LM3S6965.
En primer lugar, se configura el temporizador 1 de la siguiente manera:
Habilitamos el reloj del temporizador
Se espera 3 ciclos de reloj
Deshabilitamos el Temporizador A 1 (TAEN=0)
Para el ejemplo usaremos el modo 32 bits (CPTGMF=0)
Usaremos el modo peridico (TAMR=2)
Cargamos el valor tope mximo en el registro TAIR: en este caso por ser de 32 bits el mximo
es 0xFFFFFFFF (~0x00)
Luego se configura el puerto de entrada y salida. Para el ejemplo solo se utilizar el pulsador Up que
est conectado al pin PE0.
Se espera que el usuario presione y suelte el pulsador para que inicie la cuenta del temporizador de
forma descendente.
Luego se espera a que se presione y suelte nuevamente el pulsador Up para detener la cuenta del
temporizador y se almacena el valor registrado en el contador. Debido a que el oscilador del mdulo
trabaja a 8Mhz, cada decremento de la cuenta se realizar a razn de 0.125 us, por lo que para
determinar el tiempo transcurrido se multiplica cantidad de decrementos por 0.125 useg.
Por ltimo, se inicializa nuevamente el valor tope del temporizador y se vuelve a esperar que se presione
y suelte el pulsador iniciando otra vez el proceso.
A continuacin se presenta el diagrama de flujo del ejercicio propuesto
IEE 256
SEMESTRE 2014-2
-Pgina 8
/* Proyecto: TIMER0_PWM
Autor: Manuel Valenzuela
Semestre: 2014-2
Descripcin:
Programa que usa el temporizador 1 A para medir el intervalo de tiempo que transcurre
entre cada accionamiento (presionar y soltar) del pulsador Up (PE0) del mdulo
LM3S6965*/
#include "lm3s6965.h"
#include <stdint.h>
#include <math.h>
void conf_timer(void)
{
unsigned long temp;
}
void conf_puertos (void)
{
unsigned long temp;
SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOE; //Habilitamos la seal de reloj para el puerto E
//para el puerto E
temp= SYSCTL_RCGC2_R; // espera 3 ciclo de reloj
GPIO_PORTE_DIR_R &= ~0x01; //Configuramos el pin PE0 como entrada
GPIO_PORTE_AFSEL_R &= ~0x01; //Seleccionamos no funciones analgi
GPIO_PORTE_PUR_R |= 0x01; // Activamos resistencias pull up
GPIO_PORTE_DEN_R |= 0x01; // Habilitamos funciones digitales
}
void main(void) {
conf_puertos();
conf_timer();
unsigned long temp, cuenta;
uint32_t tiempo;
while (1)
{
do
{
temp = GPIO_PORTE_DATA_R;
temp &= 0x01;
IEE 256
SEMESTRE 2014-2
-Pgina 9
do
{
temp = GPIO_PORTE_DATA_R;
temp &= 0x01;
}
while (temp == 0);
IEE 256
SEMESTRE 2014-2
-Pgina 10
Para probar el programa se debe hacer uso del depurador y poner un punto de ruptura (break point)
despus de calcular , en la variable tiempo, el tiempo transcurrido del temporizador 1 A, como se
muestra en la imagen dentro del crculo rojo.
Ejecute el programa de forma continua (F8) y presione 2 veces el pulsador Up del mdulo LM3S6965 y
en las variables se podra ver los parmetros registrados por el temporizador como se muestra en la
imagen sombreado de color amarillo. El tiempo est expresado en microsegundos.
Problemas Propuestos:
1. Modificar el problema 1, para conectar el microcontrolador con la computadora personal
y utilizar las teclas + y para variar el duty cycle.
Parmetros de Transmisin: 4800, 8, n, 1
2. Modificar el problema 2, para medir el periodo de una onda cuadrada.
Conecte un generador de onda cuadrada al microcontrolador y detrmina su periodo y
frecuencia.
AUTORES:
Material del Laboratorio de Sistemas Digitales
Preparado por: Ing. David Torres - Ing. Manuel Valenzuela Ing. Freri Orihuela - Ing. Zenn Cucho
Revisin: Ing. Hugo Pratt
Profesores del curso:
Ing. Hugo Pratt, Ing. Rolando Snchez
Semestre: 2014.2
Pontificia Universidad Catlica del Per
04 de noviembre de 2014
Guias_iee256_/2014-2/
IEE 256
SEMESTRE 2014-2
-Pgina 11