Pages

Sabtu, 30 November 2013

PRAKTIKUM 5 KOMUNIKASI SERIAL



PRAKTIKUM 5
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                 : 1 set
2. Arduino Uno             : 1 pcs
3. Project Board            : 1 pcs
4. Kabel Jumper            : 1 set
5. LCD                         : 1 pcs
6. Potensiometer            : 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.
 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 !
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 : Untuk Serial.print berfungsi untuk untuk menampilkan data berbasis teks dengan satu baris menyambung secara terus-menerus sehingga teksnya memanjang pada satu baris. Sedangkan Serial.println berfungsi untuk menampilkan teks pada baris baru secara terus-menerus.
  
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 : Karakter \r\n dengan Serial.println fungsinya sama yaitu menampilkan teks pada baris baru tapi teks pada baris baru tersebut line spacingnya double.  




4. Jelaskan fungsi tiap baris dari sintaks program pada Percobaaan 5.1 !
void setup() {
//  Berfungsi sebagai salah satu fungsi yang hanya di panggil sekali dan satu kali eksekusi ketika awal program berjalan  //
         
Serial.begin(9600);
// untuk menginisialisasikan bahwa serial yang di monitor menggunakan komunikasi serial dengan kecepatan 9600 bit per second//

}
void loop() {
// Untuk menjalankan setelah fungsi setup dan akan dijalankan terus menerus selama board Arduino menyala (on) dan mengeksekusi program tersebut berulang ulang  //

Serial.print("Hello World");
// Untuk menampilkan teks Hello World di serial monitor//

delay(2000);
// Untuk mendelay program yang akan di jalankan selama 2000 mS //
}

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 upoload 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 HTe rm pada komputer, pastikan konfigurasi pada HTerm seperti gambar di bawah ini.

3. Klik tombol Connect, kemudian perhatikan data yang ditam pilkan pada bagian Receive Data. Pastikan data tersebut sama dengan data yang dikirimkan oleh Arduino.



Tugas dan Pertanyaa n :

1.  Gantilah parameter input untuk fungsi Serial.write dengan da ta pada Tabel 5.2. Amati data yang diterima pada HTerm, kemudian isilah Tabel 5. 2 !


2.    Gantilah konfigurasi dari HTerm menjadi seperti di bawah ini, perhatikan data yang diterima. Kenapa data yang diterima berubah menjadi huruf ? Jelaskan ! 
Jawab :  Kode ASCII digunakan untuk merubah data hex atau biner menjadi huruf

3.    Jelaskan perbedaan penggunaan fungsi Serial.print dan fungsi Serial.write !
Jawab : Serial.write untuk menampilkan data bilangan hexadesimal, sedangkan Serial.print untuk menampilkan data huruf menjadi angka.

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

void setup() {
//  Berfungsi sebagai salah satu fungsi yang hanya di panggil sekali dan satu kali eksekusi ketika awal program berjalan  //

Serial.begin(115200);
// untuk menginisialisasikan bahwa serial yang di monitor menggunakan komunikasi serial baudrate 115200 //

}

void loop() {
// Untuk menjalankan setelah fungsi setup dan akan dijalankan terus menerus selama board Arduino menyala (on) dan mengeksekusi program tersebut berulang ulang  //

Serial.write(0x41);  
/ / menampilkan angka 41 //
Serial.write(0x42);
/ / menampilkan angka 42 //
Serial.write(0x43);
/ / menampilkan angka 43 //
Serial.write(0x44);
/ / menampilkan angka 44 //
Serial.write(0x45);
/ / menampilkan angka 45 //
delay(2000);
// Untuk mendelay program yang akan di jalankan selama 2000 mS //

}




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 ko mpilasi 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 FromSerial")    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 k arakter), kemudian tekan Send. Isilah T abel 5.3 !

 

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

#include<LiquidCrystal.h>
//  Untuk membaca dan mengenalkan liquidCrystal di library yang akan di programkan //

LiquidCrystal lcd=(2,3,4,5,6,7);
//  Untuk menginisialisasikan dan mensetting pada pin 2,3,4,5,6,7 di LCD  //

String textFromSerial = "";
// Mengenalkan textFromSerial pada karakter string//


void setup() {
//  Berfungsi sebagai salah satu fungsi yang hanya di panggil sekali dan satu kali eksekusi ketika awal program berjalan  //

lcd.begin(16,2);
// untuk menginisialisasikan bahwa LCD yang digunakan jumlah barisnya 16 dan kolomnya ada 2 //

lcd.clear();
// menghapus tampilan yang ada di LCD //

lcd.setCursor(0,0);
//meletakkan cursor di posisi (baris 0, kolom 0) yang di inginkan //

lcd.print("Data From Serial")    
// Untuk menampilkan kata Data From Serial //

Serial.begin(9600);
// Untuk mengirim data dengan kecepatan 9600 per second //

}

void loop() {
// Untuk menjalankan setelah fungsi setup dan akan dijalankan terus menerus selama board Arduino menyala (on) dan mengeksekusi program tersebut berulang ulang  //

while(Serial.available()>0) {
// memilih serial komunikasi //


char data = Serial.read();
// membaca data serial dengan variabel char //

 if(data == '\n') {
// jika data //
lcd.setCursor(0,1);
//meletakkan cursor di posisi (baris 0, kolom 1) yang di inginkan //


lcd.print(textFromSerial);
// Untuk menampilkan textFromSerial yang dikirim dari serial komunikasi //
textFromSerial="";
// Data serial textFromserial dimulai dari teks kosong //

}

else{ if(data!='\r') {
// Jika tidak ada data //

textFromSerial += data;
// textFromSerial di jumlahkan 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 penerima data akan menggunakan interupsi serial. Data yang diterima oleh Arduino akan ditampilkan pada LCD. Penerima 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 Pertanyaa n :

1.    Buka Serial Monitor pada Arduino IDE, sesuaikan konfigurasi Serial Monitor sesuai dengan Gambar 5.7. 


Ketikkan sembarang teks untuk dikirimkan, tekan Send. Lengka pilah Tabel 5.4 !

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;

// 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') {
// Jika data yang dikeluarkan sama dengan enter (\n) maka program akan berjalan //
lcd.clear();
// menghapus tampilan yang ada di LCD //


lcd.setCursor(0,0);
//meletakkan cursor di posisi (baris 0, kolom 0) yang di inginkan //

lcd.print("Incoming Data");
// Untuk menampilkan kata seperti Incoming data //

lcd.setCursor(0,1);
//meletakkan cursor di posisi (baris 0, kolom 1) yang di inginkan //

lcd.print(dataSerial);
// Untuk menampilkan data serial di baris 0 kolom 1 //

dataSerial = "";
// Data yang akan di tampilkan dimulai dari kosong //
}

else{  
if(data!='\r') {
// jika data tidak di tekan enter maka program akan melakukan eksekusi di bawah ini //

dataSerial += data;
// Data serial akan dijumlahkan dengan data//
}

}
}
  

void setup() {
//  Berfungsi sebagai salah satu fungsi yang hanya di panggil sekali dan satu kali eksekusi ketika awal program berjalan  //



initSerial(9600);
// untuk menginisialisasikan iniSerial komunikasi pada baudrate dengan kecepatan 9600 per second //

lcd.begin(16,2);
// untuk menginisialisasikan bahwa LCD yang digunakan jumlah barisnya 16 dan kolomnya ada 2 //

lcd.clear();
// menghapus tampilan yang ada di LCD //
sei();
}
void loop() {
}


3. Jelaskan perbedaan penggunaan interupsi dan sistem pooling !
Jawab : Untuk interupsi data diterima dari arduino dan program utama  tersebut meninggalkan dari arduino untuk menjalakan program dan akan kembali lagi ke program tersebut sedangkan  sistem pooling untuk menunggu pengiriman data melalui serial komunikasi
 




Tidak ada komentar:

Posting Komentar