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