Selasa, 17 Desember 2013

KOMUNIKASI SERIAL



TUJUAN :

1.  Memahami cara mengirimkan dan menerima data melalui periperal UART Arduino.

2.  Mampu membuat program untuk mengirimkan data berbasis teks dan berbasis byte.
3.  Mampu membuat program untuk menerima data secara pooling dan secara interupsi serial.


PERALATAN :

1.  Komputer

2.  Arduino Uno

3.  Project board

4.  Kabel jumper

5.  LCD

6.  Potensiometer 10K


PERCOBAAN :

5.1 Mengirim Data Teks

Pada percobaan kali ini akan dibuat program untuk mengirimkan data teks ke komputer  melalui  komunikasi  serial.  Pada  percobaan  ini  contoh  teks  yang  akan dikirimkan adalah "Hello World". Pengiriman data akan menggunakan baudrate 9600. Prosedur :
1.  Tuliskan sintaks program di bawah ini, kemudian lakukan kompilasi dan upload

program ke sistem minimum Arduino,
2.  Buka Serial Monitor pada Arduino IDE
3.  Pastikan konfigurasi baudrate adalah 9600 seperti Gambar 5.2.
4.  Pastikan data teks "Hello Word" yang dikirimkan arduino diterima oleh serial monitor 

Tugas dan Pertanyaan : 
1.  Gantiah parameter input pada fungsi Serial.print sesuai dengan Tabel 5.1. Amati data yang diterima pada HTerm, kemudian isilah Tabel 5.1 di bawah ini !  

Teks yang Dikirimkan Arduino
Teks yang Diterima Komputer

Halo

Halo

Apa Kabar Semua
Apa Kabar Semua

Kabar
Kabar

Semua
Semua

Yang
Yang
 
2.  Gantilah fungsi Serial.print menjadi Serial.println, kemudian tuliskan amati data yang diterima oleh komputer. Jelaskan perbedaan penggunaan fungsi Serial.print dan Serial.println ! 
Jawab        :  Serial.print berfungsi  mencetak kata yang kita ketik dalam Program, tapi tanpa ada spasi, Serial.println berfungsi  mencetak kata yang kita ketik dalam Program, tiap kata dicetak pada baris baru.
 
3.  Tambahkan karakter \r\n pada akhir baris teks pada Tabel 5.1. Amati data yang ditampilkan pada komputer. Jelaskan fungsi karakter \r\n pada komunikasi serial ! 
Jawab           : Fungsi \r mencetak kata tetapi tidak ada spasi 
Fungsi \n mencetak kata pada baris baru (enter) fungsinya    hampir sama dengan serial.println 

4.  Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 5.1 !





5.2 Mengirim Data Byte

Pada percobaan kali ini akan dibuat program untuk mengirimkan data byte ke komputer melalui komunikasi serial. Pengiriman data akan menggunakan baudrate
115200.

Prosedur :

1.  Tuliskan sintaks program di bawah ini, kemudian lakukan kompilasi dan upload program ke sistem minimum Arduino.
2.  Buka aplikasi HTerm pada komputer, pastikan konfigurasi pada HTerm seperti gambar di bawah ini.
3.  Klik tombol Connect, kemudian perhatikan data yang ditampilkan pada bagian Receive Data. Pastikan data tersebut sama dengan data yang dikirimkan oleh Arduino.



Tugas dan Pertanyaan :


1.  Gantilah parameter input untuk fungsi Serial.write dengan data pada Tabel 5.2. Amati data yang diterima pada HTerm, kemudian isilah Tabel 5.2 !
Data yang Dikirimkan Arduino
Data yang Diterima Komputer
0x00,0x01,0x02,0x03,0x04
00,01,02,03,04
0xF0,0x1F,0x2F,0xF3,0xF4
F0,1F,2F,F3,F4
0xF5,0xFF,0x3F,0xF3,0x44
F5,FF,3F,f3,44
0xF0,0x1F, 0x02,0x03,0x04
F0,1F,02,03,04
0x00,0x01, 0xF0,0x1F,0x2F
00,01,F0,1F,2F
 
 
2.  Gantilah konfigurasi dari HTerm menjadi seperti di bawah ini, perhatikan data yang

diterima. Kenapa data yang diterima berubah menjadi huruf ? Jelaskan!
 
 Jawab : Data yang diterima berubah menjadi huruf karena pengaturan yang dicentang adalah Ascii.
 
3.  Jelaskan perbedaan penggunaan fungsi Serial.print dan fungsi Serial.write !
Jawab :Fungsi serial.print mencetak kata yang telah kita ketik dalam program, sedangkan fungsi serial.write menyalin atau menulis data yang nantinya akan di baca dalam suatu software (Hterm). 
4.  Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 5.2 ! 

5.3 Menerima Data dari UART dengan Sistem Pooling

Pada percobaan kali ini akan dibuat program untuk menerima data teks dari komputer  melalui  komunikasi  serial.  Proses  penerimaan  data  akan  menggunakan sistem pooling (menunggu). Data yang diterima oleh Arduino akan ditampilkan pada LCD. Penerimaan data akan menggunakan baudrate 9600.
Prosedur :

1.  Buatlah rangkaian seperti Gambar 5.5
2.  Tuliskan sintaks program berikut ini, kemudian lakukan kompilasi dan upload program,


.Tugas dan Pertanyaan :

1.  Buka  Serial  Monitor  pada  Arduino  pastikan  konfigurasi  Serial  Monitor  sama seperti pada Gambar 5.6.
Ketikkan sembarang kata untuk dikirimkan (kurang dari 16 karakter), kemudian

tekan Send. Isilah Tabel 5.3 !

Teks yang dikirim
Teks Pada LCD
lidya
lidya
agustina
agustina
erwin
erwin
ardini
ardini
mikrokontroler
mikrokontroler


2.  Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 5.3 !


5.4 Menerima Data dari UART dengan Interupsi

Pada percobaan kali  ini  akan dibuat program untuk menerima data  teks  sama seperti   Percobaan   5.3.   Pada   percobaan   kali   ini   proses   penerimaan   data   kan menggunakan interupsi serial. Data yang diterima oleh Arduino akan ditampilkan pada LCD. Penerimaan data akan menggunakan baudrate 115200.
Prosedur :

1.  Tuliskan sintaks program di bawah ini, lakukan kompilasi dan upload program.
Tugas dan Pertanyaan :
 1.  Buka  Serial  Monitor pada  Arduino  IDE,  sesuaikan konfigurasi Serial  Monitor sesuai dengan Gambar 5.7.
Ketikkan sembarang teks untuk dikirimkan, tekan Send. Lengkapilah Tabel 5.4 !

Teks yang dikirim
Teks Pada LCD
Test
Test
Lidya
Lidya
Erwin
Erwin
Praktikum
Praktikum
Arduino
Arduino
 

2.  Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 5.4 !
#include <LiquidCrystal.h> //library dari Liquid Crystal Display (LCD)
#define FOSC 16000000
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); //menginisialisasi pin LCD dari pin 2 sampai pin 7
String dataSerial;                                           
void initSerial(int baudrate) {
int ubrr = FOSC/16/baudrate-1;
// Mengisi register UBRR0H dan UBRR0L untuk menentukan baudrate
UBRR0H |= ubrr>>8;
UBRR0L|= ubrr;
// Mengaktifkan saluran transmitter dan receiver
UCSR0B|= (1<<RXEN0)|(1<<TXEN0);
// Menggunakan format data 8 bit
UCSR0C|= (0<<UCSZ02)|(1<<UCSZ01)|(1<<UCSZ00);
// Menggunakan 1 stop bit
UCSR0C|= (0<<USBS0);
// No Parity
UCSR0C|= (0<<UPM01)|(0<<UPM00);
// Mengaktifkan RX interrupt
UCSR0B|= (1<<RXCIE0);
}
// Rutin yang akan dijalankan jika terjadi interupsi
ISR(USART_RX_vect){
char data = UDR0;
if(data=='\n') {
lcd.clear(); //membersihkan atau menghapus screen lcd
lcd.setCursor(0,0);//cursor ditampilkan pada baris 0 kolom 0
lcd.print("Incoming Data");//kata "Incoming Data" di cetak pada baris 0 kolom 0
lcd.setCursor(0,1);//cursor ditampilkan pada baris 0 kolom 1
lcd.print(dataSerial);//data yang diketik dicetak pada baris 0 kolom 1
dataSerial = ""; //data serial 0
}
else{
if(data!='\r') {
dataSerial += data;
}
}
}
void setup() {
initSerial(9600);
lcd.begin(16,2);//Lcd yang digunakan sebesar 16 baris dan 2 kolom
lcd.clear(); //membersihkan atau menghapus screen lcd
sei();
}
void loop() {
}

 3.  Jelaskan perbedaan penggunaan interupsi dan sistem pooling !

Jawab:    Interupsi adalah pada arduino akan meninggalkan program yang utama untuk menjalankan pada interupsi dan run maka pada arduino akan kembali ke program utama. Sistem pooling adalah kondisi pada arduino untuk menunggu pengiriman pada data dan melalui serial.

Tidak ada komentar:

Posting Komentar