Upload
adrianabenavides
View
27
Download
1
Embed Size (px)
Citation preview
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
_