Juhtimine USB kaudu arvutist oma kätega. Seadmete haldamine arvuti USB pesa kaudu - Riistvara - Arvuti ja elektroonika!!! Kasutatud tarkvara

Erinevate seadmete arvutijuhtimisseade, mille skeem on näidatud joonisel fig. 1, ühendub arvuti USB-porti, mis on tänapäeval kõigis neist olemas. Seadme ainus kiip on tavaline mikrokontroller ATmega8. See on vajalik bussi kaudu suhtlemise korraldamiseks. USB. Kuigi sellel pole spetsiaalset riistvaramoodulit, teostatakse seda funktsiooni tarkvaras.

Pilt 1

Toiteallika positiivse klemmi ja USB D-bussi liini vahele ühendatud takisti R1 lülitab selle 1,5 Mbit/s vahetuskursiga väikese kiirusega LS režiimi, mis võimaldab tarkvaras arvutiteateid lahti krüpteerida. Takistid R4 ja R5 kõrvaldavad infovahetusel tekkivad siirded, mis suurendab tööstabiilsust. Kondensaator C1 blokeerib toiteahelas impulssmüra, mis parandab ka seadme stabiilsust Dioode VD1 ja VD2 kasutatakse mikrokontrolleri toitepinge langetamiseks ligikaudu 3,6 V-ni - see on vajalik tasemete sobitamiseks USB siiniga.

Seadme juhtsignaalid genereeritakse mikrokontrolleri väljunditel PB0-PB5 ja PC0, PC1. Kõrge loogiline tase - pinge on umbes 3,4 V. Madala taseme pinge on nullilähedane. Väljunditega saate ühendada seadmeid, mis tarbivad voolu mitte rohkem kui 10 mA (igast väljundist). Kui on vaja suuri voolu või pinge väärtusi, tuleks kasutada sobivaid sõlme.

Seade on monteeritud leivaplaadile, trükkplaat pole välja töötatud.Kasutusel on MLT takistid, kondensaatorid C2 ja SZ on kõrgsageduslikud keraamilised kondensaatorid, C1 on K50-35 vms imporditud. Ränidioodid, mille pingelang ristmikul on umbes 0,7 V.

Mikrokontrolleri programm töötati välja keskkonnas Bascom-AVR versioonid 1.12.0.0. USB siiniga töötamiseks kasutatakse raamatukogu swusb.LBX, mis teostab reaalajas USB-signaalide tarkvara dekodeerimist. Saadud programmikood HEX-laiendiga failist tuleks laadida mikrokontrolleri FLASH-mällu. Mikrokontrolleri konfiguratsioonibittide olek peab vastama joonisel fig. 2.

Joonis 2

Kui ühendate seadme esimest korda arvutiga, tuvastab operatsioonisüsteem uue USB HIDühilduv seade nimega " uniUSB" ja installib vajalikud draiverid. Mõne sekundi pärast on seade konfigureeritud ja kasutusvalmis. Sellega töötamiseks loodi programm UniUSB. See on saadaval kahes versioonis: 32-bitise (x86) ja 64-bitise jaoks (x64) Windowsi perekonna operatsioonisüsteemid. 32-bitist versiooni on testitud operatsioonisüsteemidega Windows 98, Windows XP ja Windows 7, 64-bitist versiooni aga ainult Windows XP x64 peal.

Programm UniUSB keeles kirjutatud PureBasic(versioon 4.31), kasutades kasutaja määratud funktsioonide teeki HID_Lib, toetades tööd USB HID seadmeid. Programmi akna välimus on näidatud joonisel fig. 3.

Joonis 3

Selle käivitatava failiga samas kaustas peaks olema fail nimega UniUSB_KOfl.txt. See fail salvestab skripti välisseadmete juhtimiseks. Programmi käivitumisel laaditakse failist andmed põhiaknas asuvasse tabelisse ja töö lõpetamisel salvestatakse faili. Vasakklõps tabeli lahtritel võimaldab muuta nende olekut: 1 - kõrge loogiline tase, 0 või tühi - madal loogiline tase.

Tabeli veeru lisamiseks või kustutamiseks tuleb sellel paremklõpsata ja ilmuvast menüüst valida vajalik toiming. Kui ühendate seadme USB-porti, tuvastab programm selle ja aktiveerib tööriistaribal akna ülaosas asuva nupu Start. Sellele nupule klõpsamine käivitab tabeli veergude sortimise ja neis näidatud väljundolekute seadistamise. Suurema selguse huvides on tabelist vasakul esile tõstetud nende väljundite arv, mille loogikatase on hetkel kõrgeks seatud. Otsingukiirus (aeg millisekundites veerust veergu üleminekute vahel) määratakse väljal "Kiirus, ms".

Pange tähele, et Windowsi operatsioonisüsteem on multitegumtöötlus! See tähendab, et protsessori aeg jaguneb paljude, mõnikord kasutaja eest varjatud protsesside vahel, mida täidetakse kordamööda, võttes arvesse süsteemis seatud prioriteete. Seetõttu ei tohiks alla 100 ms intervallide hoidmisel oodata suurt täpsust.

Veergude sortimise korraks peatamiseks kasutage nuppu "Paus". Uuesti vajutades jätkatakse otsingut kohast, kus see peatus. Nupp "Stopp" peatab tabeli veergude vahel otsimise täielikult. Kui arvuti ja seadme vaheline infovahetus ebaõnnestub või seade on arvuti USB-pistikust lahti ühendatud, teatab programm veast, kuvades olekuribal vastava teate.

Allikas: Raadio nr 2, 2011

Utiliit ühendatud USB-seadmete jälgimiseks ja kuvamiseks. USBDeview kuvab üksikasjalikku teavet iga komponendi seadme kohta. Võimaldab hallata aktiivseid USB-porte ja diagnoosida andmeedastuskiirust.

USBDeview ülevaade

Programm kuvab teavet iga USB-seadme kohta koos võimalusega seda testida:

  • Seadme nimi
  • Kirjeldus
  • Seadme tüüp
  • Seerianumber (salvestusseadmete jaoks)
  • Seadme lisamise kuupäev ja kellaaeg
  • VendorID, ProductID ja palju muud

Täielik kontroll USB-pordi kaudu ühendatud seadmete üle:

  • Eemaldage süsteemist varem kasutatud USB-seadmed
  • Katkestage praegu ühendatud seade
  • USB-seadmete keelamine ja lubamine

USBDeview sisaldab mitmeid kasulikke tööriistu. Näiteks USB-mälupulkade kiiruse test, mis diagnoosib ühendatud välkmäluseadme lugemis-kirjutuskiirust. Pidage meeles, et kiirustesti edukaks tegemiseks vajate vähemalt 100 MB vaba kettaruumi.

USBDeview abil saate hallata USB-mäluseadmete käivitusatribuute. Võimalik on töötada kaugarvutis, kuid selleks on vaja administraatori õigustega sisse logida.

– Igor (administraator)

Tänapäeval on paljudel kasutajatel rohkem kui üks USB-seade. Tegelikult on USB-ühenduse loomine muutunud peaaegu universaalseks meetodiks. Enamik inimesi on ilmselt isegi unustanud selliste portide/pistikute olemasolu nagu LPT ja COM. Näiteks on üsna suur osa välisseadmetest (printer jne) ühendatud ainult USB kaudu.

USBDeview halduri programm USB-seadmete haldamiseks

Kui teil on palju erinevaid USB-seadmeid ja kasutate neid aktiivselt, siis on tõenäoliselt tekkinud Windowsi standardse USB-seadmehalduri probleemid ja piirangud. Ühenduste tõhusamaks haldamiseks on NirSofti spetsiaalne utiliit nimega USBDeview (allalaadimislink).

Märge: Windowsi standardse seadmehalduri piirangud on üsna õigustatud. Kuna seda funktsiooni kasutavad nii kogenud kui ka algajad kasutajad.

Märge: Arendaja lehel on päris palju infot. Allalaadimislingid ise on allosas.

Utiliit on kaasaskantav ja seda saab kasutada kõikjal. Käivitatav fail kaalub umbes 170 KB ja see on saadaval nii 32-bitise kui ka 64-bitise Windowsi versiooni jaoks. Nii väikese programmi kohta on sellel üllatavalt palju kasulikke funktsioone.

Märge: Lisateavet selle kõigi võimaluste kohta leiate arendaja veebisaidilt. Selles artiklis käsitletakse ainult mõnda neist enim kasutatud.

Nagu ilmselt märkasite, on pildil mõned saadaolevad funktsioonid. Ühendage, katkestage ühendus, kustutage, avage, kontrollige kiirust, muutke tähti ja palju muud.

Programmi USBDeview kasulikud funktsioonid

Erinevatel põhjustel peab Windowsi register arvestust kõigi operatsioonisüsteemiga ühendatud USB-seadmete kohta. USBDeview näitab kogu teavet kõigi seadmete kohta, mille registrikirjed on salvestatud. Vajadusel saate registris vajalikku teavet parandada (utiliit võimaldab kohe avada registrivõtme usb-seadme teabega).

Märge: seadme teabe salvestamist kasutatakse vähemalt mitmel põhjusel. Esiteks on seadme taasühendamine kiirem. Teiseks, seadmete puhul, mis nõuavad mittestandardsete draiverite installimist, on see ülioluline funktsioon. Vastasel juhul peaksite draiverid iga kord uuesti installima. Kolmandaks saab seadmetele määrata draivitähed. Ja samade tähtedega seotud probleemide ohu vähendamiseks on mõttekas määrata igale seadmele kordumatu täht.

Kuigi USB-sideprotokolli iga versiooni lugemis- ja kirjutamiskiiruse määramiseks rakendatakse standardeid, võib kiirus iga seadme puhul erineda. USBDeview võimaldab teha lihtsa testi, kasutades kirjutamiseks ja lugemiseks ühte suurt faili. Muidugi oleks õigem test erineva suurusega failide erinevate rühmade kopeerimine ja lugemine, kuid sellegipoolest võimaldab see test hinnata ligikaudset kiirust.

Utiliit võimaldab teil muuta ka draivi tähte. Muidugi on ka teisi võimalusi, kuid sel juhul saate seda teha vaid paari klõpsuga.

Üldiselt on USBDeview suurepärane USB-seadme haldur.

Arvuti, mõned osad, tööriistad, igaüks saab sellest arvutist korraldada lihtsa kodumasinate juhtimise. Paljudel igapäevaelus kasutatavatel seadmetel on palju funktsioone, näiteks suudab enamik kaasaegseid telereid näidata teatud arvu erinevaid kanaleid, ventilaatoril võib olla mitmeid erinevaid töörežiime jne. Selliste keeruliste juhtimisseadmete, nagu näiteks kanalite või töörežiimide vahetamine, tegemiseks on vaja lisaks eelmainitule lisateadmisi, osi ja tööriistu, kuid lihtsa sisse-välja lülitamisega saab hakkama igaüks, kellel on eelnev. Arduino suhtleb arvutiga USB-pordi kaudu, infot saab arvutist Arduinosse üle kanda Arduino arenduskeskkonna (nn Arduino IDE) kaudu, mille saab alla laadida Arduino ametliku veebisaidi lehelt. Arduino suhtlemiseks välismaailmaga on palju erinevaid mooduleid, näiteks spetsiaalne moodul koos releeplokiga koormuste vahetamiseks, selliste moodulite kasutamisel on töö oluliselt lihtsustatud, siin käsitleme mooduli iseseisvat tootmist. üks relee kodumasinate sisse/välja lülitamiseks, vajadusel saab teha rohkem kui ühe sellise mooduli ja kasutada neid ühe Arduinoga, võimaldades seeläbi hõlpsasti juhtida paljusid kodumasinaid. Arduinol (ükskõik millisel) on mitmeid üldotstarbelisi tihvte, mis on tahvlil tähistatud lihtsalt numbritega või numbritega, millel on laineline “~” märk. Ühendades Arduino arvutiga ja kirjutades sellesse spetsiaalse eskiisi (programm Arduino jaoks) (Arduinosse), saate neid kontakte sellest arvutist "Arduino IDE" programmi kaudu juhtida, muutes need kõrgepingeliseks (umbes +5 V (HIGH) )) või madal (umbes 0 V (LOW)). Arduinol on ka “GND” tihvt (nagu tahvlil näidatud). Kui mõnel üldotstarbelisel klemmil on kõrgepinge, siis ühendades selle klemmi ja klemmiga “GND” vahel midagi voolu juhtivat, voolab ühendatud elektrivool läbi ja selle voolu suurus sõltub selle objekti takistus ja seda saab arvutada Ohmi seaduse järgi, st. mida väiksem on takistus, seda suurem on vool, aga kui takistus on liiga väike, siis liigub Arduinost läbi liiga palju voolu ja see põleb läbi. Maksimaalne vool, mida Arduino üldotstarbeline tihvt toota võib, võib olenevalt kasutatavast mikrokontrollerist erineda, kuid tavaliselt on see 40 mA = 0,04 A – sellest ei pruugi piisata seadme(te) sisselülitava relee sisselülitamiseks. vooluelemendi võimendamiseks tuleb kasutada täiendavat, näiteks bipolaarset transistor. Bipolaarsel transistoril on kolm terminali: emitter, kollektor, alus. Ka transistori maksimaalne vool on piiratud nagu Arduino puhul ja on tavaliselt suurem, näiteks populaarse KT315 puhul on maksimaalne vool 100mA = 0,1A. Bipolaarseid transistore on kahte tüüpi n-p-n ja p-n-p, võite kasutada mõlemat tüüpi, kuid erineval viisil ja seejärel kaalume KT315 transistori kasutamist, mille tüüp on n-p-n. Selleks, et transistor suurendaks Arduino voolu, on vaja selle alus ühendada Arduino väljundiga 1 kOhm takistusega TAKISTI LÄBI (takisti võib öelda 1 k), ühendada selle transistori emitter Arduino "GND" ja toiteallika miinus või toiteallika "GND", mille pinge on võrdne olemasoleva relee mähise pingega (ütleme 12 V), ühendage üks relee mähise klemmidest. transistori kollektorile, teine ​​pluss toiteallikaga (+12V ütleme) ja teine ​​osa, mis võimendust ei mõjuta aga VÄGA oluline on diood, mis tuleb anoodiga ühendada kollektor ja katood toiteallika plussile (+12V). Kui diood imporditakse, siis tõenäoliselt on selle korpusel hele triip - see näitab katoodi, dioodi teine ​​​​klemm on anood. Ülejäänud relee klemmid on selle kontaktide klemmid, kui neid on kaks ja need ei ole suletud, siis kui relee mähisele antakse piisav vool, sulguvad need kontaktid, need tuleb ühendada relee mähisega järjestikku. seade ja selle jadaühenduse saab pistikupessa ühendada, siis kui kontaktid on kinni, saab seade 220V ja lülitub sisse. Ülaltoodut saab kujutada pildil:

Joonis 1 – Seadme juhtimine arvutist


See on mittestandardne skeem paremaks mõistmiseks; tavaliselt kasutatakse järgmisi skeeme:

Joonis 2 – Seadme juhtimine arvutist


Kuigi see diagramm sisaldab ka Arduino plaadi mittestandardset tähistust. Joonisel on Arduino UNO (saab tellida selle lingi kaudu http://ali.pub/1v22bh), kuid võite kasutada mis tahes muud. Ühendusi saab teha näiteks leivaplaadil ja juhtmetega või jootmisega. Kui kõik on õigesti ühendatud ja kontrollitud, saate Arduino USB kaudu arvutiga ühendada ja visandi sinna üles laadida:

Char pc_code=0;

Kehtetu seadistus ()
{
pinMode(2, VÄLJUND);
Serial.begin(9600);
}

void loop ()
{
kui (Serial.available() > 0)
{
arvuti_kood = Serial.read();
if(pc_code=="a")
{
digitalWrite(2, HIGH);
}
else if(pc_code=="b")
{
digitalWrite(2, LOW);
}
}
}

Kuidas Arduino õigesti konfigureerida ja sinna eskiis üles laadida, on juba kirjeldatud lehel “Sammmootori lihtne juhtimine arvutist Arduino kaudu”. Järgmisena peate seadme sisselülitamiseks saatma Arduinole sümboli "a", selle väljalülitamiseks sümboli "b". Sümboli Arduinosse saatmiseks võite Arduino IDE-s minna vahekaardile Tööriistad-Serial Port Monitor ja ülemises tekstiväljas ilmuvas aknas sisestada sümbolid ja saata, vajutades nuppu "Saada". nuppu, saabub sümbol Arduinosse ja sel juhul kui saadad sümboli “a”, lülitub seade sisse, kui “b”, siis vastavalt välja. Kui Arduino märke ei aktsepteeri, siis tuleb jadapordi monitori akna all paremas nurgas määrata sama kiirus, mis sketšis ette nähtud, st. 9600 boodi Kahe seadme kaasamiseks saate visandit veidi muuta:

Char pc_code=0;

Kehtetu seadistus ()
{
pinMode(2, VÄLJUND);
pinMode(3, VÄLJUND);
Serial.begin(9600);
}

void loop ()
{
kui (Serial.available() > 0)
{
arvuti_kood = Serial.read();
if(pc_code=="a")
{
digitalWrite(2, HIGH);
}
else if(pc_code=="b")
{
digitalWrite(2, LOW);
}
else if(pc_code=="c")
{
digitalWrite(3, HIGH);
}
else if(pc_code=="d")
{
digitalWrite(3, LOW);

Artiklis püütakse anda samm-sammult juhiseid omatehtud seadme ühendamiseks USB HID mikrokontrolleri peal AVR ja operatsioonisüsteemiga arvuti Windows 7 x64 suhelda ja juhtida mikrokontrolleri porte. Näidisrakendus juhib mikrokontrolleri pordi viiku USB kaudu (sellega on ühendatud indikaator-LED). Samuti on võimalik lugeda LED-i olekut – kas see on väljas või sisse lülitatud. Teema on mõeldud algajatele, seega suur palve programmeerimisekspertidele - hoidke mädamunad ja mädad tomatid iroonilised kommentaarid mugavamaks juhuks.

Kasutatud tarkvara

1 . Mikrokontrolleri jaoks - V-USB teek Objective Developmentilt ja IDE Atmel Studio 6 Atmelist. Mikrokontrolleri püsivara kompileerimiseks peate alla laadima ja installima ka WinAVR tööriistaahela (spetsialistide jaoks pole see vajalik, sest saate Atmel Studios sisalduva tööriistaahelaga hakkama).
2 . Windowsi programmi (hostitarkvara) kirjutamiseks kasutati Travis Robinsoni LibUsbDotNeti teeki ja Microsofti Visual Studio C# 2010 IDE-d.

Kõik tarkvara, välja arvatud Visual Studio 2010, on tasuta, kuigi saate Visual Studio C# 2010 Expressi kasutada piiratud aja jooksul tasuta. Kõik toimingud viidi läbi operatsioonisüsteemi Windows 7 x64 keskkonnas, kuid tõenäoliselt teeb seda ka mõni muu Windowsi perekonna operatsioonisüsteem (Windows XP ja uuem).

Raud kasutatud

Tänu V-USB teegile saab USB HID seadme loomiseks kasutada mis tahes AVR mikrokontrollerit. Kui jootekolb on teile mugav, võite isegi USB-ühenduse ise kokku panna, kasutades mõnda avaldatud skeemi. Selline skeem (võetud V-USB paketist) on pildil näitena toodud.

Aja ja vaeva säästmiseks on parem kasutada valmis leivalauda. See on eriti mugav, kui tahvlile on kirjutatud USB alglaadur, siis ei pea te plaadi välgutamiseks programmeerijat ostma. Kasutasin AVR-USB-MEGA16 arendusplaati koos ATmega32A mikrokontrolleriga, sellel on bootloader (USBasploader, emuleerib USBasp programmeerija käitumist). Selline näeb sall täissuuruses välja:

Võite võtta ka metaplaadi (sellel on ATmega168 või ATmega328) või isegi ATmega8 mikrokontrolleri programmeerija. Selliseid näärmeid saab odavalt osta aadressilt ebay.com või dx.com.

Mikrokontrolleri püsivara loomine Atmel Studio 6 ja V-USB teegi abil

Tee uus projekt Atmel Studio 6-s (edaspidi lihtsalt AS6). Kui AS6 palub teil valida mikrokontrolleri, valige Atmega32 ilma kirjata A, mitte Atmega32A (kuigi tahvlil on Atmega32A) - see on oluline, kuna WinAVR-i tööriistakett ei näe erinevust, vaid teab ainult Atmega32. Need mikrokontrollerid on sisekujunduselt identsed, nii et meie jaoks pole vahet, aga AS6 jaoks on.

Nüüd peate kompilaatori õigesti konfigureerima. Klõpsake AS6 ülemises menüüs Tööriistad, Edasi Valikud.. ja ilmub see aken:

Valige vasakpoolsest loendist Tööriistakett. Paremal kuvatakse maitsete loend. Selle sõnaga kodeeris Atmel kasutatavate tööriistade (tööriistaahelate) võimalikud valikud.

Märge. Loend sisaldab juba algset tööriistaahelat, mida kasutatakse vaikimisi (vaikimisi). Native toolchain on GCC kompilaator koos päiste ja teekidega, mis pakuvad vajalikku keskkonda mikrokontrolleri lähtekoodi kompileerimiseks. Selle tööriistaahela pakub Atmel ja see installitakse automaatselt koos AS6 installiga. Nagu juba mainisin, saate seda tööriistaketti kasutada kompileerimiseks, kuid siis peate käsitsi V-USB näidete lähtekoodi parandusi tegema (USB HID näite põhjal meie USB seade töötab). Need on lihtsad, kuid algajatele oleks parem lisada siia WinAVR-i tööriistaahel ja kasutada seda kompileerimiseks.
WinAVR-i tööriistaahela lisamiseks maitsete loendisse klõpsake nuppu Lisa maitse, ilmub järgmine aken:

Selle akna ülemisele reale sisestage WinAVR-i kompilaatori nimi (suvaline) ja alumisele reale sisestage täielik tee, kuhu tööriistaketi kompilaator ise installitakse (näidates kausta \bin) ja klõpsake nuppu Lisama. Lisatud kompilaator kuvatakse maitsete loendis, nagu on näidatud ekraanipildil.

Valige hiirega meie äsja lisatud WinAVR-i kompilaator ja klõpsake nuppu Määra vaikeväärtuseks(muutke see vaiketööriistaks) ja klõpsake nuppu OK. Pärast seda protseduuri kasutab meie AS6 WinAVR-i kompilaatorit.

On aeg konfigureerida meie projekti atribuudid; selleks klõpsake Solution Exploreris kursoriga projekti nimel vasakklõpsu ja klõpsake Alt+F7(menüü Projekt -> Atribuudid), ilmub seadetega aken:

Tehke järgmised seaded:

  • Peatükis AVR/GNU C kompilaator -> Sümbolid lisada väljale -D rida F_CPU = 12000000UL- see vastab mikrokontrolleri sagedusele 12 MHz (see kvarts on paigaldatud minu AVR-USB-MEGA16 arendusplaadile).
  • Peatükis AVR/GNU Assembler -> Üldine põllul Monteerija lipp tuleb lisada -DF_CPU=12000000UL.
  • Peatükis AVR/GNU C kompilaator -> optimeerimine põllul Optimeerimise tase peaks seisma Optimeeri suuruse järgi (-Os).
Järgmine on väga oluline punkt - akna vasakus servas valige loendist jaotis Täpsemalt, nagu on näidatud alloleval joonisel.

Rippmenüüs Tööriistaketi maitse vali lisatud WinAVR kompilaator, et AS6 kasutaks seda projekti koostamisel. See viib AS6 seadistamise lõpule.

Järgmiseks tuleb loodud projekti lisada projekti lähtekoodi failid – vaata püsivara\VUSB kausta, faile VUSB.c, usbdrv.c, usbdrvasm.S ja oddebug.c. ASS6 projekt põhineb ühel V-USB teegi näitel: hid-custom-rq, mis algselt kompileeriti käsurealt make utiliidi abil. V-USB teegi põhjal võib leida palju teisigi koodinäiteid – enamasti on USB HID seadmed (hiired, klaviatuurid, sisend- ja väljundseadmed), kuid on ka USB CDC (virtuaalne COM port) seadmeid. Kui oled liiga laisk projekti ise looma, siis lihtsalt ava AS6-s projekti fail VUSB.atsln, selles on juba kõik vajalikud seadistused tehtud ja kõik vajalikud failid lisatud.

Kui kasutate teist arendusplaati, peate faili õigesti konfigureerima usbconfig.h. See on V-USB teegi konfiguratsioonifail, selles on määratud palju sätteid ja parameetreid (VID, PID, mikrokontrolleri tihvtid, deskriptorite väärtused ja muud sätted). Kõikide seadete üksikasjalik kirjeldus on antud selle faili kommentaarides. Põhitähelepanu tuleks pöörata mikrokontrolleri tihvtide määramisele, mida kasutatakse USD D+ ja D- signaalide jaoks (makrodefinitsioonid USB_CFG_IOPORTNAME, USB_CFG_DMINUS_BIT, USB_CFG_DPLUS_BIT), nendele kontaktidele on kehtestatud erinõuded. Konfiguratsioonifail usbconfig.h arhiivist on mõeldud AVR-USB-MEGA16 arendusplaadi jalgade marsruutimiseks ja see on garanteeritud. Programm vilgub LED-tuli, mis on juba leivaplaadil ja ühendatud pordi B viiguga 0.

Arvutiprogrammi (hostitarkvara) loomine

Meie programm peab saatma pakette USB-ühenduse kaudu, mis juhib mikrokontrollerit.

Märge. Programm loodi samast V-USB teegist pärit näidiskonsoolirakenduse põhjal. Konsoolirakenduse lähtekood koostati makefile'i ja MinGW paketi abil ning kasutas LibUSB teeki. Meie näites kasutame Visual Studio graafilist keskkonda ja LibUsbDotNeti teeki. LibUsbDotNeti kasutamise peamine eelis pole aga see, et nüüd saate lihtsalt ja mugavalt luua mitte ainult konsooli, vaid ka graafilisi rakendusi. Suurim pluss on see, et nüüd pole vaja filtridraiverit, mida LibUSB teek aastaid kaasas kandis. Paagis olijate jaoks on filtridraiver LibUSB teegi spetsiaalne tarkvaralisand, mille kaudu toimus andmete vahetamine Windowsi platvormil olevate USB-seadmetega. Nüüd pole seda atavismi vaja.
Käivitage Microsoft Visual C# 2010 Express ja looge uus Windowsi vormiprojekt. Nüüd peate raamatukogu projektiga ühendama LibUsbDotNet.dll. Paremklõpsake Solution Exploreris projekti nimel ja valige "Lisa viide".

Ilmub teine ​​aken

Siin tuleb leida tee sellel kettal, kus asub LinUsbDotNet.dll teek (vaikimisi on see installitud kausta C:\Program Files\LibUsbDotNet, kuid parem on teha DLL-failist koopia projekti kausta töökataloog. Pärast teegi ühendamist peate selle projektis deklareerima, selleks lisage programmi põhimoodulisse (fail Form1.cs) read:

LibUsbDotNeti kasutamine; kasutades LibUsbDotNet.Info; kasutades LibUsbDotNet.Main;
Minge visuaalse vormi redaktorisse ja muutke see umbes selliseks (lisage 3 nuppu ja 3 sildi tekstisilti):

Loo vormi laadimise sündmuste töötleja. Seda on vaja selleks, et programmi käivitumisel initsialiseeritaks LibUsbDotNeti klassi eksemplar, mille kaudu toimub vahetus USB-seadmega. Enne vahetuse alustamist on vaja avada ligipääs meie seadmele, sest arvutiga saab ühendada mitu USB HID seadet ning igaühele peab olema juurdepääs eraldi. USB-seadmete tuvastamiseks on olemas spetsiaalsed identifikaatorid, mis on absoluutselt kõigil USB-seadmetel, need on VID ja PID.

Märge. Mõnikord kasutatakse seadme identifitseerimiseks lisaks unikaalset seerianumbrit või eraldi tekstideskriptorit - kui arvutiga on ühendatud mitu sama VID-i ja PID-ga USB-seadet, kuid see pole meie juhtum. Kuna tavaliselt on igal arvutiga ühendatud USB-seadmel oma VID/PID paar, mis erineb teistest seadmetest, siis pole õige seadme leidmine ja sellele ligipääs probleem.
VID on hankija ID ja PID on toote ID. Meie USB-seadmel on VID: 0x 16C0, PID: 0x 05DF, on need väärtused määratud konfiguratsioonifailis usbconfig.h(oleme seda faili juba maininud) AS6 mikrokontrolleri projektist. Selleks, et hosttarkvara saaks konkreetselt meie USB-seadmele juurde pääseda, peame objekti MyUsbFinder lähtestama samade parameetritega VID: 0x16c0, PID: 0x05df, nagu failis täpsustatud. usbconfig.h. Selleks lisage klassi Form1 globaalsete muutujate määratlusalale järgmine kood:

Avalik staatiline UsbDevice MyUsbDevice; public staatiline UsbDeviceFinder MyUsbFinder = new UsbDeviceFinder(0x16c0, 0x05df);
Kui oleme otsustanud, millise USB-seadmega töötame, saame sellega ühenduse luua ja seda on mugav teha programmi käivitumise hetkel (avades vormiakna). Selleks tuleb valida programmi põhivorm ja atribuudiredaktoris luua laadimissündmuste töötleja Form1_Load. Sisestage töötleja kehasse järgmine kood:

Privaatne void Form1_Load(objekti saatja, EventArgs e) ( MyUsbDevice = UsbDevice.OpenUsbDevice(MyUsbFinder); if (MyUsbDevice != null) ( label2.Text = "ühendatud!"; ) else label2.Text = "ei leitud!";
Tehke nupule button1 jaoks klõpsamissündmuse töötleja (“Sees”), selleks topeltklõpsake visuaalses redaktoris nuppu ja lisage kood sündmuste töötleja kehasse:

Privaatne void nupp1_Click(objekti saatja, EventArgs e) ( // Saada pakett, mis lülitab AVR-USB-MEGA16 arendusplaadi LED-i sisse. UsbSetupPacket pakett = new UsbSetupPacket((bait)(UsbCtrlFlags.RequestlagsCtrls |UsbCtrlsFlags.Requestlags |Usb .Direction_Out) , 1, (lühike)1, 0, 0); int countIn; byte data = uus bait; MyUsbDevice.ControlTransfer(ref pakett, andmed, 0, out countIn); )
Nupu "Väljas" töötleja jaoks lisage järgmine kood:

Privaatne VOOID-nupp3_Click (objekti saatja, sündmuste sihtmärgid E) (// Edastage pakett, mis kustutab LED-i AVR-USB-MEEGA16 MACKET CANECTION. S.Requesttype_Vendor | USBCTRLFLAGS.Recipient_DEVICE | USBCTRLENTFLAGS | USBCTRLENTFLAGS.DIRt1)s. , 0, 0); int countIn; byte data = uus bait; MyUsbDevice.ControlTransfer(ref pakett, andmed, 0, out countIn); )
Kood lugemisnupu käsitlemiseks:

Privaatne void nupp2_Click(objekti saatja, EventArgs e) ( //Andmete vastuvõtmine arendusplaadilt AVR-USB-MEGA16 – LED-olek. UsbSetupPacket = new UsbSetupPacket((bait)(UsbCtrlDCtrltFlags.Request.Tiip |Fvices.Request.Type_Vendor | _Sisse) , 2, (short)0, (short)0, (short)0); int countIn; byte data = uus bait; if (MyUsbDevice.ControlTransfer(ref pakett, andmed, 1, out countIn) && (countIn == 1 ) ) ( label3.Text = "Lugetud väärtus" + data.ToString(); ) )
Vormi sulgemise sündmuste käitleja (programmi väljalülitamine) kustutab LED-i, kui see põleb:

Privaatne void Form1_FormClosed(objekti saatja, FormClosedEventArgs e) ( UsbSetupPacket pakett = new UsbSetupPacket((bait)(UsbCtrlFlags.RequestType_Vendor | UsbCtrlFlags.Recipient_Device) (UsO,t, 0); int countIn;bait andmed = uus bait; MyUsbDevice.ControlTransfer(ref pakett, data, 0, out countIn); )

Kuidas USB-pakette mikrokontrolleri püsivaras dekodeeritakse

Funktsioonis toimub andmete vastuvõtmine ja töötlemine mikrokontrolleri poolel usbFunctionSetup(asub püsivara AS6 projekti põhimoodulis VUSB.c). See on funktsioon:

UsbMsgLen_t usbFunctionSetup(uchar data) ( usbRequest_t *rq = (kehtetu *)andmed; if((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_VENDOR)( DBG1(0x50, väljund: /bq, /b: väljund) meie taotlus */ if(rq->bRequest == CUSTOM_RQ_SET_STATUS)( if(rq->wValue.bytes & 1)( /* set LED */ LED_PORT_OUTPUT |= _BV(LED_BIT); )else( /* selge LED */ LED_PORT_OUTPUT &= ~_BV(LED_BIT) ! = 0); usbMsgPtr = dataBuffer; /* ütleb draiverile, milliseid andmeid tagastada */ tagastab 1; /* käsib draiveril saata 1 bait */ ) )else( /* USBRQ_HID_GET_REPORT ja USBRQ_HID_SET_REPORT taotlusi ei rakendata , * kuna me ei nimeta neid Operatsioonisüsteem ei pääse neile juurde ka *, kuna meie käepide ei määra väärtust. */ ) tagasta 0; /* lahendamata päringute vaikeseade: ärge tagastage andmeid hostile */ )
Meie USB HID-seade on lihtne ja see reageerib ainult juhtülekannetele, mis läbivad vaikekontrolli lõpp-punkti 0. Andmete edastamise suund dekodeeritakse päringu tüübi järgi (väli bRequest). Kui CUSTOM_RQ_SET_STATUS, siis on tegemist mikrokontrolleri jaoks mõeldud andmetega. Andmed dekodeeritakse ja mikrokontroller täidab sinna manustatud käsu. Sel juhul kodeeritakse LED-i olek kõige esimeses vastuvõetud andmebaidis - kui kõige vähem olulises bitis on üks, lülitub LED sisse ja kui see on null, siis kustub. Kui väli bRequest aktsepteerib väärtust CUSTOM_RQ_GET_STATUS, täidetakse puhver LED-i hetkeolekuga ja puhvri andmed saadetakse hostile tagasi. Kõik on väga lihtne ning soovi korral saab koodi käitumist lihtsalt enda vajadustele vastavaks muuta.

Video selle toimimise kohta:

Hea meelega vastan kommentaarides küsimustele ja konstruktiivsetele kommentaaridele.

Teemat jätkates:
Mobiilne

MKV-failid on videofailid. Enamasti salvestavad nad videoid ja mängufilme. Et aru saada, mis see formaat on, kuidas MKV-d mängida, mida...