Kênh Tên Miền chuyên cung cấp tên miền đẹp, giá rẻ! Hãy liên hệ kỹ thuật: 0914205579 - Kinh doanh: 0912191357 để được tư vấn, hướng dẫn miễn phí, Cảm ơn quý khách đã ủng hộ trong thời gian qua!
Sunday, February 16, 2014


Chào all you! Minh xin goi Thiệu an dự án others of Minh: Controls 14 devices power such as Đèn, Quất, motor through the computer with a device that connects USB 




Local Kit included software VAI TRÒ USB lái xe and bus
Lái xe bus o including PIC18F2550 giao tiếp against the computer message on port USB and 2 ic ULN2003 to cấp sources cho 14 Vai trò closed cut handle 14 devices Electric

Software is programming in the Visual Basic. Giao tiếp USB following type of HID

Link down software here  : Tại đây
Tập tin trong bus (form PDF) and schemantic here  : Tại đây
Tập tin hex ​​giấc ngủ ngắn cho PIC18F2550    :   Tại đây

Windown will nhận devices when socket Device on not needed something lái xe expired, software will nhận devices when socket devices on the computer qua USB also LED tell effective in the bus USB would invention up when the device connected successfully

Video here:




Hình following is the interfaces of software USB VAI TRÒ: 
















This is the display when run emulation via Proteus on host tính:


 

Lái xe bus o Minh Dũng CCS to programming make fw cho PIC18F2550, mã of it as follows:
 Minh will not be interpreted meaningful of the functions of this as it already in libraries USB.h cac ban for it to read.


Programs Primary:

# Bao gồm <18f2550.h>
# Cầu chì HSPLL, NOWDT, NOPROTECT, NOLVP, NODEBUG, USBDIV, PLL5, CPUDIV1, VREGEN
# use delay (clock = 20000000)

# bao gồm <pic18_usb.h>
# bao gồm <usb_desc_hid.h>   
# bao gồm <usb.c>

int8 unsigned data0 = 0, Data1, data2;
void main (void)
{

output_low (PIN_C1);
int8 data_in [2];
int8 data_out [2];
usb_init ();                                           
usb_task ();                                             
usb_wait_for_enumeration ();     
output_b (0);
output_a (0);

output_low (PIN_C0);
output_high (PIN_C1);
while (true)
{
if (usb_enumerated ())
    {
         if (usb_kbhit (1))
              {
            usb_get_packet (1, data_in, 2);
            data0 = data_in [0];
            chuyển đổi (dữ liệu)

                   {
               Trường hợp 1: output_toggle (PIN_B0); Data1 ^ = 0x01; break;
               Trường hợp 2: output_toggle (PIN_B1); Data1 ^ = 0x02; break;
               trường hợp 3: output_toggle (PIN_B2); Data1 ^ = 0x04; break;
               trường hợp 4: output_toggle ( PIN_B3); Data1 ^ = 0x08; break;
               trường hợp 5: output_toggle (PIN_B4); Data1 ^ = 0x10; break;
               trường hợp 6: output_toggle (PIN_B6); Data1 ^ = 0x20; break;
               trường hợp 7: output_toggle (PIN_B5); Data1 ^ = 0x40; break;
               trường hợp 8: output_toggle (PIN_A1); Data1 ^ = 0x80; break;
               trường hợp 9: output_toggle (PIN_A0); data2 ^ = 0x01; break;
               trường hợp 10: output_toggle (PIN_B7); data2 ^ = 0x02; phá vỡ;
               trường hợp 11: output_toggle (PIN_A2); data2 ^ = 0x04; break;
               trường hợp 12: output_toggle (PIN_A3); data2 ^ = 0x08; break;
               trường hợp 13: output_toggle (PIN_A5); data2 ^ = 0x10; break;
               trường hợp 14: output_toggle ( PIN_C0); data2 ^ = 0x20; break;
               trường hợp 15: output_b (0); output_a (0); data2 = 0; Data1 = 0; output_low (PIN_C0); break;
               };
            data_out [0] = Data1;
            data_out [1 ] = data2;
            usb_put_packet (1, data_out, 2, USB_DTS_TOGGLE);
         }
}
}
}





Đang this is in function usb_desc_hid.h:



 # Ifndef __ USB_DESCRIPTORS__
# Xác định __ USB_DESCRIPTORS__

# ifndef USB_CONFIG_PID
   # xác định USB_CONFIG_PID 0x0012
# endif

# ifndef USB_CONFIG_VID
   # xác định USB_CONFIG_VID 0x0111
# endif

# ifndef USB_CONFIG_BUS_POWER
   / / phạm vi hợp lệ là 0 .. 500
   # xác định USB_CONFIG_BUS_POWER 100 / / 100mA
# endif

# ifndef USB_CONFIG_VERSION
   / / phiên bản số đó được lưu trữ vào bộ mô tả, trong BCD.
   / / phạm vi là 00.00 đến 99.99
   # xác định USB_CONFIG_VERSION 0x0100 / / 01.00
# endif

# ifndef USB_CONFIG_HID_TX_SIZE
   / / phạm vi hợp lệ 0-255
   # xác định USB_CONFIG_HID_TX_SIZE 2 / / tương thích với hiddemo.exe
# endif

# ifndef USB_CONFIG_HID_RX_SIZE
   / / phạm vi hợp lệ 0-255
   # xác định USB_CONFIG_HID_RX_SIZE 2 / / tương thích với hiddemo.exe
# endif

# ifndef USB_CONFIG_HID_TX_POLL
   / / cho các thiết bị tốc độ cao, phạm vi hợp lệ là 1-255
   / / cho các thiết bị tốc độ chậm, phạm vi hợp lệ là 10 - 255
   # xác định USB_CONFIG_HID_TX_POLL 10
# endif

# ifndef USB_CONFIG_HID_RX_POLL
   / / cho các thiết bị tốc độ cao, phạm vi hợp lệ là 1-255
   / / cho các thiết bị tốc độ chậm, phạm vi hợp lệ là 10-255
   # xác định USB_CONFIG_HID_RX_POLL 10
# endif

/ / Cho USB firmware CCS PIC bao gồm HID xử lý mã.
# ifdef USB_HID_DEVICE
# undef USB_HID_DEVICE
# endif

# Xác định USB_HID_DEVICE TRUE

/ / các định nghĩa sau đây cần thiết cho người lái xe PIC CCS USB để cho phép các thiết bị đầu cuối TX 1
/ / và phân bổ không gian đệm trên thiết bị ngoại vi
# ifdef USB_EP1_TX_ENABLE
# undef USB_EP1_TX_ENABLE
# endif
# xác định USB_EP1_TX_ENABLE USB_ENABLE_INTERRUPT / / bật EP1 cho TRÊN số lượng lớn / ngắt chuyển

# ifndef USB_EP1_TX_SIZE
 # if (USB_CONFIG_HID_TX_SIZE> = 64)
   / / ngắt thiết bị đầu cuối gói kích thước tối đa là 64.
   # xác định USB_EP1_TX_SIZE 64
 # khác
   / / bằng cách bảo vệ môi trường gói kích thước lớn hơn so với kích thước thông báo, chúng ta có thể gửi tin nhắn trong một gói.
   # xác định USB_EP1_TX_SIZE (USB_CONFIG_HID_TX_SIZE +1)
 # endif
# endif

# ifdef USB_EP1_RX_ENABLE
# undef USB_EP1_RX_ENABLE
# endif
# xác định USB_EP1_RX_ENABLE USB_ENABLE_INTERRUPT / / bật EP1 cho OUT số lượng lớn / gián đoạn chuyển

# ifndef USB_EP1_RX_SIZE
 # if (USB_CONFIG_HID_RX_SIZE> = 64)
   / / ngắt thiết bị đầu cuối gói kích thước tối đa là 64.
   # xác định USB_EP1_RX_SIZE 64
 # khác
   / / bằng cách làm cho kích thước gói EP lớn hơn kích thước tin nhắn, chúng ta có thể gửi tin nhắn trong một gói.
   # xác định USB_EP1_RX_SIZE (USB_CONFIG_HID_RX_SIZE +1)
 # endif
# endif

# bao gồm <usb.h>

   const char USB_CLASS_SPECIFIC_DESC [] = 
   {
      6, 0, 255, / / Cách sử dụng trang bán hàng = Xác định
      9, 1, / / Cách sử dụng thiết bị IO =
      0xa1, 1, / / Bộ sưu tập ứng dụng =
      0x19, 1, / / Cách sử dụng tối thiểu
      0x29, 8, / / Cách sử dụng tối đa

      0x15, 0x80, / / logic tối thiểu (-128)
      0x25, 0x7F, / / logic tối đa (127)

      0x75, 8, / / báo cáo size = 8 (bit)
      0x95, USB_CONFIG_HID_RX_SIZE, / / Báo cáo count = 16 bit (2 byte)
      0x81, 2, / / đầu vào (dữ liệu, Var, Abs)
      0x19, 1, / / Cách sử dụng tối thiểu
      0x29, 8, / / tối đa việc sử dụng
      0x75, 8, / / Báo cáo size = 8 (bit)
      0x95, USB_CONFIG_HID_TX_SIZE, / / Báo cáo count = 16 bit (2 byte)
      0x91, 2, / / đầu ra (dữ liệu, Var, Abs)
      0xC0 / / End Bộ sưu tập
   } ;

   const int16 USB_CLASS_SPECIFIC_DESC_LOOKUP [USB_NUM_CONFIGURATIONS] [1] =
   {
   / / config 1
      / / giao diện 0
         0
   };


   const int16 USB_CLASS_SPECIFIC_DESC_LOOKUP_SIZE [USB_NUM_CONFIGURATIONS] [1] =
   {
   / / config 1
      / / giao diện 0
         32
   };



   # Xác định USB_TOTAL_CONFIG_LEN 41 / / config + giao diện + lớp + + thiết bị đầu cuối thiết bị đầu cuối (2 thiết bị đầu cuối)

   const char USB_CONFIG_DESC [] = {
   / / ĐỂ QUY WINDOWS HOSTS, thứ tự của mảng này PHẢI:
      / / config (s)
      / / giao diện (s )
      / / lớp (es)
      / / thiết bị đầu cuối (s)

   / / config_descriptor cho chỉ số cấu hình 1
         USB_DESC_CONFIG_LEN, / / chiều dài kích thước mô tả == 1
         USB_DESC_CONFIG_TYPE, / / không đổi CẤU HÌNH (CẤU HÌNH 0x02) == 2
         USB_TOTAL_CONFIG_LEN, 0, / / kích thước của tất cả các dữ liệu trả về cho cấu hình này == 3,4
         1, / / số giao diện thiết bị này hỗ trợ == 5
         0x01, / / định danh cho cấu hình này. (IF chúng tôi đã có nhiều hơn một cấu hình) == 6
         0x00, / / chỉ số của chuỗi mô tả cho cấu hình này == 7
        # nếu USB_CONFIG_BUS_POWER
         0xC0, / / bit 6 = 1 nếu tự cung, bit 5 = 1 nếu hỗ trợ wakeup từ xa ( chúng tôi không), bit 0-4 không sử dụng và bit7 = 1 == 8
        # khác
         0x80, / / bit 6 = 1 nếu tự cung, bit 5 = 1 nếu hỗ trợ wakeup từ xa (chúng tôi không), bit 0 - 4 không sử dụng và bit7 = 1 == 8
        # endif
         USB_CONFIG_BUS_POWER / 2, / / xe buýt điện tối đa yêu cầu (tối đa miliampe / 2) (0x32 = 100mA)

   / / giao diện mô tả 1
         USB_DESC_INTERFACE_LEN, / / chiều dài của mô tả = 10
         USB_DESC_INTERFACE_TYPE, / / Giao diện không đổi (Giao diện 0x04) = 11
         0x00, / / số xác định giao diện này (IF chúng tôi đã có nhiều hơn một giao diện) == 12
         0x00, / / thay thế thiết lập == 13
         2, / / số endpoins, ngoại trừ 0 (pic167xx có 3, nhưng chúng tôi không cần phải sử dụng tất cả). == 14
         0x03, / / mã lớp, 03 = HID == 15
         0x00, / / code lớp / / khởi động == 16
         0x00, / / code giao thức == 17
         0x00, / / chỉ số của mô tả chuỗi cho giao diện == 18

   / / lớp mô tả 1 (HID)
         USB_DESC_CLASS_LEN, / / chiều dài của mô tả == 19
         USB_DESC_CLASS_TYPE, / / kiểu dscriptor (0x21 == HID) == 20
         0x00, 0x01, số lượng phát hành / / giấu lớp (1.0) == 21, 22
         0x00, / / mã quốc gia địa phương (0 = không có) == 23
         0x01, / / số descrptors lớp giấu mà theo (1) == 24
         0x22, / / báo cáo kiểu mô tả (0x22 == HID) == 25
         USB_CLASS_SPECIFIC_DESC_LOOKUP_SIZE [0] [0], 0x00, / / chiều dài của báo cáo mô tả == 26,27

   / / thiết bị đầu cuối mô tả
         USB_DESC_ENDPOINT_LEN, / / chiều dài của mô tả == 28
         USB_DESC_ENDPOINT_TYPE, / / Endpoint liên tục (Endpoint 0x05) == 29
         0x81, / / số thiết bị đầu cuối và hướng (0x81 = EP1 IN) == 30
         USB_EP1_TX_ENABLE, / / kiểu chuyển giao được hỗ trợ (0x03 là gián đoạn) == 31
         USB_EP1_TX_SIZE, 0x00, / / kích thước gói hỗ trợ tối đa == 32,33
         USB_CONFIG_HID_TX_POLL, / / khoảng thời gian bỏ phiếu , trong ms. (Không thể nhỏ hơn 10 cho tốc độ chậm) == 34

   / / thiết bị đầu cuối mô tả
         USB_DESC_ENDPOINT_LEN, / / chiều dài của mô tả == 35
         USB_DESC_ENDPOINT_TYPE, / / Endpoint liên tục (Endpoint 0x05) == 36
         0x01, / / số thiết bị đầu cuối và hướng (0x01 = EP1 OUT) == 37
         USB_EP1_RX_ENABLE, / / kiểu chuyển giao được hỗ trợ (0x03 là gián đoạn) == 38
         USB_EP1_RX_SIZE, 0x00, / / kích thước gói hỗ trợ tối đa == 39,40
         khoảng USB_CONFIG_HID_RX_POLL / / bỏ phiếu, trong ms. (Không thể nhỏ hơn 10 cho tốc độ chậm) == 41
   };

   / / ****** BEGIN CONFIG bảng mô tả LOOKUP ********
   / / vì chúng ta không có thể làm cho con trỏ tới hằng số trong pic16s nhất định , đây là một bảng bù đắp để tìm
   / / một mô tả cụ thể trong bảng trên.

   / / Chú ý: DO MỘT GIỚI HẠN CỦA BỘ LUẬT CCS, TẤT CẢ GIAO HID phải bắt đầu tại 0 và BE tuần tự
   / / ví dụ:, NẾU BẠN CÓ 2 GIAO HID HỌ PHẢI GIAO DIỆN VÀ GIAO DIỆN 0 1
   # xác định USB_NUM_HID_INTERFACES 1

   / / số lượng tối đa giao diện thấy trên bất kỳ cấu hình
   / / ví dụ, nếu cấu hình 1 có 1 giao diện và cấu hình 2 có 2 giao diện bạn phải xác định đây là 2
   # xác định USB_MAX_NUM_INTERFACES 1

   / / xác định có bao nhiêu giao diện có mỗi cấu hình. [0] là cấu hình đầu tiên, vv
   USB_NUM_INTERFACES const char [USB_NUM_CONFIGURATIONS] = {1};

   / / xác định nơi để tìm mô tả lớp
   / / kích thước đầu tiên là số cấu hình
   / / chiều thứ hai quy định cụ thể mà giao diện
   / / kích thước cuối cùng quy định cụ thể mà lớp trong giao diện này để có được, nhưng hầu hết sẽ chỉ có 1 lớp cho mỗi giao diện
   / / nếu một mô tả lớp học là không hợp lệ, thiết lập giá trị 0xFFFF
   const int16 USB_CLASS_DESCRIPTORS [USB_NUM_CONFIGURATIONS] [1] [1] =
   {
   / / config 1
      / / giao diện 0
         / / lớp 1
         18
   };

   # if (sizeof (USB_CONFIG_DESC) = USB_TOTAL_CONFIG_LEN!)
      # lỗi USB_TOTAL_CONFIG_LEN không được định nghĩa một cách chính xác
   # endif



   const char USB_DEVICE_DESC [USB_DESC_DEVICE_LEN] = {
      / / bắt đầu với cấu hình của thiết bị. chỉ có một có thể
         USB_DESC_DEVICE_LEN, / / độ dài của báo cáo này == 1
         0x01, / / các THIẾT BỊ liên tục (THIẾT BỊ 0x01) == 2
         0x10, 0x01, / / phiên bản USB trong BCD == 3,4
         0x00, / / mã lớp == 5
         0x00, mã / / lớp 6 ==
         0x00, / / giao thức đang == 7
         USB_MAX_EP0_PACKET_LENGTH, / / kích thước tối đa gói cho thiết bị đầu cuối 0. (Làm chậm tốc độ quy định 8) == 8
         USB_CONFIG_VID & 0xFF, ((USB_CONFIG_VID >> 8) & 0xFF), / / nhà cung cấp id == 9, 10
         USB_CONFIG_PID & 0xFF, ((USB_CONFIG_PID >> 8) & 0xFF), / / id sản phẩm, không sử dụng 0xffff == 11, 12
         USB_CONFIG_VERSION & 0xFF, ((USB_CONFIG_VERSION >> 8) & 0xFF), / / thiết bị số lượng phát hành == 13,14
         0x01, / / chỉ số của mô tả chuỗi các nhà sản xuất. do đó chúng tôi chỉ đến mảng STRING_1 (xem bên dưới) == 15
         0x02, / / chỉ số của chuỗi mô tả của sản phẩm == 16
         0x00, / / chỉ số của chuỗi mô tả của số == 17
         USB_NUM_CONFIGURATIONS / / số cấu hình có thể == 18
   };



/ / bù đắp của vị trí bắt đầu của mỗi chuỗi. bù đắp [0] là sự bắt đầu của chuỗi 0, bù đắp [1] là sự bắt đầu của chuỗi 1, vv
char USB_STRING_DESC_OFFSET [] = {0,4,12};

/ / Ở đây là nơi mà các "CCS" Nhà sản xuất và chuỗi " CCS HID Demo "được lưu trữ.
/ / Strings được lưu dưới dạng unicode.
/ / Các dây này chủ yếu là chỉ hiển thị khi trình hướng dẫn thêm phần cứng.
/ / Sau khi các trình điều khiển hệ điều hành đã được cài đặt nó sẽ thường hiển thị
/ / tên từ các trình điều khiển . INF.
const char USB_STRING_DESC [] = {
   / / string 0
         4, / / chiều dài của chỉ số chuỗi
         USB_DESC_STRING_TYPE, / / kiểu mô tả 0x03 (STRING)
         0x09, 0x04, / / Microsoft Xác định cho Mỹ-Anh
   / / string 1
         8, / / chiều dài của chỉ số chuỗi
         USB_DESC_STRING_TYPE, / / kiểu mô tả 0x03 (STRING)
         'P', 0,
         'H', 0,
         'T', 0,
   / / chuỗi 2
         30, / / chiều dài của chỉ số chuỗi
         USB_DESC_STRING_TYPE, / / mô tả loại 0x03 (STRING)
         'P', 0,
         'h', 0,
         'a', 0,
         'n', 0,
         '', 0,
         'H', 0,
         'o', 0,
         'a' , 0,
         'n', 0,
         'g', 0,
         '', 0,
         'T', 0
         'h', 0
         'a', 0
         'c', 0
         'h', 0
};

# Endif





Schemantic of bus USB:


Linh kiện in bus trong includes:
 PIC18F2550 
ULN2003
14ROLE 5 footer type 12V
Tu gốm 104, 15p
tu gốm 224 or 474 (Primary that tu C * in bus trong)
15 DOMINO2C
1N4007 (Diode Chong Mac backward sources)
The first USB type Loss square
Tu Hòa Lộc sources 100uF 16V
Color LED
return 10k, and 1k 470
thạch anh 20MHz


Hình bus trong:






Hope that useful for but ai quan tâm Bạn, Cảm ơn
                                                                                  Nguồn: http://phanhoangthach.blogspot.com/

0 comments:

Post a Comment

domain, domain name, premium domain name for sales

Popular Posts