0% encontró este documento útil (0 votos)
166 vistas7 páginas

Temporizador Timer1 en dsPIC33F

Este documento describe cómo configurar el temporizador Timer1 del microcontrolador dsPIC33FJ32MC202 para generar retardos. Explica cómo calcular el valor a cargar en el registro del temporizador para obtener un retardo deseado, basándose en la frecuencia del oscilador. Presenta el código de programa desarrollado para generar una onda cuadrada de 1 kHz en un pin de salida usando este temporizador.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
166 vistas7 páginas

Temporizador Timer1 en dsPIC33F

Este documento describe cómo configurar el temporizador Timer1 del microcontrolador dsPIC33FJ32MC202 para generar retardos. Explica cómo calcular el valor a cargar en el registro del temporizador para obtener un retardo deseado, basándose en la frecuencia del oscilador. Presenta el código de programa desarrollado para generar una onda cuadrada de 1 kHz en un pin de salida usando este temporizador.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

LABORATORIO: TIMER 1 COMO TEMPORIZADOR DSPIC33FJ32MC202

Integrantes :
 Acosta Olivo, Eduardo Jesús Antonio
 Ballena Falen, Cristhian Elmer
 Marcelo Chavarría, Josué Amir
 Palomino Conde, Jean Carlos

Curso: MICROCONTROLADORES Y SISTEMAS EMBEBIDOS

Profesor : ASTOCONDOR VILLAR JACOB

Turno : 01L (90G)


OBJETIVO: Configurar el temporizador para generar tiempos muertos o retardos.
INTRODUCCIÓN
Un temporizador es un dispositivo configurable, que permite medir el tiempo. Una vez
que ha transcurrido el lapso de tiempo deseado, se emite una alarma, la cual indica
que ha terminado el tiempo programado.

Diagrama de bloques del timer1

Para la configuración del temporizador es necesario definir F CY (Frecuencia de


Instrucción), la cual está definida por:

Donde:

 FOSC representa la frecuencia de oscilación, la cual está determinada por el


oscilador externo del dsPIC, y que estaría dada por F CY =20 m h z

Por lo que, utilizando un reloj externo de 20 MHz, el dsPIC puede realizar 10 millones
de instrucciones por segundo.
Para generar el retardo, se utilizará el Timer1, el cual es de 16 bits, esto significa que
puede realizar una cuenta desde 0 hasta 65,535 (216−1) . En el registro T1CON, se
puede utilizar un divisor de frecuencia (Prescaler), el cual se configura con un valor de
prescaler de 256.
Para la práctica, se calculará un retardo de 20 ms:

 F OSC =20 MHz


F OSC
 F CY = =10 MHz
2
 Prescaler=256

F CY 10000000
Entonces: el ciclo máquina de incrementos será: F ' CY = = =39062.5 .Por
256 256
lo que podemos calcular el valor deseado del temporizador de la siguiente manera:
El valor a cargar en el registro periódico es
1000ms---=>39065.5
20ms-----=>x
20∗39065.5
x= =781.25
1000
El valor de 781.25, se cargará en el temporizador, para qué una vez que haya llegado
a este valor se emitirá una alarma.
Para la configuración de la frecuencia de oscilación, se dividió mediante el prescaler,
pero cabe hacer mención que existe dentro del dsPIC un multiplicador (PLL) que
también permite incrementar la frecuencia de oscilación.
2
Formula: T MEDIR =( )× Ps ×(PR 1−TMR 1)
FOSC
1. MATERIAL

 1 dsPIC33FJ128GP802.
 Resistencia de 10 kO.
 1 Pulsador
 Cristal de 4MHz.
 1 osciloscopio virtual
2. ACTIVIDADES
1. Armar el sistema mínimo del dsPIC. (PROTEUS)
2. Cargar al dsPIC el programa proporcionado en la práctica.
3. Visualizar en osciloscopio la salida (RB7).
4. Realizar el cálculo para generar una onda cuadrada con frecuencia de 1kHz
(periodo de 40 ms  20 ms en estado alto y 20 ms en estado bajo).
3. DESARROLLO DEL DESCRIPCIÓN DEL PROGRAMA
El código de programa que a continuación se presenta, nos permite generar un cambio
de estado 0 ó 1 lógico en la salida.
Este cambio estará determinado por el valor que sea cargado en el registro del
temporizador, con lo que podemos obtener una salida que esté cambiando su nivel a
determinado tiempo.
4. CÁLCULOS REALIZADOS
Se tiene:

 Ps=256
 F OSC =4 MHz
Se pide hallar PR 1en la frecuencia de 1kHz

Con F=1 kHz

1
T = =0.0001 s=¿ 1 ×10−3 s
F
El T MEDIR es

T
T MEDIR = =0.5 ×10−3 s
2
Usando la fórmula:
2
T MEDIR =( )× Ps ×(PR 1−TMR 1)
FOSC

Y tomando en cuenta que TMR 1=0

2
0.5 ×10−3=( )×256 × PR 1
4 ×106
PR 1=3.90625
5. Programa desarrollado en MPLAB X:
Configuración de bits:
// DSPIC33FJ32MC202 Configuration Bit Settings

// 'C' source line config statements

// FBS
#pragma config BWRP = WRPROTECT_OFF // Boot Segment Write Protect (Boot
Segment may be written)
#pragma config BSS = NO_FLASH // Boot Segment Program Flash Code
Protection (No Boot program Flash segment)

// FGS
#pragma config GWRP = OFF // General Code Segment Write Protect (User
program memory is not write-protected)
#pragma config GSS = OFF // General Segment Code Protection (User
program memory is not code-protected)

// FOSCSEL
#pragma config FNOSC = PRI // Oscillator Mode (Primary Oscillator (XT, HS,
EC))
#pragma config IESO = OFF // Internal External Switch Over Mode (Start-up
device with user-selected oscillator source)

// FOSC
#pragma config POSCMD = XT // Primary Oscillator Source (XT Oscillator
Mode)
#pragma config OSCIOFNC = OFF // OSC2 Pin Function (OSC2 pin has clock
out function)
#pragma config IOL1WAY = OFF // Peripheral Pin Select Configuration (Allow
Multiple Re-configurations)
#pragma config FCKSM = CSDCMD // Clock Switching and Monitor (Both Clock
Switching and Fail-Safe Clock Monitor are disabled)

// FWDT
#pragma config WDTPOST = PS32768 // Watchdog Timer Postscaler (1:32,768)
#pragma config WDTPRE = PR128 // WDT Prescaler (1:128)
#pragma config WINDIS = OFF // Watchdog Timer Window (Watchdog Timer in
Non-Window mode)
#pragma config FWDTEN = ON // Watchdog Timer Enable (Watchdog timer
always enabled)

// FPOR
#pragma config FPWRT = PWR128 // POR Timer Value (128ms)
#pragma config ALTI2C = OFF // Alternate I2C pins (I2C mapped to
SDA1/SCL1 pins)
#pragma config LPOL = ON // Motor Control PWM Low Side Polarity bit
(PWM module low side output pins have active-high output polarity)
#pragma config HPOL = ON // Motor Control PWM High Side Polarity bit
(PWM module high side output pins have active-high output polarity)
#pragma config PWMPIN = ON // Motor Control PWM Module Pin Mode bit
(PWM module pins controlled by PORT register at device Reset)

// FICD
#pragma config ICS = PGD1 // Comm Channel Select (Communicate on
PGC1/EMUC1 and PGD1/EMUD1)
#pragma config JTAGEN = OFF // JTAG Port Enable (JTAG is Disabled)

// #pragma config statements should precede project file includes.


// Use project enums instead of #define for ON and OFF.

#include <xc.h>

Programacion principal:
#include "config.h"
#include <p33FJ32mc202.h> // Incluir libreria del pic a utilizar
void retardo_ms (void); // Definen las funciones
int main (void);
// * * * P R O G R A M A * * *
int main(void) {
TRISB=0B1111111101111111; // Configura bit7 del puerto B como salida
while(1){
LATB=0B0000000010000000; // Pone a '1' bit7
retardo_ms(); // Llama función de retardo
LATB=0X0000; // Pone a '0' bit7
retardo_ms(); // Llama función de retardo
}
}
//**** Función Retardo ****************
void retardo_ms( void ){ // Función de retardo
T1CON = 0; // Resetear el timer
TMR1 = 0;
IPC0bits.T1IP = 1; // Interrupción con prioridad 1
//PR1 = 781.25;
PR1 = 3.90625; // Valor en el registro (retardo de 0.5ms)
IFS0bits.T1IF = 0; // Interrupción cuando llega a 0
IEC0bits.T1IE = 0;
T1CON = 0X8030; // Prescaler 1:256
while(IFS0bits.T1IF==0);
}
6. Circuito Simulado en Proteus

También podría gustarte