0% menganggap dokumen ini bermanfaat (0 suara)
126 tayangan48 halaman

Modul Praktikum Mikrokontroler

Percobaan ini membahas tentang akses bit dan port pada mikrokontroler untuk mengontrol LED, menggunakan program untuk menyalakan dan mematikan LED secara berurutan dengan animasi yang berbeda. Percobaan selanjutnya melibatkan tombol sebagai masukan untuk mengontrol animasi nyala LED. Percobaan terakhir menggunakan display 7 segmen yang dikontrol oleh mikrokontroler untuk menampilkan angka.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
126 tayangan48 halaman

Modul Praktikum Mikrokontroler

Percobaan ini membahas tentang akses bit dan port pada mikrokontroler untuk mengontrol LED, menggunakan program untuk menyalakan dan mematikan LED secara berurutan dengan animasi yang berbeda. Percobaan selanjutnya melibatkan tombol sebagai masukan untuk mengontrol animasi nyala LED. Percobaan terakhir menggunakan display 7 segmen yang dikontrol oleh mikrokontroler untuk menampilkan angka.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 48

PERCOBAAN I

AKSES BIT DAN PORT


1.1 Tujuan
- Memahami dasar-dasar akses bit dan port pada Mikrokontroler.
- Menerapkan akses bit dan port untuk menyalakan atau mematikan LED.

1.2 Dasar Teori


Yang dimaksud akses bit adalah menulis atau membaca satu bit data, berupa
logika 1 (High/5V) atau 0 (Low/0V), dari atau ke pin Mikrokontroler.
Contoh penerapan akses bit adalah menyalakan atau mematikan LED

1.3 Skema Rangkaian


Berikut adalah skema rangkaian dari percobaan ini:

Gambar 1.1 Skema rangkaian LED aktif High

Disebut aktif High karena untuk mengaktifkan atau menyalakan LED,


Mikrokontroler harus menuliskan logika high atau 1.
Gambar 1.2 Skema rangkaian Atmega dengan LED
1.4 Langkah Percobaan
- Hubungkan rangkaian pada modul sesuai dengan gambar 1.2
- Dimana jalur LED sebanyak 8 bit dihubungkan semua dengan salah satu
Port pada AVR. Pada contoh berikut digunakan Port C untuk dihubungkan
ke jalur LED.
- Kemudian tuliskan program contoh dibawah dengan CodevisionAVR
editor.

Contoh Program:
Mode 1:
/*****************************************************
Project : Tampilan LED
Project : Latihan1
Version : 01
Date : 15/09/2017
Author : LA
Company : TEKNIK ELEKTRO
Comments:
niki latihan seng nomer setunggal
*****************************************************/
#include <mega16.h>
#include <delay.h>
//=============================
unsigned char data,banyak_ulang;
//=== ini fungsi tampil LED geser kiri = void
geser_kiri(void)
{
int ulang;
data=0x01;
for (ulang=0;ulang<8;ulang++)
{
PORTC=data;
delay_ms(1000);
data=data<<1;
}
}
//=== ini fungsi tampil LED geser kanan == void
geser_kanan(int banyak_ulang)
{
int ulang; data=0x80;
for (ulang=0;ulang<banyak_ulang;ulang++)
{
PORTC=data;
delay_ms(1000);
data=data>>1;
}
}
//=================================
while (1)
{
// Place your code here
geser_kiri(); //panggil fungsi
geser kiri banyak_ulang=3;
geser_kanan(banyak_ulang); //panggil fungsi geser kanan
}
}
//==== Akhir Main Program ===========

Compile lalu kemudian isikan ke IC dan jalankan. Amati hasilnya.


Coba ubah nilai pada waktu tundanya (wait), dan amati apa terjadi perubahan.
Selanjutnya tuliskan program mode 2 berikut:
Dan amati hasilnya.

1.5 Latihan
- Buatlah program untuk menyalakan beberapa jenis animasi nyala pada LED

1.6 Kesimpulan
- Buatlah kesimpulan tentang percobaan yang telah anda lakukan tersebut.
PERCOBAAN II
AKSES TOMBOL

2.1 Tujuan
- Memahami dasar-dasar akses tombol masukan
- Membaca status tombol sebagai masukan, untuk menyalakan LED dengan
bermacam animasi

2.2 Dasar Teori


Sebuah tombol yang terpasang pada pin Mikrokontroler AVR dapat
diketahui statusnya (sedang ditekan atau dilepas), dengan cara membaca status
logika pada pin tersebut. Mengaktifkan atau Pemberian Resistor pullup internal
maupun pemberian Pullup eksternal.

2.3 Skema Rangkaian


Berikut adalah skema rangkaian dari percobaan ini:

Gambar 2.1 Skema rangkaian mikrokontroler dengan tombol dan LED


2.4 Langkah Percobaan
- Hubungkan rangkaian pada modul sesuai dengan gambar 2.1
- Dimana jalur LED sebanyak 8 bit dihubungkan semua dengan salah satu
Port pada AVR. Pada contoh berikut digunakan Port C untuk dihubungkan
ke jalur LED.
- Dan jalur tombol sebanyak 8 bit dihubungkan dengan Port B pada AVR.
- Kemudian tuliskan program contoh dibawah ini dengan CodevisionAVR
editor.

Contoh Program:
#include <mega16.h>
#include <delay.h>
#define LED1 PORTD.0
#define LED2 PORTD.1
#define LED3 PORTD.2
#define LED4 PORTD.3
#define LED5 PORTD.4
#define LED6 PORTD.5
#define LED7 PORTD.6
#define LED8 PORTD.7
#define tombol1 PINB.0
#define tombol2 PINB.1
#define tombol3 PINB.2
#define tombol4 PINB.3
#define tombol5 PINB.4
#define tombol6 PINB.5
#define tombol7 PINB.6
#define tombol8 PINB.7
#define hidup 1
#define mati 0

// Declare your global variables here


*****************************************************/
//========
while (1)
{
if(tombol1==0)
{
if(kondisi1==0)
{
LED1=hidup;
kondisi1=1;
delay_ms(50);
}
else
{
LED1=mati;
kondisi1=0;
delay_ms(50);
}
}
if(tombol2==0)
{
if(kondisi2==0)
{
LED2=hidup;
kondisi2=1;
delay_ms(50);
}
else
{
LED2=mati;
kondisi2=0;
delay_ms(50);
}
}
if(tombol3==0)
{
if(kondisi3==0)
{
LED3=hidup;
kondisi3=1;
delay_ms(50);
}
else
{
LED3=mati;
kondisi3=0;
delay_ms(50);
}
}
if(tombol4==0)
{
if(kondisi4==0)
{
LED4=hidup;
kondisi4=1;
delay_ms(50);
}
else
{
LED4=mati;
kondisi4=0;
delay_ms(50);
}
}
if(tombol5==0)
{
if(kondisi5==0)
{
LED5=hidup;
kondisi5=1;
delay_ms(50);
}
else
{
LED5=mati;
kondisi5=0;
delay_ms(50);
}
}
if(tombol6==0)
{
if(kondisi6==0)
{
LED6=hidup;
kondisi6=1;
delay_ms(50);
}
else
{
LED6=mati;
kondisi6=0;
delay_ms(50);
}
}
if(tombol7==0)
{
if(kondisi7==0)
{
LED7=hidup;
kondisi7=1;
delay_ms(50);
}
else
{
LED7=mati;
kondisi7=0;
delay_ms(50);
}

}
if(tombol8==0)
{
if(kondisi8==0)
{
LED8=hidup;
kondisi8=1;
delay_ms(50);
}
else
{
LED8=mati;
kondisi8=0;
delay_ms(50);
}

}
}
}

Compile lalu kemudian isikan ke IC dan jalankan. Amati hasilnya.


Selanjutnya tuliskan progam mode 2 beriku:
Dam amati hasilnya.
2.5 Latihan
- Buatlah program untuk masukan 8 tombol sekaligus. Setiap satu tombol
mewakili nyala dari satu LED
- Buatlah program untuk membaca masukan 8 tombol sekaligus. Setiap
tombol mewakili mode tiap animasi nyala LED yang berbeda.

2.6 Kesimpulan
Buatlah kesimpulan tentang percobaan yang telah anda lakukan tersebut.
PERCOBAAN III
AKSES 7 SEGMENT

3.1 Tujuan
- Memahami dasar-dasar 7 segment.
- Mengetahui dasar-dasar akses 7 segment dengan Mikrokontroler AVR.

3.2 Dasar Teori


3.2.1 Display 7 Segement
Merupakan komponen yang berfungsi sebagai penampil karakter angka.
Pada display 7 segement juga dilengkapi karakter titik (dot) yang sering dibutuhkan
untuk karakter koma atau titik pada saat menampilkan suatu bilangan. Display 7
segment terdiri dari 7 penampil karakter yang disusun dalam sebuah kemasan
sehingga dapat menampilkan karakter angka. Terdapat 7 buah penampil dasar dari
LED (Light Emitting Diode) yang dinamakan karakter A-F dan karakter dot.

Gambar 3.1 Display 7 segment

Pada dasarnya penampil 7 segment merupakan rangkaian 7 buah diode


LED. Terdapat 2 (dua) jenis rangkaian dasar dari display 7 segment yang dikenal
sebagai display 7 segment, yaitu:
1. Common Cathode yaitu pada bagian katoda semua kaki LED menjadi satu
(GND), 7 segment ini aktif HIGH.
2. Common Anode yaitu pada bagian Anoda semua kaki LED menjadi satu
(VCC), 7 segment ini aktif LOW.

Gambar 3.2 Common Cathode dan Common Anode

3.2.2 IC BCD to 7 Segment


IC yang digunakan sebagai penerjemah data nilai BCD ke jalur 7 segment
adalah IC 74LS247.

Gambar 3.3 Skema pin IC 74LS247


Tabel 3.1 Tabel Kebenaran IC 74LS247

3.3 Skema Rangkaian


Berikut adalah skema rangkaian dari percobaan ini:

Gambar 3.4 Skema Rangkaian mikrokontroler dengan 7 segment

Pada rangkaian percobaan tersebut penyalaan dari 7 segment dibuat dengan sistem
penyalaan scanning. Data dikirim secara bergantian. Hanya salah satu 7 segment
yang menyala. Karena menyala bergantian secara cepat, maka seolah-olah menyala
bersamaan.
Cara penyalaan:
- Matikan semua.
- Kirim data angka.
- Aktifkan salah satu segment (transistor).

Gambar 3.5 Driver penyalaan 7 segment


3.4 Langkah Percobaan
- Hubungkan rangkaian pada modul sesuai dengan gambar 3.4
- Dimana jalur data input ke IC 74LS247 sebanyak 4 bit dan selector driver
penyalaan 7 segment dihubungkan semua dengan salah satu Port pada AVR.
- Pada contoh berikut digunakan Port D0-D3 sebagai input ke IC 74LS247
dan D4-D7 sebagai selector pada tiap 7 segment.
- Kemudian tuliskan program contoh dibawah dengan CodevisionAVR
editor.

Contoh Program:
#include <mega16.h>
#include <delay.h>
//=================
#define bit_0 PORTD.0
#define bit_1 PORTD.1
#define bit_2 PORTD.2
#define bit_3 PORTD.3
//===================
#define s1 PORTD.4
#define s2 PORTD.5
#define s3 PORTD.6
#define s4 PORTD.7

// Declare your global variables here


unsigned char angka=0;
//====================
void kirim_data(void)
{
if (angka==0) {bit_3=0;bit_2=0;bit_1=0;bit_0=0;}
if (angka==1) {bit_3=0;bit_2=0;bit_1=0;bit_0=1;}
if (angka==2) {bit_3=0;bit_2=0;bit_1=1;bit_0=0;}
if (angka==3) {bit_3=0;bit_2=0;bit_1=1;bit_0=1;}
if (angka==4) {bit_3=0;bit_2=1;bit_1=0;bit_0=0;}
if (angka==5) {bit_3=0;bit_2=1;bit_1=0;bit_0=1;}
if (angka==6) {bit_3=0;bit_2=1;bit_1=1;bit_0=0;}
if (angka==7) {bit_3=0;bit_2=1;bit_1=1;bit_0=1;}
if (angka==8) {bit_3=1;bit_2=0;bit_1=0;bit_0=0;}
if (angka==9) {bit_3=1;bit_2=0;bit_1=0;bit_0=1;}
}
//=====================
Void aktif_s1(void)
{s1=0; s2=1; s3=1; s4=1;}

Void aktif_s2(void)
{S1=1; s2=0; s3=1; s4=1;}

Void aktif_s3(void)
{S1=1; s2=1; s3=0; s4=1;}

Void aktif_s4(void)
{S1=1; s2=1; s3=1; s4=0;}
Void aktif_semua(void)
{S1=0; s2=0; s3=0; s4=0;}

Void mati_semua(void)
{S1=1; s2=1; s3=1; s4=1;}
//===========================
while (1)
{
// Place your code here
mati_semua();
Kirim_angka();
Aktif_s1();
delay_ms(500);
angka++;
if (angka==10) {angka=0;}
}
Compile lalu kemudian isikan ke IC dan jalankan. Amati hasilnya.

3.5 Latihan
Latihan 1:
- Menyalakan 7 segment dari angka 0-9.
- Kalau sudah angka 9 kembali ke angka 0 lagi dan seterusnya.
- Tampilkan di semua 7 segment bersamaan.
- Tampilkan hanya di satu 7 segment saja.
Latihan 2:
- Tampilkan angka hitung Counter dari 0-9999 pada 7 segment.
- Saat hitung counter < 10, nyala 1 digit.
- Saat hitung counter < 100, nyala 2 digit.
- Saat hitung counter < 1000, nyala 3 digit.
- Saat hitung counter > 1000, nyala 4 digit.

3.6 Kesimpulan
Buatlah kesimpulan tentang percobaan yang telah anda lakukan tersebut.
PERCOBAAN IV
AKSES LCD MENAMPILKAN KARAKTER

4.1 Tujuan
- Memahami dasar-dasar konfigurasi pin LCD.
- Mengetahui dasar-dasar akses LCD dengan Mikrokontroler AVR.

4.2 Dasar Teori


LCD merupakan salah satu alat yang berfungsi sebagai tampilan. LCD
mempunyai kemampuan untuk menampilkan tidak hanya angka-angka, huruf
abjad, kata-kata tapi juga simbol-simbol yang membuat LCD lebih bagus, lebih
lengkap dan lebih fleksibel dibandingkan dengan 7-segment ataupun Dot-matrik
dalam fungsinya sebagai tampilan. LCD ada banyak macamnya dan banyak
ukurannya, ada yang 16 kolom 2 baris, 20 kolom 2 baris, 40 kolom 2 baris, 20
kolom 1 baris, 16 kolom 4 baris dan banyak pula yang lain. Dibawah ini dapat
dilihat LCD 16 kolom 2 baris.

Gambar 4.1 LCD 16 kolom 2 baris

Tabel 4.1 Konfigurasi pin pada LCD


Pin No Keterangan Fungsi/Kegunaan
1 VSS Supply Tegangan GND
2 VDD Supply Tegangan +5 Volt DC
3 VEE Supply Tegangan pengaturan kontras LCD
4 Rs Read Select. Pengaturan saat tulis data
5 RW Read Write. Read=1, Write=0
6 E Enabled. Pemberian Pulsa Clock
7-14 D0-D7 Data bus 8 bit
15 VDD Light Tegangan positif untuk menyalakan blacklight
16 VSS Light Tegangan negatif untuk menyalakan blacklight

4.3 Skema Rangkaian


Berikut adalah skema rangkaian dari percobaan ini

Gambar 4.2 Skema rangkaian mikrokontroler dengan LCD

4.4 Langkah Percobaan


- Hubungkan rangkaian pada modul sesuai dengan gambar 4.1
- Pada contoh berikut digunakan Port D. Dimana D2= RS, D3= E, dan D4-
D7 sebagai data 4 bit.
- Kemudian tuliskan program contoh dibawah dengan CodevisionAVR
editor.

Contoh Program:
Chip type : ATmega16
Program type : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/

#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#include <stdlib.h>

#define T1 PINC.0

// Alphanumeric LCD Module functions


// ===

#define T2 PINC.1
#define T3 PINC.2
#define T4 PINC.3
#define T5 PINC.4
#define T6 PINC.5

#define RESET PINC.7

#include <alcd.h>
// Declare your global variables here
int satuan=0,puluhan=0,ratusan=0,ribuan=0,loket=0;
eeprom int simpan_antrian;
eeprom unsigned char simpan_loket;
int antrian=0;
char str_hitung[4];
//=== ini fungsi pecah nilai antrian ==
void pecah_antrian(void)
{
ribuan=antrian/1000;
ratusan=antrian/100;
ratusan=ratusan % 10;
puluhan=antrian/10;
puluhan=puluhan % 10;
satuan=antrian % 10;
}

//=======================
//=== ini fungsi pecah hitung ==

//=======================
//=== ini fungsi Tampil hitung ==

void simpan_di_eeprom(void)
{
simpan_antrian=antrian;
simpan_loket=loket;
}

void tampil_antrian(void)
{ lcd_clear();
// mengahapus tampilan di LCD
lcd_putsf("ANTRIAN LOKET");
lcd_gotoxy(1,1);

sprintf(str_hitung,"%d%d%d%d",ribuan,ratusan,puluhan,sa
tuan);
lcd_puts(str_hitung); lcd_gotoxy(13,1);
sprintf(str_hitung,"%d",loket);
lcd_puts(str_hitung);
delay_ms(100); // Tunda 100 milidetik
}
void main(void)

{
// Declare your local variables here
//====
//Characters/line: 16
lcd_init(16);
lcd_clear(); // menghapus tampilan di LCD
lcd_gotoxy(0,0); //Kursor kolom 0 Baris 0
lcd_putsf("Halo"); // menampilkan string
lcd_gotoxy(0,1); //Kursor kolom 0 Baris 1
lcd_putsf("Elektro UHT"); // menampilkan string
delay_ms(1000);

lcd_clear(); // menghapus tampilan di LCD


lcd_putsf(" Tes Akses LCD "); // menampilkan
string
lcd_putsf(" ELEKTRO - UHT "); // menampilkan
string
delay_ms(1000); // Tunda 1 detik
lcd_clear(); // mengahapus tampilan di LCD
lcd_putsf(" MIKROKONTROLER "); //
menampilkan string
lcd_putsf("ilul & 150230032"); //
menampilkan string
delay_ms(1000); // Tunda 1 detik

//========AWAL TAMPILAN =====


// mengahapus tampilan di LCD
lcd_putsf("AplikasiANTRIAN");
lcd_putsf(" Save in EEPROM ");
delay_ms(1000); // Tunda 1 detik
//-- ambil data di EEPROM --
antrian=simpan_antrian;
loket=simpan_loket;
pecah_antrian();

while (1)
{
//= Bagian baca tombolAntrian ====
if (T1==0)
// jika tombol T1 ditekan
{
loket=1;
antrian++;
pecah_antrian();
tampil_antrian();
simpan_di_eeprom();
while (T1==0);
delay_ms(100);
}

if (T2==0)
// jika tombol T2 ditekan
{
loket=2;
antrian++;
pecah_antrian();
tampil_antrian();
simpan_di_eeprom();
while (T2==0);
delay_ms(100);
}

if (T3==0)
// jika tombol T3 ditekan
{
loket=3;
antrian++;
pecah_antrian();
tampil_antrian();
simpan_di_eeprom();
while (T3==0);
delay_ms(100);
}

if (T4==0)
// jika tombol T4 ditekan
{
loket=4;
antrian++;
pecah_antrian();
tampil_antrian();
simpan_di_eeprom();
while (T4==0);
delay_ms(100);
}
if (T5==0)
// jika tombol T5 ditekan
{
loket=5;
antrian++;
pecah_antrian();
tampil_antrian();
simpan_di_eeprom();
while (T5==0);
delay_ms(100);
}
if (T6==0)
// jika tombol T6 ditekan
{
loket=6;
antrian++;
pecah_antrian();
tampil_antrian();
simpan_di_eeprom();
while (T6==0);
delay_ms(100);
}

//--
//--
if (RESET==0)
// jika tombol T7 ditekan
{
loket=0;
antrian=0;
pecah_antrian();
tampil_antrian();
simpan_di_eeprom();
while (RESET==0);
delay_ms(100);
}
}
// Place your code here*/

}
Compile lalu kemudian isikan ke IC dan jalankan . Amati hasilnya.

4.5 Latihan
- Tampilkan 4 baris kalimat secara bergantian terus menerus.
- Tampilkan nilai counter penambahan 1 angka tiap detik.

4.6 Kesimpulan
Buatlah kesimpulan tentang percobaan yang telah anda lakukan tersebut.
PERCOBAAN V
AKSES KEYPAD

5.1 Tujuan
- Memahami dasar-dasar keypad.
- Mengetahui akses keypad dengan Bascom-AVR.
- Menampilkan hasil penekanan tombol keypad pada LCD.

5.2 Dasar Teori


Keypad merupakan tombol push button yang disusun sebagai baris dan
kolom sehingga membentuk matriks. Keypad banyak digunakan sebagai piranti
masukan dalam piranti elektronik. Keypad berfungsi sebagai interface antara
perangkat elektronik dengan manusia. Konfigurasi keypad dengan susunan bentuk
matriks ini bertujuan untuk penghematan port mikrokontroler karena jumlah tombol
yang dibutuhkan banyak pada suatu system dengan mikrokontroler.

Gambar 5.1 Keypad


Tabel 5.1 Data Matrix Keypad
BARIS KOLOM TOMBOL/ANGKA
B1 K1 1
B1 K2 2
B1 K3 3
B2 K1 4
B2 K2 5
B2 K3 6
B3 K1 7
B3 K2 8
B3 K3 9
B4 K1 *
B4 K2 0
B4 K3 #

Logika pembacaan KEYPAD mode scanning baris.


- Scanning dimulai dari baris 1, baris 1 diberi logika 0, baris yang lain diberi
logika 1.
- Kemudian cek pada setiap kaki bagian kolom, jika ada salah satu kolom
yang berlogika 0 maka ada penekanan tombol.
- Tombol yang ditekan bisa dibaca dengan mencocokkan data matriks
keypad.
- Misal saat baris 1 diberi logika 0 dan baris yang lain diberi logika 1,
kemudian dicek ternyata pada kolom 2 berlogika 0, dan kolom lain
berlogika 1.
- Maka data tersebut merupakan pertemuan antara B1 dan K2, maka dapat
ditentukan bahwa tombol yang ditekan adalah tombol angka 2.

5.3 Skema Rangkaian


Berikut skema rangkaian akses keypad pada mikrokontroler:
Gambar 5.2 Skema rangkaian akses keypad pada mikrokontroler

5.4 Langkah Percobaan


- Hubungkan rangkaian pada modul sesuai pada gambar 5.2
- Pada contoh berikut digunakan port D terhubung ke LCD, dan port B
terhubung ke jalur KEYPAD
- Kemudian tuliskan program contoh dibawah dengan Bascom-AVR editor.
Contoh Program
Mode 1:
/*Project : Dasar LCD dan Keypad
Version :
Date : 10/13/2017
Author : As
Company : Elektro - UHT
*****************************************************/
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
//=======================//

#define K1 PINB.0
#define K2 PINB.1
#define K3 PINB.2
//=======================//
#define B1 PORTB.3
#define B2 PORTB.4
#define B3 PORTB.5
#define B4 PORTB.6
//=======================//

// Alphanumeric LCD functions


#include <alcd.h>
//=======================//
unsigned char data_keypad;
char data_str[4];

void baca_keypad(void)
{
// bila baris 1 diberi 0
B1=0; B2=1; B3=1; B4=1;
delay_ms(1);
if(K1==0){data_keypad=1; return;}
if(K2==0){data_keypad=2; return;}
if(K3==0){data_keypad=3; return;}

// bila baris 2 diberi 0


B1=1; B2=0; B3=1; B4=1;
delay_ms(1);
if(K1==0){data_keypad=4; return;}
if(K2==0){data_keypad=5; return;}
if(K3==0){data_keypad=6; return;}

// bila baris 3 diberi 0


B1=1; B2=1; B3=0; B4=1;
delay_ms(1);
if(K1==0){data_keypad=7; return;}
if(K2==0){data_keypad=8; return;}
if(K3==0){data_keypad=9; return;}

// bila baris 4 diberi 0


B1=1; B2=1; B3=1; B4=0;
delay_ms(1);
if(K1==0){data_keypad=10; return;}
if(K2==0){data_keypad=0; return;}
if(K3==0){data_keypad=11; return;}
}
void tampil_LCD(void)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("Akses KEYPAD");
lcd_gotoxy(0,1);
lcd_putsf("TOMBOL: ");
lcd_gotoxy(10,1);
sprintf(data_str,"%d",data_keypad);
lcd_puts(data_str);
delay_ms(10);
}

void animasi_sambut(void)
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("Hello :)");
delay_ms(30);
lcd_gotoxy(0,1);
lcd_putsf("Elektro - UHT");
delay_ms(30);
}

// Declare your global variables here

void main(void)
//====
lcd_init(16);

animasi_sambut();
while (1)
{
// Place your code here
data_keypad=20;
baca_keypad();
if (data_keypad != 20)
{
tampil_LCD();
}
}
}
5.5 Latihan
- Buatlah program input data dengan keypad dan tampilkan di LCD.
- Buatlah program seolah-olah input data nomor HP.

5.6 Kesimpulan
Buatlah kesimpulan tentang percobaan yang telah anda lakukan tersebut.
PERCOBAAN VI
AKSES SERIAL RS-232

6.1 Tujuan
- Memahami dasar-dasar serial RS-232
- Mengetahui komunikasi antara mikrokontroler dengan komputer dengan
Serial RS-232.
- Kontrol nyala LED pada Mikrokontroler lewat Komputer dengan
komunikasi Serial RS-232.

6.2 Dasar Teori


Komunikasi serial adalah salah satu cara komunikasi dimana data dikirimkan
tiap bit secara serial. Pengiriman data serial ini pada umumnya menggunakan
format-format tertentu yaitu tentang start dn stop bit, parity checker dan data yang
dikirimkan. Sehingga keseluruhan tersebut jika digabungkan akan membentuk
sebuah frame bit. Pada umumnya komunikasi serial yang sering digunakan adalah
RS 232. Ada 2 macam cara komunikasi data serial yaitu sinkron dan asinkron. Pada
komunikasi data serial sinkron, clock dikirimkan bersama sama dengan data serial,
tetapi clock tersebut dibangkitkan sendiri-sendiri baik pada sisi pengirim maupun
penerima. Sedangkan pada komunikasi serial asinkron tidak diperlukan clock
karena data dikirimkan dengan kecepatan tertentu yang sama baik pada pengirim /
2 penerima.
Komunikasi serial UART (Universal Asyncronus Receiver Transmiter)
kecepatan pengiriman data (atau yang sering disebut dengan Baud Rate) dan fase
clock pada sisi transmitter dan sisi receiver harus sinkron. Untuk itu diperlukan
sinkronisasi antara transmitter dan receiver. Hal ini dilakukan oleh bit Start dan
bit Stop. Ketika saluran transmisi dalam keadaan idle, output UART adalah
dalam keadaan logika 1.
Tabel 6.1 Baudrate pada komunikasi serial RS-232
Baudrate Kecepatan
50 50 Bit per detik
300 300 Bit per detik
600 600 Bit per detik
2400 2400 Bit per detik
4800 4800 Bit per detik
9600 9600 Bit per detik
19200 19200 Bit per detik
38400 38400 Bit per detik
57600 57600 Bit per detik
115200 115200 Bit per detik

Standar RS232 ditetapkan oleh Electronic Industry Association and


Telecomunication Industry Association pada tahun 1962. RS232 dibuat pada tahun
1962, jauh sebelum IC TTL populer, oleh karena itu level tegangan yang ditentukan
untuk RS232 tidak ada hubungannya dengan level tegangan TTL. Sinyal dan level
tegangan RS-232:
Logika 0 = antara tegangan +3 s/d +25 Volt
Logika 1 = antara tegangan -3 s/d -25 volt
Daerah tegangan antara +3 s/d -3 volt tidak terdefinisikan.
Tegangan rangkaian terbuka tidak boleh lebih dari 25 volt (dengan
acuan ground)
Arus hubung singkat rangkaian tidak boleh lebih dari 500mA.

Karena pada Mikrokontroler menggunakan logika TTL maka sinyal serial


port harus kita konversikan dahulu ke pusat TTL sebelum kita gunakan, dan
sebaliknya sinyal dari peralatan kita harus dikonversikan ke logika RS-232 sebelum
diinputkan ke serial port komputer. Konverter yang paling mudah digunakan adalah
MAX-232.
Gambar 6.1 IC Konverter Max-232

Gambar 6.2 Konfigurasi pin pada konektor serial RS-232 DB 9

6.3 Skema Rangkaian


Berikut skema rangkaian akses RS-232 pada mikrokontroler:
Gambar 6.3 Skema Rangkaian Akses RS-232 pada Mikrokontroler

6.4 Langkah Percobaan


- Hubungkan kabel dan serial dengan konektor DB9 serial dari modul
mikrokontroler ke konektor DB9 serial RS-232 pada komputer.
- Buka aplikasi hyperterminal pada windows untuk mengamati proses
komunikasi data.

Contoh Program:
Membuat program mikrokontroler dengan Codevision AVR
Perintah kirim data serial dengan Codevision AVR

Perintah terima data serial RS-232 dengan Codevision AVR


#include <mega16.h>
#include <string.h>
#include <delay.h>
// Alphanumeric LCD Module functions
#include <alcd.h>

#define led PORTC.0


#define led1 PORTC.1
#define tombol PIND.7
#ifndef RXB8
#define RXB8 1
#endif

#ifndef TXB8
#define TXB8 0
#endif

#ifndef UPE
#define UPE 2
#endif

#ifndef DOR
#define DOR 3
#endif

#ifndef FE
#define FE 4
#endif

#ifndef UDRE
#define UDRE 5
#endif

#ifndef RXC
#define RXC 7
#endif

#define FRAMING_ERROR (1<<FE)


#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<DOR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

char terima;
unsigned char datanya;

// USART Receiver buffer


#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE <= 256


unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif

// This flag is set on USART Receiver buffer overflow


bit rx_buffer_overflow;

// USART Receiver interrupt service routine


interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
datanya=data;
terima=data;
if ((status & (FRAMING_ERROR | PARITY_ERROR |
DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index++]=data;
#if RX_BUFFER_SIZE == 256
// special case for receiver buffer size=256
if (++rx_counter == 0)
{
#else
if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
#endif
rx_buffer_overflow=1;
}
}
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index++];
#if RX_BUFFER_SIZE != 256
if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#endif
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif

// USART Transmitter buffer


#define TX_BUFFER_SIZE 8
char tx_buffer[TX_BUFFER_SIZE];

#if TX_BUFFER_SIZE <= 256


unsigned char tx_wr_index,tx_rd_index,tx_counter;
#else
unsigned int tx_wr_index,tx_rd_index,tx_counter;
#endif

// USART Transmitter interrupt service routine


interrupt [USART_TXC] void usart_tx_isr(void)
{
if (tx_counter)
{
--tx_counter;
UDR=tx_buffer[tx_rd_index++];
#if TX_BUFFER_SIZE != 256
if (tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0;
#endif
}
}

#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
while (tx_counter == TX_BUFFER_SIZE);
#asm("cli")
if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
{
tx_buffer[tx_wr_index++]=c;
#if TX_BUFFER_SIZE != 256
if (tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0;
#endif
++tx_counter;
}
else
UDR=c;
#asm("sei")
}
#pragma used-
#endif

// Standard Input/Output functions


#include <stdio.h>

// Declare your global variables here


int ulang;

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization


// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In
Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T
State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In
Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T
State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In
Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T
State1=T State0=T
PORTC=0x00;
DDRC=0x03;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In
Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T
State1=T State0=T
PORTD=0x80;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization


// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization


TIMSK=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0xD8;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

// Analog Comparator initialization


// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1:
Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// Alphanumeric LCD initialization


// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric
LCD menu:
// RS - PORTB Bit 0
// RD - PORTB Bit 1
// EN - PORTB Bit 2
// D4 - PORTB Bit 3
// D5 - PORTB Bit 4
// D6 - PORTB Bit 5
// D7 - PORTB Bit 6
// Characters/line: 16
lcd_init(16);
lcd_clear();
lcd_putsf("AKSES RS-232");
lcd_gotoxy(1,1);
lcd_putsf("(NIM)");
delay_ms(2000);

// Global enable interrupts


#asm("sei")
//-----------------------------------------------------
--
for (ulang=0;ulang<3;ulang++)
{
led=0;
led1=0;
delay_ms(100);
led=1;
led1=1;
delay_ms(100);
led=0;
led1=0;
delay_ms(100);
led=1;
led1=1;
delay_ms(100);

}
while (1)
{
// Place your code here
// if (terima=='A') // jika data serial karakter
'A'
if (datanya==0x41) // jika data serial karakter
'A'
{

led=0; // led nyala


delay_ms(500); //tunda 1 detik
led=1; // led mati
terima='';
datanya=0;

lcd_clear();
lcd_putsf("Data");
lcd_gotoxy(0,1);
lcd_putsf("DATA DI TERIMA");
delay_ms(1000);
}
//---------
//-- BACA PENEKANAN TOMBOL ---
if (tombol==0)
{
putchar('A');
//printf("A");
delay_ms(500);

lcd_clear();
lcd_putsf("Data");
lcd_gotoxy(0,1);
lcd_putsf("DATA DI KIRIM");
delay_ms(1000);

led1=0;
delay_ms(500);
led1=1;
delay_ms(500);
led1=0;
delay_ms(500);
led1=1;
delay_ms(500);
} else {

lcd_clear();
lcd_putsf("Data");
lcd_gotoxy(0,1);
lcd_putsf("OFF");
}
}
}
Contoh Program pada Delphi7
Program pada Delphi7
Procedure Tform1.Comport1RxChart (Sender: Tobject;
Count: Integer);
Var
Str: string;
Begin
Comport1.ReadStr(str,count);
Edit1.text:=str;
End;
Procedure Tform1.Button_aturComClick (Sender;
Toject);
Begin
Comport1.ShowSetupDialog;
End;
Procedure Tform1.Button_KirimDataClick (Sender;
Toject);
Begin
Comport1.WriteStr(Edit2.text);
End;

6.6 Latihan
- Buatlah program komunikasi data dari mikrokontroler ke komputer.

6.7 Kesimpulan
Buatlah kesimpulan tentang percobaan yang telah anda lakukan tersebut.

Anda mungkin juga menyukai