Twitter

MIKROKONTROLER KOMUNIKASI SERIAL

Author Unknown - -
Home » MIKROKONTROLER KOMUNIKASI SERIAL






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.