Arduino secara hardware merupakan sebuah board mikrokontroler yang sudah dilengkapi dengan ic usb to serial dan bootloader. IC usb to serial digunakan untuk mempermudah user jika ingin melakukan komunikasi data dengan PC/Laptop, mengingat sekarang serial port sudah jarang ditemukan pada laptop. Sedangkan bootloader merupakan sebuah firmware yang ditanamkan di flash memori yang secara umum fungsinya untuk menghandle fungsi flash programming dari USART mikrokontroler (komunikasi serial). Arduino hadir dengan IDE yang bernama Arduino IDE. Arduino IDE dapat kita gunakan untuk menuliskan program di board arduino. Namun, kita juga dapat menggunakan compiler lain untuk mengcompile program, antara lain CodeVisionAVR, AVR-GCC, BascomAVR, dll. Arduino IDE hadir dengan kemudahan, karena sudah disediakan banyak library untuk mengakses hardware internal mikrokontroler ataupun mengakses modul ataupun sensor-sensor lain yang banyak disediakan di pasaran. Salah satu library yang disediakan oleh arduino adalah library untuk mengakses fitur komunikasi serial mikrokontroler. Dengan menggunakan library kita sangat dimudahkan dalam pemrograman, karena tidak perlu melakukan pengaturan-pengaturan register yang kadang perlu perhitungan khusus. Dengan bantuan library kita cukup memanggil fungsi/rutin yang sudah disediakan. Contoh fungsi dari library serial yang sudah disediakan arduino antara lain sebagai berikut
Serial.begin(9600); // inisialisasi serial port dengan baudrate 9600 Serial.write(0x00); // mengirimkan data byte ke serial port Serial.print("Hello"); // mengirimkan data text "Hello" ke serial port
Library memang memudahkan kita dalam melakukan pemrograman, namun terkadang ada fitur-fitur yang tidak disediakan oleh library. Salah satu contohnya adalah fitur interupsi serial. Interupsi serial disini dapat dikatakan sebagai event jika ada data serial yang masuk. Selama saya berkenalan dengan arduino saya belum pernah menemukan library yang bisa langsung mengakses fitur serial interrupt ini. Di library arduino disediakan fungsi Serial.event() , namun fungsi tersebut bukanlah seperti interrupt melainkan hanya melakukan pengecekan data setiap beberapa waktu. Nah, karena keterbatasan tersebut terkadang kita perlu juga mengakses ke jerohan mikrokontroler, dalam artian disini adalah mengakses langsung ke registernya.
Arduino pada dasarnya menggunakan compiler opensource AVR-GCC untuk mengcompile programnya. Bagi anda yang sudah familiar memprogram mikrokontroler AVR dengan AVR STUDIO, CodeVision, ataupun WinAVR saya rasa tidak sulit untuk memahami bagaimana penggunaaan interupsi serial di arduino. Untuk menggunakan interupsi serial kita harus malakukan pengaturan langsung ke register yang berhubungan dengan komunikasi serial. Untuk lebih jelasnya saya langsung berikan contoh program untuk melakukan loopback ke serial port dengan interupsi serial.
void initSerial() { // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART0 Mode: Asynchronous // USART Baud Rate: 9600 (Double Speed Mode) UCSR0A=0x02; UCSR0B=0x98; UCSR0C=0x06; UBRR0H=0x00; UBRR0L=0xCF; } // SERIAL INTERUPT // Jika ada data masuk otomatis fungsi ini yang akan dieksekusi ISR(USART_RX_vect) { char data; data = UDR0; UDR0 = data; // Loopback } void setup() { initSerial(); } void loop() { }
Perlu diketahui, jika kita telah melakukan akses langsung ke register maka fungsi-fungsi bawaan library seperti Serial.read(), Serial.print(), dll tidak dapat lagi digunakan. Anda harus membuat fungsi/rutin sendiri untuk melakukan pengiriman data, dsb.
— Semoga Bermanfaat —
By : Eko Rudiawan
mas boleh tanya? apa fungsi pengaturan beudrate pada arduino??? kenapa harus 9600?
makasi 😀
untuk menyamakan kecepatan transfer data antara device pengirim dan penerima,, tidak harus 9600 boleh saja yg lain, yg penting antara pengirim dan penerima sama baudratenya, kalau berbeda maka ibarat dua org yg bicara pakai bahasa yg berbeda
o gitu…. makasih banyak mas, jangan bosan2 kalo saya nanya ya 😀
*lagi skripsi saya