KOMUNIKASI SERIAL

on Friday, 25 October 2013
Assalamualaikum :') .....
huuuuua T,T #nangis badai
*satu kata buat yang nulis LEBAY  ......
mau lebay mau apa kek , suka suka saya dooonggs :/ ... ahhaha
Kali ini saya telat upload laporan mikrokontroller pemirsahhh . telat 3 menit dari batas waktu yang udah di tentukan.
oooopppss jangan curhaaat :D ..
sekarang waktunya kite ngisi blog :))) ...
let's check this report ;) :D ..


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 pcs
5.      LCD                            : 1 pcs
6.      Potensiometer 10K     : 1  pcs

PERCOBAAN:

5.1   Mengirim Data Teks
P ada 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:
  • Tuliskan sintaks program dibawah ini. Kemuadian lakukan kompilasi dan upload pogram ke sistem minimum Arduino.

 void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print(“Hello World”);
Delay(2000);
  • Buka Serial Monitor pada Arduino IDE. Dan pastikan baudrate 9600.


Tugas dan pertanyaan :
  • 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 dikirim  Arduino
Teks Yang Diterima Arduino
Halo
HaloHaloHaloHaloHalo
Apa Kabar Semua
Apa Kabar SemuaApa Kabar Semua
Kabar
KabarKabarKabarKabarKabar
Semua
SemuaSemuaSemuaSemuaSemua
Yang
YangYangYangYangYang


  •       Gantilah fungsi Serial.print menjadi Serial.println, kemudian tuliskan amati data yang diterima oleh komputer. Jelaskan perbedaan penggunaan fungsi Serial.print dan Serial.println !
fungsi Serial.print yaitu untuk menampilkan text pada satu baris. jadi text yang  tampil akan memanjang pada satu baris tanpa ada spasi ataupun enter.
fungsi Serial.println yaitu untuk menampilkan text pada baris yang baru (enter).

void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(“Hello World”);
Delay(2000);
}
Tabel 5.1.2 Daftar teks yang dikirimkan pada program
Teks Yang dikirim  Arduino
Teks Yang Diterima Arduino
Halo
Halo
Halo
Halo
Apa Kabar Semua
Apa Kabar Semua
Apa Kabar Semua
Kabar
Kabar
Kabar
Kabarr
Semua
Semua
Semua
SemuaSemua
Yang
Yang
Yang
  •     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 !

Karakter \n yaitu untuk menampilkan text pada baris baru (new line).
Karakter \r yaitu untuk pindah ke kolom pertama, baris yang sama (carriage return).

  • 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 second

5.2  Mengirim Data Byte
Pada percobaan kali ini akan dibuat program untuk mengirimkan data byte ke komputer melaluikomunikasi serial. Pengiriman data akan menggunakan baudrate 115200.

Prosedur:
  1. Tuliskan sintaks program dibawah ini, kemudian lakukan compile 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 padda kompter, pastikan konfigurasi pada HTerm seperti gambar  dibawah ini!


3.  Klik tombol Connect. Kemudian perhatikan data yang ditampilkan pada bagian Recieve Data. Pastikan data tersebut sama dengan data yang dikirimkan oleh Arduino.
 Tugas dan Pertanyaan :
  • 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!

Teks Yang dikirim  Arduino
Teks Yang Diterima Arduino
0x00,0x01,0x02, 0x03, 0x04
00  01  02  03  04
0xF0, 0xF1, 0xF2, 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,0xF0,0x1F,0x2F
00  01  F0  1F  2F


  • Gantilah konfigurasi dari HTerm menjadi seperti di bawah ini, perhatikan data yang diterima. Kenapa data yang diterima berubah menjadi huruf ? Jelaskan ! 

Karena Asci merupakan kode pada HTerm yang digunakan untuk merubah hexa, biner ataupun decimal kedalam bentuk huruf.

  • Jelaskan perbedaan penggunaan fungsi Serial.print dan fungsi Serial.write !

Serial.write ialah untuk menampilkan teks dengan cara diketik di serial monitor.
Serial.print ialah menampilkan teks tanpa diketik pada serial monitor.
  •  Jelaskan fungsi masing masing sintaks berikut!

void setup() { //Eksekusi pada awal program
Serial.begin(115200); //Setting baudrate 115200
}                      // Baudrate adalah kecepatan pengirimn data dalm 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 byte ke komputer melaluikomunikasi serial. Pengiriman data akan menggunakan sistem pooling, Data yang diterima oleh Arduino akan ditampilkan pada LCd . dengan baudrate 115200.

Prosedur:
  • Buatlah rangkaian dibawah ini!

  • Tuliskan sintaks program dibawah ini, kemudian lakukan compile dan upload program ke sistem minimum Arduino.

#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")LCD

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
  • Buka Serial Monitor pada Arduino pastikan konfigurasi Serial Monitor.
  • Ketikkan sembarang kata untuk dikirimkan (kurang dari 16 karakter), kemudian tekan Send. Isilah T abel 5.3 !

Tabel 5.3  Daftar data yang dikirim dan ditampilkan pada L CD
Teks yang dikirim
Teks pada LCD
Test
Test
Mikro
Mikro
Usaha
Usaha
Data
Data
  • 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 ke komputer melaluikomunikasi serial. Pengiriman data akan menggunakan sistem pooling, Data yang diterima oleh Arduino akan ditampilkan pada LCd . dengan baudrate 115200.

Prosedur:
  • Tuliskan sintaks program dibawah ini, kemudian lakukan compile dan upload program ke sistem minimum Arduino.

#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;

UBRR0H |= ubrr>>8;
UBRR0L |= ubrr;
UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
UCSR0C |= (0<<UCSZ02)|(1<<UCSZ01)|(1<<UCSZ00);
UCSR0C |= (0<<USBS0);
UCSR0C |= (0<<UPM01)|(0<<UPM00);
UCSR0B |= (1<<RXCIE0);
}


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 :
  • Buka Serial Monitor pada Arduino IDE, sesuaikan konfigurasi Serial Monitor
  • Ketikkan sembarang teks untuk dikirimkan, tekan Send. Lengkapilah Tabel 5.4 !

 Tabel 5.4  Daftar data yang dikirim dan ditampilkan pada L CD
Teks yang dikirim
Teks pada LCD
Oke
Oke
Look
Look
Mikro
Mikro
Sudah
Sudah
  • 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
 {
 }
  • 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. sedangkann sistem pooling adalah kondisi arduino menunggu pengiriman data melalui serial.