Professional Documents
Culture Documents
HID Và c18
HID Và c18
LHPSC
https://sites.google.com/site/lhpscienceclub
Gii thiu
USB HID (USB human interface device) l mt phn ca c t USB cho thit b ngoi vi my v
tnh; n c t mt lp thit b (mt lp ca phn cng my tnh) cho cc thit b giao din ngi
dng (HID) nh l chut, bn phm, tay cm iu khin v cc thit b hin th k t. (Wikipedia)
Ti liu ny s hng dn c bn v cch to ra mt thit b USB-HID, kt ni chng vi my vi tnh
v thc hin cc tc v truyn v nhn.
Tc gi khng m bo v khng chu bt c trch nhim no i vi s h hng phn cng thit b
ngoi vi, phn cng my vi tnh, v phn mm trn my ca bn. Nu khng chp nhn nhng iu
ny, khuyn bn ng nn c tip.
u im v Khuyt im
u im
Khuyt im
Mi lp HID ch cho truyn v nhn d liu trn hai Endpoint (mi chiu l mt Endpoint).
Tc chm: mi Pipe ch c cho php kiu Interrupt, vi tc truyn LowSpeed l
800B/s, FullSpeed l 64kB/s nn tc chm.
Yu cu
Windows XP tr ln
Trnh bin dch C18, c th download bn LITE min ph ti:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDo
cName=en010014
Giao din MPLAB X, c th download min ph ti:
http://www.microchip.com/pagehandler/en-us/family/mplabx
Gi th vin Microchip Application Library c th download min ph ti:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDo
cName=en547784
Phn mm Microsoft Visual Studio 2005 tr ln vi .NET 2.0 tr ln.
Trang 1
LHPSC
https://sites.google.com/site/lhpscienceclub
Thit b ngoi vi
Phn cng
C rt nhiu loi vi x l c th tch hp sn giao tip USB. Trong phn 1 ny, mnh s s dng
PIC18F14K50. Vi trnh bin dch C18 cng giao din MPLAB X lp trnh firmware. Bn cng
cn mt header ICSP nu bn s dng IC dn (khng c trong s di y, bn tham kho thm
ICSP trong cc ti liu khc).
U1: PIC18F14K50
C1: T ceramic 470nF
C2, C3: T ceramic t 15 n 33 pF
X1: thch anh 12MHz (bt buc phi l 12MHz)
RED, GREEN: LED v xanh
R1: tr 10k
J1: cng kt ni USB
Datasheet ca PIC18F14K50:
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en533924
Thch anh bt buc phi chn l 12MHz, cu hnh HS v PLLEN, c th xung ng h 48MHz s
dng cho USB Full Speed. i vi cc loi PIC v MCU khc, nn c datasheet c th chn
thch anh cho chnh xc. Nhn hnh sau hiu r hn (trch t datasheet ca PIC18F14K50):
Trang 2
LHPSC
https://sites.google.com/site/lhpscienceclub
Xung ng
h s dng
cho USB
PLL s nhn 4
ln tn s thch
anh (12 * 4 = 48
MHz)
Firmware
Trong gi th vin Microchip Application Library, bn c th thy c rt nhiu mu ng dng vit
cho trnh dch CXX ca Microchip, trong c USB HID. Mnh chnh sa li mt cht t mt
mu, v cc bn c th download xung thc hin theo ti liu ny, ti y:
http://www.mediafire.com/download.php?d78ck2s2ki1sv1j
Trong file nn, s c bn file m ngun (main.c, usb_descriptions.c, usb_config.h,
HardwareProfile.h). s dng cc file ny, cc bn lm nh sau (trn MPLAB X IDE):
To mt project mi bng cch chn Menu File / New Project
Trang 3
LHPSC
https://sites.google.com/site/lhpscienceclub
Chn Advanced 8-bit MCUs (PIC 18) trong hp Family, PIC18F14K50 trong hp Device. Nhn
Next >.
Trang 4
LHPSC
https://sites.google.com/site/lhpscienceclub
Trang 5
LHPSC
https://sites.google.com/site/lhpscienceclub
Nhp tn Project ti Project Name (v d l HID-1), chn th mc lu, Check Set as main
project. Sau nhn Finish.
Trang 6
LHPSC
https://sites.google.com/site/lhpscienceclub
Chn bn file va gii nn trong th mc ca bn, chn nhiu file bng cch gi nt Ctrl. Chn xong
nhn Select.
Trang 7
LHPSC
https://sites.google.com/site/lhpscienceclub
Trang 8
LHPSC
https://sites.google.com/site/lhpscienceclub
#define
#define
#define
#define
HID_IN_SIZE
HID_OUT_SIZE
VENDOR_ID
PRODUCT_ID
2
3
0x04D8
0x0102
= HS
= ON
Trang 9
LHPSC
https://sites.google.com/site/lhpscienceclub
#endif
}
#pragma interruptlow low_isr
void low_isr()
{
}
#if defined(USB_INTERRUPT)
USBDeviceAttach();
#endif
y mnh s gii thiu mt s cu lnh truyn d liu qua USB. Cc bn c th thy trong hm
main nhng cu lnh sau:
if(!((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)))
Nu USB trng thi Configured v khng b treo th mi c th truyn d liu. Cc bn nn
hm ny trc mi ln lm vic vi USB.
if(!HIDRxHandleBusy(USBOutHandle))
Nu c d liu Endpoint OUT (thit b nhn c d liu t), cu lnh ny s tr v true.
Trc khi truyn d liu, bn phi gi hm ny:
if(!HIDTxHandleBusy(USBInHandle))
Nu Endpoint IN trng th mi c th tryn d liu. Sau truyn d liu bng lnh:
USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&inbuffer[0], HID_IN_SIZE);
vi inbuffer l mng d liu cn truyn.
Sau khi nhn d liu, mun c th nhn c gi tip theo, chng ta phi xa buffer ca USB bng:
USBOutHandle = HIDRxPacket(HID_EP, (BYTE*)&outbuffer, HID_OUT_SIZE);
Trang 10
LHPSC
https://sites.google.com/site/lhpscienceclub
Bin dch, np chng trnh vo PIC, cm vo cng USB ca my tnh. My tnh s t nhn dng v
t ci driver. Nu thit b khng nhn dng c, firmware ca bn b sai, bn hy lm li t u
theo cc bc mnh hng dn.
Chng ta xong phn c bn v thit b ngoi vi, by gi chng ta c th thc hin phn mm.
Phn mm
Do HID c sn driver trn my v t ci t, chng ta s khng cn quan tm n driver. Trong ti
liu ny, chng ta s dng C# lp trnh giao din iu khin.
Th vin HIDLib
Trong th vin Microchip Application Library cng c nhiu v d v chng trnh trn my vi
tnh. V mnh cng thay i mt v d, bin dch n thnh mt th vin lin kt ng (.dll) nhm
gip cc bn c th thc hin ti liu ny mt cch n gin hn, thun tin hn thay v phi c li
cc m ca Microchip (ng nhin nu bn mun th bn c tham kho). Cc bn c th download
file lin kt ng v m ngun th vin ca mnh y:
Th vin lin kt ng HIDLib.dll: http://www.mediafire.com/download.php?4zob9clz76plvvo
M ngun C# HIDDevice.cs: http://www.mediafire.com/download.php?ygopp4orbn8b5l2
Cc hm v bin public ca HIDDevice (namespace HIDLib) bao gm:
Trang 11
LHPSC
https://sites.google.com/site/lhpscienceclub
S dng HIDLib
S dng HIDLib cng kh n gin, sau y mnh s ch bn cch s dng gi th vin ny ca mnh
(minh ha trn Microsoft Visual Studio 2012 bn th nghim).
Cc bn download gi th vin HIDLib.dll v, sau ti mt project mi nh sau:
Vo Menu File, chn New / Project
Chn Windows Forms Apllication trong Visual C#, nhp tn Project, ri nhn OK.
Trong ca s Solution Explorer, nhn chut phi vo References, chn Add Reference
Trang 12
LHPSC
https://sites.google.com/site/lhpscienceclub
Chn file th vin HIDLib.dll m bn download v, nhn Add, sau nhn OK:
Trang 13
LHPSC
https://sites.google.com/site/lhpscienceclub
Nt nhn tri
Nt nhn phi
Checkbox trn
Checkbox di
Name
send
read
green
red
Text
Send
Read
LED Green
LED Red
Bt u, chng ta hy thm th vin vo file m ngun ca chng ta. t lnh ny pha trn:
using HIDLib;
Sau khai bo bin ton cc cho thit b USB phn trn ca lp:
HIDDevice dev = new HIDDevice();
Copy on m sau v dn vo 2 hm :
private void send_Click(object sender, EventArgs e)
{
if (dev.AttachedState)
{
byte[] data = new byte[3];
data[0] = 1;
if (green.Checked) data[1] = 1; else data[1] = 0;
if (red.Checked) data[2] = 1; else data[2] = 0;
if (!dev.Transmit(data)) MessageBox.Show("Error");
Trang 14
LHPSC
https://sites.google.com/site/lhpscienceclub
}
else MessageBox.Show("Disconnected!");
}
private void read_Click(object sender, EventArgs e)
{
if (dev.AttachedState)
{
byte[] request = new byte[3];
request[0] = 0;
dev.Transmit(request);
byte[] result = dev.Receive();
if (result != null)
{
if (result[0] == 1) green.Checked = true; else green.Checked = false;
if (result[1] == 1) red.Checked = true; else red.Checked = false;
}
else MessageBox.Show("Error");
}
else MessageBox.Show("Disconnected!");
}
y l cc hm nhn v gi d liu n USB, bn thy n n gin phi khng. u tin l kim tra
tnh kt ni bng lnh if (dev.AttachedState). Sau bn gi d liu bng hm
dev.Transmit() v nhn bng hm dev.Receive(). Cng vic ca my tnh c cp
phn trn, khi mnh n v cc tc v lm vic ca PIC nh th no.
Copy on m sau dn vo hm khi to Form1:
public Form1()
{
InitializeComponent();
dev.vid = 0x04D8;
dev.pid = 0x0102;
dev.in_size = 2;
dev.out_size = 3;
dev.Initialize();
}
u tin chng ta gn 4 bin vid, pid, in_size v out_size theo 4 nh ngha VENDOR_ID,
PRODUCT_ID, HID_IN_SIZE v HID_OUT_SIZE trong file usb_config.h. Sau gi hm
dev.Initialize() khi to thit b.
Cui cng, chng ta thm 1 hm nhn thng bo vo lp Form1:
protected override void WndProc(ref Message m)
{
dev.DeviceChange(ref m);
base.WndProc(ref m);
}
Trang 15
LHPSC
https://sites.google.com/site/lhpscienceclub
Li kt
Phn 1 ca ti liu hng dn thc hin Giao tip USB qua HID bng PIC18F14K50, C18 v C#
kt thc. Mnh hy vng ti liu ny s gip ch cho nhng bn ang nh nghin cu giao tip USB
khi ang s dng trnh dch C18. Cc bn n ch xem tip phn 2 ca ti liu Giao tip USB qua
HID.
Ti liu thc hin bi Bi Quang Minh Cu lc b Khoa hc THPT Chuyn L Hng Phong
TPHCM nm 2012.
Trang 16