Eksperimen Pengontrolan LED Via Port USB Tanpa Konverter USB/RS232


usb_led2_400

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 menyediakan 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
V-USB adalah software implementasi protokol USB berkecepatan rendah untuk mikrokontroler ATMEL AVR sehingga memungkinkan untuk membuat piranti USB dengan sebagian besar mikrokontroler 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 yang untuk transfer data Bulk, Control, Interrupt, dan Isochronous. Library dan driver libusb dapat di download di situs berikut ini: http://sourceforge.net/apps/trac/libusb-win32/wiki.

Skematik
Pada eksperimen ini, saya menggunakan mikrokontroler ATtiny2313V dengan kristal 12MHz dengan sebuah LED aktif high yang terhubung ke pin PD6. Berikut adalah skematik rangkaian eksperimen USBLED.

image

Berikut adalah penggalan program mikrokontroler ATtiny2313 untuk eksperimen pengontrolan LED via 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;
}

Untuk mengontrol LED melalui PC diperlukan sebuah program antarmuka yang pada eksperimen ini saya buat menggunakan bahasa C. Kompiler yang saya gunakan adalah kompiler bahasa C freeware yang sangat bagus yakni Pelles C. Berikut adalah screenshot program USB LED CONTROL dengan tampilan yang sangat sederhana.

usbled_pellesc

Jika button LED ON di klik, maka program akan mengirimkan request ke USB Device yakni ATtiny2313 yang sudah ditanami program USB Protocol. Demikian juga halnya jika 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. Driver libusb yang terbaru memiliki fungsi filtering sehingga program dapat mengakses piranti-piranti USB yang telah terinstalasi sebelumnya. Selain filtering, tentunya juga dapat berfungsi sebagai driver untuk piranti-piranti USB baru yang belum terinstal sebelumnya.

Berikut adalah popup notifikasi yang ditampilkan Windows ketika modul USBLED ditancapkan ke port USB dimana pada port USB tersebut belum pernah terinstal driver untuk USBLED.

telinks_usbled_pop

Jika di komputer telah terinstal piranti USB yang menggunakan libusb sebagai drivernya, contoh AVR USBASP, maka modul akan dikenali sebagai USBasp.

Nah, berikut ini adalah penggalan 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 adalah angka 4 (PSCMD_ON) untuk LED ON dan angka 5 (PSCMD_OFF) untuk LED OFF.

Anda dapat menyaksikan video demo pengontrolan LED via port USB melalui situs YouTube berikut ini:

http://youtu.be/wuTYlxTRopQ

Demikian sedikit informasi hasil eksperimen pengontrolan LED melalui port USB tanpa konverter USB-to-RS232. Mikrokontroler ATtiny2313 ditanami program implementasi protokol USB kecepatan rendah V-USB yang dibuat oleh OBDEV. Program PC mengakses modul USBLED menggunakan library libusb-win32. Semoga bermanfaat.

Selamat belajar dan selamat berkarya!

🙂

Iklan
Perihal

Cek situs kami di http://teknikelektrolinks.com. Blog Raspberry Pi: http://raspi.teknikelektrolinks.com

Tagged with: , , , , ,
Ditulis dalam AVR, C/C++, Driver Relay, Elektronika, Gratisan, Industrial Control and Automation, Mikrokontroler, Software/Programming
2 comments on “Eksperimen Pengontrolan LED Via Port USB Tanpa Konverter USB/RS232
  1. […] yang saya gunakan pada eksperimen ini adalah rangkaian yang sama dengan eksperimen sebelumnya yakni pengontrolan LED via USB tanpa konverter USB-to-RS232. Sebuah LED berwarna merah dalam eksperimen ini juga masih berfungsi sebagai perwakilan output yang […]

  2. Ricky berkata:

    Saya lagi belajar pemrograman USB, bolehkah saya minta source code nya? Oya, setting fuse pada attiny 2313 seperti apa? Makasih sebelum nya.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

Kategori

Bergabunglah dengan 2.497 pengikut lainnya

Display Counter 3-Digit Dengan Koneksi Wi-Fi
Display Nomor Antrian WiFi Android
Mengontrol Relay Via USB/Serial dan Wi-Fi
Blog Linux dan Raspberry Pi


USB Relay USB-2REL
USB Relay USB-4REL
Water Level Control WLC-02
Serial Relay SER-4REL
NEO STARDUINO SMS ALARM

Alarm SMS Berbasis NEO STARDUINO

1 PC – 6 Unit USB-2REL

Testing 6 USB-2REL Pada 1 Komputer

Standard Pengujian USB-2REL

Pengujian USB-2REL Sebelum Dikirim

LPT-4REL on Knoppix 7.0.5

Testing LPT-4REL on Knoppix Linux

T101 Inkubator Telur

T101 Inkubator Penetas Telur

KONTROL PERALATAN LISTRIK VIA PORT LPT KOMPUTER

Demo Kontrol Kontaktor via Port LPT

STARDUINO meets ANDROID

Demo Kontrol Bluetooth Relay Android

STARDUINO SMS RELAY

Kontrol Relay Via SMS Dengan Starduino

STARDUINO WEB RELAY

Demo Kontrol Relay Via Web/Internet

JustBASIC USB-2REL Control

Demo Kontrol USB-2REL + JustBASIC

STARDUINO + GPS + LCD

Demo Starduino GPS Dengan LCD

USB-2REL EXTREME TEST

Demo Kontrol On/Off Lampu USB-2REL

THERMOSTAT T101 IN ACTION

Demo Thermostat T101 Pada SV=37.5°C

WATER LEVEL CONTROL WLC-02

Demo Kontrol Level Air Tandon WLC-02

HUMIDITY CONTROLLER H103

Demo Kontrol Kelembaban H103 (DHT11)

%d blogger menyukai ini: