127307530 Instalacion Driver USB MATLAB

download 127307530 Instalacion Driver USB MATLAB

of 16

Transcript of 127307530 Instalacion Driver USB MATLAB

  • UNIVERSIDADMODELO

    ESCUELADEINGENIERA

    MAESTRAENMECATRNICA

    Transferenciayprocesamientodedatosaaltavelocidad,medianteelusodeMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip

    PRESENTA:

    ING.GABRIELJESSPOOLBALAM

    PARALAMATERIA:

    DISEOMECATRNICO

    PROFESOR:

    DR.ALEJOMOSSOVAZQUEZ

    MRIDA,YUCATNA4DEJULIODE2009

  • TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip2/15

    Agradecimientos:

    Al Centro de Investigacin cientfica deYucatnA.C. (www.cicy.mx ) sobre todoaldepartamento de Instrumentacinrepresentado por Ing. Leonardo GusPeltinovichporsuapoyopara la realizacindestetrabajo.

    JUNIO2009

  • TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip3/15

    RESUMEN

    MATLAB ("matrix laboratory")esunsoftware de computacin y desarrollo deaplicaciones, diseado para llevar a caboproyectos que impliquen clculosmatemticos de nivel elevado y surepresentacin grfica. MATLAB integraanlisisnumrico,clculomatricial,procesode seal y visualizacin grfica en unentorno tal que los problemas y sussolucionessonexpresadosdelmismomodoenqueseescribiran,sinnecesidaddehacerusodelaprogramacintradicional.MATLABes capaz de manejar libreras y dlls dediferentesdispositivosinstaladosenlaPC.

    Microchip proporciona en supginaweb losdriversyarchivosnecesariosparaestablecer lacomunicacinporpuertoUSBcon la familiadelPIC18F2455.A travsdeellossepuedeefectuartransaccionesdehasta 64 bytes por paquete cadamilisegundo, por cada tnel abierto. El PICes programado mediante PCWH Compilerde CCS, versin 3.246. Los descriptoresutilizados para la comunicacin USB estnbasados en los archivos que contiene elpropiocompilador.

    Enestetrabajosemuestraque,conestasherramientasymanipulandoelarchivompusbapi.dll, se puede transferir datos aalta velocidad del PIC18F2455 a la PC demanera bidireccional, con la finalidad deprocesarlos matemticamente y/ograficarlos.Unejemplodeestaaplicacinsemuestra en este trabajo, y consiste en laobtencin de curvas de arranque demotores de CD sin carga, a efectos de su

    caracterizacincomopasoprevioaldiseooseleccindesucontrolador.

    INTRODUCCIN

    Hoy en da, la miniaturizacin decomponentes electrnicos, la disminucindesuconsumodecorrienteyeltamaodelos semiconductores, permite laconstruccin de circuitos ms complejos,inteligentes y eficientes. No ha sido laexcepcin con el microcontrolador, ya queste se ha desarrollado notablemente, alpuntodehacermsgrandesuscapacidadesde comunicacin, memoria, circuitos deapoyo adicionales (ADC, oscilador interno,puertos, etc.). Dichos microcontroladores,requieren de muy poco componentes desoporte externo para implementarse y sustecnologas se han perfeccionado, de talmanera, que casi no fallan. Algunosfabricantes tal como Microchip, sepreocupan en desarrollar las herramientasparasuprogramacin,talescomo lenguajesde alto nivel para compilar el programa yprogramadores econmicos para descargarel programa en el chip. Debido a stasherramientas, ste chip se ha vuelto muypopular al grado que se proponen comomateriasacursarenlasescuelas.

    Porotrolado,yanobastacontenerunchip inteligente que funcione de maneraautnoma, ahora se requiere que trabajenenconjuntocon laPCespecialmentedondeserequierenimportardatosdeeventosmuyrpidos comoporejemplo: Elarranquedeunmotor(velocidadconrespectoaltiempo)que tiene una duracin aproximada de 1dcima de segundo. Esto se puede lograrconeldesarrollodeunsoftwarecomoVisual

  • TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip4/15

    Basic, Visual C, C++, cualquier otropaquete de preferencia grfico para hacerms fcil la interfaz de usuario.Desafortunadamente, cuando se requierenprocesar matemticamente stos datos(graficarlos, aplicar operaciones deestadstica, procesar con filtros digitales,etc.),sevuelveliteralmenteimposible.

    ConMATLABseresuelveeseproblema,peroexisteundetalle,elhechode importarlosdatosen tiempo real conalguna tarjetade adquisicin de datos requierecompatibilidadconsteprogramasincontaradicionalmenteconlosrecursoseconmicospara la compra de sta tarjeta.AfortunadamenteMATLABhaevolucionadoalgradodequesepuedeconectarcasiconcualquier dispositivo, y su manejo esrelativamente fcil e incluye una ayuda enlnea.

    La finalidad de ste trabajo esdesarrollar una comunicacin entre unmicro controlador y ste software para eltratamiento de datos de manera mseconmica y sin algn software ejecutablequesirvadeintermediario.

    ANTECEDENTES

    1.LAARQUITECTURADELPUERTOUSB

    A pesar de que el puerto USB nosofrecems ventajas que sus predecesores,su complejidad para implementarlo esenorme, ya que su funcionamiento estbasadoenprotocolosdesoftware.

    SlopuedehaberunHostenelbusquemaneja a todos los componentesconectadoscomoseindicaenlafigura1.

    Fig.1TopologadelBUS

    Elhubesunelementoplugandplayenla estructura USB (Figura 2) y es unconcentrador al cual, se le pueden agregarmsdispositivosUSB,incluyendootrohub.

    La velocidad de transferencia dependede la velocidad del HUB que se estutilizando. Ver figura 3. Las velocidadestpicas son: 480Mb /s en high speed,12Mb/sfullspeedy1.5Mb/senLowspeed.

    Fig.2HUBUSB

    Fig.3MltiplevelocidadenunBUS

  • TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip5/15

    Elcablequetpicamenteesusadonoeslargo,debidoalavelocidaddetransferenciaytienelaestructuramostradaenlafigura4.Sus terminales son del tipo diferencial yconstade4hilos.

    Fig.4CableUSB

    LaarquitecturaUSB comprende cuatrotiposbsicosdetransferenciadedatos:

    Control Transfers: Es usado paraconfigurarundispositivoalmomentodequese conecta. Los datos entregados puedenperderse. Bulk Data Transfers: Entrega el dato porvolumen,elanchodebandapuedevariar.Esusado en escner cmaras. La rfaga dedatosessecuencial. InterruptData Transfers:Used for timelybut reliable delivery of data, for example,characters or coordinates with humanperceptible echo or feedback responsecharacteristics. Isochronous Data Transfers: Occupy aprenegotiated amount of USB bandwidthwithaprenegotiateddelivery latency. (Alsocalledstreamingrealtimetransfers).

    Aunque el PIC no puede funcionarcomohost,yaque se requieredeunagrancapacidad de manejo de datos paraadministraracadacomponentedelBUS,essuficiente que se pueda administrar comoun device, para esto se requierememorizarle los protocolos necesariosparaenlazarsealhost.

    Estos protocolos se le llamandescriptores y sirvepara informarle alhosttodo lo necesario para que puedaadministrarlo.

    Recordemos que los PICs de la serie18Fxx5x tienen tres modos defuncionamiento:

    1. USB Human Interface Device(HID): Velocidad Baja, norequieredriver.

    2. USB Communication DeviceClass (CDC): Velocidad Media,requieredriver.CreaunPuertoSerieVirtual.

    3. USB Custom Driver: VelocidadAlta, requieredriver.Esteeselmodo que usa WinUSB (parawindows vista) y el mpusbapi(windows2000yposterior).

    Dentro de los protocolos hay queespecificareltipodetransferenciadedatosausar(endpoints),VID&PID,nombreyseriedel producto que se conecta para que elhost identifiquealdriver ypueda instalarloconelfindequeeldispositivopuedaformarlas pipes tnelespara su comunicacinconelhost(verfigura5).

    Fig5.FlujodecomunicacinUSB

  • TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip6/15

    2.LAMPUSBAPI.DLLDEMICROCHIP

    Para una mayor facilidad de desarrollode aplicaciones basadas en el bus USB,Microchiphacreadounarchivodllenelqueproporciona las funciones de acceso alpuertoUSB con unmicrocontrolador de lafamiliaPIC18Fxx5x.Paraun funcionamientocorrecto,senecesitaeldrivermchpusb.sys.

    Estedriver sirve tantoparaVisualBasic

    comoparaVisualC,entreotros.Revisandoejemplos,ylaayudaquetrae

    incluidasobreelmanejode ladllseverificaqueelmododeabrirlapipeeselsiguiente:

    Primero se identifica si hay un

    dispositivo con el nombre VID&PIDconectadoalaPCconlainstruccin:

    (*MPUSBGetDeviceCount)(PCHARpVID_PID)La variable pVID&PID, es una entrada decadenadecaracteresquedacomoresultadoel nmero de dispositivos conectados alHost, que tienen asignado el mismopVID&PID.

    Seguidamente con la instruccin(*MPUSBOpen)(DWORDinstance,//Input

    PCHARpVID_PID,//Input

    PCHARpEP,//Input

    DWORDdwDir,//Input

    DWORD dwReserved); // Input

    Esta instruccin devuelve el acceso al pipedelEndpointconelVID_PIDasignado.Todaslas pipes se abren con el atributoFILE_FLAG_OVERLAPPED contenida en la

    DLL, sto permite que MPUSBRead,MPUSBWrite y MPUSBReadInt tengan unvalordetimeout.Nota:elvalordeltimeoutnotienesentidoenunapipesncrona.instance: Input: Un nmero de dispositivoparaabrir.Normalmente, seutilizaprimerola llamada de MPUSBGetDeviceCount parasabercuantosdispositivoshay.

    Esimportanteentenderqueeldriverlo comparten distintos dispositivos. Elnmero devuelto por elMPUSBGetDeviceCounttienequeserigualomenor que el nmero de todos losdispositivos actualmente conectados yusando el driver genrico. Ejemplo: Si haytresdispositivos con los siguientes PID_VIDconectados:

    Dispositivotipo0,VID0x04d8,PID0x0001Dispositivotipo1,VID0x04d8,PID0x0002Dispositivotipo2,VID0x04d8,PID0x0003y el dispositivo que nos interesa tieneVID=0x04d8 y PID=0x0002 elMPUSBGetDeviceCountdevolverun 1.Alllamar la funcin tiene que haber unmecanismoque intente llamarMPUSOpen()desde 0 hastaMAX_NUM_MPUSB_DEV. Setiene que contar el nmero de llamadasexitosas. Cuando este nmero sea igual alnmero devuelto porMPUSBGetDeviceCount, hay que dejar dehacer las llamadas porque no puede habermsdispositivosconelmismoVID_PID.pVID_PID: Input: String que contiene elPID&VIDdeldispositivoobjetivo.Elformatoes vid_xxxx&pid_yyyy. Donde xxxx es elvalordelVIDyelyyyyeldelPID, losdosenhexadecimal.Ejemplo:SiundispositivotieneunVID=0x04d8yunPID=0x000b,elstringdeentradaes:vid_0x04d8&pid_0x000b.

  • TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip7/15

    pEP: Input: String con el nmero delEndpoint que se va a abrir. El formato es\\MCHP_EPz o \MCHP_EPzdependiendodel lenguajedeprogramacin.Donde z es el nmero del Endpoint endecimal.Ejemplo:\\MCHP_EP1 o \MCHP_EP1 EsteargumentopuedeserNULL(nulo)paracrearlazos con Endpoints de funciones noespecficas. Las funciones especficas queutilizan ste parmetro son: MPUSBRead,MPUSBWrite,MPUSBReadInt.

    Nota: Para utilizar MPUSBReadInt(), elformato de pEP tiene que ser\\MCHP_EPz_ASYNC.EstaopcinsloestdisponibleparaunEndpointinterrupcinIN.Lapipededatosabiertacon_ASYNCdebealmacenar datos con el intervaloespecificado en el Endpoint descriptor conun mximo de 100 recepciones. Cualquierotro dato recibido despus de llenar elbufferdeldriverse ignora.Laaplicacindelusuario tieneque llamarMPUSBReadInt()amenudosinsuperarelmximode100.dwDir:EspecificaladireccindelEndpoint: MP_READ: para MPUSBRead yMPUSBReadIntMP_Write:paraMPUSBWriteSeabreunpipea lavez (hayqueusardosvecesstainstruccin),condwDir=1seabrela pipe para leer y con dwDir=0 se abre lapipeparaescribiralPIC,elresultadoquenosarrojastainstruccineselnmerodepipequenosasignaelsistemaoperativo.

    dwReserved:No asignadopor elmomento,elvalorporomisinescero.

    El formato tpico de la instruccin es:MPUSBOpen(0,vid_pid,out_pipe,dwDir,0)

    Como tercer procedimiento, se lee el datoaplicando el nmero de pipe asignado pormediodelainstruccin:(*MPUSBRead)

    (HANDLEhandle, //Input

    PVOIDpData, //Output

    DWORDdwLen, //Input

    PDWORDpLength, //Output

    DWORDdwMilliseconds); //Input

    handle:Input:IdentificalapipedelEndpointque se va a leer. La pipe unida tiene quecrearseconelatributodeaccesoMP_READ.En conclusin, handle es el nmero depipe que nos arroj la instruccin anteriorcondwDir=1.pData:Output:Punteroalbufferquerecibeeldato ledode lapipe.Elformatodeldatoes un arreglo de N bytes, donde N es elnmerodebytesquemanejaeldeviceenelarregloqueenvaalaPC,generalmentesedeclaraaliniciodelprogramaenelPIC.dwLen:Input:Especificaelnmerodebytesqueseesperaleerdelapipe.pLenght: Output: Puntero al nmero debytes ledos.MPUSBReadponeestevaloracero antes de cualquier lectura o dechequearunerror.dwMilliseconds:Input:Especificaelintervalode timeout en milisegundos. La funcinvuelve si transcurre el intervalo aunquenose complete la operacin. SidwMilliseconds=0,lafuncincompruebalosdatosdelapipeyvuelveinmediatamente.SidwMilliseconds es infinito, el intervalo detimeoutnuncatermina.

  • TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip8/15

    El formato tpico de la instruccin es:MPUSBRead(myInPipe, VarPtr(s(0)),DatosDeseados,Datos,1000)

    Paraenviar losdatosalPIC sehacede la misma manera con la instruccin:(*MPUSBWrite)

    (HANDLEhandle, //Input

    PVOIDpData, //Input

    DWORDdwLen, //Input

    PDWORDpLength, //Output

    DWORDdwMilliseconds); //Input

    handle:Input:IdentificalapipedelEndpointquesevaaescribir.Lapipeunidatienequecrearse con el atributo de accesoMP_WRITE. En conclusin, handle es elnmerodepipequenosarrojlainstruccinanteriorcondwDir=0.pData:Input:Punteroalbufferquecontienelosdatosquesevanaescribiren lapipe.ElformatodeldatoesunarreglodeNbytes,dondeNeselnmerodebytesquemanejaeldeviceenelarregloquerecibedelaPC,generalmente se declara al inicio delprogramaenelPIC.dwLen:Input:Especificaelnmerodebytesquesevanaescribirenlapipe.pLenght: Output: Puntero que proporcionaelnmerodebytesqueseescribenalllamarestafuncin.MPUSBWriteponeestevaloracero antes de cualquier lectura o dechequearunerror.dwMilliseconds:Input:Especificaelintervalode timeout en milisegundos. La funcinvuelve si transcurre el intervalo aunquenose complete la operacin. Si

    dwMilliseconds=0,lafuncincompruebalosdatosdelapipeyvuelveinmediatamente.SidwMilliseconds es infinito, el intervalo detimeoutnuncatermina.El formato tpico de la instruccin es:MPUSBWrite(myOutPipe,VarPtr(SendData(0)), bytes, VarPtr(bytes),1000)

    Por ultimo, se requiere cerrar laspipes, porque despus de usarlos caducan,ya no es posible leer / escribir de nuevo.Para cerrarlosbastaejecutar la instruccin:(*MPUSBClose)(HANDLEhandle);dedondehandle:Input:IdentificalapipedelEndpointquesevaacerrar.

    El formato tpico de la instruccin es:MPUSBClose(myOutPipe)

    Existen otras dos instrucciones que no seimplementaron en ste desarrollo, pero esnecesarioconocerlos,stasson:

    MPUSBGETDLLVERSION(VOID)LeeelnivelderevisindelMPUSAPI.dll.Estafuncindevuelvelaversindelcdigodeladll en formato hexadecimal de 32bits, norealizanadaconelpuertoUSB.El formato tpico de la instruccin es:MPUSBGetDLLVersion()

    MPUSBREADINT(HANDLE, PDATA, DWLEN,PLENGTH,DWMILLISECONDS)handle:Input:IdentificalapipedelEndpointque se va a leer. La pipe unida tiene quecrearseconelatributodeaccesoMP_READ.pData:Output:Punteroalbufferquerecibeeldatoledodelapipe.

  • TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip9/15

    dwLen:Input:Especificaelnmerodebytesquehayqueleerdelapipe.pLenght: Output: Puntero al nmero debytes ledos.MPUSBReadponeestevaloracero antes de cualquier lectura o dechequearunerror.dwMilliseconds:Input:Especificaelintervalode timeout en milisegundos. La funcinvuelve si transcurre el intervalo aunquenose complete la operacin. SidwMilliseconds=0,lafuncincompruebalosdatosdelapipeyvuelveinmediatamente.SidwMilliseconds es infinito, el intervalo detimeoutnuncatermina.El formato tpico de la instruccin es:MPUSBReadInt(myOutPipe,VarPtr(SendData(0)), bytes, VarPtr(bytes),1000)TIPOS DE TRANSFERENCIAS SOPORTADOPORESTASINSTRUCCIONESEnesteapartadoserecomiendaquefuncinutilizar dependiendo del tipo detransferencia.Tipo Funcin Aplicabletimeout?InterruptINMPUSRead,MPUSReadIntsiInterruptOUTMPUSBWrite siBulkINMPUSBRead siBulkOUTMPUSWrite siIsochronousINMPUSBRead noIsochronousOUTMPUSBWrite noInterrupt:tipointerrupcinIsochronous:tiposncronoNota: Input y output se refiere a losparmetros designados en las llamadas aestas funciones, que son lo opuesto a los

    sentidos comunes desde la perspectiva deunaaplicacinhaciendollamadas.

    DECLARACINDECONSTANTESYVARIABLESAquaparecenlasconstantesyvariablesqueel fabricante recomienda usar. Todas sonoptativas, dejando la eleccin alprogramador. Tambin, se comentan laspequeasvariacionesqueexistenaldeclararestasvariablesenlosdistintoslenguajes.MPUS_FAIL=0MPUSB_SUCCESS=1MP_WRITE=0MP_READ=1MAX_NUM_MPUSB_DEV=127vid_pid=vid_04d8&pid_0011EnVisualBasic:out_pipe=\MCHP_EPxin_pipe=\MCHP_EPyEnCyDelphi:out_pipe=\\MCHP_EPxin_pipe=\\MCHP_EPySiendo x e ynmerosdel Endpointpor losquesevanarealizarlastransmisiones.

    Estadllsellamadeacuerdoalaconvencindel lenguaje C, NO funciona si es llamadaconelformatodeSTDLIB.

    OBJETIVO

    Elobjetivoprincipaldelpresente trabajoesintegrar el software de MATLAB con elPIC18F2455 de Microchip con el fin dedisearuna tarjetadeadquisicindedatosajustada a la necesidad personalizada decadadesarrollo.

  • TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip10/15

    OBJETIVOSPARTICULARES

    1. EnlacealaPCmedianteUSB.2. EnlacedeMATLABalPIC.3. Pruebasfinalesycorrecciones.

    1. ENLACEALAPCMEDIANTEUSB.

    Para lograrelenlaceaUSBseutilizaronlas funciones USB, incorporadas en ellenguaje C del programa CCS para PICS,dichasfuncionesestnpreparadasparaqueelmicrocontroladorseareconocidocomoundispositivo personalizado usando losdescriptoresque incluyeelmismo lenguaje,seestablecilacantidaddedatosa64bytes(8bitsporbyte)deenvoyrecepcinhacialaPC,enlaPCsedescargaeldriverquenosproporciona Microchip en su pgina web.Por parte del Hardware, el mismocompilador trae en la ayuda un diagramaesquemtico para conectar al PICdispositivos adicionales como teclado,displaygenricosdedos lneasygrficos,elpuerto serie, usb, I2C, etc. Si tiene dudassobre la descarga del driver consulte elapartado 3. Pruebas finales y correccionesenstedocumento.

    ConfigurandoelHardware

    1. ConecteelPIC como semuestraeneldiagramaesquemticoalfinaldeldocumento.

    2. Antes de compilar el cdigo deprogramaadjuntoenstearchivo comprimido con PCWHCompiler de CCS versin 3.246 posterior,primeroescojaelPICqueutilice PIC18F2455/2550/4455/4550

    en la seccin #include al inicio delprograma.

    3. Verifique que la configuracin delPLLcorrespondaa laFrecuenciadelXtalqueutiliza.Ejemplo:

    PLL1paraXtalde4Mhz

    PLL2paraXtalde8Mhz

    PLL3paraXtalde12Mhz

    PLL4paraXtalde20Mhz,etc.

    4. Abra el archivo C:\Archivos de

    programa\PICC\Drivers\usb_desc_scope.h ( donde se instal elcompilador de CCS ) que es eldescriptor del USB ubicado en suPC, avance hasta la seccin startdevicedescriptors(aproxenlalinea132) y reemplace los valores delvendor id, elproduct idyeldevicereleasenumbercomosigue(puedecopiar las tres lneas siguiente ypegar en el archivo del descriptor):

    0xD8,0x04, //vendor id(0x04D8 isMicrochip)

    0x0B,0x00,//productid

    0x01,0x00,//devicereleasenumber

    5. CompileelprogramaygrbeloenelPIC(Asegresedequeantesdeabrirel archivo a compilar presione elbotn inicio (ubicado en la partesuperiorizquierda)Closealldelcompilador).

    NOTA IMPORTANTE: De no completarstospasoslaPCNOdetectaralPIC

  • TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip11/15

    ConfigurandoelSoftware

    1. LaDLLqueproporcionaMicrochipsepuededescargardesdesusitioweb.(www.microchip.com)Asegresedeobtener laversinmsactual.En ladireccinweb que semenciona enla bibliografa se descarga el driver(linkdeaccesodirecto),en casodehaber caducado busque en laseccin Aplication andmarkets USBMCHPFSUSBFrameworKSoftware/Tools simplemente teclee usbsoftware/tools en la ventanita debsquedaydleunclicenelbotnsite search, generalmente elacceso a la pgina queda en losprimerosresultadosdelabsqueda,el cual, al darle click llevadirectamentealdriver.Enelmismopaquete incluye ejemplos queincluyenelprograma fuentepara lacompresindesuuso.

    2. Ejecute el driver descargado en elpaso anterior e instale en ladireccin que trae yapredeterminada. Este ejecutabletraemuchosejemplosdeaplicacin,entreellos traeeldriverquequedaubicadoen:

    "C:\MICROCHIPSOLUTIONS\USBTOOLS\MCHPUSBCUSTOMDRIVER\MCHPUSBDRIVER\RELEASE\"

    3. Instale el hardware a la PC demanera similar alque se instalaun

    dispositivoUSB que adquiere en elmercado:conectealdispositivoa laPC, en cuanto le solicite los driver,sloproporcione ladireccindondefue descomprimido el driver (lamisma direccin del paso anterior).Si todo es correcto debemos deobservar en el administrador dedispositivosunnuevohardwarequeseagregtalcomosemuestraenlafigura 6.NOTA: SiUd.Olvida nosustituye correctamente en eldescriptor las 3 lneas que secomentan en el cdigo delprograma, el compilador CCScompilar correctamente pero alconectarse el PIC en la PC, ste noreconocereldriver.

    Fig.6InstalacindelPICenlaPC

  • TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip12/15

    4. En propiedades del dispositivoinstalado se puede observar elnmero PID&VID que se configurenelPIC talcomosemuestraen lafigura7.

    Fig. 7 En propiedades del PIC instaladoenlaPCseobservaelnmerodePID&VID

    ComentariosAdicionales

    Todo esto se desarroll basndose enejemplosqueelcompiladortraeincluidosenla carpetade examples.CabeaclararquelosdiseosenUSBconPICdaadasevanincrementando. Slo basta investigar unpoco en la red para ver los resultados(Consulte la bibliografa de stedocumento).ElcdigodelprogramadelPICseencuentraalfinaldeldocumentoconsusrespectivoscomentarios.

    2. ENLACE DEL MATLAB AL PIC PARATRANSFERENCIADEDATOS.

    ParapoderiniciarelenlaceconelPICesnecesario que se haya concluido

    satisfactoriamentelainstalacindelpaquetede drivers de Microchip. En el mismopaquete que se descarga de la redobtenemos instruccionesyejemplosenC++quemuestrancomomanipulareldriverylosparmetros requeridos para aplicarlo. Sinembargo, an no es suficiente lainformacin, porque la dificultad est enidentificar el tipo de variable que aceptacada softwarededesarrollo yque tambinseaaceptadaporlaDLL.Porloquedenuevose sugiere consultar las notas deaplicaciones de Microchip y ejemplospublicados en la web (con cualquiersoftwarededesarrollo).

    Para hacer la conexin con MATLABsimplementesecopiaronlasinstruccionesal lenguaje de matlab y se acondicionaronlas variables para que la DLL puedareconocerlo.

    NOTA: Adjunto a este archivocomprimido se encuentra el cdigo deMATLABusb.mqueesundemodecmoelprograma enva y recibe datos del PIC, losarchivos _mpusbapi.c y mpusbapi.dll sonnecesarios para la ejecucin en MATLAB ydebendeestaren lamisma carpetaqueelarchivousb.m

    Seguidamenteseexplicaeldesarrollodela comunicacin. Primero es necesarioconocerqufuncindeMATLABesmsfcildeimplementar:

    Existenvariosmtodos,elqueseutilizfue:

    a. Manipular directamente la dll con lainstruccinLoadlibrary

    Ya que se manipula la librera de unamaneradirectaysinintermediarios.

  • TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip13/15

    Para iniciar con la implementacin delcdigo, primero inicie el programa deMATLAB

    Siguiendo los pasos descritos en laseccin de antecedentes de stedocumento, las instrucciones que serequieren implementar tienen la siguientesecuenciayformatoenMATLABson:

    a. Primero copie los archivos_mpusbapi.c y mpusbapi.dll en la mismacarpeta de trabajo ( se obtienen de ladescarga del driver en la pgina demicrochip ("Microchip MCHPFSUSB v2.4Installer.zip")), al instalarse queda ubicadoen X:\Microchip Solutions\USB Tools\MCHPUSB Custom Driver\Mpusbapi\Dll\Borland_C, en caso dedescargar una version de driver msreciente, reemplace stos archivos por losmsnuevos.

    b. Se abre el editor de MATLAB ycomenzamos cargando la librera enmemoria.

    Formato:

    loadlibrarympusbapi_mpusbapi.haliaslibrera

    c. Luego se identifica el nmero dedispositivosconectadosconelPID&VIDy ubicar el que corresponde alhardwaredesudesarrollo.

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

    Dedonde:

    vid_pid_norm=libpointer('int8Ptr',[uint8('vid_04d8&pid_000b')0]);d.Seguidamenteabralapipeparaleer(sinodesealeerpuedeomitirstepaso).

    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 ('int8Ptr',[uint8('\MCHP_EP1')0]);

    e. Siguiendo con la secuencia, abra lapipepara escribir (si no desea escribir puedeomitirstepaso).

    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 ('int8Ptr',[uint8('\MCHP_EP1')0]);

    f. Lea losdatosde lapipe (solamente si lapipeestabierta)Formato:

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

    Dedonde:

  • TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip14/15

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

    g.Escriba losdatosde lapipe(solamentesilapipeestabierta)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),cadavezquefinalice el programa, ya que si quedanabiertaswindowsgeneraerroresysepierdelacomunicacin.

    Formato:

    calllib('libreria', 'MPUSBClose',my_in_pipe);

    calllib('libreria', 'MPUSBClose',my_out_pipe);

    IMPORTANTE:

    Al terminar el programa descarguela libreradememoria,yaquenosepuedecargarmsdeunavez.

    Formato:

    unloadlibrarylibrera;

    Una vez enlazado con el PIC, losdatos pueden fluir las veces que seanecesario de un sentido a otro ymanipularloscomosedesee,yaquesetieneelcompletocontroldelsoftwaredelPIC(porpartedelCompiladorC)yenlaPC(porpartedeMATLAB).

    EncasodeperderselacomunicacinconelPIC (encasosdondeelprogramaenMATLAB genere errores por cuestionesajenas a la comunicacin) desinstale deldispositivo MicrochipCustomUSBDevicedesde el administrador de dispositivos,desconecteelPICdelpuertoUSB,descarguelalibreradememoriadesdeelMATLABconunloadlibrary 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 ygrabarlo en el PIC es necesario asegurarsedequeantesdeabrirelarchivoacompilarpresione el botn inicio del mismocompilador (ubicado en la parte superiorizquierda)Closeall .DenohacerestoesposiblequesecompileelarchivoanteriorconelqueUdhayatrabajado.

    ParaelenlaceconlaPCporUSBesmuyimportante conectar el capacitor (C4) de0.1uFcomoseindicaeneldiagrama,yaque,si se omite generar un error almomentodel enlace. Tambin es muy importantehabilitar el fusible VREGEN para que Vusbseaactivado.

    Cuidardeno invertir lasterminalesDyD+ del conector USB a la hora deimplementarelHardware.

    Es importante considerar la funcindelPLLdelPICyaquedeacuerdoalvalorde lafrecuenciadelcristaldependeelvalorde lamultiplicacindelafrecuenciadelrelojparagenerarlos48MhznecesariosparaelUSB.

  • TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip15/15

    Por lo que respecta al descriptor delUSB, es importante considerar el valor delVID & PID, ya que si no es configuradocorrectamente, el driver que proporcionaMicrochip no lo reconocer y enconsecuencia, no funcionar. Para esto noolvide sustituir en eldescriptor las3 lneasquesecomentanenelcdigodelprogramaqueseanexaenstedocumento.

    La DLL que proporciona Microchip sepuede descargar desde su sitio web.Asegresedeobtenerlaversinmsactual.En elmismopaquete incluye ejemplosqueincluyen el programa fuente para lacompresindesuuso.

    Se recomienda verificar el archivo que nosproporciona Microchip en el driver, en lasiguientedireccin:

    "C:\MICROCHIPSOLUTIONS\USBTOOLS\MCHPUSBCUSTOMDRIVER\MCHPUSBDRIVER\MCHPUSBDRIVERRELEASENOTES.HTM"

    Ah se proporciona informacin sobre lacompatibilidad en sistemas operativos yejemplosdesarrollados.

    BIBLIOGRAFA

    http://www.usb.org/developers/docs/

    http://slalen.iespana.es/programacion/datos/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.garciacuervo.com/index.php

    Driverdemicrochip:

    MicrochipApplicationLibrariesv20100209

    http://ww1.microchip.com/downloads/en/devicedoc/MCHP_App_%20Lib%20v2010_02_09_Installer.zip

    Asegresequeelarchivoseaelmsactual.

  • 55

    4

    4

    3

    3

    2

    2

    1

    1

    D D

    C C

    B B

    A A

    ENTRADAS

    SALIDAS

    Diseado por: Ing. Gabriel Pool, [email protected]

    Entrada delcable USB

    DAQ 01

    Integracin de PIC18F2455 con MATLAB

    A

    1 1Thursday, July 02, 2009

    Title

    Size Document Number Rev

    Date: Sheet of

    +5V

    +5V +12V

    +5V

    +5V

    +5V

    S1SW

    J1

    US

    B1234

    C11000uF

    C722pF

    D5

    J4

    ICSP

    12345

    D2

    R4150

    D4

    R210K

    D8

    S1SW

    C822pF

    R210K

    S1SW

    R5150

    D1

    R610K

    S1SW

    S1SW

    X112 MHz

    R4150

    S1SW

    R110K

    R5150

    D3

    R7100

    J3

    PO

    WE

    R S

    UP

    PLY

    1234

    D7D6

    S1SW

    C22200uF

    R210K

    R210K

    R5150

    R4150

    R5150

    J1-USB

    Vista Inferior

    13

    24++

    ++

    R110K

    C40.1uF

    C50.1uF

    R4150

    U2PIC18F2455

    819

    1

    9

    20

    234567

    2122232425262728

    11

    12

    13

    14

    1516

    1718

    10

    GN

    DG

    ND

    MCLR/VPP/RE3

    OS

    C1/

    CLK

    I

    VD

    DRA0RA1RA2RA3RA4/T0CKI/C1OUT/RCVRA5/SS

    RB0/INTRB1RB2RB3RB4RB5RB6RB7

    RC0/T1OSO/T13CKI

    RC1

    RC2

    VUSB

    RC4/D-/VMRC5/D+/VP

    RC6/TX/CKRC7/RX/DT/SDO

    OS

    C2/

    CLK

    O/R

    A6

    RB0RB1RB2RB3RB4RB5

    RB6RB7

    RB

    0

    RB

    1

    RB

    2

    RB

    3

    RB

    4

    RB

    5

    RB

    6

    RB

    7

    RA

    4

    RA

    5

    RA

    0

    RA

    2

    RA

    3

    RA

    1

    RA3

    RA5RA4

    RA1RA2

    RA0

    D-D+ GND

    _