You are on page 1of 11

PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU

FACULTAD DE CIENCIAS E INGENIERIA


SECCION ELECTRICIDAD Y ELECTRONICA

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.

1 Mdulo de desarrollo Stellaris EKS-LM3S6965 de Texas Instruments


1 cable de extensin USB
Entorno de desarrollo Code Composer Studio 5.5
1 computadora personal

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 ) .
.

Figura 1 Diagrama de bloques del mdulo GPTM


En el laboratorio, en el primer proyecto, se realizar una aplicacin del temporizador 0, en modo PWM
de 16 bits, para obtener una onda peridica con un duty cycle (parte alta de la onda) variable. En este
caso se configura el temporizador como un contador descendente cuyo valor inicial se escribe en el
registro GPTMTAILR y para indicar que se trabajar en modo PWM, con el registro GPTMTAMREn el segundo proyecto, se demostrar una aplicacin del temporizador 1A en modo 32 bits como
capturador de entrada para medir el intervalo de tiempo cuando se acciona (presionar y soltar) un
pulsador para iniciar y finalizar la medicin.
IEE 256

SISTEMAS DIGITALES - LABORATORIO

SEMESTRE 2014-2

-Pgina 1

PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU


FACULTAD DE CIENCIAS E INGENIERIA
SECCION ELECTRICIDAD Y ELECTRONICA

Registros E/S del temporizador

IEE 256

SISTEMAS DIGITALES - LABORATORIO

SEMESTRE 2014-2

-Pgina 2

PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU


FACULTAD DE CIENCIAS E INGENIERIA
SECCION ELECTRICIDAD Y ELECTRONICA

IEE 256

SISTEMAS DIGITALES - LABORATORIO

SEMESTRE 2014-2

-Pgina 3

PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU


FACULTAD DE CIENCIAS E INGENIERIA
SECCION ELECTRICIDAD Y ELECTRONICA

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

SISTEMAS DIGITALES - LABORATORIO

SEMESTRE 2014-2

-Pgina 4

PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU


FACULTAD DE CIENCIAS E INGENIERIA
SECCION ELECTRICIDAD Y ELECTRONICA

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

SISTEMAS DIGITALES - LABORATORIO

SEMESTRE 2014-2

-Pgina 5

PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU


FACULTAD DE CIENCIAS E INGENIERIA
SECCION ELECTRICIDAD Y ELECTRONICA

/* 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

SISTEMAS DIGITALES - LABORATORIO

SEMESTRE 2014-2

-Pgina 6

PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU


FACULTAD DE CIENCIAS E INGENIERIA
SECCION ELECTRICIDAD Y ELECTRONICA

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

Duty Cycle 10%, periodo 250 us, frecuencia 4 KHz

Duty Cycle 90%, periodo 250 us, frecuencia 4 KHz

IEE 256

SISTEMAS DIGITALES - LABORATORIO

SEMESTRE 2014-2

-Pgina 7

PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU


FACULTAD DE CIENCIAS E INGENIERIA
SECCION ELECTRICIDAD Y ELECTRONICA

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

SISTEMAS DIGITALES - LABORATORIO

SEMESTRE 2014-2

-Pgina 8

PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU


FACULTAD DE CIENCIAS E INGENIERIA
SECCION ELECTRICIDAD Y ELECTRONICA

/* 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;

SYSCTL_RCGC1_R = SYSCTL_RCGC1_TIMER1; //Seleccionamos el Timer1


temp=SYSCTL_RCGC1_R;
TIMER1_CTL_R &= ~TIMER_CTL_TAEN; //TAEN=0
TIMER1_CFG_R = 0x00; //CPTMGF=0 para 32 bits
TIMER1_TAMR_R = 0x02; //TAMR=2 Modo periodico
TIMER1_TAILR_R = ~0; // Valor inicial de la cuenta 0xFFFFFFFF (mximo
// valor de 32 bits)
TIMER1_ICR_R |= 0x01; //Limpiamos TATORIS

}
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;

// Lee el puerto de entrada


// Se enmascara a fin de sondear Up (PE0)

IEE 256

SISTEMAS DIGITALES - LABORATORIO

SEMESTRE 2014-2

-Pgina 9

PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU


FACULTAD DE CIENCIAS E INGENIERIA
SECCION ELECTRICIDAD Y ELECTRONICA

while (temp == 0x01);

// Se espera a que se presione Up

do
{
temp = GPIO_PORTE_DATA_R;
temp &= 0x01;
}
while (temp == 0);

// Se espera a que se suelte PE0

TIMER1_CTL_R |= 0x01; //Se habilita el Timer para que empiece el conteo


do
{
temp = GPIO_PORTE_DATA_R;
temp &= 0x01; // Se espera a que se presione PE0
}
while (temp == 0x01);
do
{
temp = GPIO_PORTE_DATA_R;
temp &= 0x01; // Se espera a que se suelta PE0
}
while (temp == 0);

TIMER1_CTL_R &= ~0x01;


// Se detiene el temporizador
cuenta = TIMER1_TAR_R; /*Se lee en la variable cuenta el valor
que lleg la cuenta del registro TAR*/

tiempo = (~(0X00)-cuenta)*125/1000; /* El tiempo es igual al numero de


decrementos del contador (valor inicial-valor final) multiplicado por el tiempo que
demora en cambiar el contador; el mdulo trabaja a 8MH; por lo que cada decremento
ocurre cada 0.125 us */
TIMER1_TAILR_R = ~0;
.
}
}

IEE 256

/* Cargamos nuevamente el valor


Inicial(mximo) del temporizador */

SISTEMAS DIGITALES - LABORATORIO

SEMESTRE 2014-2

-Pgina 10

PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU


FACULTAD DE CIENCIAS E INGENIERIA
SECCION ELECTRICIDAD Y ELECTRONICA

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

SISTEMAS DIGITALES - LABORATORIO

SEMESTRE 2014-2

-Pgina 11

You might also like