Serial Interrupt di Arduino

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

3 thoughts on “Serial Interrupt di Arduino

    • 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

Leave a comment