Selasa, 26 November 2013

KOMUNIKASI SERIAL



TUJUAN :

1.      Memahamicaramengirimkandanmenerima data melaluiperiperal UART Arduino.

2.      Mampumembuat program untukmengirimkan data berbasisteksdanberbasisbyte.

3.      Mampumembuat program untukmenerima data secarapooling d ansecarainterupsi 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

Padapercobaan kali iniakandibuat program untukmengirimkan data tekskekomputermelaluikomunikasi serial. Padapercobaaninicontohteks yang akandikirimkanadalah "Hello World". Pengiriman data akanmenggunakanbaudrate 9600.

Prosedur :

1.   Tuliskansintaks program dibawahini, kemudianlakukankompilasidanuploadprogram kesistem minimum Arduino,

void setup() { Serial.begin(9600);
}
           
void loop() { Serial.print("Hello World"); delay(2000);

}


2.  Buka Serial Monitor padaArduino IDE.


3.  Pastikankonfigurasibaudrateadalah 9600 sepertiGambar 5.2.
 

 
4.      Pastikan data teks "Hello Word" yang dikirimkanArduinoditerimaoleh Serial Monitor.


TugasdanPertanyaan :

1.      Gantiah parameter inputpadafungsiSerial.printsesuaidenganTabel 5.1. Amati data yang diterimapadaHTerm, kemudianisilahTabel 5.1 di bawahini !


Tabel 5.1 Daftarteks yang dikirimkanpada program
Teks yang DikirimkanArduinoTeks yang DiterimaKomputer

Halo                                               Halo

ApaKabarSemua                           Apa KabarSemua

Kabar                                              Kabar

Semua                                              Semua

          Yang                                               Yang

2.      GantilahfungsiSerial.printmenjadiSerial.println, kemudiantuliskanamati data yang diterimaolehkomputer. JelaskanperbedaanpenggunaanfungsiSerial.printdanSerial.println !
serial print akanmenampilkan text dalamsatubaris, sedangakan serial printlnakanmengenterkansetelah kata di cetak

3.   Tambahkankaraker \r\n padaakhirbaristekspadaTabel5.1 . Amati data yang ditampilkanpadakomputer. Jelaskanfungsikarakter \r\n padakomunikasiserial !
Karakter er\r\nsama saja dengan fungsi dari Serial.println

  1. Jelaskanfungsitiapbarisdarisintaks program padaPercobaan 5.1

void setup() {
Serial.begin(9600); // mensetkonfigurasibaudratepada 9600
}
void loop() {
Serial.print("HelloWorld"); // untukmenampilkankalimat Hello World  pada serial monitor
delay(2000);                 // untukmenjeda selama 2 detik
2.       
}





5.2  Mengirim Data Byte

Padapercobaan kali iniakandibuat program untukmengirimkan databytekekomputermelaluikomunikasi serial. Pengiriman data akanmenggunakanbaudrate115200.


Prosedur :

1.      Tuliskansintaks program dibawahini, kemudianlakukankompilasidanuploadprogram kesistem 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.      BukaaplikasiHTermpadakomputer, pastikankonfigurasipadaHTermsepertigambar di bawahini. 


 
3.      Kliktombol Connect, kemudianperhatikan data yang ditampilkanpadabagian Receive Data. Pastikan data tersebutsamadengan data yang dikirimkanolehArduino.


TugasdanPertanyaan :

1.   Gantilah parameter inputuntukfungsiSerial.writedengan da ta padaTabel 5.2. Amati data yang diterimapadaHTerm, kemudianisilahTabel 5.2 !


Tabel 5.2 Daftar data byte yang dikirimkanpadaprogr am
Data yang DikirimkanArduino  Data yang DiterimaKomputer

0x00,0x01,0x02,0x03,0x04                    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.      GantilahkonfigurasidariHTermmenjadiseperti di bawahini, perhatikan data yang diterima. Kenapa data yang diterimaberubahmenjadihuruf ?Jelaskan !
ASCIImerupakan kode standart yang di gunakanuntukmerubahbiner menjadi huruf.

 
3.      JelaskanperbedaanpenggunaanfungsiSerial.printdanfungsiSerial.write !
Serial.write menampilkan data sesuai dengan bilangan hex sedangkan Serial.print menampilkan data dengan mengganti huruf F menjadi 3


4.      Jelaskanfungsitiapbarisdarisintaks program padaPercobaan5.2 !
void setup() {
Serial.begin(115200);    // banyaknya data bit yang di kirim
}

void loop() {
Serial.write(0x41);     //           menampilkan 41
Serial.write(0x42);     //           menampilkan42
Serial.write(0x44);     //           menampilkan 43
Serial.write(0x45);//    menampilkan 44
delay(2000);// jeda selama 2 detik
}


5.3 Menerima Data dari  UARTdenganSistemPooling
Padapercobaan kali iniakandibuat program untukmenerima data texkdarikomputermelaluikomunikasi serial. Proses penerimaan data akanmenggunakan.
sistempooling(menunggu). Data yang diterimaolehArduinoakanditampilkanpada LCD. Penerimaan data akanmenggunakanbaudrate 9600.

Prosedur :

1.      BuatlahrangkaiansepertiGambar 5.5.

 
2.      Tuliskansintaks program berikutini, kemudianlakukankompilasidanuploadprogram,
#includeLiquidCrystallcd=(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;
}}}}


TugasdanPertanyaan :

1.      Buka Serial Monitor padaArduinopastikankonfigurasi Serial Monitor samasepertipadaGamba r 5.6.


 
Ketikkansembarang kata untukdikirimkan (kurangdari 16 k arakter), kemudiantekan Send.Isilah T abel5.3 !

Tabel5.3  Daftar data yang dikirimdanditampilkanpada LCD

Teks yang dikirim
Teks Pada LCD
Apa
Apa
Kabar
Kabar
Anda
Anda
Saat
Saat
Ini
Ini









1.      Jelaskanfungsitiapbarisdarisintaks program padaPercobaan5.3 !

#include     // menambahkan library lcd
LiquidCrystallcd=(2,3,4,5,6,7);          // menyatakankonfigurasi LCD
String textFromSerial = "";                 // untukmenginisialkantextFromSerial sebagai string

void setup() {
lcd.begin(16,2);                       // mensetbanyaknyabarisdancolompada LCD
lcd.clear();                   // menbersihkan data padaLCD
lcd.setCursor(0,0);                  // untukmemulai pada baris 0 kolom 0
lcd.print("Data From Serial")  //untukmenampilkan tulisanpada Data From Serial

Serial.begin(9600);      //mensetkonfigurasibaudratepada 9600
2.       
}

void loop() {
while(Serial.available()>0){    // untukmengecek dariserial komunikasi

char data =Serial.read();    // untukmembacapada data serial
if(data == '\n') {                // jika ada datanya
lcd.setCursor(0,1);                  // akanmenampilkan text padabaris kedua pada LCD

lcd.print(textFromSerial);                   //akanmenampilkan text yang dikirimdariserialkomunikasi
textFromSerial="";                              //data serial dimulaidari 0
3.       
}

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

textFromSerial += data;          //untukmenjumlahkan dataserial dengan data//
}}}}
4.       






5.4  Menerima Data dari  UART denganInterupsi

Pada
percobaan
kali
iniakandibuat  program  untukmeneri ma  data
teks
sama
seperti
Percobaan
5. 3.
Padapercobaan  kali  ini  proses  penerimaan
data
kan

menggunakaninterupsi serial. Data yang diterimaolehArduinoakanditampilkanpada LCD. Penerimaan data akanmenggunakanbaudrate 115200.

Prosedur :

1.      Tuliskansintaks program di bawahini, lakukankompilasidanupload program.

#include #define FOSC 16000000

LiquidCrystallcd(2, 3, 4, 5, 6, 7); String dataSerial;

voidinitSerial(intbaudrate) { intubrr = FOSC/16/baudrate-1;

//       UntukMengisi register UBRR0H dan UBRR0L untukmenentukanbaudrate UBRR0H |= ubrr>>8;
UBRR0L |= ubrr;
//       UntukMengaktifkansaluranpada transmitter dan receiver

UCSR0B |= (1<

UCSR0C |= (0<

//       Menggunakan 1 stop bit UCSR0C |= (0<
//       No Parity

UCSR0C |= (0<

}

// Rutin yang akandijalankanjikaterjadiinterupsiISR(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();
}


TugasdanPertanyaan :

1.      Buka Serial Monitor padaArduino IDE, sesuaikankonfigurasi Serial Monitor sesuaidenganGambar 5.7.


 




Ketikkansembarangteksuntukdikirimkan, tekan Send. LengkapilahTabel5.4 !

Tabel5.4  Daftar data yangdikirimdanditampilkanpada LCD

Teks yang dikirim 
Teks Pada LCD
Apa
Apa
Kabar
Kabar
Anda
Anda
Saat
Saat
Ini
Ini









Jelaskanfungsitiapbarisdarisintaks program padaPercobaan5.4 !

#include
#define FOSC 16000000

LiquidCrystallcd(2, 3, 4, 5,6,7); String dataSerial;

voidinitSerial(intbaudrate) { intubrr = FOSC/16/baudrate-1;

 register UBRR0H dan UBRR0L untukmenentukanbaudrate UBRR0H |= ubrr>>8;
UBRR0L |= ubrr;
Untukmengaktifkansaluran transmitter dan receiver

UCSR0B |= (1<

UCSR0C |= (0<

Menggunakan 1 stop bit UCSR0C |= (0<
No Parity

UCSR0C |= (0<

}

// akan di jalankanjikaterjadiinterupsiISR(USART_RX_vect){

char data = UDR0;
if(data=='\n') //jika data samadengan di tekan enter makaakanmelakukan program di bawahini//
lcd.clear(); //menghapus data pada LCD

lcd.setCursor(0,0); // memulai dari baris 0 kolom 0
lcd.print("Incoming Data");   //mencetak kata incoming data
lcd.setCursor(0,1);           //untukmengeset data pada baris 0 colom 1
lcd.print(dataSerial);        //untuk di tampilkan data serial
dataSerial ="";               //data dimulai dari kosong atau 0
}

Else   // jikatidak di enter maka
{
if(data!='\r') {// jika data tidak di enter maka data serial akan di jumlahan dengan data
dataSerial += data; // menjumlahkan dataserial dengan data
}

}
}




Jelaskanperbedaanpenggunaaninterupsidansistempooling !

Interupsiakanmengeluarkan program dari program utamasaatterjadisuatukondisitertentu.Sistem pooling adalahkondisipadaarduinountukmenunggupengirimanpada data danmelalui serial.



Tidak ada komentar:

Posting Komentar