Kamis, 24 Oktober 2013

KOMUNIKASI SERIAL

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.
PERALATAN:
1.        Komputer                         : 1 set
2.        Arduino Uno                    : 1 pcs
3.        Project board                    : 1 pcs
4.        Kabel jumper                    : secukupnya
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.println("hello world");
delay(2000);
}

2.        Buka Serial Monitor pada Arduino IDE.

3.        Pastikan konfigurasi baudrate adalah 9600 seperti pada gambar dibawah ini.



4.        Pastikan data teks “Hello World” yang dikirimkan Arduino diterima oleh Serial Monitor.
Tugas dan Pertanyaan:
1.        Gantilah parameter input pada fungsi Serial print sesuai dengan tabel dibawah ini. Amati data yang diterima pada Hterm, 

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 !

3.        Tambahkan karakter \r\n pada akhir baris teks pada Tabel. Amati data yang ditampilkan pada komputer. Jelaskan fungsi karakter \r\n pada komunikasi serial !

4.        Jelaskan fungsi tiap baris dari sintaks progra pada Percobaan 5.1 !
void setup() {
Serial.begin(9600); //mengatur konfigurasi baudrate yaitu 9600
}
void loop() {
Serial.println("hello world");// Mengirim data dalam bentuk text “Hello World”

delay(2000); // jeda waktu 2 sekon
}

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 dibawah 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,  
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 !
4.        Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 5.2 !
void setup() {
Serial.begin(115200);//mengatur konfigurasi baudrate yaitu 9600
}
void loop() {
Serial.write(0x41);//mengirim data dalam byte yaitu 41
Serial.write(0x42);//mengirim data dalam byte yaitu 42
Serial.write(0x43);//mengirim data dalam byte yaitu 43
Serial.write(0x44);//mengirim data dalam byte yaitu 44
Serial.write(0x45);//mengirim data dalam byte yaitu 45
delay(2000);// jeda selama 2 sekon
}




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.
1.      Buatlah rangkaian seperti gambar

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

Ketikkan sembarang kata untuk dikirimkan (kurang dari 16 karakter), kemudian tekan Send. 

2.     
Jelaskan fungsi tiap baris dari sintaks program pada Percobaan 5.3 
#include <LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,6,7);// setting  pin 2 hingga 7 output ke LCD
String textFromSerial ="";
void setup() {
lcd.begin(16,2);// setting ukuran LCD yaitu 16X2
lcd.clear();//reset tampuilan LCD
lcd.setCursor(0,0);//setting posisi teks LCD
lcd.print("Data From Serial");//cetak teks pada LCD
Serial.begin(9600);// mengatur konfigurasi baudrate yaitu 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;
}
}
}
}

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 kan 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

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



Kamis, 17 Oktober 2013

INTERUPSI EKSTERNAL Arduino Uno

TUJUAN:
1.        Mampu membuat program untuk penggunaan fitur interupsi eksternal.
2.        Memahami perbedaan mode interupsi eksternal(falling, rising, dan any change).
PERALATAN:
1.        Komputer                         : 1 set
2.        Arduino Uno                    : 1 pcs
3.        Project Board                   : 1 pcs
4.        Kabel jumper                    : secukupnya
5.        Switch pushbutton           : 2 pcs
6.        LCD                                 : 1 pcs
7.        Potensiometer 10K          : 1 pcs
PERCOBAAN:
4.1 Interupsi Eksternal dengan Mode Falling

            Pada percobaan kali ini akan dibuat program untuk memahami penggunaan interupsi eksternal dengan mode falling. Dua buah switch akan dihubungkan pada pin interupsi eksternal 0 (INT0) dan interupsi eksternal 1 (INT1). Penekanan switch akan menginterupsi program utama (yang berada pada fungsi loop) dan memaksa untuk menjalakan rutin interupsi yang telah dideskripsikan pada program.
Prosedur:
1.        Rangkailah rangkaian pada gambar 4.1
2.        Tuliskan sintaks program berikut ini, kemudian lakukan kompilasi dan upload program ke sistem minimum Arduino.
#include <LiquidCrystal.h>
LiquidCrystal lcd(A0,A1,A2,A3,A4,A5);
unsigned int countLoop = 0;
void setup() {
lcd.begin(16,2);
lcd.clear();
attachInterrupt(0, rutinInterupsi0, FALLING);
attachInterrupt(1, rutinInterupsi1, FALLING);
pinMode(2, INPUT);
pinMode(3, INPUT);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
}
void loop() {
lcd.clear();
lcd.setCursor(0,0); lcd.print("Main Program");
lcd.setCursor(0,1); lcd.print("Count Loop"); lcd.print(countLoop);
countLoop++;
delay(1000);
}
void rutinInterupsi0() {
lcd.clear();
lcd.setCursor(0,0); lcd.print("Int0 Program");
lcd.setCursor(0,1); lcd.print("Interupt INT0");
delay(2000);
}
void rutinInterupsi1() {
lcd.clear();
lcd.setCursor(0,0); lcd.print("Int1 Program");
lcd.setCursor(0,1); lcd.print("Interupt INT1");
delay(2000);
}
4.2 Interupsi Eksternal dengan Mode Rising
            Dua buah switch akan dihubungkan pada pin INT0 dan INT1 sama seperti Percobaan 4.1. Penekanan switch akan menginterupsikan program utama (yang berada pada fungsi loop) dan memaksa untuk menjalankan rutin interupsi yang telah dideskripsikan pada program. Pada percobaan mode interupsi yang digunakan adalah rising.
Prodesur:
1.        Gantilah program pada Percobaan 4.2 dengan sintaks prgram berikut ini, kemudian lakukan kompilasi dan upload program ke sistem minimum Arduino.
#include <LiquidCrystal.h>
LiquidCrystal lcd(A0,A1,A2,A3,A4,A5);
unsigned int countLoop = 0;

void setup() {
lcd.begin(16,2); lcd.clear();
lcd.clear();
attachInterrupt(0, rutinInterupsi0, RISING);
attachInterrupt(1, rutinInterupsi1, RISING);
pinMode(2, INPUT);
pinMode(3, INPUT);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
}
void loop() {
lcd.clear();
lcd.setCursor(0,0); lcd.print("Main Program");
lcd.setCursor(0,1); lcd.print("Count Loop"); lcd.print(countLoop);
countLoop++; delay(1000);
}
void rutinInterupsi0() {
lcd.clear();
lcd.setCursor(0,0); lcd.print("Int0 Program");
lcd.setCursor(0,1); lcd.print("Interrupt INT0");
delay(2000);
}
void rutinInterupsi1() {
lcd.clear();
lcd.setCursor(0,0); lcd.print("Int1 Program");
lcd.setCursor(0,1); lcd.print("Interrupt INT1");
delay(2000);
}

4.3 Interupsi Eksternal dengan Metode Any Change
            Pada percobaan mode interupsi yang digunakan adalah any change. Dua buah switch akan dihubungkan pada pin INT0 dan INT1. Penekanan switch akan membuay program utama pada fungsi loop terhenti dan mengeksekusi rutin interupsi.
Prosedur:
1.        Gantilah sntaks program pada percobaan 4.2 dengan sintaks program berikut ini. Lakukan kompilasi dan upload program ke sistem minimum Arduino.
#include <LiquidCrystal.h>
LiquidCrystal lcd(A0,A1,A2,A3,A4,A5);
unsigned int countLoop = 0;

void setup() {
lcd.begin(16,2);
lcd.clear();
attachInterrupt(0, rutinInterupsi0, CHANGE);
attachInterrupt(1, rutinInterupsi1, CHANGE);
pinMode(2, INPUT);
pinMode(3, INPUT);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
}
void loop() {
lcd.clear();
lcd.setCursor(0,0); lcd.print("Main Program");
lcd.setCursor(0,1); lcd.print("Count Loop "); lcd.print(countLoop);
countLoop++; delay(1000);
}
void rutinInterupsi0() {
lcd.clear();
lcd.setCursor(0,0); lcd.print("Int0 Program");
lcd.setCursor(0,1); lcd.print("Interrupt INT0");
delay(2000);
}
void rutinInterupsi1() {
lcd.clear();
lcd.setCursor(0,0); lcd.print("Int1 Program");
lcd.setCursor(0,1); lcd.print("Interrupt INT1");
delay(2000);
}

Twitter Delicious Facebook Digg Stumbleupon Favorites More