LAPORAN
PRAKTIKUM 5
KOMUNIKASI SERIAL
Nama :Muhammad Rizki
Nim :3211301031
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 : 1 set
2. Arduino Uno : 1 pcs
3. Project board : 1 pcs
4. Kabel jumper : 1 set
5. LCD : 1 pcs
6. Potensiometer 10K : 1 pcs
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,
void setup() { Serial.begin(9600);
}
void loop() { Serial.print("Hello World"); delay(2000);
}
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 !
Tabel 5.1 Daftar
teks yang dikirimkan pada
program
|
Teks yang Dikirimkan Arduino
|
Teks yang Diterima Komputer
|
|
Halo
|
Halo
|
|
Apa Kabar Semua
|
Apa
Kabar Semu
|
|
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 ! fungsinya adalah sebagai enter
serial.print menampilkan text hanya satu baris , sehingga
text akan ditampilkan
memanjang pada satu baris.Serial.println menampilkan text 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 !
enter dua kali
Karakter er\r\n sama saja dengan fungsi dari
Serial.println adalah sama-sama berfungsi untuk menampilkan text pada
baris baru
4. Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 5.1 !
void setup() {
Serial.begin(9600);
// untuk komunikasi serial dengan kecepatan 9600
bit persekon.
}
void loop() {
Serial.print("Hello World"); // untuk
menampilkan kalimat
Hello World pada serial monitor
delay(2000); // untuk menjeda selama 2 detik sebelum melooping kembali
}
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
void setup() { Serial.begin(115200);
}
void loop() { Serial.write(0x41);
Serial.write(0x42);
Serial.write(0x43);
Serial.write(0x44);
Serial.write(0x45);
delay(2000);
}
2. Buka aplikasi HTerm pada komputer, pastikan konfigurasi pada HTerm Gambar 5.3 Konfigurasi HTern
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 !
Tabel 5.2 Daftar data byte yang dikirimkan pada program
|
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 !
Gambar 5.4 Konfigurasi HTerm mode
ASCII
3. Jelaskan perbedaan penggunaan fungsi Serial.print dan fungsi Serial.write !
Serial.write menampilkan data sesuai dengan
bilangan hex sedangkan Serial.print menampilkan data dengan
mengganti huruf F menjadi 3
4. Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 5.2 !
void
setup() {
Serial.begin(115200); // banyaknya
data bit yang di kirim
}
void
loop() {
Serial.write(0x41); //menampilkan 41
Serial.write(0x42); // menampilkan 42
Serial.write(0x44); // menampilkan 43
Serial.write(0x45); // menampilkan 44
delay(2000); // jeda selama 2 detik
}
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.
Gambar 5.5 Rangkaian Percobaan 5.3
2. Tuliskan sintaks program berikut ini, kemudian lakukan kompilasi dan upload
program,
#include<LiquidCrystal.h> LiquidCrystal lcd=(2,3,4,5,6,7);
String textFromSerial = "";
void setup() { lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Data
From Serial") Serial.begin(9600);
}
void loop() { while(Serial.available()>0) {
char data = Serial.read(); if(data == '\n') {
lcd.setCursor(0,1); lcd.print(textFromSerial);
textFromSerial="";
} else{
if(data!='\r') { textFromSerial
+= data;
}
}
}
}
Tugas dan Pertanyaan :
1. Buka Serial Monitor pada Arduino pastikan konfigurasi Serial Monitor sama
seperti pada Gambar 5.6.
Gambar 5.6 Konfigurasi
Serial Monitor
Ketikkan sembarang kata untuk dikirimkan (kurang dari 16 karakter), kemudian
tekan Send. Isilah Tabel 5.3 !
Tabel 5.3 Daftar
data yang dikirim dan
ditampilkan pada
LCD
|
Teks yang dikirim
|
Teks Pada LCD
|
|
angka
|
angka
|
|
satu
|
satu
|
|
tujuh
|
tujuh
|
|
elektro
|
elektro
|
|
elektronika
|
elektronika
|
2. Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 5.3 !
#include<LiquidCrystal.h>
LiquidCrystal
lcd=(2,3,4,5,6,7);
String textFromSerial =
""; // untuk menginisialkan textFromSerial sebagai string
void setup() {
lcd.begin(16,2); // pin yang ada pada LCD
lcd.clear(); // menbersihkan data
LCD
lcd.setCursor(0,0); // untuk memulai pada baris 0 kolom 0
lcd.print("Data
From Serial") //untuk menampilkan tulisan pada Data From Serial
Serial.begin(9600); //untuk kecepatan
pada transfer data 9600 bit perdetiknya
}
void loop() {
while(Serial.available()>0){ // untuk mengecek dari
serial komunikasi
char data
=Serial.read(); // untuk membaca
pada data serial
if(data == '\n') { // jika ada datanya
lcd.setCursor(0,1); // akan menampilkan text
baris kedua pada LCD
lcd.print(textFromSerial); //akan menampilkan text
yang dikirim dari serial komunikasi
textFromSerial=""; //data serial dimulai dari 0
}
else{
if(data!='\r'){ // jika tidak ada data
textFromSerial += data; //untuk menjumlahkan data
serial dengan data//
}
}
}
}
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.
#include <LiquidCrystal.h> #define FOSC 16000000
LiquidCrystal lcd(2, 3, 4, 5, 6, 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(); lcd.setCursor(0,0); lcd.print("Incoming Data"); lcd.setCursor(0,1); lcd.print(dataSerial); dataSerial
= "";
} else{
if(data!='\r') {
dataSerial += data;
}
}
}
void setup() { initSerial(9600);
lcd.begin(16,2);
lcd.clear();
sei();
}
void loop() {
}
Tugas dan Pertanyaan :
1. Buka Serial Monitor pada Arduino IDE, sesuaikan konfigurasi Serial Monitor
sesuai dengan Gambar 5.7.
Gambar 5.7 Konfigurasi
Serial Monitor Arduino IDE
Ketikkan sembarang
teks
untuk dikirimkan, tekan Send. Lengkapilah Tabel 5.4 !
Tabel 5.4 Daftar
data yang dikirim dan
ditampilkan pada
LCD
|
Teks yang dikirim
|
Teks Pada LCD
|
|
TUGAS
|
TUGAS
|
|
PASTI
|
PASTI
|
|
SELALU
|
SELALU
|
|
UNTUK
|
UNTUK
|
|
SUKSES
|
SUKSES
|
2. Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 5.4 !
#include <LiquidCrystal.h>
#define
FOSC 16000000
LiquidCrystal
lcd(2, 3, 4, 5,6,7); String dataSerial;
void
initSerial(int baudrate) { int ubrr = FOSC/16/baudrate-1;
// register UBRR0H dan
UBRR0L untuk menentukan baudrate UBRR0H |= ubrr>>8;
UBRR0L |= ubrr;
// Untuk mengaktifkan saluran transmitter dan receiver
UCSR0B
|= (1<<RXEN0)|(1<<TXEN0); // data 8 bit
// Menggunakan 1 stop bit UCSR0C |= (0<<USBS0);
// No Parity
UCSR0C |=
(0<<UPM01)|(0<<UPM00); //
Mengaktifkan RX interrupt UCSR0B |= (1<<RXCIE0);
}
// akan di jalankan jika terjadi interupsi ISR(USART_RX_vect){
char data = UDR0;
if(data=='\n') //jika
data sama dengan di tekan enter maka akan melakukan program di bawah ini//
lcd.clear(); // membersihkan lcd dari data
lcd.setCursor(0,0); // memulai dari baris 0 kolom 0
lcd.print("Incoming Data"); //untuk print incoming data di baris 0 kolom 0
lcd.setCursor(0,1); //untuk
mengeset data pada
baris 0 colom 1//
lcd.print(dataSerial); //untuk di
tampilkan data
serial di baris 0 colom 1//
dataSerial =""; //data dimulai dari kosong atau 0//
}
Else // jika data tidak di tekan enter maka akan
eksekusi program di bawah ini//
{
if(data!='\r') { // jika data tidak di tekan enter maka data
serial akan di jumlahan dengan data
dataSerial += data; //menjumlahkan data serial dengan data//
}
}
}
3. Jelaskan perbedaan penggunaan interupsi dan sistem pooling !
interupsi adalah pada arduino akan
meninggalkan program yang utama untuk menjalankan pada interupsi.dan run maka
pada arduino maka akan kembali ke program utama.
sistem
pooling adalah kondisi pada arduino untuk menunggu pengiriman pada data dan
melalui serial.
4. kesimpulan.
Pada raktikum ini kita
dapamelihan dan mengetahui tentang komunikasi serial,
Dan kita dapat
membedakan antara interupsi dan system pooling melalui komunikasiserial.



