Você está na página 1de 8

21/07/13 Construindo um dispositivo USB-PIC

www.pictronics.com.br/component/content/article/40-pics/59-construindo-um-dispositivo-usb-pic.html?tmpl=component&print= 1/8
ConstruindoumdispositivoUSBcomPIC18F
Atualizao
FoipublicadoumaClasseVisualC++deCdigoAberto(OpenSource)paraUSBComunicaoHIDGenrico.Porfavor,duma
olhadaparainformaesmaisdetalhadassobreaprogramaodeaplicativoparaHIDgenricoparaWindowseumaatualizaode
aplicativoparaoWindowsparaesteprojetoSimon(2010/03/30).
ExisteagoraumaversoemC#dasbibliotecasutilizadasparaacomunicaocomohostWindows.Vocpoderlersobreisso
aqui(emingls)Simon(20100505).
Introduo
SeperguntamuitosobreaconstruodedispositivosUSBusandoPIC18F.DepoisdeprocurarmuitosprojetoscomoAtariJoystick
USBAdaptoreC64VICEFrontEndparecehaverumademandapormaisinformaessobrecomo'modificarosprpriosaparelhos'.
NesteartigovoumostrarcomomontaremumaprotoboardumsimplesdispositivoUSBHIDgenrico,acriaodofirmwarePIC18F
e,finalmente,criarainterfacedoWindowsparaodispositivoquepermitirquevoccontroleumLEDdoPCeleroestadodeum
botododispositivo.DesdeoadventodoWindows7vocprecisadeumacertificaodevalidaocaradaMicrosoftparacriar
drivespersonalizadosUSB(semqueamaioriadosusuriosnopodemnemmesmoinstalaroseusoftware).Usandoosdrivers
nativosparadispositivosgenricosHIDfornecemummtodosimplesparacriaodedispositivoscompatveiscomWindowse
Linuxetambmfacilitaacriaodefirmwareesoftwaremuitosimples.DesdequeopadroHIDapareceunoexigeanecessidade
dedriverspersonalizadosvocnovaiprecisarobterumcertificadoparaoseudriver,tambmoWindowseoLinuxtmbibliotecas
embutidasparaajudarvocacomunicarviaUSB.
ParaesteprojetovamosverumdispositivoUSBbastantebsico.OdispositivopermitelhecontrolarumLEDapartirdoWindowse
tambmverostatusdeumbotoligadonodispositivo.UsandoestesprincpiosbsicosdecomunicaoUSBde2viasvaificar
clarooquedparaserfeitonosprojetosmaiscomplexos.
21/07/13 Construindo um dispositivo USB-PIC
www.pictronics.com.br/component/content/article/40-pics/59-construindo-um-dispositivo-usb-pic.html?tmpl=component&print= 2/8
Paramanterocustoeadificuldadetobaixosquantopossvelvoumeconcentrarnaconstruodohardwareemprotoboard
utilizandopoucoscomponentes,ofirmwarePIC18Fserbaseadoem(disponvelgratuitamente)MPLABeocompiladorHitechC,o
softwareWindowssercriadousandooMicrosoftVisualC++2008Express(quetambmlivreparafazerodownload).
EmboraesteprojetosejabaseadonodomicrocontroladorPIC18F4550vocpodefacilmentesubstituiresseparaoPIC18F2550
menoremaisbaratoquecompatvelcomocdigodo4550quemaior.
Sevocquiseracompanharesteprojeto,eusugiroquevocvatofimefassaodownloaddosoftwarequeoacompanha.Tambm
verifiquesevoctemoMPLAB,HiTechCparaoPIC18FeMicrosoftVisualStudio2008Expressinstalado.
Porfavor,notequetodasasimagensdetelassofeitasapartirdeumamquinacomWindows7,sevocprecisaencontraros
programasiguais/semelhanteaumainstalaoWindowsantigaporfavordirijaseaoGoogle,ondevocvaiencontrarmuita
informaosobreondeositensestoemumamquinaWindowsMEporexemplo.
Hardware
Paracomear,precisamosconstruirumdispositivoUSBparasecomunicar.Nodiagramadecircuitoabaixovocpodevera
configuraomnimaparaumdispositivoUSButilizvel.OdispositivoincluiumconectorICSP(InCircuitSerialProgramming)e
umconectorUSBtipoB.Almdisso,existeumnicoLEDeumbotosimplespararepresentarosdispositivosdeentradaesada.
Ocircuitobastanteavanado(sevocnoentendeestenveldeeletrnicademicrocontroladoreseusugiroquevoctente
construiralgunsdosmuitosexemplosdepiscaLEDebotodisponveisnawebantesdetentarisso).OPIC18F4550ser
"alimentadaporbus',issosignificaqueodispositivovaitirarsuaenergiaapartirdohostUSB(PC)deformaquenenhumregulador
detensonecessria.Ocapacitorde470nF(C3)necessrioparaqueoPICpossaoperarocircuitoUSBinterno(quecontribui
comaregulaodatensoUSBexigidopelainterfaceUSBonboardnoPIC).
OcabealhoICSPpermitequevocconecteumprogramadorPIC,eusugirousaroprogramadorPICkit2,pormoutros
programadoresICSPcompatveisdevemfuncionarmuitobem.Oclockde20MhznecessrioparaaplicaesUSB.Issopermite
aoPICparausarPLLquelevantaavelocidadedeclocka48MHz,necessrioparaacomunicaoUSB.
21/07/13 Construindo um dispositivo USB-PIC
www.pictronics.com.br/component/content/article/40-pics/59-construindo-um-dispositivo-usb-pic.html?tmpl=component&print= 3/8
(Oleitor[Jason]memandouumemailapontandoqueumcristalde20MhznoestritamentenecessrioquandoseutilizaaUSB
nativadoPIC18FOquebastantecorreto.Vocpodeusarvrioscristaisdesdequealtereaconfiguraodos#FUSESdoPIC.
ConfiranodatasheetdoPIC18F4550pginas2930paraobtermaisinformaesObrigadoJason!).
Afiguraaseguirmostraocircuitoconstrudonumaprotoboard.Euadicioneialgunsrtulosimagemparaquefiqueclaroquais
componenteseondeestcolocados.Noteque,paraaprogramao,estamosusandoafontede5Vdoprogramador.Comoesteum
dispositivoalimentadopelaslinhasdebarramentododispositivoUSBde5VserligadoaoconectorUSBtambm.Issosignifica
que,seambosoprogramadoreocaboUSBestoconectadossimultaneamente,opotencialdoprogramadorfornece5Vparaohost
USB,oquenorecomendadopelospadresUSB.Eununcaviumcasoemqueestaligaogeredanos(parafinsde
experimentao),massevocquiser,podeadicionarumdiodoretificadorparaoconectorUSBparaimpediristo.Nosmeus
projetoseucostumousarumdiododebarreiraSchottky1N5817paraisso.

SevocnotemumplugUSBparaoseuprotoboardvocpodesimplesmentefazerumusandoumpequenopedaodeplacapadro
(comoomeuadaptadorsimplesnafotoacima),ouvocpodecortarumaextremidadedeumcaboUSB,solteosfiosecoloque
diretamentenaprotoboad.Eurecomendofazerumadaptador,elereduzoriscodeosfiossesoltarem,quandovocestconectando
ocaboUSBdentroeforadeseuPC.
(oleitor[Brandon]memandouumemailperguntandosobreaspropriedadesdosresistoresecapacitoresnesteprojetoresistorese
capacitoresde1/4Wnominalparaqualquercoisaacimade5voltssoperfeitosparaesteprojeto(valoresmaiselevadosnoentanto
devemfuncionarbem)ObrigadoBrandon!)
SenotivercertezadaligaodocaboUSBaimagemaseguirquemostraapinagemdeumconectorUSB(tipoBfmea)ea
codificaopadrodecordocabo:
21/07/13 Construindo um dispositivo USB-PIC
www.pictronics.com.br/component/content/article/40-pics/59-construindo-um-dispositivo-usb-pic.html?tmpl=component&print= 4/8
Depoisdeconstrudoocircuitoacimanoseesqueadeverificarasligaesdeenergiapositivaenegativaprocurandoqualquer
curtoantesdeconectarodispositivoemseuPC,vocnoquerdanificarseucomputador!Certifiquesesempredeverificaras
coisasantesdeconectarqualquercaboUSBouseuprogramadorparaevitardespesasdereparao!
Firmware
ParaconectarseudispositivoUSBnocomputadorquevocprecisaprimeiroescreverecompilaralgunsfirmwaresparao
PIC18F4550.AMicrochip(fabricantedomicrocontroladorPIC)fornecerlivrementeumapilhaUSBparadownloadapenasparaesta
finalidade.Parafacilitarascoisasquetenhoescritoalgunsfirmwaressimplesparainiciarodispositivo,vocpodeusarcomobase
paraentendercomofuncionaofirmware.Assimquetiveroseuprimeirodispositivorodandovocvaiacharmuitomaisfcilentender
comovocpodeadaptloparaaplicaesmaiscomplexas.
Ofirmwaretemqueexecutarduastarefasimportantesqueestodescritosabaixo.

Enumeraodedispositivos
AprimeiraaenumeraododispositivoUSBestefeitopodesoarcomplexo,naverdadeaprimeiracomunicaocomohost
USB(PC)quandoodispositivoinformaaohostoqueecomoeledesejasecomunicar.AcomunicaoUSBfeitausando
"terminais",quequeremenviarinformaesparaohostouparaodispositivo.Bemcomoacriaodecanaisdecomunicaodo
dispositivotambmdevempassaronomedodispositivoeoutrosdoisvaloresimportantes:oVIDePID.
OVIDaidentificaodofornecedoreidentificaofabricantedodispositivo.ParaobterseuprprioVIDvocprecisapagarmil
dlaresoumaisparaocorpodepadresUSB.Nesteexemplo,usaremosVIDdaMicrochipparasalvaradespesa.Sevocest
pensandosriosobreaproduoevendadedispositivosvocterderegistrarumdosseusprpriosVID.
OPIDaidentificaodoproduto.JuntamentecomaVIDelesformamumidentificadorexclusivoparaoseudispositivo.Quandoo
primeirodispositivoenumeraoWindowsirarmazenaracombinaoVIDePIDparaodispositivo,oqueverdadeiromesmose
vocusarumdrivergenrico,comoaHID,umavezquereduzaquantidadedetempoqueoWindowsnecessitaparaobteroseu
dispositivopronto.Istoimportanteporque,sevocdecidirmudarasinformaesdoseudispositivodeenumerao(adicionarmais
pontosdeextremidadeetc.),voctambmvaiprecisardepelomenosmudaroPIDantesdereconectarcasocontrriovocter
erros:Dispositivonofoiiniciado"mesmoqueocdigoestejaimpecvel(comaexperinciaqueeutenhonotadooLinuxnoto
exigenteetendeanoreclamarsevocmantiveramesmacombinaoVID/PID).
Comunicaocomohost(PC)
Asegundatarefaimportantequeofirmwarerealizaacomunicaorealentreohosteodispositivo.Cadacomunicao
identificadaporum'comando'.AoutilizaropadroHIDgenricoo"comando"dizaohost(PC)eaodispositivocomointerpretara
informaoquepassadacomocomando.Estainformaopodeserqualquercoisa(nochamamde"genrico"pornada!).E
assimquevocpodeconseguirumagrandeflexibilidadenastarefasqueseusdispositivosvoexecutar.
Quandoodispositivoenumeradoohostpesquisaperiodicamenteodispositivoestasempreiniciadapelohost,enopelo
21/07/13 Construindo um dispositivo USB-PIC
www.pictronics.com.br/component/content/article/40-pics/59-construindo-um-dispositivo-usb-pic.html?tmpl=component&print= 5/8
dispositivo(emborahajaexcees,maistarde,quandochegarmaisprofundamentenosprotocolosdecomunicao).Emcadaao
ohostpodetantoenviarumacomandodedadosparaodispositivo,bemcomoreceberumcomandoeosdadosdodispositivo.
Aparteprincipaldofirmwarequevocdeveolharaseoquetratadospedidosdeaoapartirdohosteexecutaasaes
necessriasparafazerfuncionarodispositivo.

Entendendoocdigofontedofirmware
Noarquivo'PIC18FgenricoHIDDevice'zipincludocomesteprojetovocencontrarumfirmwarecompletoprontoparaser
gravadonoPIC18F4550.BastadescompactaroarquivonumdiretriodoseuprojetoMPLABedepoisusaroMPLABparaabriro
projeto.Eusepareidoisarquivosfonteearquivosdecabealhonocdigoquevocdeveolhareaspartesmaisgenricasdapilha
Microchip(armazenadosem"pilhaUSB(USBstacks)nossubdiretriosdonavegadordeprojeto).Osarquivosqueestonos
diretriossobrea"pilhaUSB(USBstacks)sointeressantes,masparacomearrapidamentevocnodevesepreocuparcomos
aspectosminuciososdocdigoatquevocestejamaisfamiliarizadocomosnveissuperiores.
DesdeoVID/PIDeorestodasinformaesdeenumeraojestopreparados,vocdevecomearfazendoumbuildallnoprojeto
efaaodownloaddofirmwareresultanteparaoPIC18F.Claro,vocvaiprecisardeumbomambientedecriaoparaeste
trabalho,mashumaabundnciaderecursosatravsdoGoogle,sevocestivertendoproblemascomodesenvolvimento.Tente
algunsexemplossimplesparaverificarsetudoestok,antesderecarregaresteprojetoetentarnovamente.
Ofirmwareoferecetrscomandos:
0x80MudaoestadodoLED
0x81Loestadodoboto
0x82LoestadodoLED
Ocdigoqueexecutaessescomandosestlocalizadonoarquivodeorigemmain.cnafunoprocessio().Estafuno
responsvelpordeterminaroscomandosnecessriose,emseguida,enviarereceberdados,conformeapropriado.Istobastante
simplesumavezqueapilhaUSBcuidadetodaacomplexidadedacomunicaodumarpidaolhadanocdigofonteevocver
oquosimplesistorealmente.Anicafunoextraexecutadapelaverseodispositivoestemestadodeconfigurado",oque
significaqueodispositivoestconectadoaumhosteaenumeraofoibemsucedida.
AprincipalfunosimplesmentechamaapilhaUSBparaexecutarastarefasdebaixonveldodispositivoe,emseguida,chamaa
funoprocessio()umaeoutravez.possvelfazerissousandointerrupesaoinvsdeumloop,noentanto,nestefirmwareeu
mantiveomaissimplespossvel.
Paraentenderumpoucomaissobreoprocessodeenumeraodumaolhadaemusb_descriptors.cquecontmasinformaes
quesopassadasparaohostquandoodispositivoligadopelaprimeiravez.NofontevocvaiencontrarasinformaesVIDePID
paraodispositivo,bemcomoumasriededescritoresdeconfiguraoqueexplicamparaohostotipodeinterfacesdodispositivoe
ascapacidadesdasinterfaces.O"endpoints"soosconectoresparaos'pipes'descritoanteriormente.Htambmalgumas
seqnciasquedescrevemofabricanteeoprodutotextualmente.OWindowsnormalmenteusaessasinformaesaonomear
dispositivosUSB.
Compreenderoprocessodeenumeraoeosdescritoresdeformatosbastantecomplexoecobertoporvriasespecificaes
USB,bemcomodizumgrandelivrodeJanAxelsonchamado"USBCompletoTudoquevocprecisaparadesenvolverperifricos
USBpersonalizados"(ISBN9781931448086).SevocestgostandodesteprojetoequiserobtermaisinformaessobreUSBeu
recomendoobterolivro,quecertamentemeajudouquandoeuestavaaprendendo.
Normalmente,ofirmwarebemsimples,tudoquevocprecisapararodaresecomunicarcomohost(PC)estincludo.
Obviamentevocpodefazerissotocomplexocomoquiser,masparaosfinsdesteprojeto(quevaificarcomUSB)hmuitopara
experimentar.
Conectandoodispositivo
DepoisdeterseguidoospassosacimaebaixarofirmwareparaseudispositivoUSBestprontoparaserligadoaoseuPC.Como
21/07/13 Construindo um dispositivo USB-PIC
www.pictronics.com.br/component/content/article/40-pics/59-construindo-um-dispositivo-usb-pic.html?tmpl=component&print= 6/8
estamosusandoosdriversUSBHIDgenriconohnadaparainstalarnoPCantesdeligar.BastaconectarocaboUSBaoseu
dispositivoedepoisconecteaoutraextremidadedocaboUSBnoseuPC.
OWindows7devedetectarumnovodispositivoeexibiroavisohabitualdeinstalaodenovohardware.Apsalgunssegundos
vocverajaneladedilogoaseguir:
Sevoc,emseguida,navegueatomenuIniciareselecione"DispositivoseImpressoras"(sevoctiverumaversoanteriordo
Windows,vocprecisaprocuraremoutrolugarnopaineldecontrole,masoresultadoexatamenteomesmo.Todasestasimagens
sodoWindows7)vocvaiveronovodispositivoexibidonatela.Vocdeveveralgocomoajanelaseguinte:
Issomesmo,oseuprimeirodispositivoUSBestenumeradoeprontopararodar!Agorapodemospassarparaoladodohostda
programaoeentendercomovocpodesecomunicarcomodispositivousandooMicrosoftVisualC++2008.Nota:Oestado
padrodoLEDligado,eledeveacenderlogodepoisquevocligarodispositivo.
Softwarehost
Ateno:AtualizaodosoftwaredohostparaesseprojetojestdisponvelapartirdoOpenSourceVisualC++paraaclasse
GenericUSBPginadeComunicaoHID.
OsoftwaredohostbastantediretoeconsistebasicamenteemtrspartestodascontidasnoarquivoForm1.h:
AcompanhamentododispositivoUSBparagarantirqueeleestejaconectado(edesabilitandoaentradadousurioea
comunicaododispositivo,senoestiveconectado).
Apresentareprocessaroformulriodeinterfacedeusurioparapermitiraousuriointeragircomoaplicativo.
ComunicaocomodispositivoUSBeatualizarostatusdodispositivo.
EumebaseeinosoftwaredehostdaPnPGenricoMicrochipHIDsoftwarequevemcomapilhaUSB(USBstack).Noentanto,
comoofirmware,eutenteitornloumpoucomaisfcildeserentendido.
21/07/13 Construindo um dispositivo USB-PIC
www.pictronics.com.br/component/content/article/40-pics/59-construindo-um-dispositivo-usb-pic.html?tmpl=component&print= 7/8
ParaexecutarosoftwaredohostdescompacteoVisualStudio2008expresszipenavegueatodiretrio"Release",emseguida,
cliqueduplosobreoarquivoWFFgenricoHIDdemo.exe.Vocdeverentoserapresentadocomaseguintecaixadedilogo:
ParatestaradetecodedispositivosimplesmentedesconecteocaboUSBdoseuPC.Odilogodevemudarparaoseguinte:
Agora,voltealigarodispositivoUSB,espereatqueoWindowsasatualizeacaixadedilogo(emostrarconectado),agoratente
clicarnoboto"AlternarLEDs(ToggleLEDs).VocdeververoLEDnaprotoboardligaredesligar...nolegal?:)
EmseguidacertifiquesequeotextodostatusdoLEDnajanelacorrespondesituaorealdoLED.Esteocomando0x82no
firmwareemao.Finalmente,tentepressionarobotonaprotoboard,vocveroestadodobotomudardamesmaformana
janela.
Parabns,vocagoradonodoseuprimeirodispositivoUSBquevocmesmofez!
EuincluocdigofontenoarquivozipdoVisualStudio,entovocdevesercapazdeveroprojetonoVisualStudioparaobteruma
melhorcompreensodecomoelefunciona.

Ondecontinuar?
AinterfaceUSBHIDgenricoumdosmuitostiposdeinterfacedisponveisnopadroUSB(emborasejaprovavelmenteomaistil
paradesenvolvedoresPIC).Usandoexatamenteasmesmastcnicasmostradasnesteprojeto,vocpodeconstruirdataloggers,
interfacesderobtica,hardwareeinterfacepersonalizada,etc,etcAlistainterminvel.
Esperemosqueesteprojetotenhalhedadoumaintrospecodoquepossvel,paraseusprximospassoseurecomendo
fortementequevocdumaolhadanapilhaUSBdaMicrochipeemalgunsdosgrandeslivrossobreprogramaoPIC,interface
USBeVisualC++.
Almdisso,sevocgostariadecontinuaraexperincia,masgostariadeumambientederefernciamaispoderosovejaoPlacade
desenvolvimentoUSBPIC,quepermitevocfacilmentetestarrmuitosmaisprojetoseinterfacesUSB.
Esteartigofoiapresentadonahackaday.com,vocpodeencontraroartigoaqui,obrigado!
21/07/13 Construindo um dispositivo USB-PIC
www.pictronics.com.br/component/content/article/40-pics/59-construindo-um-dispositivo-usb-pic.html?tmpl=component&print= 8/8
VocestconvidadoadeixarperguntasecomentriossobreesteartigonoFrumPictronics.
ArquivosparaDownload
MPLABarquivosdoprojetoparaoPIC18F4550firmwareoleitor[Andrew]dissequenoficouclaroqualcompiladorestecdigo
exige.VocvaiprecisarbaixaraversogratuitadocompiladordaHitechC18Pro(disponvelsitedaHitech),noircompilar
usandoocompiladorC18daMicrochip.
VisualC++2008Arquivosdoprojetoparaosoftwaredohost(PC)
Ateno:AtualizaodosoftwaredehostparaesseprojetojestdisponvelapartirdapginaVisualC++CdigoFontedaClasse
paraUSBGenricadeComunicaoHID.
Sevocestiverinteressadoembaixarooriginal:PilhaUSBdaMicrochipvocpodebaixaraqui.
OHiTechC18Proportestdisponvelaqui(noqualesteprojetofoibaseado).
Projetomontado
Vejaostestesrealizadoscomesteprojeto:
Montagem

Confiraoresultadodostestesnestevdeo:
TestefeitoporKauVinciusdeOliveira,obrigadoKau.
Tags: AtariJoystick Dispositivo Iscp Pic Pic16 Pic16f Pic18 Pic18f Pic18f4550
Pickit2