Está en la página 1de 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 caracterizacincomopasoprevioaldiseoo
seleccindesucontrolador.
MATLAB ("matrix laboratory") es un
software de computacin y desarrollo de INTRODUCCIN
aplicaciones, diseado para llevar a cabo
proyectos que impliquen clculos Hoy en da, la miniaturizacin de
matemticos de nivel elevado y su componentes electrnicos, la disminucin
representacin grfica. MATLAB integra desuconsumodecorrienteyeltamaode
anlisis numrico, clculo matricial, proceso los semiconductores, permite la
de seal y visualizacin grfica en un construccin de circuitos ms complejos,
entorno tal que los problemas y sus inteligentes y eficientes. No ha sido la
solucionessonexpresadosdelmismomodo excepcin con el microcontrolador, ya que
enqueseescribiran,sinnecesidaddehacer ste se ha desarrollado notablemente, al
usodelaprogramacintradicional.MATLAB puntodehacermsgrandesuscapacidades
es capaz de manejar libreras y dlls de de comunicacin, memoria, circuitos de
diferentesdispositivosinstaladosenlaPC. apoyo adicionales (ADC, oscilador interno,
puertos, etc.). Dichos microcontroladores,
Microchip proporciona en su requieren de muy poco componentes de
pginaweblosdriversyarchivosnecesarios soporte externo para implementarse y sus
para establecer la comunicacin por puerto tecnologas se han perfeccionado, de tal
USB con la familia del PIC18F2455. A travs manera, que casi no fallan. Algunos
deellossepuedeefectuartransaccionesde fabricantes tal como Microchip, se
hasta 64 bytes por paquete cada preocupan en desarrollar las herramientas
milisegundo, por cada tnel abierto. El PIC parasuprogramacin,talescomolenguajes
es programado mediante PCWH Compiler de alto nivel para compilar el programa y
de CCS, versin 3.246. Los descriptores programadores econmicos para descargar
utilizados para la comunicacin USB estn el programa en el chip. Debido a stas
basados en los archivos que contiene el herramientas, ste chip se ha vuelto muy
propiocompilador. popular al grado que se proponen como
materiasacursarenlasescuelas.
Enestetrabajosemuestraque,con
estasherramientasymanipulandoelarchivo Porotrolado,yanobastacontenerun
mpusbapi.dll, se puede transferir datos a chip inteligente que funcione de manera
alta velocidad del PIC18F2455 a la PC de autnoma, ahora se requiere que trabajen
manera bidireccional, con la finalidad de enconjuntoconlaPCespecialmentedonde
procesarlos matemticamente y/o serequierenimportardatosdeeventosmuy
graficarlos.Unejemplodeestaaplicacinse rpidos como por ejemplo: El arranque de
muestra en este trabajo, y consiste en la unmotor(velocidadconrespectoaltiempo)
obtencin de curvas de arranque de que tiene una duracin aproximada de 1
motores de CD sin carga, a efectos de su 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 Fig.1TopologadelBUS
compatibilidadconsteprogramasincontar
Elhubesunelementoplugandplayen
adicionalmenteconlosrecursoseconmicos
la estructura USB (Figura 2) y es un
para la compra de sta tarjeta.
concentrador al cual, se le pueden agregar
Afortunadamente MATLAB ha evolucionado
msdispositivosUSB,incluyendootrohub.
al grado de que se puede conectar casi con
cualquier dispositivo, y su manejo es La velocidad de transferencia depende
relativamente fcil e incluye una ayuda en de la velocidad del HUB que se est
lnea. utilizando. Ver figura 3. Las velocidades
tpicas son: 480Mb /s en high speed,
La finalidad de ste trabajo es 12Mb/sfullspeedy1.5Mb/senLowspeed.
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

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 Fig.3MltiplevelocidadenunBUS
maneja a todos los componentes
conectadoscomoseindicaenlafigura1.

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip4/15

Elcablequetpicamenteesusadonoes Estos protocolos se le llaman


largo,debidoalavelocidaddetransferencia descriptores y sirve para informarle al host
ytienelaestructuramostradaenlafigura4. todo lo necesario para que pueda
Sus terminales son del tipo diferencial y administrarlo.
constade4hilos.
Recordemos que los PICs de la serie
18Fxx5x tienen tres modos de
funcionamiento:

1. USB Human Interface Device


Fig.4CableUSB (HID): Velocidad Baja, no
La arquitectura USB comprende cuatro requieredriver.
tiposbsicosdetransferenciadedatos: 2. USB Communication Device
Control Transfers: Es usado para Class (CDC): Velocidad Media,
configurarundispositivoalmomentodeque requiere driver. Crea un Puerto
se conecta. Los datos entregados pueden SerieVirtual.
perderse.
3. USB Custom Driver: Velocidad
Bulk Data Transfers: Entrega el dato por Alta, requiere driver. Este es el
volumen,elanchodebandapuedevariar.Es modo que usa WinUSB (para
usado en escner cmaras. La rfaga de windows vista) y el mpusbapi
datosessecuencial.
(windows2000yposterior).

Interrupt Data Transfers: Used for timely Dentro de los protocolos hay que
but reliable delivery of data, for example, especificareltipodetransferenciadedatos
characters or coordinates with human ausar(endpoints),VID&PID,nombreyserie
perceptible echo or feedback response del producto que se conecta para que el
characteristics. host identifique al driver y pueda instalarlo
conelfindequeeldispositivopuedaformar
Isochronous Data Transfers: Occupy a las pipes tneles para su comunicacin
prenegotiated amount of USB bandwidth conelhost(verfigura5).
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. Fig5.FlujodecomunicacinUSB

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip5/15

2.LAMPUSBAPI.DLLDEMICROCHIP DLL, sto permite que MPUSBRead,


MPUSBWrite y MPUSBReadInt tengan un
Para una mayor facilidad de desarrollo valordetimeout.
de aplicaciones basadas en el bus USB, Nota:elvalordeltimeoutnotienesentido
Microchiphacreadounarchivodllenelque enunapipesncrona.
proporciona las funciones de acceso al
puerto USB con un microcontrolador de la instance: Input: Un nmero de dispositivo
familia PIC18Fxx5x. Para un funcionamiento para abrir. Normalmente, se utiliza primero
correcto,senecesitaeldrivermchpusb.sys. la llamada de MPUSBGetDeviceCount para
sabercuantosdispositivoshay.
Este driver sirve tanto para Visual Basic
comoparaVisualC,entreotros. Esimportanteentenderqueeldriver
lo comparten distintos dispositivos. El
Revisandoejemplos,ylaayudaquetrae nmero devuelto por el
incluidasobreelmanejodeladllseverifica MPUSBGetDeviceCounttienequeserigualo
queelmododeabrirlapipeeselsiguiente: menor que el nmero de todos los
dispositivos actualmente conectados y
Primero se identifica si hay un usando el driver genrico. Ejemplo: Si hay
dispositivo con el nombre VID&PID tres dispositivos con los siguientes PID_VID
conectadoalaPCconlainstruccin: conectados:
(*MPUSBGetDeviceCount)(PCHAR
pVID_PID) Dispositivotipo0,VID0x04d8,PID0x0001
Dispositivotipo1,VID0x04d8,PID0x0002
La variable pVID&PID, es una entrada de Dispositivotipo2,VID0x04d8,PID0x0003
cadenadecaracteresquedacomoresultado
el nmero de dispositivos conectados al y el dispositivo que nos interesa tiene
Host, que tienen asignado el mismo VID=0x04d8 y PID=0x0002 el
pVID&PID. MPUSBGetDeviceCount devolver un 1. Al
llamar la funcin tiene que haber un
Seguidamente con la instruccin mecanismoqueintentellamarMPUSOpen()
(*MPUSBOpen) desde 0 hasta MAX_NUM_MPUSB_DEV. Se
(DWORDinstance,//Input tiene que contar el nmero de llamadas
exitosas. Cuando este nmero sea igual al
PCHARpVID_PID,//Input nmero devuelto por
MPUSBGetDeviceCount, hay que dejar de
PCHARpEP,//Input hacer las llamadas porque no puede haber
msdispositivosconelmismoVID_PID.
DWORDdwDir,//Input

pVID_PID: Input: String que contiene el
DWORD dwReserved); // Input <Future
PID&VIDdeldispositivoobjetivo.Elformato
Use> es vid_xxxx&pid_yyyy. Donde xxxx es el
valordelVIDyelyyyyeldelPID,losdosen
Esta instruccin devuelve el acceso al pipe
hexadecimal.Ejemplo:Siundispositivotiene
delEndpointconelVID_PIDasignado.Todas
unVID=0x04d8yunPID=0x000b,elstringde
las pipes se abren con el atributo
entradaes:vid_0x04d8&pid_0x000b.
FILE_FLAG_OVERLAPPED contenida en la

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip6/15

pEP: Input: String con el nmero del Como tercer procedimiento, se lee el dato
Endpoint que se va a abrir. El formato es aplicando el nmero de pipe asignado por
\\MCHP_EPz o \MCHP_EPz mediodelainstruccin:(*MPUSBRead)
dependiendodellenguajedeprogramacin.
Donde z es el nmero del Endpoint en (HANDLEhandle, //Input
decimal.Ejemplo:
\\MCHP_EP1 o \MCHP_EP1 Este PVOIDpData, //Output
argumentopuedeserNULL(nulo)paracrear
lazos con Endpoints de funciones no DWORDdwLen, //Input
especficas. Las funciones especficas que
utilizan ste parmetro son: MPUSBRead, PDWORDpLength, //Output
MPUSBWrite,MPUSBReadInt.
DWORDdwMilliseconds); //Input
Nota: Para utilizar MPUSBReadInt(), el
formato de pEP tiene que ser
\\MCHP_EPz_ASYNC.Estaopcinsloest handle:Input:IdentificalapipedelEndpoint
disponibleparaunEndpointinterrupcinIN. que se va a leer. La pipe unida tiene que
Lapipededatosabiertacon_ASYNCdebe crearseconelatributodeaccesoMP_READ.
almacenar datos con el intervalo En conclusin, handle es el nmero de
especificado en el Endpoint descriptor con pipe que nos arroj la instruccin anterior
un mximo de 100 recepciones. Cualquier condwDir=1.
otro dato recibido despus de llenar el
bufferdeldriverseignora.Laaplicacindel pData:Output:Punteroalbufferquerecibe
usuario tiene que llamar MPUSBReadInt() a eldatoledodelapipe.Elformatodeldato
menudosinsuperarelmximode100. es un arreglo de N bytes, donde N es el
nmerodebytesquemanejaeldeviceen
dwDir:EspecificaladireccindelEndpoint: elarregloqueenvaalaPC,generalmentese
MP_READ: para MPUSBRead y declaraaliniciodelprogramaenelPIC.
MPUSBReadInt
MP_Write:paraMPUSBWrite dwLen:Input:Especificaelnmerodebytes
queseesperaleerdelapipe.
Se abre un pipe a la vez (hay que usar dos
pLenght: Output: Puntero al nmero de
vecesstainstruccin),condwDir=1seabre
bytes ledos. MPUSBRead pone este valor a
la pipe para leer y con dwDir=0 se abre la cero antes de cualquier lectura o de
pipeparaescribiralPIC,elresultadoquenos chequearunerror.
arrojastainstruccineselnmerodepipe
quenosasignaelsistemaoperativo. dwMilliseconds:Input:Especificaelintervalo
de timeout en milisegundos. La funcin
dwReserved: No asignado por el momento, vuelve si transcurre el intervalo aunque no
elvalorporomisinescero. se complete la operacin. Si
dwMilliseconds=0,lafuncincompruebalos
datosdelapipeyvuelveinmediatamente.Si
El formato tpico de la instruccin es: dwMilliseconds es infinito, el intervalo de
MPUSBOpen(0,vid_pid,out_pipe,dwDir,0) timeoutnuncatermina.

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip7/15

El formato tpico de la instruccin es: dwMilliseconds=0,lafuncincompruebalos


MPUSBRead(myInPipe, VarPtr(s(0)), datosdelapipeyvuelveinmediatamente.Si
DatosDeseados,Datos,1000) dwMilliseconds es infinito, el intervalo de
timeoutnuncatermina.
Para enviar los datos al PIC se hace
de la misma manera con la instruccin: El formato tpico de la instruccin es:
(*MPUSBWrite) MPUSBWrite(myOutPipe,
VarPtr(SendData(0)), bytes, VarPtr(bytes),
(HANDLEhandle, //Input 1000)

PVOIDpData, //Input Por ultimo, se requiere cerrar las


pipes, porque despus de usarlos caducan,
DWORDdwLen, //Input
ya no es posible leer / escribir de nuevo.
PDWORDpLength, //Output Para cerrarlos basta ejecutar la instruccin:
(*MPUSBClose)(HANDLE handle); de donde
DWORDdwMilliseconds); //Input handle:Input:IdentificalapipedelEndpoint
quesevaacerrar.
handle:Input:IdentificalapipedelEndpoint
quesevaaescribir.Lapipeunidatieneque El formato tpico de la instruccin es:
crearse con el atributo de acceso MPUSBClose(myOutPipe)
MP_WRITE. En conclusin, handle es el
nmerodepipequenosarrojlainstruccin
anteriorcondwDir=0. Existen otras dos instrucciones que no se
implementaron en ste desarrollo, pero es
pData:Input:Punteroalbufferquecontiene
necesarioconocerlos,stasson:
losdatosquesevanaescribirenlapipe.El
formato del dato es un arreglo de N bytes, MPUSBGETDLLVERSION(VOID)
dondeNeselnmerodebytesquemaneja
eldeviceenelarregloquerecibedelaPC, LeeelnivelderevisindelMPUSAPI.dll.Esta
generalmente se declara al inicio del funcindevuelvelaversindelcdigodela
programaenelPIC. dll en formato hexadecimal de 32bits, no
realizanadaconelpuertoUSB.
dwLen:Input:Especificaelnmerodebytes
quesevanaescribirenlapipe. El formato tpico de la instruccin es:

MPUSBGetDLLVersion()
pLenght: Output: Puntero que proporciona
elnmerodebytesqueseescribenalllamar
MPUSBREADINT(HANDLE, PDATA, DWLEN,
estafuncin.MPUSBWriteponeestevalora
PLENGTH,DWMILLISECONDS)
cero antes de cualquier lectura o de

chequearunerror.
handle:Input:IdentificalapipedelEndpoint

que se va a leer. La pipe unida tiene que


dwMilliseconds:Input:Especificaelintervalo
crearseconelatributodeaccesoMP_READ.
de timeout en milisegundos. La funcin

vuelve si transcurre el intervalo aunque no
pData:Output:Punteroalbufferquerecibe
se complete la operacin. Si
eldatoledodelapipe.

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip8/15

sentidos comunes desde la perspectiva de


dwLen:Input:Especificaelnmerodebytes unaaplicacinhaciendollamadas.
quehayqueleerdelapipe.
DECLARACINDECONSTANTESYVARIABLES
pLenght: Output: Puntero al nmero de
bytes ledos. MPUSBRead pone este valor a Aquaparecenlasconstantesyvariablesque
cero antes de cualquier lectura o de el fabricante recomienda usar. Todas son
chequearunerror. optativas, dejando la eleccin al
programador. Tambin, se comentan las
dwMilliseconds:Input:Especificaelintervalo pequeasvariacionesqueexistenaldeclarar
de timeout en milisegundos. La funcin estasvariablesenlosdistintoslenguajes.
vuelve si transcurre el intervalo aunque no
se complete la operacin. Si MPUS_FAIL=0
dwMilliseconds=0,lafuncincompruebalos MPUSB_SUCCESS=1
datosdelapipeyvuelveinmediatamente.Si MP_WRITE=0
dwMilliseconds es infinito, el intervalo de MP_READ=1
timeoutnuncatermina. MAX_NUM_MPUSB_DEV=127
vid_pid=vid_04d8&pid_0011
El formato tpico de la instruccin es: EnVisualBasic:
MPUSBReadInt(myOutPipe, out_pipe=\MCHP_EPx
VarPtr(SendData(0)), bytes, VarPtr(bytes), in_pipe=\MCHP_EPy
1000)
EnCyDelphi:
TIPOS DE TRANSFERENCIAS SOPORTADO out_pipe=\\MCHP_EPx
PORESTASINSTRUCCIONES in_pipe=\\MCHP_EPy
Siendo x e y nmeros del Endpoint por los
Enesteapartadoserecomiendaquefuncin quesevanarealizarlastransmisiones.
utilizar dependiendo del tipo de
transferencia. Estadllsellamadeacuerdoalaconvencin
del lenguaje C, NO funciona si es llamada
Tipo Funcin Aplicabletimeout? conelformatodeSTDLIB.
InterruptINMPUSRead,MPUSReadIntsi
InterruptOUTMPUSBWrite si OBJETIVO
BulkINMPUSBRead si
BulkOUTMPUSWrite si El objetivo principal del presente trabajo es
IsochronousINMPUSBRead no integrar el software de MATLAB con el
IsochronousOUTMPUSBWrite no
PIC18F2455 de Microchip con el fin de

Interrupt:tipointerrupcin disear una tarjeta de adquisicin de datos


Isochronous:tiposncrono ajustada a la necesidad personalizada de
cadadesarrollo.
Nota: Input y output se refiere a los
parmetros designados en las llamadas a
estas funciones, que son lo opuesto a los

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip9/15

OBJETIVOSPARTICULARES en la seccin #include al inicio del


programa.
1. EnlacealaPCmedianteUSB.
2. EnlacedeMATLABalPIC. 3. Verifique que la configuracin del
3. Pruebasfinalesycorrecciones. PLL corresponda a la Frecuencia del
Xtalqueutiliza.Ejemplo:
1. ENLACEALAPCMEDIANTEUSB.
PLL1paraXtalde4Mhz
ParalograrelenlaceaUSBseutilizaron
PLL2paraXtalde8Mhz
las funciones USB, incorporadas en el
lenguaje C del programa CCS para PICS, PLL3paraXtalde12Mhz
dichasfuncionesestnpreparadasparaque
PLL4paraXtalde20Mhz,etc.
elmicrocontroladorseareconocidocomoun
dispositivo personalizado usando los
descriptores queincluyeelmismolenguaje, 4. Abra el archivo C:\Archivos de
seestablecilacantidaddedatosa64bytes programa\PICC\Drivers\usb_desc_sc
(8 bits por byte) de envo y recepcin hacia ope.h ( donde se instal el
compilador de CCS ) que es el
laPC,enlaPCsedescargaeldriverquenos
descriptor del USB ubicado en su
proporciona Microchip en su pgina web. PC, avance hasta la seccin start
Por parte del Hardware, el mismo devicedescriptors(aproxenlalinea
compilador trae en la ayuda un diagrama 132) y reemplace los valores del
esquemtico para conectar al PIC vendor id, el product id y el device
dispositivos adicionales como teclado, releasenumbercomosigue(puede
copiar las tres lneas siguiente y
displaygenricosdedoslneasygrficos,el
pegar en el archivo del descriptor
puerto serie, usb, I2C, etc. Si tiene dudas
<<usb_desc_scope.h>>):
sobre la descarga del driver consulte el
apartado 3. Pruebas finales y correcciones
enstedocumento. 0xD8,0x04,//vendorid(0x04D8is
Microchip)
ConfigurandoelHardware
0x0B,0x00,//productid
1. Conecte el PIC como se muestra en
eldiagramaesquemticoalfinaldel 0x01,0x00,//devicereleasenumber
documento.
5. Compileelprogramaygrbeloenel
2. Antes de compilar el cdigo de PIC(Asegresedequeantesdeabrir
el archivo a compilar presione el
programa<<daq.c>>adjuntoenste
botn inicio (ubicado en la parte
archivo comprimido con PCWH
superiorizquierda)Closealldel
Compiler de CCS versin 3.246 compilador).
posterior,primeroescojaelPICque
utilice PIC18F2455/2550/4455/4550 NOTA IMPORTANTE: De no completar
stospasoslaPCNOdetectaralPIC

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip10/15

ConfigurandoelSoftware dispositivo USB que adquiere en el


mercado: conecte al dispositivo a la
1. LaDLLqueproporcionaMicrochipse
PC, en cuanto le solicite los driver,
puededescargardesdesusitioweb.
sloproporcioneladireccindonde
(www.microchip.com)Asegresede
fue descomprimido el driver (la
obtenerlaversinmsactual.Enla
misma direccin del paso anterior).
direccin web que se menciona en
Si todo es correcto debemos de
la bibliografa se descarga el driver
observar en el administrador de
(link de acceso directo), en caso de
dispositivosunnuevohardwareque
haber caducado busque en la
seagregtalcomosemuestraenla
seccin Aplication and markets
figura 6. NOTA: Si Ud. Olvida no
USB MCHPFSUSBFrameworK sustituye correctamente en el
Software/Tools << Microchip descriptor las 3 lneas que se
Application Libraries v20100209 comentan en el cdigo del
>> simplemente teclee usb programa, el compilador CCS
software/tools en la ventanita de compilar correctamente pero al
bsquedaydleun clicenelbotn conectarse el PIC en la PC, ste no
site search, generalmente el reconocereldriver.
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
Fig.6InstalacindelPICenlaPC
manera similar al que se instala un

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip11/15

4. En propiedades del dispositivo satisfactoriamentelainstalacindelpaquete


instalado se puede observar el de drivers de Microchip. En el mismo
nmero PID&VID que se configur paquete que se descarga de la red
obtenemosinstruccionesyejemplosenC++
en el PIC tal como se muestra en la
quemuestrancomomanipulareldriverylos
figura7. 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
Fig. 7 En propiedades del PIC instalado MATLABusb.mqueesundemodecmoel
enlaPCseobservaelnmerodePID&VID programa enva y recibe datos del PIC, los
archivos _mpusbapi.c y mpusbapi.dll son
ComentariosAdicionales necesarios para la ejecucin en MATLAB y
deben de estar en la misma carpeta que el
Todo esto se desarroll basndose en archivousb.m
ejemplosqueelcompiladortraeincluidosen
la carpeta de examples. Cabe aclarar que Seguidamenteseexplicaeldesarrollode
la comunicacin. Primero es necesario
los diseos en USB con PIC da a da se van
conocerqufuncindeMATLABesmsfcil
incrementando. Slo basta investigar un deimplementar:
poco en la red para ver los resultados
(Consulte la bibliografa de ste Existenvariosmtodos,elqueseutilizfue:
documento).ElcdigodelprogramadelPIC
a. Manipular directamente la dll con la
seencuentraalfinaldeldocumentoconsus
instruccinLoadlibrary
respectivoscomentarios.
Ya que se manipula la librera de una
2. ENLACE DEL MATLAB AL PIC PARA
maneradirectaysinintermediarios.
TRANSFERENCIADEDATOS.

ParapoderiniciarelenlaceconelPICes
necesario que se haya concluido

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip12/15

Para iniciar con la implementacin del vid_pid_norm=libpointer('int8Ptr',


cdigo, primero inicie el programa de [uint8('vid_04d8&pid_000b')0]);
MATLAB
d.Seguidamenteabralapipeparaleer(sino
Siguiendo los pasos descritos en la desealeerpuedeomitirstepaso).
seccin de antecedentes de ste
Formato:
documento, las instrucciones que se
requieren implementar tienen la siguiente [my_out_pipe] = calllib('libreria',
secuenciayformatoenMATLABson: 'MPUSBOpen',uint8 (0), vid_pid_norm,
out_pipe,uint8(0),uint8(0));
a. Primero copie los archivos
Dedonde:
_mpusbapi.c y mpusbapi.dll en la misma
carpeta de trabajo ( se obtienen de la vid_pid_norm = libpointer('int8Ptr',
descarga del driver en la pgina de [uint8('vid_04d8&pid_000b')0]);
microchip ("Microchip MCHPFSUSB v2.4
out_pipe = libpointer ('int8Ptr',
Installer.zip")), al instalarse queda ubicado [uint8('\MCHP_EP1')0]);
en X:\Microchip Solutions\USB Tools\
MCHPUSB Custom Driver\ e. Siguiendo con la secuencia, abra la pipe
Mpusbapi\Dll\Borland_C, en caso de para escribir (si no desea escribir puede
descargar una version de driver ms omitirstepaso).
reciente, reemplace stos archivos por los
Formato:
msnuevos.
[my_in_pipe]=calllib('libreria',
b. Se abre el editor de MATLAB y
'MPUSBOpen',uint8(0),vid_pid_norm,
comenzamos cargando la librera en
in_pipe,uint8(1),uint8(0));
memoria.
Dedonde:
Formato:
vid_pid_norm = libpointer('int8Ptr',
loadlibrarympusbapi_mpusbapi.halias
[uint8('vid_04d8&pid_000b')0]);
librera
in_pipe = libpointer ('int8Ptr',
c. Luego se identifica el nmero de [uint8('\MCHP_EP1')0]);
dispositivosconectadosconelPID&VID
y ubicar el que corresponde al f. Lea los datos de la pipe (solamente si la
hardwaredesudesarrollo.
pipeestabierta)Formato:

Formato:
[aa,bb,data_in,dd] = calllib('libreria',

'MPUSBRead',my_in_pipe, data_in,
[conectado]=calllib('libreria',
uint8(64),uint8(64),uint8(10));
'MPUSBGetDeviceCount',vid_pid_norm)
Dedonde:
Dedonde:

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip13/15

data_in=eye(1,64,'uint8'); Encasodeperderselacomunicacin
conelPIC( encasosdondeelprogramaen
g.Escribalosdatosdelapipe(solamentesi MATLAB genere errores por cuestiones
lapipeestabierta)Formato:: ajenas a la comunicacin) desinstale del
dispositivo Microchip Custom USB Device
calllib('libreria', 'MPUSBWrite',
desde el administrador de dispositivos,
my_out_pipe, data_out, uint8(64),
desconecteelPICdelpuertoUSB,descargue
uint8(64),uint8(10));
lalibreradememoriadesdeelMATLABcon
Dedonde: unloadlibrary librera en la lnea de
comandos de MATLAB y resetee el PIC.
data_out=eye(1,64,'uint8'); Conecte de nuevo el PIC al puerto USB de
su computadora y con eso es suficiente para
h.Cierrela(s)pipe(s)abierta(s),cadavezque restaurar las comunicaciones entre MATLAB
finalice el programa, ya que si quedan y el PIC.
abiertaswindowsgeneraerroresysepierde
3.Pruebasfinalesycorrecciones.
lacomunicacin.
Antes de compilar el programa y
Formato:
grabarlo en el PIC es necesario asegurarse
calllib('libreria', 'MPUSBClose', de que antes de abrir el archivo a compilar
presione el botn inicio del mismo
my_in_pipe);
compilador (ubicado en la parte superior
calllib('libreria', 'MPUSBClose', izquierda) Close all . De no hacer esto
esposiblequesecompileelarchivoanterior
my_out_pipe);
conelqueUdhayatrabajado.
IMPORTANTE: ParaelenlaceconlaPCporUSBesmuy
importante conectar el capacitor (C4) de
Al terminar el programa descargue
0.1uFcomoseindicaeneldiagrama,yaque,
la librera de memoria, ya que no se puede
si se omite generar un error al momento
cargarmsdeunavez.
del enlace. Tambin es muy importante
Formato: habilitar el fusible VREGEN para que Vusb
seaactivado.
unloadlibrarylibrera;
CuidardenoinvertirlasterminalesDy
D+ del conector USB a la hora de
Una vez enlazado con el PIC, los implementarelHardware.
datos pueden fluir las veces que sea
necesario de un sentido a otro y Es importante considerar la funcin del
manipularloscomosedesee,yaquesetiene PLLdelPICyaquedeacuerdoalvalordela
elcompletocontroldelsoftwaredelPIC(por frecuenciadelcristaldependeelvalordela
partedelCompiladorC)yenlaPC(porparte multiplicacindelafrecuenciadelrelojpara
deMATLAB). generarlos48MhznecesariosparaelUSB.

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip14/15

Por lo que respecta al descriptor del http://picmania.garcia


USB, es importante considerar el valor del cuervo.com/index.php
VID & PID, ya que si no es configurado
correctamente, el driver que proporciona Driverdemicrochip:
Microchip no lo reconocer y en MicrochipApplicationLibrariesv20100209
consecuencia, no funcionar. Para esto no
olvide sustituir en el descriptor las 3 lneas http://ww1.microchip.com/downloads/en/d
quesecomentanenelcdigodelprograma evicedoc/MCHP_App_%20Lib%20v2010_02_
queseanexaenstedocumento. 09_Installer.zip

La DLL que proporciona Microchip se Asegresequeelarchivoseaelmsactual.


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

TransferenciadedatosentreMATLAB,elpuertoUSB2.0yPIC18F2455deMicrochip15/15
5 4 3 2 1

SALIDAS
+5V
D D
+5V
D1 D2 D3 D4 D5 D6 D7 D8

R1 R2 R1 R2 R2 R2
10K 10K 10K 10K 10K 10K C5
0.1uF

20
R4 R5 R4 R5 R4 R5 R4 R5
2 150 150 150 150 150 150 150 150

VDD
RA0 RA0
RA1 3 RA1
RA2 4 RA2
RA3 5 RA3

RB0

RB1

RB2

RB3

RB4

RB5

RB6

RB7
RA4 6 RA4/T0CKI/C1OUT/RCV
RA5 7 RA5/SS RC6/TX/CK 17
RC7/RX/DT/SDO 18
+5V R6 R7 11
10K 100 RC0/T1OSO/T13CKI
C 1 13 Entrada del C
MCLR/VPP/RE3 RC2
cable USB
RB0 21 RB0/INT RC1 12
+5V S1 22 U2 _
RB1 RB1
SW 23 PIC18F2455
J4 RB2 RB2
RB3 24 J1
RB3
1 RB4 25 RB4 1 J1-USB

USB
OSC2/CLKO/RA6
2 RB5 26 RB5 RC4/D-/VM 15 2
27 16 1
3
28
RB6 RC5/D+/VP 3 D+ + + 2 GND
4 RB7 4 3 + + 4
OSC1/CLKI
14 D-
5 RB6 VUSB C4 Vista Inferior
RB7
0.1uF

GND
GND
ICSP
10

19
9

B
8 B
X1
12 MHz

RA0

RA1

RA2

RA3

RA4

RA5
J3 C7 C8
+5V +12V 22pF 22pF
POWER SUPPLY

S1 S1 S1 S1 S1 S1
4 SW SW SW SW SW SW
3
2
1
C2
2200uF C1 ENTRADAS
1000uF

A Diseado por: Ing. Gabriel Pool, gpoolb@hotmail.com A


Title
Integracin de PIC18F2455 con MATLAB

Size Document Number Rev


A DAQ 01

Date: Thursday, July 02, 2009 Sheet 1 of 1


5 4 3 2 1

También podría gustarte