Video Tutorial Pengendalian Multi Client Robot Melalui Komunikasi Wireless XBee

0
Advertisements

Serial Interrupt di Arduino

3

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

Menggunakan Printf di Arduino

0

Arduino telah menyediakan fungsi yang dapat digunakan untuk mengakses komunikasi serial. Fungsi-fungsi tersebut antara lain Serial.begin(baudrate), Serial.print(), Serial.println(), Serial.write(). Serial.begin(baudrate) digunakan untuk melakukan inisisalisasi komunikasi serial dengan baudrate tertentu, sedangkan fungsi yang lain digunakan untuk mengirimkan data. Namun menurut Saya fungsi-fungsi tersebut ada keterbatasannya, contohnya seperti ini,

Serial.print("Angka ");
Serial.print(i);
Serial.print("Increment ");
Serial.println(i++);

Sintak program diatas digunakan untuk mengirimkan data text ke Serial port arduino, dimana data tersebut ada yang berupa data text static dan data angka yang dapat berubah-ubah. Keterbatasan fungsi-fungsi serial arduino dapat kita temukan pada saat menuliskan program diatas. Arduino tidak bisa menampilkan string dan angka sekaligus, kita harus memanggil fungsi Serial.print secara berulang-ulang.

Untuk mempermudah penulisan sintak program agar tidak panjang seperti diatas maka saya gunakan fungsi printf. Fungsi printf jika kita gunakan pada pemrograman C di komputer, fungsinya adalah untuk menampilkan kata-kata ke layar PC. Di arduino kita juga dapat gunakan fungsi ini untuk menampilkan kata-kata atau data ke serial port. Untuk melakukan hal itu perlu ada penambahan sintak khusus. Lebih jelasnya dapat dilihat di bawah ini

static FILE uartout = {0} ;

int i;

static int uart_putchar (char c, FILE *stream) {
   Serial.write(c);
   return 0 ;
}

void setup() {
   Serial.begin(9600);
   fdev_setup_stream (&uartout, uart_putchar, NULL, _FDEV_SETUP_WRITE);
   stdout = &uartout ;
}

void loop() {
   printf("Loop %d\r\n",i);
   i++;
   delay(1000);
}

Sintak diatas merupakan cara penggunaan printf untuk mengirimkan data ke serial port. Lebih efisien karena cukup memanggil satu baris fungsi, dibandingkan dengan sintak yang menggunakan fungsi bawaan arduino pada sourcecode pertama

-Semoga Bermanfaat-
By : Eko Rudiawan