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 ..
{
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:
- 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 !
#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.