Anda di halaman 1dari 16

UNIVERSIDADMODELO

ESCUELADEINGENIERA MAESTRAENMECATRNICA Transferenciayprocesamientodedatosaaltavelocidad,medianteelusodeMATLAB,elpuerto USB2.0yPIC18F2455deMicrochip PRESENTA: ING.GABRIELJESSPOOLBALAM PARALAMATERIA: DISEOMECATRNICO PROFESOR: DR.ALEJOMOSSOVAZQUEZ MRIDA,YUCATNA4DEJULIODE2009

Agradecimientos: Al Centro de Investigacin cientfica de Yucatn A. C. (www.cicy.mx ) sobre todo al departamento de Instrumentacin representado por Ing. Leonardo Gus Peltinovich por su apoyo para la realizacin destetrabajo. JUNIO2009

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip2/15

RESUMEN MATLAB ("matrix laboratory") es un software de computacin y desarrollo de aplicaciones, diseado para llevar a cabo proyectos que impliquen clculos matemticos de nivel elevado y su representacin grfica. MATLAB integra anlisis numrico, clculo matricial, proceso de seal y visualizacin grfica en un entorno tal que los problemas y sus solucionessonexpresadosdelmismomodo enqueseescribiran,sinnecesidaddehacer usodelaprogramacintradicional.MATLAB es capaz de manejar libreras y dlls de diferentesdispositivosinstaladosenlaPC. Microchip proporciona en su pginaweblosdriversyarchivosnecesarios para establecer la comunicacin por puerto USB con la familia del PIC18F2455. A travs deellossepuedeefectuartransaccionesde hasta 64 bytes por paquete cada milisegundo, por cada tnel abierto. El PIC es programado mediante PCWH Compiler de CCS, versin 3.246. Los descriptores utilizados para la comunicacin USB estn basados en los archivos que contiene el propiocompilador. Enestetrabajosemuestraque,con estasherramientasymanipulandoelarchivo mpusbapi.dll, se puede transferir datos a alta velocidad del PIC18F2455 a la PC de manera bidireccional, con la finalidad de procesarlos matemticamente y/o graficarlos.Unejemplodeestaaplicacinse muestra en este trabajo, y consiste en la obtencin de curvas de arranque de motores de CD sin carga, a efectos de su

caracterizacincomopasoprevioaldiseoo seleccindesucontrolador. INTRODUCCIN Hoy en da, la miniaturizacin de componentes electrnicos, la disminucin desuconsumodecorrienteyeltamaode los semiconductores, permite la construccin de circuitos ms complejos, inteligentes y eficientes. No ha sido la excepcin con el microcontrolador, ya que ste se ha desarrollado notablemente, al puntodehacermsgrandesuscapacidades de comunicacin, memoria, circuitos de apoyo adicionales (ADC, oscilador interno, puertos, etc.). Dichos microcontroladores, requieren de muy poco componentes de soporte externo para implementarse y sus tecnologas se han perfeccionado, de tal manera, que casi no fallan. Algunos fabricantes tal como Microchip, se preocupan en desarrollar las herramientas parasuprogramacin,talescomolenguajes de alto nivel para compilar el programa y programadores econmicos para descargar el programa en el chip. Debido a stas herramientas, ste chip se ha vuelto muy popular al grado que se proponen como materiasacursarenlasescuelas. Porotrolado,yanobastacontenerun chip inteligente que funcione de manera autnoma, ahora se requiere que trabajen enconjuntoconlaPCespecialmentedonde serequierenimportardatosdeeventosmuy rpidos como por ejemplo: El arranque de unmotor(velocidadconrespectoaltiempo) que tiene una duracin aproximada de 1 dcima de segundo. Esto se puede lograr coneldesarrollodeunsoftwarecomoVisual

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip3/15

Basic, Visual C, C++, cualquier otro paquete de preferencia grfico para hacer ms fcil la interfaz de usuario. Desafortunadamente, cuando se requieren procesar matemticamente stos datos (graficarlos, aplicar operaciones de estadstica, procesar con filtros digitales, etc.),sevuelveliteralmenteimposible. ConMATLABseresuelveeseproblema, peroexisteundetalle,elhechodeimportar los datos en tiempo real con alguna tarjeta de adquisicin de datos requiere compatibilidadconsteprogramasincontar adicionalmenteconlosrecursoseconmicos para la compra de sta tarjeta. Afortunadamente MATLAB ha evolucionado al grado de que se puede conectar casi con cualquier dispositivo, y su manejo es relativamente fcil e incluye una ayuda en lnea. La finalidad de ste trabajo es desarrollar una comunicacin entre un micro controlador y ste software para el tratamiento de datos de manera ms econmica y sin algn software ejecutable quesirvadeintermediario. ANTECEDENTES

Fig.1TopologadelBUS Elhubesunelementoplugandplayen la estructura USB (Figura 2) y es un concentrador al cual, se le pueden agregar msdispositivosUSB,incluyendootrohub. La velocidad de transferencia depende de la velocidad del HUB que se est utilizando. Ver figura 3. Las velocidades tpicas son: 480Mb /s en high speed, 12Mb/sfullspeedy1.5Mb/senLowspeed.

1.LAARQUITECTURADELPUERTOUSB Fig.2HUBUSB A pesar de que el puerto USB nos ofrece ms ventajas que sus predecesores, su complejidad para implementarlo es enorme, ya que su funcionamiento est basadoenprotocolosdesoftware. SlopuedehaberunHostenelbusque maneja a todos los componentes conectadoscomoseindicaenlafigura1. Fig.3MltiplevelocidadenunBUS

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip4/15

Elcablequetpicamenteesusadonoes largo,debidoalavelocidaddetransferencia ytienelaestructuramostradaenlafigura4. Sus terminales son del tipo diferencial y constade4hilos. Fig.4CableUSB La arquitectura USB comprende cuatro tiposbsicosdetransferenciadedatos: Control Transfers: Es usado para configurarundispositivoalmomentodeque se conecta. Los datos entregados pueden perderse. Bulk Data Transfers: Entrega el dato por volumen,elanchodebandapuedevariar.Es usado en escner cmaras. La rfaga de datosessecuencial. Interrupt Data Transfers: Used for timely but reliable delivery of data, for example, characters or coordinates with human perceptible echo or feedback response characteristics. Isochronous Data Transfers: Occupy a prenegotiated amount of USB bandwidth with a prenegotiated delivery latency. (Also calledstreamingrealtimetransfers). Aunque el PIC no puede funcionar como host, ya que se requiere de una gran capacidad de manejo de datos para administrar a cada componente del BUS, es suficiente que se pueda administrar como un device, para esto se requiere memorizarle los protocolos necesarios paraenlazarsealhost.

Estos protocolos se le llaman descriptores y sirve para informarle al host todo lo necesario para que pueda administrarlo. Recordemos que los PICs de la serie 18Fxx5x tienen tres modos de funcionamiento: 1. USB Human Interface Device (HID): Velocidad Baja, no requieredriver. USB Communication Device Class (CDC): Velocidad Media, requiere driver. Crea un Puerto SerieVirtual. USB Custom Driver: Velocidad Alta, requiere driver. Este es el modo que usa WinUSB (para windows vista) y el mpusbapi (windows2000yposterior).

2.

3.

Dentro de los protocolos hay que especificareltipodetransferenciadedatos ausar(endpoints),VID&PID,nombreyserie del producto que se conecta para que el host identifique al driver y pueda instalarlo conelfindequeeldispositivopuedaformar las pipes tneles para su comunicacin conelhost(verfigura5). Fig5.FlujodecomunicacinUSB

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip5/15

2.LAMPUSBAPI.DLLDEMICROCHIP Para una mayor facilidad de desarrollo de aplicaciones basadas en el bus USB, Microchiphacreadounarchivodllenelque proporciona las funciones de acceso al puerto USB con un microcontrolador de la familia PIC18Fxx5x. Para un funcionamiento correcto,senecesitaeldrivermchpusb.sys. Este driver sirve tanto para Visual Basic comoparaVisualC,entreotros. Revisandoejemplos,ylaayudaquetrae incluidasobreelmanejodeladllseverifica queelmododeabrirlapipeeselsiguiente: Primero se identifica si hay un dispositivo con el nombre VID&PID conectadoalaPCconlainstruccin: (*MPUSBGetDeviceCount)(PCHAR pVID_PID) La variable pVID&PID, es una entrada de cadenadecaracteresquedacomoresultado el nmero de dispositivos conectados al Host, que tienen asignado el mismo pVID&PID. Seguidamente con la instruccin (*MPUSBOpen) (DWORDinstance,//Input PCHARpVID_PID,//Input PCHARpEP,//Input DWORDdwDir,//Input DWORD dwReserved); // Input <Future Use> Esta instruccin devuelve el acceso al pipe delEndpointconelVID_PIDasignado.Todas las pipes se abren con el atributo FILE_FLAG_OVERLAPPED contenida en la

DLL, sto permite que MPUSBRead, MPUSBWrite y MPUSBReadInt tengan un valordetimeout. Nota:elvalordeltimeoutnotienesentido enunapipesncrona. instance: Input: Un nmero de dispositivo para abrir. Normalmente, se utiliza primero la llamada de MPUSBGetDeviceCount para sabercuantosdispositivoshay. Esimportanteentenderqueeldriver lo comparten distintos dispositivos. El nmero devuelto por el MPUSBGetDeviceCounttienequeserigualo menor que el nmero de todos los dispositivos actualmente conectados y usando el driver genrico. Ejemplo: Si hay tres dispositivos con los siguientes PID_VID conectados: Dispositivotipo0,VID0x04d8,PID0x0001 Dispositivotipo1,VID0x04d8,PID0x0002 Dispositivotipo2,VID0x04d8,PID0x0003 y el dispositivo que nos interesa tiene VID=0x04d8 y PID=0x0002 el MPUSBGetDeviceCount devolver un 1. Al llamar la funcin tiene que haber un mecanismoqueintentellamarMPUSOpen() desde 0 hasta MAX_NUM_MPUSB_DEV. Se tiene que contar el nmero de llamadas exitosas. Cuando este nmero sea igual al nmero devuelto por MPUSBGetDeviceCount, hay que dejar de hacer las llamadas porque no puede haber msdispositivosconelmismoVID_PID. pVID_PID: Input: String que contiene el PID&VIDdeldispositivoobjetivo.Elformato es vid_xxxx&pid_yyyy. Donde xxxx es el valordelVIDyelyyyyeldelPID,losdosen hexadecimal.Ejemplo:Siundispositivotiene unVID=0x04d8yunPID=0x000b,elstringde entradaes:vid_0x04d8&pid_0x000b.

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip6/15

pEP: Input: String con el nmero del Endpoint que se va a abrir. El formato es \\MCHP_EPz o \MCHP_EPz dependiendodellenguajedeprogramacin. Donde z es el nmero del Endpoint en decimal.Ejemplo: \\MCHP_EP1 o \MCHP_EP1 Este argumentopuedeserNULL(nulo)paracrear lazos con Endpoints de funciones no especficas. Las funciones especficas que utilizan ste parmetro son: MPUSBRead, MPUSBWrite,MPUSBReadInt. Nota: Para utilizar MPUSBReadInt(), el formato de pEP tiene que ser \\MCHP_EPz_ASYNC.Estaopcinsloest disponibleparaunEndpointinterrupcinIN. Lapipededatosabiertacon_ASYNCdebe almacenar datos con el intervalo especificado en el Endpoint descriptor con un mximo de 100 recepciones. Cualquier otro dato recibido despus de llenar el bufferdeldriverseignora.Laaplicacindel usuario tiene que llamar MPUSBReadInt() a menudosinsuperarelmximode100. dwDir:EspecificaladireccindelEndpoint: MP_READ: para MPUSBRead y MPUSBReadInt MP_Write:paraMPUSBWrite Se abre un pipe a la vez (hay que usar dos vecesstainstruccin),condwDir=1seabre la pipe para leer y con dwDir=0 se abre la pipeparaescribiralPIC,elresultadoquenos arrojastainstruccineselnmerodepipe quenosasignaelsistemaoperativo. dwReserved: No asignado por el momento, elvalorporomisinescero. El formato tpico de la instruccin es: MPUSBOpen(0,vid_pid,out_pipe,dwDir,0)

Como tercer procedimiento, se lee el dato aplicando el nmero de pipe asignado por mediodelainstruccin:(*MPUSBRead) (HANDLEhandle, PVOIDpData, DWORDdwLen, PDWORDpLength, //Input //Output //Input //Output //Input

DWORDdwMilliseconds);

handle:Input:IdentificalapipedelEndpoint que se va a leer. La pipe unida tiene que crearseconelatributodeaccesoMP_READ. En conclusin, handle es el nmero de pipe que nos arroj la instruccin anterior condwDir=1. pData:Output:Punteroalbufferquerecibe eldatoledodelapipe.Elformatodeldato es un arreglo de N bytes, donde N es el nmerodebytesquemanejaeldeviceen elarregloqueenvaalaPC,generalmentese declaraaliniciodelprogramaenelPIC. dwLen:Input:Especificaelnmerodebytes queseesperaleerdelapipe. pLenght: Output: Puntero al nmero de bytes ledos. MPUSBRead pone este valor a cero antes de cualquier lectura o de chequearunerror. dwMilliseconds:Input:Especificaelintervalo de timeout en milisegundos. La funcin vuelve si transcurre el intervalo aunque no se complete la operacin. Si dwMilliseconds=0,lafuncincompruebalos datosdelapipeyvuelveinmediatamente.Si dwMilliseconds es infinito, el intervalo de timeoutnuncatermina.

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip7/15

El formato tpico de la instruccin es: MPUSBRead(myInPipe, VarPtr(s(0)), DatosDeseados,Datos,1000) Para enviar los datos al PIC se hace de la misma manera con la instruccin: (*MPUSBWrite) (HANDLEhandle, PVOIDpData, DWORDdwLen, PDWORDpLength, //Input //Input //Input //Output //Input

dwMilliseconds=0,lafuncincompruebalos datosdelapipeyvuelveinmediatamente.Si dwMilliseconds es infinito, el intervalo de timeoutnuncatermina. El formato tpico de la instruccin es: MPUSBWrite(myOutPipe, VarPtr(SendData(0)), bytes, VarPtr(bytes), 1000) Por ultimo, se requiere cerrar las pipes, porque despus de usarlos caducan, ya no es posible leer / escribir de nuevo. Para cerrarlos basta ejecutar la instruccin: (*MPUSBClose)(HANDLE handle); de donde handle:Input:IdentificalapipedelEndpoint quesevaacerrar. El formato tpico de la instruccin es: MPUSBClose(myOutPipe) Existen otras dos instrucciones que no se implementaron en ste desarrollo, pero es necesarioconocerlos,stasson: MPUSBGETDLLVERSION(VOID) LeeelnivelderevisindelMPUSAPI.dll.Esta funcindevuelvelaversindelcdigodela dll en formato hexadecimal de 32bits, no realizanadaconelpuertoUSB. El formato tpico de la instruccin es: MPUSBGetDLLVersion() MPUSBREADINT(HANDLE, PDATA, DWLEN, PLENGTH,DWMILLISECONDS) handle:Input:IdentificalapipedelEndpoint que se va a leer. La pipe unida tiene que crearseconelatributodeaccesoMP_READ. pData:Output:Punteroalbufferquerecibe eldatoledodelapipe.

DWORDdwMilliseconds);

handle:Input:IdentificalapipedelEndpoint quesevaaescribir.Lapipeunidatieneque crearse con el atributo de acceso MP_WRITE. En conclusin, handle es el nmerodepipequenosarrojlainstruccin anteriorcondwDir=0. pData:Input:Punteroalbufferquecontiene losdatosquesevanaescribirenlapipe.El formato del dato es un arreglo de N bytes, dondeNeselnmerodebytesquemaneja eldeviceenelarregloquerecibedelaPC, generalmente se declara al inicio del programaenelPIC. dwLen:Input:Especificaelnmerodebytes quesevanaescribirenlapipe. pLenght: Output: Puntero que proporciona elnmerodebytesqueseescribenalllamar estafuncin.MPUSBWriteponeestevalora cero antes de cualquier lectura o de chequearunerror. dwMilliseconds:Input:Especificaelintervalo de timeout en milisegundos. La funcin vuelve si transcurre el intervalo aunque no se complete la operacin. Si

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip8/15

dwLen:Input:Especificaelnmerodebytes quehayqueleerdelapipe. pLenght: Output: Puntero al nmero de bytes ledos. MPUSBRead pone este valor a cero antes de cualquier lectura o de chequearunerror. dwMilliseconds:Input:Especificaelintervalo de timeout en milisegundos. La funcin vuelve si transcurre el intervalo aunque no se complete la operacin. Si dwMilliseconds=0,lafuncincompruebalos datosdelapipeyvuelveinmediatamente.Si dwMilliseconds es infinito, el intervalo de timeoutnuncatermina. El formato tpico de la instruccin es: MPUSBReadInt(myOutPipe, VarPtr(SendData(0)), bytes, VarPtr(bytes), 1000) TIPOS DE TRANSFERENCIAS SOPORTADO PORESTASINSTRUCCIONES Enesteapartadoserecomiendaquefuncin utilizar dependiendo del tipo de transferencia. Tipo Funcin Aplicabletimeout? InterruptINMPUSRead,MPUSReadIntsi InterruptOUTMPUSBWrite si BulkINMPUSBRead si BulkOUTMPUSWrite si IsochronousINMPUSBRead no IsochronousOUTMPUSBWrite no Interrupt:tipointerrupcin Isochronous:tiposncrono Nota: Input y output se refiere a los parmetros designados en las llamadas a estas funciones, que son lo opuesto a los

sentidos comunes desde la perspectiva de unaaplicacinhaciendollamadas. DECLARACINDECONSTANTESYVARIABLES Aquaparecenlasconstantesyvariablesque el fabricante recomienda usar. Todas son optativas, dejando la eleccin al programador. Tambin, se comentan las pequeasvariacionesqueexistenaldeclarar estasvariablesenlosdistintoslenguajes. MPUS_FAIL=0 MPUSB_SUCCESS=1 MP_WRITE=0 MP_READ=1 MAX_NUM_MPUSB_DEV=127 vid_pid=vid_04d8&pid_0011 EnVisualBasic: out_pipe=\MCHP_EPx in_pipe=\MCHP_EPy EnCyDelphi: out_pipe=\\MCHP_EPx in_pipe=\\MCHP_EPy Siendo x e y nmeros del Endpoint por los quesevanarealizarlastransmisiones. Estadllsellamadeacuerdoalaconvencin del lenguaje C, NO funciona si es llamada conelformatodeSTDLIB. OBJETIVO El objetivo principal del presente trabajo es integrar el software de MATLAB con el PIC18F2455 de Microchip con el fin de disear una tarjeta de adquisicin de datos ajustada a la necesidad personalizada de cadadesarrollo.

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip9/15

OBJETIVOSPARTICULARES 1. EnlacealaPCmedianteUSB. 2. EnlacedeMATLABalPIC. 3. Pruebasfinalesycorrecciones. 1. ENLACEALAPCMEDIANTEUSB. ParalograrelenlaceaUSBseutilizaron las funciones USB, incorporadas en el lenguaje C del programa CCS para PICS, dichasfuncionesestnpreparadasparaque elmicrocontroladorseareconocidocomoun dispositivo personalizado usando los descriptores queincluyeelmismolenguaje, seestablecilacantidaddedatosa64bytes (8 bits por byte) de envo y recepcin hacia laPC,enlaPCsedescargaeldriverquenos proporciona Microchip en su pgina web. Por parte del Hardware, el mismo compilador trae en la ayuda un diagrama esquemtico para conectar al PIC dispositivos adicionales como teclado, displaygenricosdedoslneasygrficos,el puerto serie, usb, I2C, etc. Si tiene dudas sobre la descarga del driver consulte el apartado 3. Pruebas finales y correcciones enstedocumento. ConfigurandoelHardware

en la seccin #include al inicio del programa. 3. Verifique que la configuracin del PLL corresponda a la Frecuencia del Xtalqueutiliza.Ejemplo: PLL1paraXtalde4Mhz PLL2paraXtalde8Mhz PLL3paraXtalde12Mhz PLL4paraXtalde20Mhz,etc. 4. Abra el archivo C:\Archivos de programa\PICC\Drivers\usb_desc_sc ope.h ( donde se instal el compilador de CCS ) que es el descriptor del USB ubicado en su PC, avance hasta la seccin start devicedescriptors(aproxenlalinea 132) y reemplace los valores del vendor id, el product id y el device releasenumbercomosigue(puede copiar las tres lneas siguiente y pegar en el archivo del descriptor <<usb_desc_scope.h>>): 0xD8,0x04,//vendorid(0x04D8is Microchip) 0x0B,0x00,//productid

1. Conecte el PIC como se muestra en eldiagramaesquemticoalfinaldel documento. 2. Antes de compilar el cdigo de programa<<daq.c>>adjuntoenste archivo comprimido con PCWH Compiler de CCS versin 3.246 posterior,primeroescojaelPICque utilice PIC18F2455/2550/4455/4550

0x01,0x00,//devicereleasenumber 5. Compileelprogramaygrbeloenel PIC(Asegresedequeantesdeabrir el archivo a compilar presione el botn inicio (ubicado en la parte superiorizquierda) Closealldel compilador). NOTA IMPORTANTE: De no completar stospasoslaPCNOdetectaralPIC

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip10/15

ConfigurandoelSoftware 1. LaDLLqueproporcionaMicrochipse puededescargardesdesusitioweb. (www.microchip.com)Asegresede obtenerlaversinmsactual.Enla direccin web que se menciona en la bibliografa se descarga el driver (link de acceso directo), en caso de haber caducado busque en la seccin Aplication and markets USB MCHPFSUSBFrameworK Software/Tools << Microchip Application Libraries v20100209 >> simplemente teclee usb software/tools en la ventanita de bsquedaydleun clicenelbotn site search, generalmente el acceso a la pgina queda en los primerosresultadosdelabsqueda, el cual, al darle click lleva directamentealdriver.Enelmismo paquete incluye ejemplos que incluyen el programa fuente para la compresindesuuso. 2. Ejecute el driver descargado en el paso anterior e instale en la direccin que trae ya predeterminada. Este ejecutable traemuchosejemplosdeaplicacin, entre ellos trae el driver que queda ubicadoen: "C:\MICROCHIPSOLUTIONS\USB TOOLS\MCHPUSBCUSTOM DRIVER\MCHPUSBDRIVER\ RELEASE\" 3. Instale el hardware a la PC de manera similar al que se instala un

dispositivo USB que adquiere en el mercado: conecte al dispositivo a la PC, en cuanto le solicite los driver, sloproporcioneladireccindonde fue descomprimido el driver (la misma direccin del paso anterior). Si todo es correcto debemos de observar en el administrador de dispositivosunnuevohardwareque seagregtalcomosemuestraenla figura 6. NOTA: Si Ud. Olvida no sustituye correctamente en el descriptor las 3 lneas que se comentan en el cdigo del programa, el compilador CCS compilar correctamente pero al conectarse el PIC en la PC, ste no reconocereldriver. Fig.6InstalacindelPICenlaPC

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip11/15

4. En propiedades del dispositivo instalado se puede observar el nmero PID&VID que se configur en el PIC tal como se muestra en la figura7. Fig. 7 En propiedades del PIC instalado enlaPCseobservaelnmerodePID&VID ComentariosAdicionales Todo esto se desarroll basndose en ejemplosqueelcompiladortraeincluidosen la carpeta de examples. Cabe aclarar que los diseos en USB con PIC da a da se van incrementando. Slo basta investigar un poco en la red para ver los resultados (Consulte la bibliografa de ste documento).ElcdigodelprogramadelPIC seencuentraalfinaldeldocumentoconsus respectivoscomentarios. 2. ENLACE DEL MATLAB AL PIC PARA TRANSFERENCIADEDATOS. ParapoderiniciarelenlaceconelPICes necesario que se haya concluido

satisfactoriamentelainstalacindelpaquete de drivers de Microchip. En el mismo paquete que se descarga de la red obtenemosinstruccionesyejemplosenC++ quemuestrancomomanipulareldriverylos parmetros requeridos para aplicarlo. Sin embargo, an no es suficiente la informacin, porque la dificultad est en identificar el tipo de variable que acepta cada software de desarrollo y que tambin seaaceptadaporlaDLL.Porloquedenuevo se sugiere consultar las notas de aplicaciones de Microchip y ejemplos publicados en la web (con cualquier softwarededesarrollo). Para hacer la conexin con MATLAB simplementesecopiaronlasinstrucciones al lenguaje de matlab y se acondicionaron las variables para que la DLL pueda reconocerlo. NOTA: Adjunto a este archivo comprimido se encuentra el cdigo de MATLABusb.mqueesundemodecmoel programa enva y recibe datos del PIC, los archivos _mpusbapi.c y mpusbapi.dll son necesarios para la ejecucin en MATLAB y deben de estar en la misma carpeta que el archivousb.m Seguidamenteseexplicaeldesarrollode la comunicacin. Primero es necesario conocerqufuncindeMATLABesmsfcil deimplementar: Existenvariosmtodos,elqueseutilizfue: a. Manipular directamente la dll con la instruccinLoadlibrary Ya que se manipula la librera de una maneradirectaysinintermediarios.

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip12/15

Para iniciar con la implementacin del cdigo, primero inicie el programa de MATLAB Siguiendo los pasos descritos en la seccin de antecedentes de ste documento, las instrucciones que se requieren implementar tienen la siguiente secuenciayformatoenMATLABson: Primero copie los archivos _mpusbapi.c y mpusbapi.dll en la misma carpeta de trabajo ( se obtienen de la descarga del driver en la pgina de microchip ("Microchip MCHPFSUSB v2.4 Installer.zip")), al instalarse queda ubicado en X:\Microchip Solutions\USB Tools\ MCHPUSB Custom Driver\ Mpusbapi\Dll\Borland_C, en caso de descargar una version de driver ms reciente, reemplace stos archivos por los msnuevos.

vid_pid_norm=libpointer('int8Ptr', [uint8('vid_04d8&pid_000b')0]); d.Seguidamenteabralapipeparaleer(sino desealeerpuedeomitirstepaso). Formato: [my_out_pipe] = calllib('libreria', 'MPUSBOpen',uint8 (0), vid_pid_norm, out_pipe,uint8(0),uint8(0)); Dedonde: vid_pid_norm = libpointer('int8Ptr', [uint8('vid_04d8&pid_000b')0]); out_pipe = libpointer [uint8('\MCHP_EP1')0]); ('int8Ptr',

a.

e. Siguiendo con la secuencia, abra la pipe


para escribir (si no desea escribir puede omitirstepaso). Formato: [my_in_pipe]=calllib('libreria', 'MPUSBOpen',uint8(0),vid_pid_norm, in_pipe,uint8(1),uint8(0)); Dedonde: vid_pid_norm = libpointer('int8Ptr', [uint8('vid_04d8&pid_000b')0]); in_pipe = libpointer [uint8('\MCHP_EP1')0]); ('int8Ptr',

b. Se abre el editor de MATLAB y


comenzamos cargando la librera en memoria. Formato: loadlibrarympusbapi_mpusbapi.halias librera

c.

Luego se identifica el nmero de dispositivosconectadosconelPID&VID y ubicar el que corresponde al hardwaredesudesarrollo.

f. Lea los datos de la pipe (solamente si la


pipeestabierta)Formato: [aa,bb,data_in,dd] = calllib('libreria', 'MPUSBRead',my_in_pipe, data_in, uint8(64),uint8(64),uint8(10)); Dedonde:

Formato: [conectado]=calllib('libreria', 'MPUSBGetDeviceCount',vid_pid_norm) Dedonde:

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip13/15

data_in=eye(1,64,'uint8');

g.Escribalosdatosdelapipe(solamentesi
lapipeestabierta)Formato:: calllib('libreria', 'MPUSBWrite', my_out_pipe, data_out, uint8(64), uint8(64),uint8(10)); Dedonde: data_out=eye(1,64,'uint8'); h.Cierrela(s)pipe(s)abierta(s),cadavezque finalice el programa, ya que si quedan abiertaswindowsgeneraerroresysepierde lacomunicacin. Formato: calllib('libreria', my_in_pipe); calllib('libreria', my_out_pipe); IMPORTANTE: Al terminar el programa descargue la librera de memoria, ya que no se puede cargarmsdeunavez. Formato: unloadlibrarylibrera; Una vez enlazado con el PIC, los datos pueden fluir las veces que sea necesario de un sentido a otro y manipularloscomosedesee,yaquesetiene elcompletocontroldelsoftwaredelPIC(por partedelCompiladorC)yenlaPC(porparte deMATLAB). 'MPUSBClose',

Encasodeperderselacomunicacin conelPIC( encasosdondeelprogramaen MATLAB genere errores por cuestiones ajenas a la comunicacin) desinstale del dispositivo Microchip Custom USB Device desde el administrador de dispositivos, desconecteelPICdelpuertoUSB,descargue lalibreradememoriadesdeelMATLABcon unloadlibrary librera en la lnea de
comandos de MATLAB y resetee el PIC. Conecte de nuevo el PIC al puerto USB de su computadora y con eso es suficiente para restaurar las comunicaciones entre MATLAB y el PIC.

3.Pruebasfinalesycorrecciones. Antes de compilar el programa y grabarlo en el PIC es necesario asegurarse de que antes de abrir el archivo a compilar presione el botn inicio del mismo compilador (ubicado en la parte superior izquierda) Close all . De no hacer esto esposiblequesecompileelarchivoanterior conelqueUdhayatrabajado. ParaelenlaceconlaPCporUSBesmuy importante conectar el capacitor (C4) de 0.1uFcomoseindicaeneldiagrama,yaque, si se omite generar un error al momento del enlace. Tambin es muy importante habilitar el fusible VREGEN para que Vusb seaactivado. CuidardenoinvertirlasterminalesDy D+ del conector USB a la hora de implementarelHardware. Es importante considerar la funcin del PLLdelPICyaquedeacuerdoalvalordela frecuenciadelcristaldependeelvalordela multiplicacindelafrecuenciadelrelojpara generarlos48MhznecesariosparaelUSB.

'MPUSBClose',

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip14/15

Por lo que respecta al descriptor del USB, es importante considerar el valor del VID & PID, ya que si no es configurado correctamente, el driver que proporciona Microchip no lo reconocer y en consecuencia, no funcionar. Para esto no olvide sustituir en el descriptor las 3 lneas quesecomentanenelcdigodelprograma queseanexaenstedocumento. La DLL que proporciona Microchip se puede descargar desde su sitio web. Asegresedeobtenerlaversinmsactual. En el mismo paquete incluye ejemplos que incluyen el programa fuente para la compresindesuuso. Se recomienda verificar el archivo que nos proporciona Microchip en el driver, en la siguientedireccin: "C:\MICROCHIPSOLUTIONS\USB TOOLS\MCHPUSBCUSTOM DRIVER\MCHPUSBDRIVER\MCHPUSB DRIVERRELEASENOTES.HTM" Ah se proporciona informacin sobre la compatibilidad en sistemas operativos y ejemplosdesarrollados. BIBLIOGRAFA http://www.usb.org/developers/docs/ http://slalen.iespana.es/programacion/dato s/MPUSBApi.pdf www.google.com.mxbsquedaPICUSB. http://www.hobbypic.com/ http://www.todopic.com.ar/foros/index.php ?topic=13418.0;do=Bookmark

http://picmania.garcia cuervo.com/index.php Driverdemicrochip:


MicrochipApplicationLibrariesv20100209

http://ww1.microchip.com/downloads/en/d evicedoc/MCHP_App_%20Lib%20v2010_02_ 09_Installer.zip Asegresequeelarchivoseaelmsactual.

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip15/15

SALIDAS
D

+5V +5V D1 R1 10K R2 10K R1 10K R2 10K R2 10K R2 10K 20 C5 0.1uF R4 150 R5 150 R4 150 R5 150 R4 150 R5 150 R4 150 R5 150 D2 D3 D4 D5 D6 D7 D8

RA0 RA1 RA2 RA3 RA4 RA5 +5V


C

2 3 4 5 6 7 R6 10K R7 100 11 1 +5V S1 SW RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7 21 22 23 24 25 26 27 28

RA0 RA1 RA2 RA3 RA4/T0CKI/C1OUT/RCV RC6/TX/CK RA5/SS RC7/RX/DT/SDO RC0/T1OSO/T13CKI MCLR/VPP/RE3 RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 OSC1/CLKI U2 PIC18F2455 RC2 RC1

VDD

RB0

RB1

RB2

RB3

RB4

RB5

RB6

17 18 13 12

Entrada del cable USB _ J1

RB7

J4 1 2 3 4 5 ICSP

OSC2/CLKO/RA6

RC4/D-/VM RC5/D+/VP VUSB GND GND

15 16 14 C4 0.1uF

1 2 3 4

USB

J1-USB D+ D1 3 + + 2 GND + + 4 Vista Inferior

10

19 8

RA0

RA1

RA2

RA3

RA4

J3 POWER SUPPLY +5V 4 3 2 1 C2 2200uF C1 1000uF +12V

C7 22pF

C8 22pF S1 SW S1 SW S1 SW S1 SW S1 SW S1 SW

ENTRADAS

Diseado por: Ing. Gabriel Pool, gpoolb@hotmail.com Title Integracin de PIC18F2455 con MATLAB Size A Date:
5 4 3

RA5

X1 12 MHz

Document Number DAQ Thursday, July 02, 2009


2

Rev 01 Sheet 1
1

of

Anda mungkin juga menyukai