Thông báo

Collapse
No announcement yet.

Bàn phím tự động ... để đánh game , điều khiển ! ( Dành cho anh em thích Game )

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Bàn phím tự động ... để đánh game , điều khiển ! ( Dành cho anh em thích Game )

    Một khách hàng đã nhờ tôi làm thiết bị này ... Một bàn phím tự động " Bấm phím" tương tự như ta gõ trên bàn phím PC, laptop v.v. vậy.

    Bàn phím tự động thường được sử dụng cho mục đích : Điều khiển tương tác với máy tính , chơi game ( bấm phím tuần tự)... ( Như là luyện Lever trong Cửu Long Tranh bá ... chẳng hạn )
    Không sợ bị các phần mềm Game chặn như là đối với bàn phím được lập trình bằng phần mềm ( còn gọi là phần mềm thứ 3 hỗ trợ game) ,
    tốc độ bàn phím cứng này nhanh, chính xác ... phần cứng nhỏ gọn .

    --- Sau khi hoàn thành hoàn toàn sản phẩm ( cả phần cứng và phần mềm ) ... do 1 tai nạn giao thông khá nghiêm trọng ... ( suýt thì tôi đã ra đi cùng mỏ hàn,nhựa thông ... to vít --- Rất may mắn là hiện giờ cái đầu và đôi tay vẫn còn hoạt động được) !
    hiện tại sản phẩm chưa thể đến tay khách hàng do sự cố trên... Khi tôi nằm đây để điều trị " thương tích " của vụ tai nạn ... mới thấy rằng ...

    Mình có rất nhiều đề tài có cái dễ, có cái khó tại sao cứ để 1 chỗ rồi có khi 1 lúc nào đó mang xuống mồ luôn ... Cho không thì không thể ( vì đó là mồ hôi nước mắt, công sức, tiền bạc vào đó nữa .v.v ) .

    1 ý nghĩ là tại sao mình không làm theo những cty nước ngoài ? Với ý nghĩ đó ... tôi viết bài này ( Định bụng viết vào luồng tâm tình kỹ thuật ... nhưng thấy không hợp lắm .. đành cho ra đây ).

    --- Mỗi đề tài hiện tại, về sau này ( nếu là sản phẩm thương mại mình sản xuất)... tôi sẽ cố gắng có 2 phiên bản :
    1) Phiên bản miễn phí : Có 1 số tính năng cơ bản , đủ dùng cơ bản ... mục đích dành cho các đối tượng học sinh, sinh viên... cá nhân nghiên cứu ... tự làm hoặc dựa vào đó để tự phát triển ( nếu thích ) ... và sử dụng cho mục đích cá nhân .
    Không dùng cho các đối tượng lấy về nhân bản ... bán hàng chợ ( như 1 số người chỉ biết ngồi , hớt của người khác về rồi đem bán ).
    2) Phiên bản thương mại : ĐƯơng nhiên tôi sẽ quản lý , ở bản thương mại sẽ đầy đủ chức năng hơn , chuyên nghiệp hơn ... và có đầy đủ sự hỗ trợ hơn.

    -QUAY TRỞ LẠI VẤN ĐỀ :

    Tôi chọn PIC18F4550 ( vì tôi sẵn có nó ở trong thùng linh kiện ) ... 1 số chip khác cũng hỗ trợ USB tốt (ARM , PSOC , ST7 ... ) tuy nhiên ở mức độ phổ thông nên dùng PIC cho các bạn dễ kiếm !

    Bạn nào yêu thích có thể làm thử :
    Đây là sơ đồ của nó :
    Click image for larger version

Name:	autoKeyBoard_free.jpg
Views:	1
Size:	65.3 KB
ID:	1414200

    --- Mã nguồn :
    Mã nguồn được viết trên MikroC PRO ( Đơn giản vì MikroC phần mềm khá chuyên nghiệp, dễ sử dụng , thân thiện ... nhiều thư viện ... Nói chung là 1 trong TOP các trình dịch đầu bảng cho những dòng MCU nhỏ nhỏ kiểu này ! )

    [MAIN CODE]
    Code:
    // Modifier bytes
    #define None             0b00000000
    #define LeftCtrl         0b00000001
    #define LeftShift        0b00000010
    #define LeftAlt          0b00000100
    #define LeftGUI          0b00001000
    #define RightCtrl        0b00010000
    #define RightShift       0b00100000
    #define RightAlt         0b01000000
    #define RightGUI         0b10000000
    /////////////////////////////////
    // Key code byte
    #define        a                 4
    #define        b                 5
    #define        c                 6
    #define        d                 7
    #define        e                 8
    #define        f                 9
    #define        g                 10
    #define        h                 11
    #define        i                 12
    #define        j                 13
    #define        k                 14
    #define        l                 15
    #define        m                 16
    #define        n                 17
    #define        o                 18
    #define        p                 19
    #define        q                 20
    #define        r                 21
    #define        s                 22
    #define        t                 23
    #define        u                 24
    #define        v                 25
    #define        w                 26
    #define        x                 27
    #define        y                 28
    #define        z                 29
    #define        one               30
    #define        two               31
    #define        three             32
    #define        four              33
    #define        five              34
    #define        six               35
    #define        seven             36
    #define        eight             37
    #define        nine              38
    #define        zero              39
    #define        enter             40
    #define        escape            41
    #define        backspace         42
    #define        tab               43
    #define        spacebar         44
    #define        underscore       45
    #define        equals           46
    #define        leftbrace        47
    #define        rightbrace        48
    #define        backslash        49
    #define        hash              50
    #define        semicolon        51
    
    #define        comma            54
    #define        period           55
    #define        slash            56
    #define        capslock         57
    #define        f1                58
    #define        f2                59
    #define        f3                60
    #define        f4                61
    #define         f5                62
    #define         f6                63
    #define          f7                64
    #define          f8                 65
    #define          f9                66
    #define          f10                67
    #define          f11                68
    #define          f12                69
    
    #define home                74
    #define pageup                75
    #define delete          76
    #define pagedown        78
    #define rightarrow        79
    #define leftarrow        80
    #define downarrow        81
    #define uparrow                82
     ////////////////////
    
    #define start_butt PORTD.F3
    bit start;
    
    unsigned char key0time, key1time,key2time,key3time,key4time,key5time,key6time,key7time,key8time, key9time, keyPtime, P_loop;
    
    unsigned char count_skill;
    unsigned char stt_cnt, value;
    unsigned long time_buff;
    unsigned char usbreadbuff[8] absolute 0x500;   // Buffers should be in USB RAM
    unsigned char usbwritebuff[8] absolute 0x540;
    unsigned char usbwriteblank[8] absolute  0x580;
    
    
    void butt_check();
    void key_delay(unsigned long value);
    void stroke0();
    void stroke1();
    void stroke2();
    void stroke3();
    void stroke4();
    void stroke5();
    void stroke6();
    void stroke7();
    void stroke8();
    void stroke9();
    void strokeP();
    
    
    /* SUBROUTINE HEADER */
    char hid_keyboard_send(char special,char key1,char key2,char key3,char key4,char key5, char key6);
    char hid_keyboard_send_EXECUTE();
    char hid_keyboard_send_DESKTOP();
    char hid_keyboard_send_BLANK();
    /* END SUBROUTINE HEADER */
    
    void interrupt(){
       USB_Interrupt_Proc();                   // USB servicing is done inside the interrupt
    }
    
    void main(void){
      start=0;
      count_skill=0;
      ADCON1 |= 0x0A;                         // analog AN0 --> AN4 ( RA0, RA1, RA2, RA3 , RA5 )
      CMCON  |= 7;                            // Disable comparators
      PORTA =0x00;
      TRISA=0b11101111;   // RA4 output
      TRISB=0x03;
      PORTB=0x00;
      PORTC=0x00;
      TRISC=0b10111001;  // RC7 in for UART RX , RC6 out for UART TX , RC0 in for Freq Cnt , RC1,RC2 out for attenuator
      PORTD=0x00;
      TRISD=0b00001111;
      PORTE=0x00;
      TRISE=0b000;
      HID_Enable(&usbreadbuff,&usbwritebuff);       // Enable HID communication
      Delay_ms(2000);  // delay 2 sec for usb already
    
      //////  Setup for Key Timer !!!
      key0time=1;
      key1time=1;
      key2time=1;
      key3time=1;
      key4time=1;
      key5time=1;
      key6time=1;
      key7time=1;
      key8time=1;
      key9time=1;
      keyPtime=1;  // 1sec
      P_loop=3;
      ///////////////
    
    
      while(1)
      {
    
        butt_check();   // check start/pause every
        if(start)     // start =1
         {
          do
          {
            stroke1();
            stroke2();
            stroke3();
            stroke4();
            stroke5();
            stroke6();
            stroke7();
            stroke8();
            stroke9();
            stroke0();
            //// check Skill loop for key P end !!!
             count_skill++;
            if(count_skill >= P_loop)  // match value
            {
              count_skill=0;   // reset count
              strokeP();
            }
            
          }
          while(start);
         }
    
    
      }
    
    }
    
    ////////////////// FUNCTIONS ///////////////////////
    void butt_check()
    {
     if(start_butt)
         {
          start =!start;
          if(start==0) {count_skill=0;}
          while(start_butt);
          Delay_ms(50);
    
         }
    }
    /////////////////
    void key_delay(unsigned long value)
    {
     while(value--)
      {
       Delay_ms(1);
       butt_check();
       if(start==0){value=0;}  // exit while
      }
    }
    /* SUBROUTINE */
    char hid_keyboard_send(char special,char key1,char key2,char key3,char key4,char key5, char key6)
    {
      usbwritebuff[0]=special;
      usbwritebuff[1]=0x00;
      usbwritebuff[2]=key1;
      usbwritebuff[3]=key2;
      usbwritebuff[4]=key3;
      usbwritebuff[5]=key4;
      usbwritebuff[6]=key5;
      usbwritebuff[7]=key6;
      return HID_Write(&usbwritebuff,8);
    
    }
    
    char hid_keyboard_send_EXECUTE()  // left windows key + r
    {
     return hid_keyboard_send(0b00001000,0x15,0x00,0x00,0x00,0x00,0x00);
    }
    
    char hid_keyboard_send_DESKTOP()  // left windows key + d
    {
     return hid_keyboard_send(0b00001000,0x07,0x00,0x00,0x00,0x00,0x00);
    }
    
    char hid_keyboard_send_BLANK()
    {
    
     usbwriteblank[0] = 0x00;
     usbwriteblank[1] = 0x00;
     usbwriteblank[2] = 0x00;
     usbwriteblank[3] = 0x00;
     usbwriteblank[4] = 0x00;
     usbwriteblank[5] = 0x00;
     usbwriteblank[6] = 0x00;
     usbwriteblank[7] = 0x00;
     return HID_Write(&usbwriteblank,8);
    
    }
    ///////////////////////////////////////////////////////////
    void stroke0()
    {
     hid_keyboard_send(0x00,zero,0x00,0x00,0x00,0x00,0x00);
     hid_keyboard_send_BLANK();
     // delay here   ( check butt allways in Delay )
     time_buff = key0time*1000;
     key_delay(time_buff);
    }
    ///////
    void stroke1()
    {
     hid_keyboard_send(0x00,one,0x00,0x00,0x00,0x00,0x00);
     hid_keyboard_send_BLANK();
     // delay here   ( check butt allways in Delay )
     time_buff = key1time*1000;
     key_delay(time_buff);
    }
    ///////
    void stroke2()
    {
     hid_keyboard_send(0x00,two,0x00,0x00,0x00,0x00,0x00);
     hid_keyboard_send_BLANK();
     // delay here   ( check butt allways in Delay )
     time_buff = key2time*1000;
     key_delay(time_buff);
    }
    ///////
    void stroke3()
    {
     hid_keyboard_send(0x00,three,0x00,0x00,0x00,0x00,0x00);
     hid_keyboard_send_BLANK();
     // delay here   ( check butt allways in Delay )
     time_buff = key3time*1000;
     key_delay(time_buff);
    }
    ///////
    void stroke4()
    {
     hid_keyboard_send(0x00,four,0x00,0x00,0x00,0x00,0x00);
     hid_keyboard_send_BLANK();
     // delay here   ( check butt allways in Delay )
     time_buff = key4time*1000;
     key_delay(time_buff);
    }
    ///////
    void stroke5()
    {
     hid_keyboard_send(0x00,five,0x00,0x00,0x00,0x00,0x00);
     hid_keyboard_send_BLANK();
     // delay here   ( check butt allways in Delay )
     time_buff = key5time*1000;
     key_delay(time_buff);
    }
    ///////
    void stroke6()
    {
     hid_keyboard_send(0x00,six,0x00,0x00,0x00,0x00,0x00);
     hid_keyboard_send_BLANK();
     // delay here   ( check butt allways in Delay )
     time_buff = key6time*1000;
     key_delay(time_buff);
    }
    ///////
    void stroke7()
    {
     hid_keyboard_send(0x00,seven,0x00,0x00,0x00,0x00,0x00);
     hid_keyboard_send_BLANK();
     // delay here   ( check butt allways in Delay )
     time_buff = key7time*1000;
     key_delay(time_buff);
    }
    ///////
    void stroke8()
    {
     hid_keyboard_send(0x00,eight,0x00,0x00,0x00,0x00,0x00);
     hid_keyboard_send_BLANK();
     // delay here   ( check butt allways in Delay )
     time_buff = key8time*1000;
     key_delay(time_buff);
    }
    ///////
    void stroke9()
    {
     hid_keyboard_send(0x00,nine,0x00,0x00,0x00,0x00,0x00);
     hid_keyboard_send_BLANK();
     // delay here   ( check butt allways in Delay )
     time_buff = key9time*1000;
     key_delay(time_buff);
    }
    ///////
    void strokeP()
    {
     hid_keyboard_send(LeftShift,p,0x00,0x00,0x00,0x00,0x00);
     hid_keyboard_send_BLANK();
     // delay here   ( check butt allways in Delay )
     time_buff = keyPtime*1000;
     key_delay(time_buff);
    }
    ///////
    
    
    /* END SUBROUTINE */
    --- file khai báo USB để Win nhận đây là 1 KEYBOARD
    Code:
    const unsigned int USB_VENDOR_ID = 0x1304;
    const unsigned int USB_PRODUCT_ID = 0x1977;
    const char USB_SELF_POWER = 0x80;            // Self powered 0xC0,  0x80 bus powered
    const char USB_MAX_POWER = 50;               // Bus power required in units of 2 mA
    const char USB_TRANSFER_TYPE = 0x03;         //0x03 Interrupt
    const char EP_IN_INTERVAL = 1;
    const char EP_OUT_INTERVAL = 1;
    
    const char USB_INTERRUPT = 1;
    const char USB_HID_EP = 1;
    
    const char USB_HID_RPT_SIZE = 45; // Keyboard  <--> host
    
    
    /* Device Descriptor */
    const struct
    {
        char bLength;               // bLength         - Descriptor size in bytes (12h)
        char bDescriptorType;       // bDescriptorType - The constant DEVICE (01h)
        unsigned int bcdUSB;        // bcdUSB          - USB specification release number (BCD)
        char bDeviceClass;          // bDeviceClass    - Class Code
        char bDeviceSubClass;       // bDeviceSubClass - Subclass code
        char bDeviceProtocol;       // bDeviceProtocol - Protocol code
        char bMaxPacketSize0;       // bMaxPacketSize0 - Maximum packet size for endpoint 0
        unsigned int idVendor;      // idVendor        - Vendor ID
        unsigned int idProduct;     // idProduct       - Product ID
        unsigned int bcdDevice;     // bcdDevice       - Device release number (BCD)
        char iManufacturer;         // iManufacturer   - Index of string descriptor for the manufacturer
        char iProduct;              // iProduct        - Index of string descriptor for the product.
        char iSerialNumber;         // iSerialNumber   - Index of string descriptor for the serial number.
        char bNumConfigurations;    // bNumConfigurations - Number of possible configurations
    } device_dsc =
      {
          0x12,                   // bLength
          0x01,                   // bDescriptorType
          0x0200,                 // bcdUSB   (USB 2.0)
          0x00,                   // bDeviceClass
          0x00,                   // bDeviceSubClass
          0x00,                   // bDeviceProtocol
          8,                      // bMaxPacketSize0
          USB_VENDOR_ID ,          // idVendor
          USB_PRODUCT_ID,         // idProduct
          0x0002,                 // bcdDevice
          1,                       // iManufacturer
          2,                       // iProduct
          0,                   // iSerialNumber
          0x01                    // bNumConfigurations
      };
    
    
    
    /* Configuration 1 Descriptor */
    const char configDescriptor1[] =
    {
        // Configuration Descriptor
        0x09,                   // bLength             - Descriptor size in bytes
        0x02,                   // bDescriptorType     - The constant CONFIGURATION (02h)
        0x29,0x00,              // wTotalLength        - The number of bytes in the configuration descriptor and all of its subordinate descriptors
        1,                      // bNumInterfaces      - Number of interfaces in the configuration
        1,                      // bConfigurationValue - Identifier for Set Configuration and Get Configuration requests
        0,                      // iConfiguration      - Index of string descriptor for the configuration
        USB_SELF_POWER,         // bmAttributes        - Self/bus power and remote wakeup settings
        USB_MAX_POWER,          // bMaxPower           - Bus power required in units of 2 mA
    
       /* Interface Descriptor1 */
        0x09,                // Size of this descriptor in bytes
        0x04,               // INTERFACE descriptor type
        0,                    // Interface Number
        0,                      // Alternate Setting Number
        2,                      // Number of endpoints in this intf
        0x03,               // HID Class code
        0,                  // Subclass code
        0,                  // Protocol code
        0,                      // Interface string index
    
        /* HID Class-Specific Descriptor */
        0x09,                 // Size of this descriptor in bytes
        0x21,                // HID descriptor type
        0x01,0x01,                 // HID Spec Release Number in BCD format (1.11)
        0x00,                   // Country Code (0x00 for Not supported)
        1,         // Number of class descriptors, see usbcfg.h
        0x22,                // Report descriptor type
        USB_HID_RPT_SIZE,0x00,    //YTS //sizeof(hid_rpt01),      // Size of the report descriptor
    
       // Endpoint Descriptor - Inbound to host
        0x07,                   // bLength - Descriptor size in bytes (07h)
        0x05,                   // bDescriptorType - The constant Endpoint (05h)
        USB_HID_EP | 0x80,      // bEndpointAddress - Endpoint number (0x01) and direction (0x80 = IN to host)
        USB_TRANSFER_TYPE,      // bmAttributes - Transfer type and supplementary information
        0x40,0x00,              // wMaxPacketSize - Maximum packet size supported
                                // This determines the size of the transmission time slot allocated to this device
        EP_IN_INTERVAL,         // bInterval - Service interval or NAK rate
    
        // Endpoint Descriptor - Outbound from host (i.e. LED indicator status bits)
        0x07,                   // bLength - Descriptor size in bytes (07h)
        0x05,                   // bDescriptorType - The constant Endpoint (05h)
        USB_HID_EP,             // bEndpointAddress - Endpoint number (0x01) and direction (0x00 = OUT from host)
        USB_TRANSFER_TYPE,      // bmAttributes - Transfer type and supplementary information
        0x40,0x00,              // wMaxPacketSize - Maximum packet size supported
                                // This determines the size of the transmission time slot allocated to this device
        EP_OUT_INTERVAL         // bInterval - Service interval or NAK rate
        
    
    };
    
    const struct
    {
      char report[USB_HID_RPT_SIZE];
    } hid_rpt_desc =
     {
        0x05, 0x01,                    // G USAGE_PAGE (Generic Desktop)
        0x09, 0x06,                    // L USAGE (Keyboard)
        0xa1, 0x01,                    // M COLLECTION (Application)
        0x05, 0x07,                    //   G USAGE_PAGE (Keyboard)
        0x19, 0xe0,                    //   L USAGE_MINIMUM (Keyboard LeftControl)
        0x29, 0xe7,                    //   L USAGE_MAXIMUM (Keyboard Right GUI)
        0x15, 0x00,                    //   G LOGICAL_MINIMUM (0)
        0x25, 0x01,                    //   G LOGICAL_MAXIMUM (1)
        0x75, 0x01,                    //   G REPORT_SIZE (1)
        0x95, 0x08,                    //   G REPORT_COUNT (8)
        0x81, 0x02,                    //   M INPUT (Data,Var,Abs)
    
        0x95, 0x01,                    //   G REPORT_COUNT (1)
        0x75, 0x08,                    //   G REPORT_SIZE (8)
        0x81, 0x01,                    //   M INPUT (Cnst,Var,Abs)
    
        0x95, 0x06,                    //   G REPORT_COUNT (5)
        0x75, 0x08,                    //   G REPORT_SIZE (8)
         0x15, 0x00,                   //      Logical minimum (0)
        0x25, 0x65,                    //     Logical maximum (101)
        0x05, 0x07,                    //   G USAGE_PAGE key code
        0x19, 0x00,                    //   L USAGE_MINIMUM (0)
        0x29, 0x65,                    //   L USAGE_MAXIMUM (101)
        0x81, 0x00,                    //   M INPUT (Data,Ary,Abs)
        0xc0                         // M END_COLLECTION
    
    
       };
    
    
    
    //Language code string descriptor
    const struct {
      char bLength;
      char bDscType;
      unsigned int string[1];
      } strd1 = {
          4,
          0x03,
          {0x0409}
        };
    
    
    //Manufacturer string descriptor
    const struct{
      char bLength;
      char bDscType;
      unsigned int string[20];
      }strd2={
        34,           //sizeof this descriptor string
        0x03,
        {'Q','u','e','D','u','o','n','g',' ','E','l','e','c','t','r','o','n','i','c','s'}
      };
    
    //Product string descriptor
    const struct{
      char bLength;
      char bDscType;
      unsigned int string[13];
    }strd3={
        32,          //sizeof this descriptor string
        0x03,
        {'K','e','y','b','o','a','r','d',' ','F','r','e','e'}
     };
     
    
    //Array of configuration descriptors
    const char* USB_config_dsc_ptr[1];
    
    //Array of string descriptors
    const char* USB_string_dsc_ptr[3];
    
    void USB_Init_Desc(){
    
      USB_config_dsc_ptr[0] = &configDescriptor1;
      USB_string_dsc_ptr[0] = (const char*)&strd1;
      USB_string_dsc_ptr[1] = (const char*)&strd2;
      USB_string_dsc_ptr[2] = (const char*)&strd3;
    
    }
    --- Và đây ... là tất cả Project , test thử trên Proteus
    Free_version.zip


    -Phiên bản Thương mại ( Tức sản phẩm thương mại) :

    thì có thêm 1 số phần mềm hỗ trợ ( đại loại là thế này ) :
    Click image for larger version

Name:	KB_loader10.jpg
Views:	1
Size:	136.6 KB
ID:	1414202

    ( Hiện tại mình đã viết phần mềm cho PC ( WINDOWS ) đã và đang viết cho LINUX , MAC , iOS ... và cả WinCE nữa nếu thấy cần thiết )


    --- Chúc các bạn Chủ Nhật vui vẻ
    Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

  • #2
    Trong project này ... các phím sẽ tự động ấn 1...9.. 0 sau 3 lần sẽ ấn P ...

    Mình để nguyên cả bảng Scancode để các bạn tiện thay phím nếu cần . Khi chạy thử trên Proteus ( mô phỏng - sẽ bị chậm hơn Hardware thật ) ... Nhớ mở 1 trình soạn thảo nào đó ( VD : NOtePAD ) ... rồi ấn nút Start ... !
    Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

    Comment


    • #3
      Có bác nào bán mấy trăm k/ 1 cái này đấy ... sorry nhé !
      Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

      Comment


      • #4
        nghe xe ôm đồn 300k ^^ chơi hẳn nguyên con ARM @@

        Comment


        • #5
          Cái này dự định em DIY bộ bàn phím dành riêng cho Altium như mấy cha pờ rô phét sừn nồ như bên Tây

          Comment


          • #6
            Nguyên văn bởi chung1608 Xem bài viết
            nghe xe ôm đồn 300k ^^ chơi hẳn nguyên con ARM @@
            Mình search google rồi .... tổng cộng phải chi mất 370k ( tổng cả cước vận chuyển hay sao ý ) để có được nó . ( của 1 tác giả ở Sài Gòn )

            --- ARM dùng con to đùng , giá cao ... đúng là lãng phí ... !

            --- giá thành 1 còn ARM với PIC là same same với nhau ... nhưng PIC đầy đủ chức năng hơn , nhỏ nhẹ , linh hoạt hơn ... nếu dùng PIC18K có USB sẽ mất tầm 50 - 60k/ chú ... dùng PIC18F4550 , 2550 mất hơn 100k/chú !


            --- Còn nếu thích mình có thể dùng MCU khác làm thành USB ... chi phí chắc hết 25- 30k thôi . ( Atmega8 - AVR chẳng hạn ) . He he.

            --- Tuy nhiên mình vẫn dùng PIC18F vì có thư viện sẵn ( mì ăn liền ) ... đỡ mất công ... ngại Viết bài lắm
            Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

            Comment


            • #7
              Nguyên văn bởi duong_act Xem bài viết
              Cái này dự định em DIY bộ bàn phím dành riêng cho Altium như mấy cha pờ rô phét sừn nồ như bên Tây
              bạn làm thì lưu nó vào mấy cái flash hoặc None Ram . ... làm cả phần mềm setup cho nó ... giống như kiểu Logitech chuyên đồ game vậy ... khi tung chưởng ... thay vì phải bấm " liên hoàn nút " thì chỉ cần 1 nút ... là ra chưởng ngay ...

              chưởng lực mạnh mẽ ... nhanh như chớp kiểu " nhất dương chỉ" của FIRE ...thì ...có mà Độc cô cửu kiếm , giáng long thập bát chưởng ... cũng chết
              Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

              Comment


              • #8
                Hihi, thanks tình thần chia sẻ của mod nhé, tiện đây ngồi đọc truyện buồn em design luôn 1 cái kit dev nhỏ nhỏ cho 18F4550, (tương thích hoàn toàn với phần cứng của anh Quế Dương, có thêm 1 kết nối keypad 4x4 8led lcd nguồn) cho bạn sinh viên nào thích lấy về tập code luôn
                Design trong lúc mấy ông anh trò chuyện bên trên nên có thể hơi xấu tí nhé
                Link down:
                - Pic18F4550 CPU: Pic18F4550-USB-Final.rar
                - Keypad 4x4 : Keypad4x4.rar
                Chú ý kit 18F4550: toplayer phủ gnd chế độ Direct connect ( để tản nhiệt cho con 7805 dán) còn bottom layer phủ no net nhé
                Demo cái cho nó đẹp =))


                Cái ảnh ở trang upanh nó be bé mà sao lên 4rum nó to thế, híc.
                Web:
                ->Nhận thiết kế, hoàn thiện dự án, sản phẩm điện tử<-
                -->Giải pháp GSM/GPRS/GPS - Công nghệ RFID<--

                Comment


                • #9
                  Nguyên văn bởi duong_act Xem bài viết
                  Cái này dự định em DIY bộ bàn phím dành riêng cho Altium như mấy cha pờ rô phét sừn nồ như bên Tây
                  làm được cái này đỡ mất công nhớ một lô phím tắt trong altium cũng khỏe

                  Comment


                  • #10
                    Nguyên văn bởi xe đạp Xem bài viết
                    làm được cái này đỡ mất công nhớ một lô phím tắt trong altium cũng khỏe
                    Mình cũng chỉ là định thay cái chuột như bọn Tây xoay 3D cho nó sướng thôi

                    Comment


                    • #11
                      Nguyên văn bởi duong_act Xem bài viết
                      Mình cũng chỉ là định thay cái chuột như bọn Tây xoay 3D cho nó sướng thôi
                      trên kia mình để nguyên cả scancode ... có đầy đủ các phím của bàn phím AT thông dụng !

                      Nếu làm bàn phím tương tác với altium ... thì cũng làm altium như thường ... rồi kết hợp với các phím để thành các command trong altium thôi ... ! tương tự cái điều khiển Máy tính bằng Hồng ngoại ngày xưa ( gilder ) gì đó .

                      --- Với các scancode cơ bản trên ... bạn có thể tuy cập bất cứ phần mềm nào trên windows ( nếu lập trình dành cho win ) ... hay MAC , hay Linux khi các chương trình đó có chấp nhận điều khiển bằng KEYBOARD !

                      --- Còn 1 việc để nói hơn là khi bạn làm cái thiết bị đó ở mức PRO ... tức là bạn phải có " làm thêm " cái " Config " " setting " cho thiết bị ( viết 1 phần mềm chẳng hạn ) ... điều này đương nhiên là dành cho người am hiểu cả lập trình phần cứng , phần mềm ở mức độ chuyên nghiệp hơn !
                      Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                      Comment


                      • #12
                        đã có bản thương mại chưa bác queduong oi? Em gà về vụ này nhưng đang cần dùng! Có j bác giúp em nha!

                        Comment


                        • #13
                          Nguyên văn bởi minhhai337 Xem bài viết
                          đã có bản thương mại chưa bác queduong oi? Em gà về vụ này nhưng đang cần dùng! Có j bác giúp em nha!
                          Có bản PRO - thương mại rồi ! NHưng mới chỉ làm theo " đơn đặt hàng thôi ".
                          Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                          Comment


                          • #14
                            Tác phẩm đây :

                            Mạch kiểm nghiệm ( với firmware PRO - bản thương mại ). Về phần cứng ( hardware ) giữa bản free và thương mại chẳng khác gì nhau ( khác ở Firmware và phần mềm App !

                            Ái chà ... dùng PIC18F2550 ( SMD ) + 1 nút bấm ( dùng để start , stop ) + 1 led để hiển thị trạng thái ( start , stop ... Update dữ liệu ... firmware )

                            --- Mạch đơn giản chỉ làm 1 lớp ... không cần 2 lớp cho nó tốn kém ( Nếu làm 2 lớp có thể làm nhỏ gọn hơn nữa !!! )

                            Xem nào : Thế này nó cũng khá nhỏ gọn đấy chứ ???
                            Click image for larger version

Name:	SNC00184 [640x480].jpg
Views:	1
Size:	73.8 KB
ID:	1366793

                            Lại có cả chữ kỹ của tác giả nữa ( Không phải chỗ nào cũng ký linh tinh đâu ) ( nguyên tắc ! )
                            Click image for larger version

Name:	SNC00185 [640x480].jpg
Views:	1
Size:	65.9 KB
ID:	1366794

                            Còn đây là so sánh độ " mini " với 2 cái ổ flash USB ... cũng không tệ với mạch in 1 lớp !
                            Click image for larger version

Name:	SNC00187 [640x480].jpg
Views:	1
Size:	53.9 KB
ID:	1366795

                            --- Cuối cùng là file mạch PCB ... vẽ bằng Altium Protel ... Ông nào yêu bản free ... lười vẽ mạch cũng có thể mang về tự làm cho nó giống Prồ
                            USB_KB_1layer.zip

                            PHÙUUUUU.... Xong rồi ! ( gõ mệt quá ! )
                            Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                            Comment


                            • #15
                              Còn quả chốt ... Đây là phẩn mềm dành cho bản thương mại ( mang tính chất tham khảo thôi nhé ! ) ...
                              Bác nào có sử dụng ... có thể cho lời góp ý nhận xét ( em không chuyên phần mềm ) .

                              --- Sử dụng nó thì máy đã phải cài sẵn Framework .Net 2.0 nhé (dotnetfx2.0 )Keyboard_loader.zip
                              Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                              Comment

                              Về tác giả

                              Collapse

                              queduong Tìm hiểu thêm về queduong

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X