Pengontrolan Lampu melalui Port USB pada PC atau laptop
Perlahan tapi pasti, port USB telah "mengalahkan" popularitas port  serial (COM) dan port paralel (LPT). Kini, komputer-komputer dan laptop  terbaru tidak menyertakan lagi port serial, apalagi port paralel.  Beberapa tipe motherboard masih menyertakakan sebuah port serial  (COM1).Namun demikian, kini hampir semua peralatan elektronik memiliki  port USB untuk berkomunikasi dengan piranti elektronik lainnya.
Port USB memang memiliki banyak kelebihan dibandingkan dengan port  serial dan port paralel. Terlepas dari sudut pandang aplikasi, port USB  lebih cepat dan lebih ringkas dibandingkan port serial maupun port  paralel. Port USB juga menyediakan catu daya 5V DC dengan kemampuan arus  maksimum 500mA untuk menyuplai perangkat elektronik berbasis USB.
V-USB adalah sebuah software implementasi protokol USB  berkecepatan rendah untuk mikrokontroller ATMEL AVR sehingga  memungkinkan untuk membuat piranti USB dengan sebagian besar  mikrokontroller AVR tanpa tambahan chip lain. V-USB dapat di download di  
www.obdev.at.
libusb-win32 adalah library Win32 yang memberikan akses kepada  user (bukan admin) untuk mengakses piranti-piranti USB secara generik  tanpa perlu membuat kode-kode program kernel. Dengan libusb, kita dapat  menggunakan fungsi-fungsi API untuk transfer data Bulk, Control,  Interrupt, dan Isochronous. Library dan driver libusb dapat di download  di 
http://sourceforge.net/apps/trac/libusb-win32/wiki.
Skematik 
Pada  eksperimen ini mengunakan mikrokontroller ATtiny2313V dengan kristal  12MHz dengan sebuah LED aktif high yang terhubung ke pin PD6. Berikut  adalah skematik rangkaian eksperimen USB LED.
   
Berikut adalah program mikrokontroller ATtiny2313 untuk pengontrolan LED dari port USB
#define ON 1
#define OFF 0
#define LED(n) ((n)==(OFF) ? (PORTD&=~_BV(PD6)) : (PORTD|=_BV(PD6)))
uchar   usbFunctionSetup(uchar data[8])
{
  usbRequest_t    *rq = (void *) data;
  if (rq->bRequest==4)
      LED(ON);
  else if (rq->bRequest==5)
      LED(OFF);
}
/***  P R O G R A M  U T A M A  ***/
int main(void)
{
    //Inisialisasi PORT D
    PORTD = 0;     
    DDRD = ~(1 << 2);
    //Inisialisasi PORT B
    PORTB = 0;       
    DDRB = ~USBMASK; 
    //Inisialisasi Driver USB
    usbInit();
    //Aktifkan fungsi interupsi
    sei();
    for(;;)
    {
          usbPoll();    //Pantau terus, apakah ada permintaan dari Host
          _delay_ms(12);
    }
    return 0;
}
 
sss
Untuk mengontrol LED melalui PC diperlukan sebuah antarmuka yang pada  eksperimen ini menggunakan bahasa C. Kompiler yang digunakan yakni  Pelles C. Berikut adalah gambar dari program USB LED Control 
Jika button LED ON di klik, maka program akan mengirimkan request ke USB  Device yakni ATtiny2313 yang sudah ditanami program USB Protocol.  Demikian juga dengan button LED OFF di klik, maka program akan  mengirimkan request ke ATtiny2313 dengan ID request yang berbeda.
Untuk dapat berinteraksi dengan ATtiny2313. maka driver libusb perlu  diinstal terlebih dahulu. Jika komputer telah terinstal piranti USB yang  menggunakan libusb sebagai drivernya, contoh AVR USB. maka modul akan  dikenal sebagai USBasp.
Berikut ini adalah program Demo USB LED Control dalam bahasa C
static INT_PTR CALLBACK MainDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    unsigned char        nBytes;
    unsigned char        buffer[64];
    switch (uMsg)
    {
        case WM_INITDIALOG:
            //Inisialisasi port USB
            usb_init();
            //Buka komunikasi USB dengan Modul USBLED
             if(usbOpenDevice(&handle, USBDEV_SHARED_VENDOR, "Teknik Elektro  Links", USBDEV_SHARED_PRODUCT, "TELINKS-USB LED") != 0)
            {
                MessageBox(hwndDlg, "USBLED Error: Kode Vendor dan Product Salah!", "Error!", MB_ICONERROR);
                exit(1);
            }
            return TRUE;
        case WM_COMMAND:
            switch (GET_WM_COMMAND_ID(wParam, lParam))
            {
                case ID_LED_ON:
                    nBytes = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN,
                    PSCMD_ON, 0, 0, (char *)buffer, sizeof(buffer), 5000);
                    return TRUE;
                case ID_LED_OFF:
                    nBytes = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN,
                    PSCMD_OFF, 0, 0, (char *)buffer, sizeof(buffer), 5000);
                    return TRUE;
                case IDOK:
                    EndDialog(hwndDlg, TRUE);
                    return TRUE;
            }
            break;
        case WM_CLOSE:
            EndDialog(hwndDlg, 0);
            return TRUE;
    }
    return FALSE;
}
Program menggunakan fungsi usb_control_msg() untuk mengirimkan request  kepada modul USBLED. Identifikasi perintah LED ON dan LED OFF diletakkan  pada ID-Request yang dalam hal ini angka 4 (PSCMD_ON) untuk LED ON dan  angka 5 (PSCMD_OFF) untuk LED OFF. 
Demikian sedikit informasi mengenai pengontrolan LED melalui port USB, semoga bermanfaat.
 
Belum ada tanggapan untuk "Pengontrolan Lampu melalui Port USB pada PC atau laptop"
Post a Comment