Popular Posts

Other Menu

KOMUNIKASI SERIAL

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 Dikirimkan Arduino
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 !

Tabel 5.4 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





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