Monday, November 4, 2013

KOMUNIKASI SERIAL

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 seperti Gambar 5.1 .




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 !
  • Teks akan di-enter kebawah. 


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 !
  • Kalau ditambahkan dengan /r/n untuk print biasa maka output yang keluar dari serial monitor akan bergerak kebawah secara continue pada saat println maka akan bergerak kebawah dengan jarak enter satu kali.



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. 

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 !


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



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

  • Serial write membaca data dua data paling ujung sebelah kanan,
  • 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 system Pooling
           
       Pada percobaan kali ini akan dibuat program untuk menerima data teks dari computer melalui komunikasi serial. Proses penerimaan data akan menggunakan system 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 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. 


1.                     2.     Ketikkan sembarang kata untuk dikirimkan (kurang dari 16 karakter), kemudian tekan Send.                         Isilah T abel 5.3 !


1.      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 menggunakan interupsi serial. Data yang diterimaoleh Arduino akan di tampilkan 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. 






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
{
}

Terima Kasih


No comments:

Post a Comment