INTRODUCCIN ............................................................................................................ 1 CARACTERSTICAS GENERALES DEL dsPIC33FJ128GP802 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< = ;>?:@AB8A:>; 1B, *(!@8CC6DE=FG!FH= <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< C CREAR NUEVO PROYECTO EN MPLAB IDE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< I SISTEMA MNIMO DE CONEXIN <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< F PROGRAMACIN DE dsPIC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< F Programador MINIPROG+ <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< F PICkit 2 v2.61 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< J RESULTADOS <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< EH BIBLIOGRAFA <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< EE PRCTICA 1.- Puertos de Entrada/Salida. .................................................................... 12 PRCTICA 2.- El Temporizador ................................................................................... 15 PRCTICA 3.- Interrupciones ....................................................................................... 18 PRCTICA 4.- El ADC ................................................................................................. 22 PRCTICA 5.- CONVERSION EN SERIE ADC DAC ............................................ 28
INTRODUCCIN Los DSC (Controladores Digitales de Seales) son dispositivos dotados de recursos fsicos y lgicos necesarios para el tratamiento digital de seales. La empresa Microchip ha unido las caractersticas esenciales de un microcontrolador y un procesador digital de seales (DSP, por sus siglas en ingls) en un dispositivo llamado dsPIC, el cual combina las funciones tpicas de los microcontroladores con las del procesamiento digital de seales. Los DSC se utilizan en una amplia gama de aplicaciones, en las cuales podemos encontrar: telecomunicaciones, procesamiento de seales, control de motores, convertidores de energa, instrumentacin biomdica, etc. Existen dos familias de DSC por parte de Microchip, las series dsPIC30F y dsPIC33F. El diseo de cada una de las prcticas 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 sern vitales para las tareas de procesamiento digital. En las secciones subsecuentes se listarn sus caractersticas generales, y el esquema mnimo de conexin. Las prcticas siguientes se componen de dos partes: (i) la construccin del hardware, y (ii) la implementacin del software. Para el hardware, se describe el material a utilizar y los esquemas de conexin en cada prctica, y para el desarrollo del software, se implementan los programas que estn 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 programacin del dsPIC33F. Todos estos programas los facilita libremente el fabricante, las cuales aparecen en la bibliografa para ser descargados desde la pgina de Microchip. En la siguiente seccin se describe la creacin, compilacin y programacin del dsPIC. Dada la similitud entre los microcontroladores PIC y los Controladores digitales de seales dsPIC, en cuanto a arquitectura y conjunto de instrucciones, los estudiantes que hayan tenido algn acercamiento con los PIC, se les facilitar la programacin de estos nuevos dispositivos.
A continuacin se listan las principales caractersticas del dsPIC33FJ128GP802: ! Arquitectura Harvard. ! Ncleo de 16 bits. ! Circuito integrado de 28 pines ! Operacin de 3.0 3.6 Volts. ! Operacin 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). ! Comunicacin USART. ! Comunicacin I 2 C. ! Interrupciones externas. ! Rango de temperatura de -40C a 85C. ! Optimizado para programar en lenguaje C.
Para conocer todas las especificaciones tcnicas se recomienda ver la hoja de datos proporcionada por el fabricante, la cual se puede ser descargada desde el sitio oficial de Microchip (ver bibliografa).
dsPIC33FJ32GP302/304, dsPIC33FJ64GPX02/X04, AND dsPIC33FJ128GPX02/X04 DS70292D-page 16 Preliminary 2009 Microchip Technology Inc. FIGURE 1-1: dsPIC33FJ32GP302/304, dsPIC33FJ64GPX02/X04, AND dsPIC33FJ128GPX02/ X04 BLOCK DIAGRAM 16 OSC1/CLKI OSC2/CLKO VDD, VSS Timing Generation MCLR Power-up Timer Oscillator Start-up Timer Power-on Reset Watchdog Timer Brown-out Reset Precision Reference Band Gap FRC/LPRC Oscillators Regulator Voltage VCAP/VDDCORE IC1, 2, 7, 8 I2C1 PORTA Note: Not all pins or features are implemented on all device pinout configurations. See pinout diagrams for the specific pins and features pres- ent on each device. Instruction Decode and Control PCH PCL 16 Program Counter 16-bit ALU 23 23 24 23 Instruction Reg PCU 16 x 16 W Register Array ROM Latch 16 EA MUX 16 16 8 Interrupt Controller PSV and Table Data Access Control Block Stack Control Logic Loop Control Logic Data Latch Address Latch Address Latch Program Memory Data Latch
L i t e r a l
D a t a 16 16 16
16 Data Latch Address Latch 16 X RAM Y RAM 16 Y Data Bus X Data Bus DSP Engine Divide Support 16 Control Signals to Various Blocks ADC1 Timers PORTB Address Generator Units 1-5 CNx UART1, 2 OC/ PWM1-4 DCI Remappable Pins DMA RAM DMA Controller PORTC SPI1, 2 ECAN1 DAC1 Comparator 2 Ch. RTCC PMP/ EPSP
CREAR NUEVO PROYECTO EN MPLAB IDE MPLAB IDE es un software propio de Microchip, el cual permite seleccionar los distintos DSC soportados para su programacin. Una vez instalados el software MPLAB IDE, Compilador C30 y PICkit 2, se listan a continuacin los pasos para la creacin de un nuevo proyecto, compilacin del proyecto (creacin del archivo .HEX) y programacin 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) !"#$%&$'( *+ ,'-."'%."&. !".$+('/&+0%. 1&2&%'3 *+ 4+5'3+( 6'$73%'* *+ 8&+0$&'(9 :;4,!
K
" 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 >.
" 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 creacin del nuevo proyecto, se crea un nuevo archivo. (File ! New).
" En esta nueva ventana se escribir el cdigo de nuestro programa, el cual coloca en un valor alto los bits 0 y 1 del puerto A. El cdigo se describe a continuacin: #include <p33FJ128GP802.h> // Define el modelo del dsPIC
TRISA=0X0000; // Configura el puerto A como salida. // 0-Salidas; 1-Entradas LATAbits.LATA0=1; //Encendemos los bits 0 y 1 del puerto A !"#$%&$'( *+ ,'-."'%."&. !".$+('/&+0%. 1&2&%'3 *+ 4+5'3+( 6'$73%'* *+ 8&+0$&'(9 :;4,!
M
LATAbits.LATA1=1; } " Guardamos el nuevo archivo con la extensin .c
" En el men Project, se escoge Add files to Project y selecciona el archivo previamente guardado con la extensin .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
" Despus de compilar, se habr creado el archivo .HEX, el cual se descarga al dsPIC a travs de la comunicacin PICkit 2/MINIPROG+.
SISTEMA MNIMO DE CONEXIN Para trabajar con el dsPIC33FJ128GP802, se requiere una conexin mnima antes de iniciar cualquier proyecto. En la figura 1, se muestra el esquema de conexin de cada uno de los pines necesarios para la programacin del dispositivo. La mayora de los pines son multiplexados, por lo que durante la programacin los pines conectados a ICSP+ se emplean para la descarga del programa. Una vez que se realiz la programacin, stos pines tendrn la funcin que se les asign en el programa.
Figura 1. Esquema mnimo de conexin. PROGRAMACIN DE dsPIC Una vez realizado el esquema mnimo de conexin, se proceder a grabar el dispositivo, lo cual se realiza a travs de la conexin entre el software PICkit 2 y el programador universal MINIPROG+, ya que a travs 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 programacin. Para la serie dsPIC33F la programacin se realiza a travs del puerto ICSP+.
Un esquema general de la conexin del programador a travs de ICSP+ (In Circuit Serial Programming) se muestra en las figura 3.
Figura 3. Esquema de Conexin ICSP+ El dsPIC33FJ128GP802, tiene 3 canales para ser programado, por lo que se deben identificar los pines correspondientes para realizar la conexin adecuada con el programador. En la figura 4 se muestra el esquema de conexin utilizando el canal 1 (PGEDx, PGECx).
Figura 4. Conexin ICSP+!dsPIC33FJ128GP802.
Nota: Retirar el voltaje de alimentacin del dsPIC cuando se vaya a programar el dispositivo, ya que se puede dejar la conexin mnima al momento de programar el circuito mediante el ICSP+.
PICkit 2 v2.61
Con el software PICkit 2, podemos programar el dsPIC, conectando a travs del puerto USB el programador MINIPROG+. En las siguientes imgenes se muestra el procedimiento para cargar el programa al dsPIC. !"#$%&$'( *+ ,'-."'%."&. !".$+('/&+0%. 1&2&%'3 *+ 4+5'3+( 6'$73%'* *+ 8&+0$&'(9 :;4,!
EH
Una vez conectado el puerto ICSP+ a los pines correspondientes del dsPIC, se ejecutar el programa PICkit 2. Si se realiza correctamente la conexin entre programador y dsPIC, nos mostrar la siguiente imagen.
Adems de mostrar las caractersticas del dispositivo, aparecen las opciones de leer, borrar y programar el dispositivo, cabe mencionar que el software automticamente asigna el valor de voltaje de programacin, 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 opcin write para que sea cargado el programa al dsPIC.
Si la programacin 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 conectarn 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.
BIBLIOGRAFA A continuacin se listan los enlaces de donde se pueden descargar de manera gratuita los diversos programas y manuales necesarios para la programacin del dsPIC33FJ128GP802. MPLAB IDE v8.89 http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocNa me=en023073 Compilador C30 versin estudiante http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocNa me=en536656 Pickit2 v2.61 http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocNa me=en023805 Datasheet dsPIC33FJ128GP802 http://ww1.microchip.com/downloads/en/devicedoc/70292d.pdf Manual De Compilador C30 http://ww1.microchip.com/downloads/en/devicedoc/c30_users_guide_51284f.pdf
Manual de PICkit 2 http://ww1.microchip.com/downloads/en/DeviceDoc/51553B.pdf
OBJETIVO: configurar los puertos como entradas o salidas, y de acuerdo a un pin de entrada, decidir el estado lgico 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 (cermicos). 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 cdigo de programa proporcionado, compilarlo y programar el dsPIC. 2. Realizar la conexin proporcionada en la figura 6. 3. Verificar los resultados
DESCRIPCIN DEL PROGRAMA
El programa consiste en leer el bit 0 del puerto A, cuando est a 0 lgico, estarn activados los bits 11 y 12 del puerto B, de lo contrario, los bits 11 y 12 tendrn un 0 lgico.
#include <p33FJ128GP802.h> // Incluir librera 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; // Configuracin de los puertos TRISB=0X0000; // Puerto A como entradas y B como salidas AD1PCFGL=0XFFFF; // Configuracin 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 !"#$%&$'( *+ ,'-."'%."&. !".$+('/&+0%. 1&2&%'3 *+ 4+5'3+( 6'$73%'* *+ 8&+0$&'(9 :;4,!
EC
LATBbits.LATB12=0; // Pone a '0' bits 11 y 12 del puerto B } } } Al sistema mnimo de conexin del dsPIC, se deben agregar los componentes mostrados en la figura 6.
Figura 6. Esquema de conexin para la prctica 1.
RESULTADOS Las figura 7 nos muestra la conexin completa para la realizacin de esta prctica.
Figura 7. Conexin de componentes para la prctica 1. En la figura 8 se muestran activos los leds, debido a que en la entrada se presenta un 0 lgico. En esta prctica 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. !"#$%&$'( *+ ,'-."'%."&. !".$+('/&+0%. 1&2&%'3 *+ 4+5'3+( 6'$73%'* *+ 8&+0$&'(9 :;4,!
EI
BIBLIOGRAFA Enseguida se presentan enlaces donde el estudiante puede encontrar diversos ejemplos de aplicaciones para entradas/salidas del dsPIC.
OBJETIVO: configurar el temporizador para generar tiempos muertos o retardos. INTRODUCCIN 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 configuracin del temporizador es necesario definir F CY (Frecuencia de Instruccin), la cual est definida por: ! !" ! ! !"# !
donde F OSC representa la frecuencia de oscilacin, la cual est determinada por el oscilador externo del dsPIC, y que estara dada por ! !"# ! !"!"#. 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 (! !" !!!. 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 prctica, se calcular un retardo de 20 ms: ! !"# ! !" !"# ! !" ! !" !"# ! ! !" !"# Prescaler: 256 ! ! !" ! !"!!"#!!!" Por lo que podemos calcular el valor deseado del temporizador de la siguiente manera: !!!!! !" !!!!!"! !"#!! !" !" ! ! ! !"#! !" 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 configuracin de la frecuencia de oscilacin, se dividi mediante el prescaler, pero cabe hacer mencin que existe dentro del dsPIC un multiplicador (PLL) que tambin permite incrementar la frecuencia de oscilacin.
MATERIAL 1 dsPIC33FJ128GP802. 1 Resistencia de 10 k". 1 Cristal de 20MHz. 2 Capacitores de 30#F (cermicos). 1 Capacitor de 4.7 $F (tantalio de preferencia). 1 Protoboard. 1 Osciloscopio 1 Fuente de CD de 3.3Volts ACTIVIDADES 1. Armar el sistema mnimo del dsPIC. 2. Cargar al dsPIC el programa proporcionado en la prctica. 3. Visualizar en osciloscopio la salida (RB13). 4. Realizar el clculo 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).
DESCRIPCIN DEL PROGRAMA El cdigo de programa que a continuacin se presenta, nos permite generar un cambio de estado 0 1 lgico 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
void retardo_ms (void); // Definen las funciones int main (void);
// * * * P R O G R A M A * * * int main(void) { TRISB=0B1101111111111111; // Configura bit13 del puerto B como salida while(1){ LATB=0B0010000000000000; // Pone a '1' bit13 retardo_ms(); // Llama funcin de retardo LATB=0X0000; // Pone a '0' bit13 retardo_ms(); // Llama funcin de retardo } } //**** Funcin Retardo **************** void retardo_ms( void ){ // Funcin de retardo T1CON = 0; // Resetear el timer TMR1 = 0; !"#$%&$'( *+ ,'-."'%."&. !".$+('/&+0%. 1&2&%'3 *+ 4+5'3+( 6'$73%'* *+ 8&+0$&'(9 :;4,!
EM
IPC0bits.T1IP = 1; // Interrupcin con prioridad 1 PR1 = 781.25; // Valor en el registro (retardo de 20ms) IFS0bits.T1IF = 0; // Interrupcin cuando llega a 0 IEC0bits.T1IE = 0; T1CON = 0X8030; // Prescaler 1:256 while(IFS0bits.T1IF==0); } RESULTADOS En la figura 9, se puede visualizar la salida del dsPIC (RB13) y la generacin 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
BIBLIOGRAFA En los siguientes enlaces, se presenta teora, prctica y configuracin 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
OBJETIVO: Comprender el concepto de interrupciones y su nivel de prioridad. INTRODUCCIN Una interrupcin es una seal interna o externa recibida por el dsPIC, la cual indica que se debe "interrumpir" el curso de ejecucin actual (suspensin temporal) y pasar a ejecutar una subrutina. Una vez finalizada la subrutina de interrupcin, se contina con la ejecucin del programa principal. Cuando existen varias peticiones de interrupcin a la vez, se establece un nivel de prioridad para cada una de ellas. El dsPIC de acuerdo al nivel de interrupcin, ejecutar cada una de ellas, atendiendo primero a la de mayor nivel de prioridad hasta atender cada una de las peticiones de interrupcin. Una vez completadas las interrupciones, regresar a la lnea del programa donde se encontraba antes del llamado de la interrupcin. MATERIAL 1 dsPIC33FJ128GP802. 1 Resistencia de 10 k". 1 Resistencia de 1 k". 1 Cristal de 20MHz. 2 Capacitores de 30#F (cermicos). 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. Al sistema mnimo, agregar las conexiones mostradas en la figura 10. 2. Cargar al dsPIC el programa proporcionado en la prctica. 3. Visualizar la salida del programa sin ejecutar la interrupcin. 4. Visualizar la salida del programa al ejecutar INT0.
DIAGRAMA ESQUEMTICO
Para la realizacin de la prctica, al sistema mnimo de conexiones del dsPIC agregar los siguientes componentes:
DESCRIPCIN DEL PROGRAMA El siguiente programa realiza dos procesos. El proceso principal consiste en generar una secuencia alterno de estados lgicos (encendido/apagado del led de 5 mm) cada 1.2 segundos (1,200 ms); una vez que se habilita la interrupcin (accionamiento del Push- Button), 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 interrupcin, se regresar al proceso principal.
int main(void); // Declaracin de funciones void retardo_ms( unsigned int ms ); void interrupcion(void);
// / / / / / / PROGRAMA PRINCIPAL / / / / / / / / / / /
int main(void){ while(1){ // Ciclo del programa TRISB=0x5FFF; // bit 13 y 15 como salida LATBbits.LATB13=1; // '1' bit 13 retardo_ms(1200); LATBbits.LATB13=0; // '0' bit 13 retardo_ms(1200); interrupcion(); } } void __attribute__((__interrupt__)) _INT0Interrupt(void){ //Proceso de interrupcin
LATBbits.LATB15=0; // '0' en RD3 IFS0bits.INT0IF = 0; // Salida de la funcin } void interrupcion( void ) { // Configuracin de la interrupcin
INTCON2bits.INT0EP = 1; IPC0bits.INT0IP = 4; IEC0bits.INT0IE = 1; // Habilita Interrupcin } void retardo_ms( unsigned int ms ){ unsigned int periodo=0; T1CON =0; TMR1 = 0; // Timer comienza en 0 IPC0bits.T1IP =1; periodo= (( fcy/256)*ms)/1000; PR1= periodo; // Tiempo en el registro del timer IFS0bits.T1IF=0; // Limpia bandera del timer IEC0bits.T1IE=0; // Deshabilita timer T1CON=0x8030; // configura TICON while(IFS0bits.T1IF==0); }
RESULTADOS En la figura 11, se puede observar las conexiones necesarias para la realizacin de la prctica. Los leds nos permitirn visualizar la ejecucin del programa principal (led de 5mm, RB13) y cuando se ejecute la interrupcin se visualizar mediante el led de 10mm, conectado a RB15.
Figura 11. Conexin en protoboard para la prctica 3. La figura 12 nos muestra la ejecucin del programa principal, el cual consiste en un encendido/apagado del led de 5mm cada 1.2 seg.
Figura 12. Muestra de la ejecucin del programa principal. !"#$%&$'( *+ ,'-."'%."&. !".$+('/&+0%. 1&2&%'3 *+ 4+5'3+( 6'$73%'* *+ 8&+0$&'(9 :;4,!
=E
Mientras tanto, la figura 13 muestra la ejecucin de la subrutina de interrupcin (encendido del led de 10mm, RB15). Una vez que se concluye la subrutina, se regresa a la ejecucin del programa principal.
Figura 13. Activacin de la interrupcin mediante un push-button.
BIBLIOGRAFA Para ms aplicaciones, niveles de interrupcin y ejemplos de programacin, se proporciona la siguiente lista de pginas electrnicas 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-the- dspic30f4011/
OBJETIVO: realizar la conversin de seales analgicas en seales digitales, utilizando el ADC interno del dsPIC, con resolucin de 10 y 12 bits. INTRODUCCIN El convertidor Analgico/Digital (ADC), es un circuito que toma valores analgicos de tensin y los convierte en una palabra binaria. Los valores que definen los lmites de las tensiones a medir se denominan voltajes de referencia, y se representan por V REF- (el mnimo) y V REF+ (el mximo). La resolucin del convertidor queda determinada por la cantidad de bits que representan el resultado de la conversin. El dsPIC33FJ128GP802 tiene dos convertidores analgico/digital, uno con resolucin de 10 bits y el otro de 12 bits. Un ADC de n bits puede representar hasta 2 n valores digitales, de modo que a la entrada analgica igual a V REF- se le asignar el valor 0 digital, y la entrada igual a V REF+ le asignar el valor 2 n 1 digital. Entre V REF- y V REF+ se pueden presentar un nmero infinitos de valores analgicos, pero con n bits, solo se pueden formar 2 n valores discretos diferentes. Por lo tanto habr valores analgicos que no podrn ser representados con exactitud (error de cuantizacin). La diferencia entre dos valores analgicos correspondientes a dos valores digitales consecutivos se define como la resolucin de voltaje del ADC.
!"#$%&'($) !"# !"# ! ! !"#! !! !"#! ! ! !!
Para la realizacin de esta prctica se considera el ADC con resolucin de 12 bits, donde ! !"#! ! ! !"#$% y ! !"#! ! !!! !"#$%, por lo que la resolucin del ADC ser de 0.805 mV. Si se considera el ADC de 10 bits, se tendra una resolucin de 3.22 mV. MATERIAL 1 dsPIC33FJ128GP802. 1 Resistencia de 10 k". 1 Cristal de 20MHz. 2 Capacitores de 30#F (cermicos). 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 mnimo, agregar las conexiones mostradas en la figura 14. !"#$%&$'( *+ ,'-."'%."&. !".$+('/&+0%. 1&2&%'3 *+ 4+5'3+( 6'$73%'* *+ 8&+0$&'(9 :;4,!
=C
2. Cargar al dsPIC el programa proporcionado en la prctica. 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 ESQUEMTICO
Para la realizacin de la prctica, al sistema mnimo de conexiones del dsPIC agregar los siguientes componentes:
Figura 14. Esquema de conexin para la prctica 4.
DESCRIPCIN DEL PROGRAMA El programa lee una entrada analgica de 0 3.3 Volts en CD (V REF+ ), la cual es convertida en seal digital con resolucin de 12 bits mediante el ADC interno del dsPIC. Una vez realizada la conversin, el dato es enviado al puerto B donde se puede visualizar de manera digital a travs de los leds. #include <p33FJ128GP802.h>
int main(void); // Declaracin de funciones void retardo_ms( unsigned int ms ); void adc (void);
// / / / / / / PROGRAMA PRINCIPAL / / / / / / / / / / /
int main(void){ TRISB=0X0000; // Puerto B como salida adc(); // Llama funcin adc AD1CON1bits.ADON = 1; // Habilita ADC
while(1){ AD1CON1bits.SAMP = 1; // Bit para habilitar muestreo retardo_ms(3); // Tiempo para realizar el muestreo AD1CON1bits.SAMP = 0; // Retiene dato
while(!AD1CON1bits.DONE); //Se ha realizado la conversin? PORTB=ADC1BUF0; // Datos se guardan en ADC1BUF0 y se enva al puerto B } } // / / / / / / CONFIGURACION DEL ADC / / / / / / / / / void adc (void){
TRISA = 0x0001; // Entrada analgica RA0 AD1PCFGL = 0x0000; // Todas entradas analgicas AD1CON1bits.AD12B=1; // 1=12 bits resolucin y muestreo secuencial // de los canales; 0= 10 bits ADC AD1CON1bits.ASAM=0; // El muestreo inicia cuando bit SAMP=1 AD1CON1bits.SSRC=0; // Termina el muestreo e inicia la conversin
AD1CHS0bits.CH0NA =0; // La entrada negativa ser Vss AD1CHS0bits.CH0SA =0; // Entrada positiva ser AN0
AD1CON2bits.CSCNA =0; // Muestreo secuencial (scan) deshabilitado AD1CON2bits.VCFG =0; // Referencia para la conversin: Referencia //positiva=AVdd, Negativa=AVss
AD1CON2bits.BUFM =0; // Configurado como buffer de 16 palabras AD1CON2bits.SMPI =0; // Despus de la conversin se genera la interrupcin AD1CON2bits.ALTS =0; // Solo muestra un Canal
AD1CON3bits.ADRC =0; // Reloj del ADC es derivado del sistema AD1CON3bits.ADCS =21; // Tiempo de conversin. } void retardo_ms( unsigned int ms ){ unsigned int periodo=0; T1CON =0; TMR1 = 0; // Reset Timer IPC0bits.T1IP =1; periodo=((fcy/256)*ms)/1000; PR1= periodo; // Tiempo en el registro del timer IFS0bits.T1IF=0; // Limpia bandera del timer IEC0bits.T1IE=0; // Deshabilita timer T1CON=0x8030; // configura TICON = 0100000000110000 while(IFS0bits.T1IF==0);
RESULTADOS En la figura 14, se muestra el esquema completo de conexin con una entrada analgica de 0 volts.
Figura 14. Conexin en protoboard para la prctica 4. La figura 15 muestra el valor digitalizado cuando se tiene una entrada analgica de 0.5 Volts, cabe mencionar que el bit menos significativo est en el lado izquierda de la figura.
Figura 15. Conversin para una entrada analgica de 0.5 Volts. !"#$%&$'( *+ ,'-."'%."&. !".$+('/&+0%. 1&2&%'3 *+ 4+5'3+( 6'$73%'* *+ 8&+0$&'(9 :;4,!
=L
Finalmente, la figura 16 muestra una entrada analgica de 1.6 Volts en RA0, y la figura 17 cuando se tienen la mxima entrada aceptada en RA0 (3.3 Volts).
Figura 16. Conversin digital de una entrada analgica de 1.6 Volts
.
Figura 17. Conversin digital de una entrada analgica de 3.3 Volts
BIBLIOGRAFA En los siguientes enlaces se presenta la teora y prcticas acerca de la conversin analgica/digital. Como tema importante se describe el Criterio de Nyquist que es fundamental para la digitalizacin de seales. 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-del- avr.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
OBJETIVO: realizar la conversin analgica/digital de una seal y enseguida digital/analgica, al conectar en serie los procesos ADC DAC, y de esta manera comprobar el criterio de Nyquist. INTRODUCCION En el proceso de conversin Analgica/Digital Digital/Analgica de una seal, se deben considerar dos aspectos muy importantes: el muestreo y la cuantizacin de la seal. Durante estos procesos, se toman muestras y se cuantizan de acuerdo a la resolucin del convertidor, por lo que estas operaciones nos pueden restringir la informacin que se transmite de forma digital. La consideracin fundamental en el muestreo depende de que tan rpido o durante que intervalo de tiempo se pueda extraer informacin de la seal, tal que ms adelante sea posible reconstruir la seal sin tener prdidas de su comportamiento dinmico. En la figura 18 se muestra de manera general como se realiza el muestreo de una seal.
Figura 18. Muestreo de una seal x(t) cada T seg. TEOREMA DE NYQUIST El teorema de Nyquist establece que la reconstruccin de una seal x(t) a partir de sus muestras x[k], es posible si la seal es muestreada al doble de su ancho de banda (al menos). Por ejemplo, Si la frecuencia ms alta contenida en la seal analgica !!!! es ! !"# , entonces para recuperar la seal !!!! debemos de muestrear a una tasa F s que cumpla ! ! ! !! !"# . Cuando la frecuencia de muestreo no cumple el criterio de Nyquist, se produce el fenmeno conocido como aliasing o traslape, a travs del cual una seal de alta frecuencia es interpretada como una seal de baja frecuencia. x(t) t 0 T=Tiempo de muestreo x[0] x(T)=x[1] x(2T)=x[2] x[3] x[4] x[-1] x[-2] !"#$%&$'( *+ ,'-."'%."&. !".$+('/&+0%. 1&2&%'3 *+ 4+5'3+( 6'$73%'* *+ 8&+0$&'(9 :;4,!
=J
Figura 19. Seales muestredas que describen el fenmeno de traslape: x 1 (t) # 3 Hz, x 2 (t) # 13 Hz, y F s =10 Hz. MATERIAL 1 dsPIC33FJ128GP802. 1 Resistencia de 10 k". 1 Cristal de 20MHz. 2 Capacitores de 30#F (cermicos). 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 mnimo, agregar las conexiones mostradas en la figura 20. 2. Cargar al dsPIC el programa proporcionado en la prctica. 3. Configurar la seal de entrada por medio del generador de funciones, para establecer una seal senoidal positiva con amplitud de 3V pp (0.15 Volts a 3.15 Volts) y f = 1KHz. Esta seal se introduce en la entrada analgica del dsPIC (AN4). 4. En el osciloscopio visualizar la seal de entrada, as como la salida (DAC1RP). 5. Visualizar la salida cuando se realiza un barrido de frecuencia en la seal de entrada desde 100 Hz hasta 1MHz. 6. Conclusiones.
DIAGRAMA ESQUEMTICO
Para la realizacin de la prctica, al sistema mnimo de conexiones del dsPIC agregar los siguientes componentes: 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1 tiempo (seg) T=0.1 seg Fs=10 Hz x 1 (t) x 2 (t) x[k] !"#$%&$'( *+ ,'-."'%."&. !".$+('/&+0%. 1&2&%'3 *+ 4+5'3+( 6'$73%'* *+ 8&+0$&'(9 :;4,!
CH
Figura 20. Esquema de conexin para la prctica 4.
DESCRIPCIN DEL PROGRAMA El siguiente programa realiza la conversin de una seal analgica, e inmediatamente la reconstruye mediante un proceso secuencial Analgico/Digital Digital/Analgico, 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 informacin, la cual se ver reflejada en la salida como una seal 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"
PLLFBD=41; // Configuracin de dsPIC a 40MIPS CLKDIVbits.PLLPOST=0; // N1=2 CLKDIVbits.PLLPRE=0; // N2=2 OSCTUN=0; RCONbits.SWDTEN=0; // Deshabilita WatchDog Timer __builtin_write_OSCCONH(0x01); // Habilita reloj con PLL __builtin_write_OSCCONL(0x01); // Comienza reloj
while (OSCCONbits.COSC != 0b001); // Espera para cambio de reloj while(OSCCONbits.LOCK!=1) {};
initAdc(); // Inicializa funciones initDac(); initDma0(); initTmr3(); // Timer para muestreo de la seal !"#$%&$'( *+ ,'-."'%."&. !".$+('/&+0%. 1&2&%'3 *+ 4+5'3+( 6'$73%'* *+ 8&+0$&'(9 :;4,!
CE
extern fractional BufferA[NUMSAMP]; // Configura buffer A extern fractional BufferB[NUMSAMP]; // Configura buffer B extern unsigned int DmaBuffer; // Habilita DMA extern int flag; // Bandera de DMA int i; // 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
RESULTADOS En las siguientes figuras se observa el proceso de conversin ADC - DAC cuando se tiene una entrada senoidal, triangular y cuadrada con frecuencias de 1KHz en las 3 seales. Cul sera la frecuencia de muestreo que se mide experimentalmente al variar la frecuencia de entrada de 100 Hz a 1 MHz?
Figura 21. Conversin en serie ADC-DAC para una seal senoidal. 4'3&*' B0%"'*' !"#$%&$'( *+ ,'-."'%."&. !".$+('/&+0%. 1&2&%'3 *+ 4+5'3+( 6'$73%'* *+ 8&+0$&'(9 :;4,!
CC
.
Figura 21. Conversin en serie ADC-DAC para una seal triangular.
Figura 22. Conversin en serie ADC-DAC para una seal cuadrada.
BIBLIOGRAFA En los siguientes enlaces se presenta la teora del criterio de Nyquist, ejemplos de programacin y referencia de los registros utilizados para la realizacin de esta prctica. 1. http://tintoretto.ucsd.edu/jorge/teaching/mae143a/lectures/8sampling.pdf 4'3&*' B0%"'*' 4'3&*' B0%"'*' !"#$%&$'( *+ ,'-."'%."&. !".$+('/&+0%. 1&2&%'3 *+ 4+5'3+( 6'$73%'* *+ 8&+0$&'(9 :;4,!