PRAKTIKUM 5
KOMUNIKASI 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.
Gambar
5.1 Menu Serial Monitor
3. Pastikan konfigurasi baudrate
adalah 9600 seperti Gambar 5.2.
Gambar
5.2 Konfigurasi baudrate pada Serial Monitor
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 Di Terima Komputer
|
Halo
|
Halo Halo
Halo
|
Apa Kabar Semua
|
Apa Kabar Semu Apa Kabar Semua
|
Apa
|
Apa Apa APa
|
Kabar
|
Kabar Kabar Kabar
|
Semua
|
Semua Semua
Semua
|
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
!
·
perbedaan penggunaan fungsi Serial.print dan
Serial.println adalah Serial.print menampilkan text pada serial monitor tanpa
format, Sedangkan Serial.println menampilkan text untuk satu baris.
3. Tambahkan
karakter \r\n pada akhir baris teks pada Tabel 5.1 . Amati data yang
ditampilkan pada k omputer. Jelaskan fungsi karakter \r\n pada komunikasi
serial !
·
Karakter \r\n berfungsi untuk memulai baris baru
pada text fungsinya seperti tombol enter pada keyboard.
4.
Jelaskan
fungsi tiap baris dari sintaks program pada Percobaan 5.1 !
void setup() //Eksekusi
pada awal program
}
Serial.begin(9600); //Setting baudrate
9600
} //
Baudrate adalah kecepatan pengirimn data dalm 1 detik
void
loop() //
Tempat kita menaruh source code yang akan diproses
}
Serial.println(“Hello
World”); // Menampilkan text “Hello World” pada serial
monitor
Delay(2000); //Berhenti
atau menunda selama 2 detik
}
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 seperti gambar di
bawah ini.
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
Teks Yang Di Terima Komputer
|
||
0x00,0x01,0x02,0x03,0x04
|
00 01 02 03
04
|
|
0xF0,0x1F,0
x2F,0xF3,0xF4
|
F0 1F 2F F3 F4
|
|
0xF5,0xFF,0x3F,0xF3,0x44
|
F5 FF 3F F3 44
|
|
0xF0,0x1F, 0 x02,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 !
·
Kalau serial write membaca
data dua data paling ujung sebelah kanan, sedangkan serial print hanya
membaca satu data paling ujung sebelah kanan.
4. Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 5.2 !
void
setup() //Eksekusi
pada awal program
{
Serial.begin(115200); //Setting baudrate 115200
} //
Baudrate adalah kecepatan pengiriman data dalam 1
detik
void loop()
{
Serial.write(0x41); //Menulis angka 41
Serial.write(0x42); //Menulis angka 42
Serial.write(0x43); //Menulis angka 43
Serial.write(0x44); //Menulis angka 44
Serial.write(0x45); //Menulis angka 45
delay(2000);
}
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.
2.
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 Dikirimkan
Arduino
|
Teks Yang Di
Terima LCD
|
|
Halo
|
Halo
|
|
Saya Makan Nasi
|
Saya Makan Nasi
|
|
Hasmar
|
Hasmar
|
|
Husein
|
Husein
|
|
Harahap
|
Harahap
|
|
3. Jelaskan fungsi tiap baris dari sintaks program
pada Percobaan 5.3 !
#include<LiquidCrystal.h> //memanggil library
untuk lcd
LiquidCrystal
lcd=(2,3,4,5,6,7); // inisialisasi pin lcd
String
textFromSerial = ""; //mendeklarasikan
textFromSerial sebagai string
void
setup() //settingan awal program
{
lcd.begin(16,2); //
tampilan lcd (kolom , baris)
lcd.clear(); //
tampilan lcd di hapus
lcd.setCursor(0,0); //Menampilkan
text pada baris pertama LCD
lcd.print("Data From
Serial") //Menampilkan text
“Data From Serial” pada LCD
Serial.begin(9600); //kecepatan
transfer data sebesar 9600 bit per detik
}
void
loop() //program looping
{
while(Serial.available()>0) //mengecek serial
komunikasi
{
char
data = Serial.read(); //Membaca data serial
if(data
== '\n') //jika
data ada
{
lcd.setCursor(0,1); //Menampilkan
text pada baris ke dua LCD
lcd.print(textFromSerial); //Menampilkan text yang dikirim melalui
serial
komukasi
textFromSerial="";
}
Else
{
if(data!='\r') //jika
data tidak ada
{
textFromSerial
+= data; //menampilkan text data pada LCD
}
}
}}
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
akan
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.
G
ambar 5.7 Konfigurasi Serial Monitor Arduino ID E
Ketikkan sembarang teks untuk dikirimkan,
tekan Send. Lengkapilah Tabel 5.4 !
Teks Yang
Dikirimkan Arduino
|
Teks
Yang Di Terima LCD
|
|
Halo
|
Halo
|
|
Saya Makan Nasi
|
Saya Makan Nasi
|
|
Hasmar
|
Hasmar
|
|
Husein
|
Husein
|
|
Harahap
|
Harahap
|
|
2. Jelaskan fungsi tiap baris
dari sintaks program pada Percobaan 5.4 !
#include
<LiquidCrystal.h> //memanggil
library untuk lcd
#define FOSC 16000000 //menetapkan nilai FOSC
bernilai 16000000
LiquidCrystal lcd (2, 3, 4, 5, 6,
7); // inisialisasi pin lcd
String
dataSerial; //mendekelarasikan dataSerial sebagai string 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(); // tampilan lcd di hapus
lcd.setCursor(0,0); //Menampilkan text pada baris pertama
LCD
lcd.print("Incoming
Data"); //Menampilkan text “Incoming Data” pada baris pertama di
LCD
lcd.setCursor(0,1);
//Menampilkan text pada baris ke dua LCD lcd.print(dataSerial); //Menampilkan
data yg dikirim melalui serial
dataSerial = "";
}
Else
{
if(data!='\r') //jika data tidak ada
{
dataSerial +=
data; //Jika tidak ada
data maka tampilkan text “data”
}
}
}
void
setup() //settingan
awal program
{
initSerial(9600);
lcd.begin(16,2); // tampilan lcd (kolom , baris)
lcd.clear(); // tampilan lcd di hapus
sei();
}
void
loop() //program
looping
{
}
3.
Jelaskan
perbedaan penggunaan interupsi dan sistem pooling !
· interupsi adalah
suatu kondisi yang memicu atau memaksa mikrokontroller untuk menghentkan
program dan memaksa untuk menjalan kan program interupsi.
·
sistem pooling adalah
kondisi arduino menunggu pengiriman data melalui serial








Tidak ada komentar:
Posting Komentar