dsPIC Practicas_Abril2013

Transcription

dsPIC Practicas_Abril2013
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
)
)
)
)
)
)
PROCESAMIENTO DIGITAL DE SEÑALES
PRÁCTICAS DE LABORATORIO CON
dsPIC33F
Ver 1.0
M.C. GILBERTO SANTILLÁN TOVAR
DR. DANIEL U. CAMPOS DELGADO
FACULTAD DE CIENCIAS
UASLP
Abril/2013
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
CONTENIDO(
)
INTRODUCCIÓN ............................................................................................................ 1)
CARACTERÍSTICAS GENERALES DEL dsPIC33FJ128GP802).......................................)2)
ARQUITECTURA)DEL)dsPIC33FJ128GP802).............................................................................)3)
CREAR NUEVO PROYECTO EN MPLAB IDE)................................................................)4)
SISTEMA MÍNIMO DE CONEXIÓN).................................................................................)8)
PROGRAMACIÓN DE dsPIC)..............................................................................................)8)
Programador MINIPROG+)............................................................................................)8)
PICkit 2 v2.61)................................................................................................................)9)
RESULTADOS)...................................................................................................................)10)
BIBLIOGRAFÍA).................................................................................................................)11)
PRÁCTICA 1.- Puertos de Entrada/Salida. .................................................................... 12)
PRÁCTICA 2.- El Temporizador ................................................................................... 15)
PRÁCTICA 3.- Interrupciones ....................................................................................... 18)
PRÁCTICA 4.- El ADC ................................................................................................. 22)
PRÁCTICA 5.- CONVERSION EN SERIE ADC – DAC ............................................ 28)
)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
INTRODUCCIÓN
Los DSC (Controladores Digitales de Señales) son dispositivos dotados de recursos
físicos y lógicos necesarios para el tratamiento digital de señales. La empresa Microchip
ha unido las características esenciales de un microcontrolador y un procesador digital de
señales (DSP, por sus siglas en inglés) en un dispositivo llamado dsPIC, el cual combina
las funciones típicas de los microcontroladores con las del procesamiento digital de
señales. Los DSC se utilizan en una amplia gama de aplicaciones, en las cuales
podemos encontrar: telecomunicaciones, procesamiento de señales, control de motores,
convertidores de energía, instrumentación biomédica, etc.
Existen dos familias de DSC por parte de Microchip, las series dsPIC30F y dsPIC33F.
El diseño de cada una de las prácticas de este manual se basa en el
dsPIC33FJ128GP802, el cual es un dispositivo de 16 bits que posee convertidores A/D
y D/A integrados, los cuales serán vitales para las tareas de procesamiento digital. En
las secciones subsecuentes se listarán sus características generales, y el esquema
mínimo de conexión.
Las prácticas siguientes se componen de dos partes: (i) la construcción del hardware, y
(ii) la implementación del software. Para el hardware, se describe el material a utilizar y
los esquemas de conexión en cada práctica, y para el desarrollo del software, se
implementan los programas que están codificados en lenguaje C. Con este fin, se
emplean los programas MPLAB IDE v8.89, Compilador c30 y PICkit2, todas estas
herramientas de software necesarias para la programación del dsPIC33F. Todos estos
programas los facilita libremente el fabricante, las cuales aparecen en la bibliografía
para ser descargados desde la página de Microchip. En la siguiente sección se describe
la creación, compilación y programación del dsPIC.
Dada la similitud entre los microcontroladores PIC y los Controladores digitales de
señales dsPIC, en cuanto a arquitectura y conjunto de instrucciones, los estudiantes que
hayan tenido algún acercamiento con los PIC, se les facilitará la programación de estos
nuevos dispositivos.
1)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
CARACTERÍSTICAS GENERALES DEL dsPIC33FJ128GP802
)
A continuación se listan las principales características del dsPIC33FJ128GP802:
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
Arquitectura Harvard.
Núcleo de 16 bits.
Circuito integrado de 28 pines
Operación de 3.0 – 3.6 Volts.
Operación de hasta 40 MIPS.
Memoria de programa de 128kb.)
5 Temporizadores de 16 bits.
Puertos con 21 entradas/salidas.
10/12 bits ADC con 1.1 Msps/500 ksps.
16 bits DAC (Audio).
Comunicación USART.)
Comunicación I2C.
Interrupciones externas.
Rango de temperatura de -40°C a 85°C.
Optimizado para programar en lenguaje C.
Para conocer todas las especificaciones técnicas se recomienda ver la hoja de datos
proporcionada por el fabricante, la cual se puede ser descargada desde el sitio oficial de
Microchip (ver bibliografía).
2)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
dsPIC33FJ32GP302/304, dsPIC33FJ64GPX02/X04, AND dsPIC33FJ128GPX02/X04
ARQUITECTURA(DEL(dsPIC33FJ128GP802(
FIGURE 1-1:
dsPIC33FJ32GP302/304, dsPIC33FJ64GPX02/X04, AND dsPIC33FJ128GPX02/
X04 BLOCK DIAGRAM
PSV and Table
Data Access
Control Block
Y Data Bus
X Data Bus
Interrupt
Controller
16
8
PORTA
16
16
16
Data Latch
Data Latch
X RAM
Y RAM
Address
Latch
Address
Latch
DMA
RAM
23
PCU PCH PCL
Program Counter
Loop
Stack
Control
Control
Logic
Logic
23
PORTB
16
DMA
23
16
Controller
16
Address Generator Units
Address Latch
Remappable
Program Memory
Pins
EA MUX
Data Latch
ROM Latch
24
Control Signals
to Various Blocks
16
Divide Support
16 x 16
W Register Array
16
Oscillator
Start-up Timer
FRC/LPRC
Oscillators
Power-on
Reset
Precision
Band Gap
Reference
16-bit ALU
Watchdog
Timer
16
Brown-out
Reset
Voltage
Regulator
VCAP/VDDCORE
Note:
16
DSP Engine
Power-up
Timer
Timing
Generation
Instruction Reg
Literal Data
16
Instruction
Decode and
Control
OSC2/CLKO
OSC1/CLKI
PORTC
VDD, VSS
MCLR
PMP/
EPSP
Comparator
2 Ch.
ECAN1
Timers
1-5
UART1, 2
ADC1
OC/
PWM1-4
RTCC
DAC1
SPI1, 2
IC1, 2, 7, 8
CNx
I2C1
DCI
Not all pins or features are implemented on all device pinout configurations. See pinout diagrams for the specific pins and features present on each device.
DS70292D-page 16
Preliminary
2009 Microchip Technology Inc.
3)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
CREAR NUEVO PROYECTO EN MPLAB IDE
MPLAB IDE es un software propio de Microchip, el cual permite seleccionar los
distintos DSC soportados para su programación. Una vez instalados el software
MPLAB IDE, Compilador C30 y PICkit 2, se listan a continuación los pasos para la
creación de un nuevo proyecto, compilación del proyecto (creación del archivo .HEX) y
programación del dsPIC.
" En el menú principal del programa MPLAB IDE, ir a al submenú Project →
Project Wizard.
" Seleccionar el modelo del dispositivo que se va a emplear y dar clic en
“Siguiente >”.
" Seleccionar el compilador y la ruta del “toolsuite” (generalmente localizada en
C:\Archivos de programa\Microchip\MPLAB C30\bin\pic30-gcc.exe)
4)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
" Se elige el nombre del proyecto y la ruta donde se guardaran los archivos. En
este ejemplo se llamará “P1”.
" Se muestran las carpetas y los archivos del nuevo proyecto, y seleccionar
“Siguiente >”.
5)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
" La última ventana nos muestra el modelo de dsPIC que se utilizará, compilador
y la ruta donde se guardaran los archivos del proyecto.
" Una vez finalizado la creación del nuevo proyecto, se crea un nuevo archivo.
(File → New).
" En esta nueva ventana se escribirá el código de nuestro programa, el cual coloca
en un valor alto los bits 0 y 1 del puerto A. El código se describe a continuación:
#include <p33FJ128GP802.h>
// Define el modelo del dsPIC
// CONFIGURACION DE BITS
_FBS ( RBS_NO_RAM & BSS_NO_FLASH & BWRP_WRPROTECT_OFF );
_FSS ( RSS_NO_RAM & SSS_NO_FLASH & SWRP_WRPROTECT_OFF );
_FGS ( GSS_OFF & GWRP_OFF );
_FOSCSEL ( IESO_OFF & FNOSC_PRIPLL );
_FOSC ( FCKSM_CSDCMD & IOL1WAY_OFF & OSCIOFNC_OFF & POSCMD_XT );
_FPOR ( ALTI2C_OFF & FPWRT_PWR128 );
_FICD ( JTAGEN_OFF & ICS_PGD1 );
// PROGRAMA PRINCIPAL
int main(void){
TRISA=0X0000;
LATAbits.LATA0=1;
// Configura el puerto A como salida.
// 0-Salidas; 1-Entradas
//Encendemos los bits 0 y 1 del puerto A
6)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
LATAbits.LATA1=1;
}
" Guardamos el nuevo archivo con la extensión .c
" En el menú “Project”, se escoge “Add files to Project…” y selecciona el archivo
previamente guardado con la extensión .c.
" Enseguida seleccionar el icono “Build All”, lo cual permite compilar el programa
y si no existen errores en el mismo, se despliega el aviso “BUILD
SUCCEEDED”
" Después de compilar, se habrá creado el archivo .HEX, el cual se descarga al
dsPIC a través de la comunicación PICkit 2/MINIPROG+.
7)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
SISTEMA MÍNIMO DE CONEXIÓN
Para trabajar con el dsPIC33FJ128GP802, se requiere una conexión mínima antes de
iniciar cualquier proyecto. En la figura 1, se muestra el esquema de conexión de cada
uno de los pines necesarios para la programación del dispositivo. La mayoría de los
pines son multiplexados, por lo que durante la programación los pines conectados a
ICSP+ se emplean para la descarga del programa. Una vez que se realizó la
programación, éstos pines tendrán la función que se les asignó en el programa.
Figura 1. Esquema mínimo de conexión.
PROGRAMACIÓN DE dsPIC
Una vez realizado el esquema mínimo de conexión, se procederá a grabar el dispositivo,
lo cual se realiza a través de la conexión entre el software PICkit 2 y el programador
universal MINIPROG+, ya que a través de estas herramientas se grabará en el dsPIC el
programa realizado (archivo .HEX).
Programador MINIPROG+
El programador MINIPROG+ (Figura 2), soporta diversas series de dispositivos PIC y
dsPIC para su programación. Para la serie dsPIC33F la programación se realiza a través
del puerto ICSP+.
Figura 2. Programador MINIPROG+.
8)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
Un esquema general de la conexión del programador a través de ICSP+ (In Circuit
Serial Programming) se muestra en las figura 3.
Figura 3. Esquema de Conexión ICSP+
El dsPIC33FJ128GP802, tiene 3 canales para ser programado, por lo que se deben
identificar los pines correspondientes para realizar la conexión adecuada con el
programador. En la figura 4 se muestra el esquema de conexión utilizando el canal 1
(PGEDx, PGECx).
Figura 4. Conexión ICSP+→dsPIC33FJ128GP802.
Nota: Retirar el voltaje de alimentación del dsPIC cuando se vaya a programar el
dispositivo, ya que se puede dejar la conexión mínima al momento de programar el
circuito mediante el ICSP+.
PICkit 2 v2.61
)
Con el software PICkit 2, podemos programar el dsPIC, conectando a través del puerto
USB el programador MINIPROG+. En las siguientes imágenes se muestra el
procedimiento para cargar el programa al dsPIC.
9)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
Una vez conectado el puerto ICSP+ a los pines correspondientes del dsPIC, se ejecutará
el programa PICkit 2. Si se realiza correctamente la conexión entre programador y
dsPIC, nos mostrará la siguiente imagen.
Además de mostrar las características del dispositivo, aparecen las opciones de leer,
borrar y programar el dispositivo, cabe mencionar que el software automáticamente
asigna el valor de voltaje de programación, que como se ha mencionado anteriormente
será de 3.3 Volts. En el menú File → Import Hex File, se selecciona el archivo .HEX
que se generó al compilar el programa. Una vez seleccionado el programa se ejecuta la
opción “write” para que sea cargado el programa al dsPIC.
Si la programación fue realizada con éxito nos mostrará “Programming Successful”, y
enseguida se procederá a desconectar la interfaz ICSP+ del dsPIC.
RESULTADOS
Para verificar los resultados de este ejemplo, se conectarán diodos emisores de luz
(LED) en los bits 0 y 1 del puerto A (pin 2 y 3). El resultado obtenido se puede
visualizar en la figura 5.
10)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
Figura 5. Bits 0 y 1 del Puerto A en “1” lógico.
BIBLIOGRAFÍA
A continuación se listan los “enlaces” de donde se pueden descargar de manera gratuita
los diversos programas y manuales necesarios para la programación del
dsPIC33FJ128GP802.
•
MPLAB IDE v8.89
•
Compilador C30 versión estudiante
•
Pickit2 v2.61
•
Datasheet dsPIC33FJ128GP802
•
Manual De Compilador C30
•
Manual de PICkit 2
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocNa
me=en023073
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocNa
me=en536656
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocNa
me=en023805
http://ww1.microchip.com/downloads/en/devicedoc/70292d.pdf
http://ww1.microchip.com/downloads/en/devicedoc/c30_users_guide_51284f.pdf
http://ww1.microchip.com/downloads/en/DeviceDoc/51553B.pdf
)
)
11)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
)
PRÁCTICA 1.- Puertos de Entrada/Salida.
)
OBJETIVO: configurar los puertos como entradas o salidas, y de acuerdo a un pin de
entrada, decidir el estado lógico de un pin de salida.
MATERIAL
1 dsPIC33FJ128GP802.
1 Push-button.
1 Resistencia de 1 kΩ.
1 Diodo emisor de luz (LED).
1 Resistencia de 10 kΩ.
1 Cristal de 20MHz.
2 Capacitores de 30ρF (cerámicos).
1 Capacitor de 4.7 µF (tantalio de preferencia).
1 Protoboard.
1 Fuente de CD de 3.3Volts
ACTIVIDADES
1. Crear un nuevo proyecto en MPLAB IDE, con el código de programa
proporcionado, compilarlo y programar el dsPIC.
2. Realizar la conexión proporcionada en la figura 6.
3. Verificar los resultados
DESCRIPCIÓN DEL PROGRAMA
El programa consiste en leer el bit 0 del puerto A, cuando esté a ‘0’ lógico, estarán
activados los bits 11 y 12 del puerto B, de lo contrario, los bits 11 y 12 tendrán un ‘0’
lógico.
#include <p33FJ128GP802.h>
// Incluir librería del dsPIC a utilizar
// * * * * BITS DE CONFIGURACION * * * * * * *
_FGS ( GSS_OFF & GWRP_OFF );
_FOSCSEL ( IESO_OFF & FNOSC_PRIPLL );
_FOSC ( FCKSM_CSDCMD & IOL1WAY_OFF & OSCIOFNC_OFF & POSCMD_XT );
_FPOR ( ALTI2C_OFF & FPWRT_PWR128 );
_FICD ( JTAGEN_OFF & ICS_PGD1 );
// * * * * * * * P R O G R A M A * * * * * * * * *
int main(void){
TRISA=0XFFFF;
// Configuración de los puertos
TRISB=0X0000;
// Puerto A como entradas y B como salidas
AD1PCFGL=0XFFFF;
// Configuración de las entradas digitales
while(1) {
if(PORTAbits.RA0==0){
// Si bit 0 del puerto A=0
LATBbits.LATB11=1;
// Pone a '1' bits 11 y 12
LATBbits.LATB12=1;
// del puerto B
}
else
{LATBbits.LATB11=0;
// Si bit 0 de puerto A=1
12)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
LATBbits.LATB12=0;
}
}
// Pone a '0' bits 11 y 12 del puerto B
}
Al sistema mínimo de conexión del dsPIC, se deben agregar los componentes mostrados
en la figura 6.
Figura 6. Esquema de conexión para la práctica 1.
RESULTADOS
Las figura 7 nos muestra la conexión completa para la realización de esta práctica.
Figura 7. Conexión de componentes para la práctica 1.
En la figura 8 se muestran activos los led’s, debido a que en la entrada se presenta un
‘0’ lógico. En esta práctica se utilizaron los pines RA0, RB11 y RB12, pero podemos
configurar cualquiera de las 21 entradas/salidas que posee el dsPIC.
Figura 8. Estados habilitados RB11 y RB12 al estar RA0 en ‘0’.
13)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
BIBLIOGRAFÍA
Enseguida se presentan “enlaces” donde el estudiante puede encontrar diversos
ejemplos de aplicaciones para entradas/salidas del dsPIC.
1. http://www.microchip.com/TechDoc.aspx?type=CodeExamples
2. http://ww1.microchip.com/downloads/en/DeviceDoc/70193c.pdf
3. http://isa.uniovi.es/~fernando/Programa_II_EUITI_archivos/Practica%20tablero%20P
uertos%20ES.pdf
4. http://www.ate.uniovi.es/8693/documentos/LECC7ce.pdf
5. http://ww1.microchip.com/downloads/en/DeviceDoc/70190C.pdf
6. http://www.mikroe.com/chapters/view/4/
14)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
PRÁCTICA 2.- El Temporizador
)
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. Para la configuración del temporizador es
necesario definir FCY (Frecuencia de Instrucción), la cual está definida por:
!!" =
!!"#
2
donde FOSC representa la frecuencia de oscilación, la cual está determinada por el
oscilador externo del dsPIC, y que estaría dada por !!"# = 20!"#. 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 Timer 0, el cual es de 16 bits, esto significa que
puede realizar una cuenta desde 0 hasta 65,535 (2!" − 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:
!!"# = 20!!"#
!!" =
!"!!"#
!
= 10!!"#
Prescaler: 256
→!!!" = 39,062.5!"
Por lo que podemos calcular el valor deseado del temporizador de la siguiente manera:
1,000!!" − − − −39, 062.5
!!!20!!" − ! − ! − !!!!!"#. !"
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.
15)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
MATERIAL
1 dsPIC33FJ128GP802.
1 Resistencia de 10 kΩ.
1 Cristal de 20MHz.
2 Capacitores de 30ρF (cerámicos).
1 Capacitor de 4.7 µF (tantalio de preferencia).
1 Protoboard.
1 Osciloscopio
1 Fuente de CD de 3.3Volts
ACTIVIDADES
1.
2.
3.
4.
Armar el sistema mínimo del dsPIC.
Cargar al dsPIC el programa proporcionado en la práctica.
Visualizar en osciloscopio la salida (RB13).
Realizar el cálculo para generar una onda cuadrada con frecuencia de 25
Hz (periodo de 40 ms # 20 ms en estado alto y 20 ms en estado bajo).
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.
#include <p33FJ128GP802.h>
// Incluir libreria del pic a utilizar
// * * * * BITS DE CONFIGURACION * * * * * * *
_FBS ( RBS_NO_RAM & BSS_NO_FLASH & BWRP_WRPROTECT_OFF );
_FSS ( RSS_NO_RAM & SSS_NO_FLASH & SWRP_WRPROTECT_OFF );
_FGS ( GSS_OFF & GWRP_OFF );
_FOSCSEL ( IESO_OFF & FNOSC_PRI );
_FOSC ( FCKSM_CSDCMD & IOL1WAY_OFF & OSCIOFNC_OFF & POSCMD_XT );
_FPOR ( ALTI2C_OFF & FPWRT_PWR128 );
_FICD ( JTAGEN_OFF & ICS_PGD1 );
void retardo_ms (void);
int main (void);
// * * * P R O G R A M A * * *
int main(void) {
TRISB=0B1101111111111111;
while(1){
LATB=0B0010000000000000;
retardo_ms();
LATB=0X0000;
retardo_ms();
}
}
//**** Función Retardo ****************
void retardo_ms( void ){
T1CON = 0;
TMR1 = 0;
// Definen las funciones
// Configura bit13 del puerto B como salida
// Pone a '1' bit13
// Llama función de retardo
// Pone a '0' bit13
// Llama función de retardo
// Función de retardo
// Resetear el timer
16)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
IPC0bits.T1IP = 1;
PR1 = 781.25;
IFS0bits.T1IF = 0;
IEC0bits.T1IE = 0;
T1CON = 0X8030;
while(IFS0bits.T1IF==0);
// Interrupción con prioridad 1
// Valor en el registro (retardo de 20ms)
// Interrupción cuando llega a 0
// Prescaler 1:256
}
RESULTADOS
En la figura 9, se puede visualizar la salida del dsPIC (RB13) y la generación del tiempo
muerto en el osciloscopio, el cual se definió de 20 ms para la parte alta de la onda
cuadrada (3.3 V), y otros 20 ms para la parte baja (0 V).
Figura 9. Retardo de 20 ms generado con dsPIC
BIBLIOGRAFÍA
En los siguientes enlaces, se presenta teoría, práctica y configuración de los
temporizadores. Cabe mencionar que el dsPIC33FJ128GP802 tiene 5 temporizadores de
16 bits.
1. http://galeon.com/leo-tronics/TutorialTimer0.pdf
2. ftp://193.170.235.123/Lernbehelfe/PIC%20Handb%FCcher/dsPIC33F_Reference_Man
ual/9_Watch_Dog_Timer.pdf
3. http://www.mikroe.com/chapters/view/52/chapter-4-timers/#ch4.1.1
4. http://www.todopic.com.ar/foros/index.php?topic=15200.0
17)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
)
PRÁCTICA 3.- Interrupciones
OBJETIVO: Comprender el concepto de interrupciones y su nivel de prioridad.
INTRODUCCIÓN
Una interrupción es una señal interna o externa recibida por el dsPIC, la cual indica que
se debe "interrumpir" el curso de ejecución actual (suspensión temporal) y pasar a
ejecutar una subrutina. Una vez finalizada la subrutina de interrupción, se continúa con
la ejecución del programa principal.
Cuando existen varias peticiones de interrupción a la vez, se establece un nivel de
prioridad para cada una de ellas. El dsPIC de acuerdo al nivel de interrupción, ejecutará
cada una de ellas, atendiendo primero a la de mayor nivel de prioridad hasta atender
cada una de las peticiones de interrupción. Una vez completadas las interrupciones,
regresará a la línea del programa donde se encontraba antes del llamado de la
interrupción.
MATERIAL
1 dsPIC33FJ128GP802.
1 Resistencia de 10 kΩ.
1 Resistencia de 1 kΩ.
1 Cristal de 20MHz.
2 Capacitores de 30ρF (cerámicos).
1 Capacitor de 4.7 µF (tantalio de preferencia).
1 Diodo LED de 5mm.
1 Diodo LED de 10 mm.
1 Push-button.
1 Protoboard.
1 Fuente de CD de 3.3Volts
ACTIVIDADES
1.
2.
3.
4.
Al sistema mínimo, agregar las conexiones mostradas en la figura 10.
Cargar al dsPIC el programa proporcionado en la práctica.
Visualizar la salida del programa sin ejecutar la interrupción.
Visualizar la salida del programa al ejecutar INT0.
DIAGRAMA ESQUEMÁTICO
Para la realización de la práctica, al sistema mínimo de conexiones del dsPIC agregar
los siguientes componentes:
18)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
led)10)mm)
led)5mm)
Figura 10. Conexión para la práctica 3
DESCRIPCIÓN DEL PROGRAMA
El siguiente programa realiza dos procesos. El proceso principal consiste en generar una
secuencia alterno de estados lógicos (encendido/apagado del led de 5 mm) cada 1.2
segundos (1,200 ms); una vez que se habilita la interrupción (accionamiento del PushButton), se procederá a ejecutar otro proceso que consiste en el encendido del led de 10
mm durante 6 segundos (6,000 ms). Una vez concluida la rutina de interrupción, se
regresará al proceso principal.
#include <p33fj128gp802.h>
#define fcy 16000000
// * * * * BITS DE CONFIGURACION * * * * * * *
_FBS ( RBS_NO_RAM & BSS_NO_FLASH & BWRP_WRPROTECT_OFF );
_FSS ( RSS_NO_RAM & SSS_NO_FLASH & SWRP_WRPROTECT_OFF );
_FGS ( GSS_OFF & GWRP_OFF );
_FOSCSEL ( IESO_OFF & FNOSC_PRIPLL );
_FOSC ( FCKSM_CSDCMD & IOL1WAY_OFF & OSCIOFNC_OFF & POSCMD_XT );
_FPOR ( ALTI2C_OFF & FPWRT_PWR128 );
_FICD ( JTAGEN_OFF & ICS_PGD1 );
int main(void);
void retardo_ms( unsigned int ms );
void interrupcion(void);
// Declaración de funciones
// / / / / / / PROGRAMA PRINCIPAL / / / / / / / / / / /
int main(void){
while(1){
TRISB=0x5FFF;
LATBbits.LATB13=1;
retardo_ms(1200);
LATBbits.LATB13=0;
retardo_ms(1200);
interrupcion();
}
}
void __attribute__((__interrupt__)) _INT0Interrupt(void){
LATBbits.LATB15=1;
retardo_ms(2000);
retardo_ms(2000);
retardo_ms(2000);
// Ciclo del programa
// bit 13 y 15 como salida
// '1' bit 13
// '0' bit 13
//Proceso de interrupción
// '1' en RB15
// Retardo
19)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
LATBbits.LATB15=0;
IFS0bits.INT0IF = 0;
}
void interrupcion( void ) {
// '0' en RD3
// Salida de la función
// Configuración de la interrupción
INTCON2bits.INT0EP = 1;
IPC0bits.INT0IP = 4;
IEC0bits.INT0IE = 1;
}
void retardo_ms( unsigned int ms ){
unsigned int periodo=0;
T1CON =0;
TMR1 = 0;
IPC0bits.T1IP =1;
periodo= (( fcy/256)*ms)/1000;
PR1= periodo;
IFS0bits.T1IF=0;
IEC0bits.T1IE=0;
T1CON=0x8030;
while(IFS0bits.T1IF==0);
}
// Habilita Interrupción
// Timer comienza en 0
// Tiempo en el registro del timer
// Limpia bandera del timer
// Deshabilita timer
// configura TICON
RESULTADOS
En la figura 11, se puede observar las conexiones necesarias para la realización de la
práctica. Los led´s nos permitirán visualizar la ejecución del programa principal (led de
5mm, RB13) y cuando se ejecute la interrupción se visualizará mediante el led de
10mm, conectado a RB15.
Figura 11. Conexión en protoboard para la práctica 3.
La figura 12 nos muestra la ejecución del programa principal, el cual consiste en un
encendido/apagado del led de 5mm cada 1.2 seg.
Figura 12. Muestra de la ejecución del programa principal.
20)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
Mientras tanto, la figura 13 muestra la ejecución de la subrutina de interrupción
(encendido del led de 10mm, RB15). Una vez que se concluye la subrutina, se regresa a
la ejecución del programa principal.
Figura 13. Activación de la interrupción mediante un push-button.
BIBLIOGRAFÍA
Para más aplicaciones, niveles de interrupción y ejemplos de programación, se
proporciona la siguiente lista de páginas electrónicas donde el estudiante podrá
consultar los ejemplos.
1. http://ww1.microchip.com/downloads/en/DeviceDoc/70189c.pdf
2. http://ww1.microchip.com/downloads/en/DeviceDoc/70214C.pdf
3. http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2573
4. http://batchloaf.wordpress.com/2012/04/12/simple-timer-1-interrupt-example-for-thedspic30f4011/
21)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
)
PRÁCTICA 4.- El ADC
)
OBJETIVO: realizar la conversión de señales analógicas en señales digitales,
utilizando el ADC interno del dsPIC, con resolución de 10 y 12 bits.
INTRODUCCIÓN
El convertidor Analógico/Digital (ADC), es un circuito que toma valores analógicos de
tensión y los convierte en una palabra binaria. Los valores que definen los límites de las
tensiones a medir se denominan voltajes de referencia, y se representan por VREF- (el
mínimo) y VREF+ (el máximo). La resolución del convertidor queda determinada por la
cantidad de bits que representan el resultado de la conversión. El dsPIC33FJ128GP802
tiene dos convertidores analógico/digital, uno con resolución de 10 bits y el otro de 12
bits.
Un ADC de n bits puede representar hasta 2n valores digitales, de modo que a la entrada
analógica igual a VREF- se le asignará el valor 0 digital, y la entrada igual a VREF+ le
asignará el valor 2n – 1 digital. Entre VREF- y VREF+ se pueden presentar un número
infinitos de valores analógicos, pero con n bits, solo se pueden formar 2n valores
discretos diferentes. Por lo tanto habrá valores analógicos que no podrán ser
representados con exactitud (error de cuantización).
La diferencia entre dos valores analógicos correspondientes a dos valores digitales
consecutivos se define como la resolución de voltaje del ADC.
!"#$%&'($)!!"#!!"# =
!!"#!! − !!"#!
2! − 1
Para la realización de esta práctica se considera el ADC con resolución de 12 bits,
donde !!"#! = 0!!"#$% y !!"#! = 3.3!!"#$%, por lo que la resolución del ADC será de
0.805 mV. Si se considera el ADC de 10 bits, se tendría una resolución de 3.22 mV.
MATERIAL
1 dsPIC33FJ128GP802.
1 Resistencia de 10 kΩ.
1 Cristal de 20MHz.
2 Capacitores de 30ρF (cerámicos).
1 Capacitor de 4.7 µF (tantalio de preferencia).
12 Diodos LED.
1 Protoboard.
2 Fuente variable de CD de 3.3Volts
ACTIVIDADES
1. Al sistema mínimo, agregar las conexiones mostradas en la figura 14.
22)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
2. Cargar al dsPIC el programa proporcionado en la práctica.
3. Variar el nivel de CD desde 0 Volts en la entrada (RA0), pero sin
sobrepasar los 3.3 Volts.
4. Comprobar nivel de CD en la fuente con la salida digital.
DIAGRAMA ESQUEMÁTICO
Para la realización de la práctica, al sistema mínimo de conexiones del dsPIC agregar
los siguientes componentes:
Figura 14. Esquema de conexión para la práctica 4.
DESCRIPCIÓN DEL PROGRAMA
El programa lee una entrada analógica de 0 – 3.3 Volts en CD (VREF+), la cual es
convertida en señal digital con resolución de 12 bits mediante el ADC interno del
dsPIC. Una vez realizada la conversión, el dato es enviado al puerto B donde se puede
visualizar de manera digital a través de los leds.
#include <p33FJ128GP802.h>
// * * * * BITS DE CONFIGURACION * * * * * * *
_FBS ( RBS_NO_RAM & BSS_NO_FLASH & BWRP_WRPROTECT_OFF );
_FSS ( RSS_NO_RAM & SSS_NO_FLASH & SWRP_WRPROTECT_OFF );
_FGS ( GSS_OFF & GWRP_OFF );
_FOSCSEL ( IESO_OFF & FNOSC_PRIPLL );
_FOSC ( FCKSM_CSDCMD & IOL1WAY_OFF & OSCIOFNC_OFF & POSCMD_XT );
_FPOR ( ALTI2C_OFF & FPWRT_PWR128 );
_FICD ( JTAGEN_OFF & ICS_PGD1 );
#define fcy 16000000
23)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
int main(void);
void retardo_ms( unsigned int ms );
void adc (void);
// Declaración de funciones
// / / / / / / PROGRAMA PRINCIPAL / / / / / / / / / / /
int main(void){
TRISB=0X0000;
adc();
AD1CON1bits.ADON = 1;
// Puerto B como salida
// Llama función adc
// Habilita ADC
while(1){
AD1CON1bits.SAMP = 1;
retardo_ms(3);
AD1CON1bits.SAMP = 0;
// Bit para habilitar muestreo
// Tiempo para realizar el muestreo
// Retiene dato
while(!AD1CON1bits.DONE);
//Se ha realizado la conversión?
PORTB=ADC1BUF0;
// Datos se guardan en ADC1BUF0 y se envía al puerto B
}
}
// / / / / / / CONFIGURACION DEL ADC / / / / / / / / /
void adc (void){
TRISA = 0x0001;
AD1PCFGL = 0x0000;
AD1CON1bits.AD12B=1;
AD1CON1bits.ASAM=0;
AD1CON1bits.SSRC=0;
// Entrada analógica RA0
// Todas entradas analógicas
// 1=12 bits resolución y muestreo secuencial
// de los canales; 0= 10 bits ADC
// El muestreo inicia cuando bit SAMP=1
// Termina el muestreo e inicia la conversión
AD1CHS0bits.CH0NA =0;
AD1CHS0bits.CH0SA =0;
// La entrada negativa será Vss
// Entrada positiva será AN0
AD1CON2bits.CSCNA =0;
AD1CON2bits.VCFG =0;
// Muestreo secuencial (scan) deshabilitado
// Referencia para la conversión: Referencia
//positiva=AVdd, Negativa=AVss
AD1CON2bits.BUFM =0;
AD1CON2bits.SMPI =0;
AD1CON2bits.ALTS =0;
// Configurado como buffer de 16 palabras
// Después de la conversión se genera la interrupción
// Solo muestra un Canal
AD1CON3bits.ADRC =0;
AD1CON3bits.ADCS =21;
// Reloj del ADC es derivado del sistema
// Tiempo de conversión.
}
void retardo_ms( unsigned int ms ){
unsigned int periodo=0;
T1CON =0;
TMR1 = 0;
IPC0bits.T1IP =1;
periodo=((fcy/256)*ms)/1000;
PR1= periodo;
IFS0bits.T1IF=0;
IEC0bits.T1IE=0;
T1CON=0x8030;
while(IFS0bits.T1IF==0);
// Reset Timer
// Tiempo en el registro del timer
// Limpia bandera del timer
// Deshabilita timer
// configura TICON = 0100000000110000
}
24)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
RESULTADOS
En la figura 14, se muestra el esquema completo de conexión con una entrada analógica
de 0 volts.
Figura 14. Conexión en protoboard para la práctica 4.
La figura 15 muestra el valor digitalizado cuando se tiene una entrada analógica de 0.5
Volts, cabe mencionar que el bit menos significativo está en el lado izquierda de la
figura.
Figura 15. Conversión para una entrada analógica de 0.5 Volts.
25)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
Finalmente, la figura 16 muestra una entrada analógica de 1.6 Volts en RA0, y la figura
17 cuando se tienen la máxima entrada aceptada en RA0 (3.3 Volts).
Figura 16. Conversión digital de una entrada analógica de 1.6 Volts
.
Figura 17. Conversión digital de una entrada analógica de 3.3 Volts
26)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
BIBLIOGRAFÍA
En los siguientes enlaces se presenta la teoría y prácticas acerca de la conversión
analógica/digital. Como tema importante se describe el Criterio de Nyquist que es
fundamental para la digitalización de señales.
1. http://redwood.berkeley.edu/bruno/npb261/aliasing.pdf
2. http://www.princeton.edu/~achaney/tmve/wiki100k/docs/Nyquist%E2%80%93Shannon
_sampling_theorem.html
3. http://www.cursomicros.com/avr/conversor-adc/conversor-adc-delavr.html#resolucion-voltajes-referencia
4. http://isa.uniovi.es/~fernando/Programa_II_EUITI_archivos/Practica%20tablero%20C
onversorAD.pdf
5. http://www.ucontrol.com.ar/forosmf/programacion-en-c/conversor-ad-dspic30f/?wap2
6. http://www.microchip.com/TechDoc.aspx?type=CodeExamples
)
)
)
)
)
27)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
PRÁCTICA 5.- CONVERSION EN SERIE ADC – DAC
)
OBJETIVO: realizar la conversión analógica/digital de una señal y enseguida
digital/analógica, al conectar en serie los procesos ADC – DAC, y de esta manera
comprobar el criterio de Nyquist.
INTRODUCCION
En el proceso de conversión Analógica/Digital – Digital/Analógica de una señal,
deben considerar dos aspectos muy importantes: el muestreo y la cuantización de
señal. Durante estos procesos, se toman muestras y se cuantizan de acuerdo a
resolución del convertidor, por lo que estas operaciones nos pueden restringir
información que se transmite de forma digital.
se
la
la
la
La consideración fundamental en el muestreo depende de que tan “rápido” o durante
que intervalo de tiempo se pueda extraer información de la señal, tal que más adelante
sea posible reconstruir la señal sin tener pérdidas de su comportamiento dinámico. En la
figura 18 se muestra de manera general como se realiza el muestreo de una señal.
x(t)
x[-2]
x[-1]
x[0]
x(T)=x[1]
x(2T)=x[2]
x[3]
x[4]
t
0
T=Tiempo de muestreo
Figura 18. Muestreo de una señal x(t) cada T seg.
TEOREMA DE NYQUIST
El teorema de Nyquist establece que la reconstrucción de una señal x(t) a partir de sus
muestras x[k], es posible si la señal es muestreada al doble de su ancho de banda (al
menos). Por ejemplo, Si la frecuencia más alta contenida en la señal analógica !(!) es
!!"# , entonces para recuperar la señal !(!) debemos de muestrear a una tasa Fs que
cumpla !! ≥ 2!!"# .
Cuando la frecuencia de muestreo no cumple el criterio de Nyquist, se produce el
fenómeno conocido como “aliasing” o traslape, a través del cual una señal de alta
frecuencia es interpretada como una señal de baja frecuencia.
28)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
1
x2(t)
x1(t)
0.8
0.6
0.4
0.2
0
−0.2
x[k]
−0.4
T=0.1 seg
Fs=10 Hz
−0.6
−0.8
−1
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
tiempo (seg)
Figura 19. Señales muestredas que describen el fenómeno de traslape: x1(t) # 3 Hz, x2(t) # 13 Hz, y
Fs=10 Hz.
MATERIAL
1 dsPIC33FJ128GP802.
1 Resistencia de 10 kΩ.
1 Cristal de 20MHz.
2 Capacitores de 30ρF (cerámicos).
1 Capacitor de 4.7 µF (tantalio de preferencia).
1 Protoboard.
1 Generador de funciones.
1 Osciloscopio.
1 Fuente variable de CD de 3.3Volts.
ACTIVIDADES
1. Al sistema mínimo, agregar las conexiones mostradas en la figura 20.
2. Cargar al dsPIC el programa proporcionado en la práctica.
3. Configurar la señal de entrada por medio del generador de funciones,
para establecer una señal senoidal positiva con amplitud de 3Vpp (0.15
Volts a 3.15 Volts) y f = 1KHz. Esta señal se introduce en la entrada
analógica del dsPIC (AN4).
4. En el osciloscopio visualizar la señal de entrada, así como la salida
(DAC1RP).
5. Visualizar la salida cuando se realiza un barrido de frecuencia en la señal
de entrada desde 100 Hz hasta 1MHz.
6. Conclusiones.
DIAGRAMA ESQUEMÁTICO
Para la realización de la práctica, al sistema mínimo de conexiones del dsPIC agregar
los siguientes componentes:
29)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
Figura 20. Esquema de conexión para la práctica 4.
DESCRIPCIÓN DEL PROGRAMA
El siguiente programa realiza la conversión de una señal analógica, e inmediatamente la
reconstruye mediante un proceso secuencial Analógico/Digital – Digital/Analógico, es
decir, la misma entrada se debe visualizar a la salida del dsPIC. Mediante éste proceso
se podrá comprobar el teorema de Nyquist, ya que si no se cumple el criterio de
muestreo, se tendrá una perdida de información, la cual se verá reflejada en la salida
como una señal de menor frecuencia, cuando la frecuencia de la entrada exceda la mitad
de la tasa de muestreo.
#include "p33fj128gp802.h"
#include "dsp.h"
#include "..\h\adcdacDrv.h"
_FOSCSEL(FNOSC_FRC);
// Configuración de oscilador
_FOSC(FCKSM_CSECMD & OSCIOFNC_ON & POSCMD_NONE);
_FWDT(FWDTEN_OFF);
int main (void){
PLLFBD=41;
CLKDIVbits.PLLPOST=0;
CLKDIVbits.PLLPRE=0;
OSCTUN=0;
RCONbits.SWDTEN=0;
__builtin_write_OSCCONH(0x01);
__builtin_write_OSCCONL(0x01);
// Configuración de dsPIC a 40MIPS
// N1=2
// N2=2
while (OSCCONbits.COSC != 0b001);
while(OSCCONbits.LOCK!=1) {};
// Espera para cambio de reloj
initAdc();
initDac();
initDma0();
initTmr3();
// Inicializa funciones
// Deshabilita WatchDog Timer
// Habilita reloj con PLL
// Comienza reloj
// Timer para muestreo de la señal
30)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
extern fractional BufferA[NUMSAMP];
extern fractional BufferB[NUMSAMP];
extern unsigned int DmaBuffer;
extern int flag;
int i;
// Configura buffer A
// Configura buffer B
// Habilita DMA
// Bandera de DMA
// Declara variable i
while (1) {
if(flag) {
for(i = 0; i < NUMSAMP; i++){
while(DAC1STATbits.REMPTY != 1);
// Espera la conversion D/A.
if(DmaBuffer == 0)
DAC1RDAT = BufferA[i];
// Carga dato al registro
else
DAC1RDAT = BufferB[i];
// Carga dato al registro
}
flag = 0;
}
}
return 0;
}
fractional BufferA[NUMSAMP] __attribute__((space(dma)));
// Modo de salida al buffer A
fractional BufferB[NUMSAMP] __attribute__((space(dma)));
// Modo de salida al buffer
void initAdc(void)
{
AD1CON1bits.FORM = 3;
AD1CON1bits.SSRC = 2;
AD1CON1bits.ASAM = 1;
AD1CON1bits.AD12B = 1;
AD1CON2bits.CHPS = 0;
AD1CON3bits.ADRC = 0;
AD1CON3bits.ADCS = 3;
AD1CON1bits.ADDMABM = 1;
AD1CON2bits.SMPI = 0;
AD1CHS0bits.CH0SA = 4;
AD1CHS0bits.CH0NA = 0;
AD1PCFGL=0xFFFF;
AD1PCFGLbits.PCFG4 = 0;
IFS0bits.AD1IF = 0;
IEC0bits.AD1IE = 0;
AD1CON1bits.ADON = 1;
}
void initDac(void) {
ACLKCONbits.SELACLK = 0;
ACLKCONbits.AOSCMD = 0;
ACLKCONbits.ASRCSEL = 0;
ACLKCONbits.APSTSCLR = 7;
DAC1STATbits.ROEN = 1;
DAC1DFLT = 0x0000;
DAC1CONbits.DACFDIV = 5;
DAC1CONbits.FORM = 1;
DAC1CONbits.AMPON = 0;
DAC1CONbits.DACEN = 1;
}
void initTmr3() {
TMR3 = 0x0000;
PR3 = SAMPPRD;
IFS0bits.T3IF = 0;
// Función ADC
// Formato de salida.
// ADC convierte después del muestreo
// Resolución de 12 bits
// Canal CH0
// reloj del ADC derivado del sistema
// Tad=Tcy*(ADCS+1)= (1/40M)*4 = 100ns
// Tc=14*Tad = 1.4us
// Entrada positiva AN4
// Entrada negative Vref// todas las entradas analógicas
// AN4
// Habilita ADC
// Función DAC
// Configuración de reloj
// Salida DAC1RP
// Valor de referencia de la conversión
// Formato del dato
// Habilita DAC
// Función Timer
// Reset TMR3
// carga valor al timer
31)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
IEC0bits.T3IE = 0;
T3CONbits.TON = 1;
// Habilita Timer 3
}
void initDma0(void){
DMA0CONbits.AMODE = 0;
// Configuración DMA
DMA0CONbits.MODE = 2;
DMA0PAD = (int)&ADC1BUF0;
DMA0CNT = (NUMSAMP-1);
DMA0REQ = 13;
DMA0STA = __builtin_dmaoffset(BufferA);
DMA0STB = __builtin_dmaoffset(BufferB);
IFS0bits.DMA0IF = 0;
IEC0bits.DMA0IE = 1;
DMA0CONbits.CHEN = 1;
// Habilita canal DMA
}
unsigned int DmaBuffer = 0;
int flag = 0;
void __attribute__((interrupt, no_auto_psv)) _DMA0Interrupt(void){
DmaBuffer ^= 1;
flag = 1;
IFS0bits.DMA0IF = 0;
}
void __attribute__((interrupt, no_auto_psv)) _DAC1RInterrupt(void)
{
IFS4bits.DAC1RIF = 0;
}
RESULTADOS
En las siguientes figuras se observa el proceso de conversión ADC - DAC cuando se
tiene una entrada senoidal, triangular y cuadrada con frecuencias de 1KHz en las 3
señales. ¿Cuál sería la frecuencia de muestreo que se mide experimentalmente al variar
la frecuencia de entrada de 100 Hz a 1 MHz?
Salida)
Entrada)
Figura 21. Conversión en serie ADC-DAC para una señal senoidal.
32)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
Salida)
Entrada)
.
Figura 21. Conversión en serie ADC-DAC para una señal triangular.
Salida)
Entrada)
Figura 22. Conversión en serie ADC-DAC para una señal cuadrada.
BIBLIOGRAFÍA
En los siguientes enlaces se presenta la teoría del criterio de Nyquist, ejemplos de
programación y referencia de los registros utilizados para la realización de esta práctica.
1. http://tintoretto.ucsd.edu/jorge/teaching/mae143a/lectures/8sampling.pdf
33)
)
Prácticas)de)Laboratorio)
Procesamiento)Digital)de)Señales)
Facultad)de)Ciencias,)UASLP)
)
2. http://embeddedcodesource.com/developer/microchip_technology/ce154__adc_to_dac_
loopback
3. http://www.dspguide.com/ch3/2.htm
4. http://es.wikipedia.org/wiki/Teorema_de_muestreo_de_Nyquist-Shannon
5. http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824
&appnote=en539328
6. http://www.microchip.com/TechDoc.aspx?type=CodeExamples
7. http://ww1.microchip.com/downloads/en/DeviceDoc/70183D.pdf
8. http://www.element14.com/community/solutions/2622
34)
)