Professional Documents
Culture Documents
CURSO:
ALUMNOS:
Lima, 25-11-2017
INTRODUCCION
En la presente práctica se hará el procedimiento de programación del
dsPIC30F4013, para realizar la implementación y comprobación del
funcionamiento de un filtro digital pasa bajo, para programar dicho filtro es
necesario tener instalado el MPLAB.
Filtro Analógico
x[n]+x[n+1]
La ecuación de un filtro paso bajo digital de primer orden es: 𝑦(𝑛) = A
1(1+𝑧 −1 )
Su transformada Z es: 𝐻(𝑠) = 𝐴
2 2 Condensadores de 15 pF
3 8 Resistencias de 20kΩ
4 7 Resistencias de 10kΩ
5 1 Resistencia de 1kΩ
6 8 Resistencias de 300Ω
7 1 Resistencia de 47Ω
9 8 Diodos led´s
10 1 Pulsador de 4 pines
11 1 Pantalla LCD16x2
12 1 Potenciómetro de 10kΩ
13 1 Cristal de 12MΩ
14 2 Protoboard
Procedimiento
En el primer circuito se realiza la onda con los datos por el puerto F de 7 bit con
una configuración de R2R.
En el segundo circuito que también tiene una señal de corte de 25hz por el
puerto F, siendo esta la señal filtrada.
En el programa “filtro_main”, los coeficientes se calculan mediante las formulas
dadas en clases y por mediante de matlab se hallan los tres parámetros. Estos
datos se insertan en el programa.
Declaramos las entras, salidas del DsPIC, el timer para una prescaler de 1,
declaramos las variables. Cuando el dato recibido se filtra y sale por el puerto F
Observaciones y conclusiones
Los filtros digitales son, sin lugar a duda, la aplicación más conocida de los
sistemas que implementan DSP. En estos encontramos la versatilidad de ser
diseñados bajo ciertos preceptos ya estructurados. De esta forma, el desarrollo
de nuevos sistemas digitales tiene una base ya bien formada.
Cuando el flag del dato recibido empieza la conversión el objetivo será filtrarla y
mostrarla por el puerto F.
Código
Generador
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include "system.h"
#include <libpic30.h>
/*
*/
const uint16_t
data[]={73,72,67,62,58,58,61,68,75,81,83,81,77,71,67,67,70,76,83,88,90,88,83,
77,73,72,74,80,86,91,92,90,84,78,73,71,74,79,85,89,90,87,81,75,69,67,69,74,8
0,84,85,82,76,69,64,62,64,69,74,79,80,77,71,64,59,58,60,65,71,76,77,75,69,63
,59,57,60,66,72,78,79,77,73,67,63,62,65,71,78,84,86,84,80,75,71,70,74,80,87,
93,96,94,90,84,81,80,84,90,97,103,105,103,99,93,89,88,91,97,104,109,111,10
9,104,98,94,93,95,101,107,112,113,110,105,98,93,92,94,99,105,109,110,107,1
01,94,89,87,89,93,99,103,104,101,95,88,83,80,82,87,93,97,98,95,89,82,77,75,
78,83,89,93,94,92,86,80,75,74,77,82,89,94,96,93,88,83,78,78,81,87,94,99,101,
99,95,89,85,85,88,94,101,107,109,108,103,98,94,93,97,103,110,115,117,116,1
11,105,101,100,103,109,116,121,123,120,115,109,105,103,106,111,117,122,1
23,120,115,108,103,101,103,108,114,118,119,116,109,103,97,95,97,101,107,1
11,111,108,102,95,89,87,89,93,99,103,104,101,95,88,82,81,83,87,93,98,99,96,
91,84,79,78,80,86,92,97,98,96,91,85,81,80,83,89,95,101,103,101,96,90,86,86,
89,95,102,107,109,108,103,97,93,93,96,102,109,114,116,114,109,103,99,98,1
01,107,113,118,120,117,112,106,101,100,102,107,113,118,119,116,110,103,9
8,96,98,103,108,112,113,110,103,96,91,88,90,94,100,103,104,101,94,87,81,79
,81,85,91,94,95,92,86,79,73,71,73,78,84,88,89,86,80,74,69,67,69,75,81,86,87,
85,80,73,69,68,71,76,83,88,90,88,83,77,73,72,75,81,88,93,96,94,89,83,79,78,8
1,87,94,99,101,99,94,88,84,83,85,91,97,102,104,101,96,89,84,83,85,90,96,100
,101,98,93,86,80,78,80,85,90,94,95,91,85,78,72,70,71,76,81,85,85,81,75,68,62
,60,61,65,71,75,75,72,66,59,53,51,53,57,63,67,68,65,59,53,48,46,48,54,60,64,
66,63,58,52,47,46,49,55,61,66,68,66,61,55,51,50,53,59,66,71,73,71,66,61,56,5
6,59,64,71,76,78,76,71,65,61,60,62,68,74,79,80,78,73,66,61,60,62,67,73,77,78
,75,69,62,57,55,57,61,67,71,71,68,61,54,49,46,48,52,57,61,61,58,51,44,38,36,
38,42,47,51,52,48,42,35,30,27,29,34,40,44,45,42,36,30,25,23,25,30,37,41,43,4
0,35,29,24,23,26,32,38,43,45,43,38,33,28,28,31,37,43,49,51,49,44,38,34,33,36
,42,49,54,56,54,49,43,39,38,41,46,53,58,59,57,51,45,40,39,41,46,52,56,57,55,
49,42,37,35,36,41,47,51,51,48,42,35,29,27,28,33,38,42,42,39,33,25,20,17,19,2
4,29,33,33,30,24,17,12,10,12,17,22,27,28,25,19,13,8,6,9,14,20,25,27,24,19,13,
9,8,10,16,23,28,30,28,24,18,14,13,16,22,29,35,37,35,30,25,21,20,23,29,36,42,
44,42,37,31,27,26,29,35,41,46,48,45,40,34,29,28,30,36,42,46,47,45,39,32,27,2
5,27,32,38,42,43,39,33,26,21,19,20,25,30,34,35,32,26,19,13,11,13,17,23,27,28
,25,19,12,7,5,7,12,18,22,23,21,15,9,4,3,5,11,17,22,24,21,16,11,6,5,8,14,21,27,
29,27,22,17,13,12,16,22,29,35,37,35,31,25,22,21,24,30,37,43,45,43,39,33,29,2
8,31,37,44,49,51,49,43,37,33,32,34,40,46,51,52,49,44,37,32,30,32,37,43,48,48
,45,39,33,27,25,27,32,37,42,42,39,33,26,21,19,21,25,31,35,36,33,28,21,16,14,
16,21,27,32,33,31,25,19,15,13,16,22,28,33,35,33,28,22,18,17,21,27,34,39,41,4
0,35,30,26,26,29,35,43,48,51,49,45,40,36,35,39,45,52,58,60,59,54,48,44,44,47
,53,60,65,67,65,60,54,49,48,51,56,63,68,69,66,61,55,50,48,50,55,61,66,67,64,
58,51,46,44,46,51,56,61,61,58,52,46,40,38,40,45,51,55,56,53,48,41,36,34,37,4
2,48,53,54,51,46,40,35,34,37,43,49,54,56,54,49,44,40,39,42,48,55,61,63,62,57
,52,48,48,51,58,65,71
};
uint16_t *ptr;
uint16_t i;
ADPCFG = 0x1FFF;
TRISF = 0x00;
while(true)
ptr=&data;
for(i=0;i<1000;i++)
PORTF = *ptr;
ptr++;
__delay_ms(1);
}
return (EXIT_SUCCESS);
Filtro
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include "system.h"
#include <libpic30.h>
#include "timer.h"
#include "adc.h"
uint16_t ADCvalue;
uint8_t ReadFlagADC;
float tmp;
void InitPort(void)
LATB = 0x0000;
LATD = 0x00;
TRISF = 0x00;
InitPort();
ADC_init();
ReadFlagADC=0;
Xn0=0;
Xn1=0;
Yn0=0;
Yn1=0;
XADC=0;
i=0;
while(true)
if (ReadFlagADC==1){
Xn1=Xn0;
Xn0=XADC;
tmp= Coeff_a0*Xn0+Coeff_a1*Xn1+Coeff_b1*Yn1; ; //
completar la ecuacion del filtro
Yn1= Yn0;
Yn0= tmp;
ReadFlagADC=0;
}
void __attribute__((interrupt,auto_psv)) _ADCInterrupt(void){