Anda di halaman 1dari 15

MODUL 3

KOMUNIKASI USART DAN EVALUASI MODUL I-III


Fauzan Naufal Ramadhan (13213078)
Asisten: Fadhil Mochammad (13212118)
Tanggal Percobaan: 12/4/2016
EL3214 Praktikum Sistem Mikroprosesor

Laboratorium Dasar - Sekolah Teknik Elektro dan Informatika ITB


Abstrak

2. STUDI PUSTAKA

Saat komponen mikrokontroler ingin


dipasangi komponen dari luar yang
dapat mengirimkan banyak data, USART
atau
Universal
Synchronous
Asynchronous
serial
Receiver
Transmitter
digunakan
untuk
menterjemahkan dan menghubungkan
data antara dua port serial dan paralel
agar data dapat ditransfer dengan baik.
Pengiriman data terbagi menjadi dua
jenis, yaitu masuk dan keluar. USART
akan menerjemahkan data dari dua
komponen tersebut.

KONFIGURASI
INTERRUPT

Dikenal pula istilah baudrate (dari


transmission
speed)
yaitu
nilai
kecepatan
perubahan
data
yang
disetting
dengan
mengubah
nilai
register UBRR. Salain itu modul
hyperterminal
dan
clock
juga
mempengaruhi kecepatan transfer.

USART Control and Status Register B

Pada percobaan kali ini akan diamati


penggunaan USART dan juga akan ada
penggunaan dan aplikasi dari hasil yang
telah diamati di praktikum sebelumnya.
Kata
kunci
:
USART,
hyperterminal, PC.

TIMER/COUNTER

DAN

Gambar dan tabel di bawah dikutip dari


datasheet ATMega8535.
USART Data Register

USART Control and Status Register A

USART Control and Status Register C

Register-register penting lain

baudrate,

1. PENDAHULUAN
Penambahan komponen pada mikroprosesor
dapat menjadi kebutuhan hardware designer.
Oleh karena itu, praktikan akan mempelajari
bagaimana
mengatur
transfer
data
(kecepatan)
pada
mikroprosesor
dan
komponen yang diberikan. USART akan
menjadi register yang mengatur hal tersebut.
Pada praktikum ini kita akan mencoba
aplikasi komunikasi USART yang akan
dilakukan
pada
beberapa
percobaan.
Diharapkan setelah melakukan praktikum
modul ini, praktikan dapat :

Memahami datasheet ATMega 8535.

Membuat aplikasi komunikasi USART.


Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

3.2

MENGIRIM DATA KE PC

Sambungkan kit pada power supply 9V. Hubungkan port A


pada port output LED. Hubungkan kit dengan USB komputer.

Settinf sumber clock menggunakan kristal 7372800Hz


dengan cara mengatur fuse. Jalankan realterm.

III.B.1 Masukkan kode program sesuai dalam modul

III.B.2 Modifikasi program sehingga pada layar RealTerm


ditampilkan nama masing-masing anggota kelompok
bergantian selama x detik.

3.3

PENGIRIMAN DAN PENERIMAAN


DATA DARI DAN KE PC

Sambungkan kit pada power supply 9V. Hubungkan


port A pada port output LED. Hubungkan kit dengan
USB komputer.
Settinf sumber clock menggunakan kristal
7372800Hz dengan cara mengatur fuse. Jalankan
realterm.

3. METODOLOGI
3.1

MENERIMA DATA DARI PC


Sambungkan kit pada power supply 9V.
Hubungkan port A pada port output LED.
Hubungkan kit dengan USB komputer.

III.C.1 Masukkan kode program sesuai dalam modul

III.C.2 Modifikasi kode program sehingga


Mikroprosesor menerima input 1 atau 2 dari realterm
dan menampilkan NIM

3.4
Settinf sumber clock menggunakan kristal
7372800Hz dengan cara mengatur fuse.
Jalankan realterm.

III.A.1 Masukkan kode program seperti dalam


modul dan setting baudrate realterm yang
sesuai 9600 bps

Buat program yang berfungsi untuk memeriksa


password yang diberikan melalui komunikasi serial
dan SWITCH INPUT

Atur spesifikasi program sesuai dengan perintah


dalam modul

4. HASIL DAN ANALISIS


4.1

III.A.2 Modifikasi program sehingga


-nilai baudrate = 2400 bps
-mengaktifkan fasilitas double USART
transmission speed

REVIEW MODUL 1-3

MENERIMA DATA DARI PC

Tugas III.A.1
Lampu LED akan menyala sesuai data yang
dikirimkan RealTerm. Saat mengirimkan
angka,
maka
LED
akan
menunjukan
representasi kode biner angka desimal
tersebut. Saat mengirimkan kode ASCII, maka
LED akan muncul sesuai kode ASCII dari
character yang kita kirimkan.
Ketika ditekan tombol 15 (send number):

7 6 5 4 3 2 1 0
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB


Ketika ditekan tombol 15 (send ASCII) :

7 6 5 4 3 2 1 0

Ketika ditekan tombol 1 (send number):

7 6 5 4 3 2 1 0

Tugas III.A.2
Sama seperti percobaan III.A.1, lampu LED
akan menyala sesuai data yang dikirimkan
RealTerm. Saat mengirimkan angka, maka
LED akan menunjukan representasi kode
biner
angka
desimal
tersebut.
Saat
mengirimkan kode ASCII, maka LED akan
muncul sesuai kode ASCII dari character yang
kita kirimkan.

Gambar 4.1 Flowchart program IIIA

Ketika ditekan tombol 15 (send number):

ANALISIS IIIA:

7 6 5 4 3 2 1 0

Program akan membuat mikroprosesor


menerima input dari PC pada RealTerm. Nilai
dari pesan akan di-assign ke UDR yang nanti
akan dinyalakan ada PORTA.

Ketika ditekan tombol 15 (send ASCII) :

7 6 5 4 3 2 1 0

Ketika ditekan tombol 1 (send number):

7 6 5 4 3 2 1 0

Perbedaan juga ada dari kecepatan transfer,


namun karena data hanya satu (relatif
sedikit) membuat kita sulit mengamati
dikarenakan transfer data untuk satu data
sangatlah cepat.
Dapat diamati juga, saat kita mengatur
baudrate pada RealTerm berbeda dengan
pada program, maka pengiriman data akan
kacau dan tidak terkirim dengan baik.
FLOWCHART :

Baudrate yang diharapkan pada III.A.1 dan di


setting
pada
RealTerm
adalah
9600.
Didapatkan dari UBRR 47 tanpa kecepatan
ganda dan frekuensi clock 7372800Hz. Nilai
Baudrate didapat dari persamaan dibawah.
Untuk single speed kita gunakan:

Baudrate yang diharapkan pada III.A.2 dan di


setting pada RealTerm adalah 2400 dengan
double USART Didapatkan dari UBRR 383
atau 0x017F tanpa kecepatan ganda dan
frekuensi clock 7372800Hz Untuk double
speed, kita gunakan:

UBRRH = 0x01;
UBRRH = 0X7F;

4.2

MENGIRIM DATA KE PC

Tugas III.B.1
Pada
percobaan
ini
layar
RealTerm
menampilkan output seperti berikut :
Praktikum Sistem Mikroprosesor
Setiap mikroprosesor berjalan, atau dengan
kata lain saat tombol reset ditekan.
Tugas III.B.2

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

Pada percobaan ini layar Hyperterminal


menampilkan output seperti berikut :
Ojan Marcel Ojan Marcel Ojan Marcel .
Tulisan Ojan dan Marcel ditampilkan
bergantian dengan jeda selama 5 detik.
FLOWCHART :

Gambar 4.6 Flowchart Delay (dari modul


sebelumnya)

Gambar 4.4 Flowchart program III.B.1

Gambar 4.7 Flowchart init_tim (dari modul


sebelumnya)

ANALISIS :
Tugas III.B
Kita dapat mengirimkan data dengan mengassign nilai UDR dengan nilai yang ingin kita
kirim. Data yang di assign akan dikirim ke
RealTerm
dengan
kecepatan
tertentu
(baudrate) yang diatur UBRR. Nilai baudrate
program mikroprosesor harus tersinkronasi
dengan baudrate RealTerm agar data dikirim
dengan baik.

Gambar 4.5 Flowchart program utama III.B.2

Pada percobaan III.B.1, tidak ada looping


dengan
kode
while
(1)
sehingga
mikroprosesor tidak berjalan terus menerus.
Proses mengeluarkan tampilan ke PC pada
RealTerm hanya 1x setiap proses dan harus
mengulangi proses (dengan reset) untuk
memunculkan data pada RealTerm pada PC
lagi.
Tugas III.B.2, digunakan kode while (1) oleh
karena itu kemunculan dua nama akan
terjadi bergantian. Pada program ini juga
menggunakan delay yang diambil dari modul

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

sebelumnya. Delay ini menggunakan counter


dengan menyeting TCNT tertentu dan OCR
0xFFFF.

Gambar 4.8 Flowchart program utama

TCNT = (1+0x0000) T x Fclk / prescaler


Nilai delay ini akan
kemunculan dua nama.

4.3

diselipkan

diantara

PENGIRIMAN DAN PENERIMAAN


DATA DARI DAN KE PC

Tugas III.C.1
Hasil sama dengan percobaan III.A. Lampu
LED akan menyala sesuai data yang
dikirimkan RealTerm. Saat mengirimkan
angka,
maka
LED
akan
menunjukan
representasi kode biner angka desimal
tersebut. Saat mengirimkan kode ASCII, maka
LED akan muncul sesuai kode ASCII dari
character yang kita kirimkan.
Ketika ditekan tombol 15 (send number):

Gambar 4.9 Flowchart Interrupt

7 6 5 4 3 2 1 0

Ketika ditekan tombol 15 (send ASCII) :

7 6 5 4 3 2 1 0

Ketika ditekan tombol 1 (send number):

7 6 5 4 3 2 1 0

Dan juga, huruf yang dikirimkan akan muncul


pada layar RealTerm.
Tugas III.C.2
Saat RealTerm mengirimkan nilai 1, maka
pada layar RealTerm akan muncul NIM
13213076, sedangkan jika dikirimkan nilai
2 maka layar RealTerm akan mengeluarkan
NIM: 13213078
FLOWCHART :

ANALISIS :
Dengan ISR (Interupt Service Routine) yang
diaktifkan oleh masukan RealTern, program
akan dapat mengeluarkan sebuah perintah
tertentu. ISR akan aktif saat nilai dari
RealTerm dikirim. Untuk III.C.1, program akan
mengeluarkan angka yang dikirim pada LED
(representasi biner) karena isi program
interupt tersebut adalah meng-assign PORTA
dengan UDR.
unsigned char kar;
kar = UDR;
PORTA= kar;
loop_until_bit_is_set(UCSRA,5);
Pada III.C.2, isi program Interupt adalah
switch konditional. Saat data yang dikirim
RealTerm ke Mikroprosesor adalah nilai 1,
maka mikroprosesor akan mengembalikan
nilai 13213076 ke Layar RealTerm. Saat
data yang dikirim adalah nilai 2, maka
mikroprosesor
akan
mengirimkan
nilai
13213078 ke RealTerm. Pengiriman data ke
realterm dapat dilakukan dengan mengasign
UDR dengan sebuah array of char dan proses
looping.
if (kar==1)
for (i=0;kal2[i]!='\0';++i)
{
loop_until_bit_is_set(UCSRA,5);
UDR=kal1[i];
}

4.4

REVIEW MODUL 1-3

Tugas III.D.1
Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

Percobaan
kali
ini,
praktikan
akan
menggunakan kembali hasil yang didapat
dari praktikum sebelumnya.

2. USART dapat digunakan mengirim


atau menerima data pada interface
ini, dengan cara meng-assign UDR

Program akan mengeluarkan sebuah kondisi


LED running pada keadaan idle. Lalu jika IS1
ditekan, maka interupsi akan terjadi,
memunculkan LED count-up 5x, setiap
kalinya berdurasi 1 detik. Setelah 5 detik
maka sistem akan mengecek nilai PORTC
yang di assign oleh switch toggle. Jika salah
maka mode akan kembali pada idle. Jika
benar maka program akan membuat LED nya
menyala semua selama 500ms. Setelah itu
akan masuk ke mode count dimana akan
menunggu masukan IS2 sampai 5x klik.
Setelah 5x klik maka program masuk mode
kata kunci dua dimana diberi kesempatan 5
detik (LED sebagai tanda waktu) untuk
memberikan intrupsi dari UDR.

3. Untuk mengeset nilai kecepatan


BAUDRATE, dapat dengan mengeset
Register
UBRR.
Untuk
single
transmission speed

Disini kita menggunakan komponen IS1 dan


IS2 yang dihubungkan pada INT0 dan INT1.
Port yang diganakan adalah PORTA sebagai
output, PORTC sebagai input.
Praktikan sudah berhasil membuat program,
namun gagal saat dieksekusi pada board.
Keganjilan datang pada tombol intrupsi yang
dihubungkan pada PB0 oleh jumper. Jika
jumper disentuh juga intrupsi kadang terjadi.
Untuk
menganalisis
letak
kesalahan,
praktikan menyederhanakan program dengan
modul-modul
sebelumnya,
tetap
mikroprosesor tetap tidak dapat menjalankan
program intrupsi dengan benar. Saat kita
goyang-goyang kabel, nilai intrupsi akan
berubah (kabel tidak stabil).

untuk mode double transmission


speed diisi sesuai dengan formula

DAFTAR PUSTAKA
[1]

Hutabarat, Mervin T., dkk. 2015.


Petunjuk
Praktikum
Sistem
Mikroprosesor.
Bandung
:
Laboratorium Dasar Teknik Elektro
ITB.

[2]

Datasheet
www.atmel.com

[3]

www.asciitable.com, diakses pada


tanggal 13 April 2015 pukul 22.03.

[4]

Flowchart pada www.draw.io

ATMega8535,

FLOWCHART :

Gambar 4.10 Flowchart program utama

5. KESIMPULAN
Pada modul ini, dapat disimpulkan :
1. ATMega8535
memiliki
komponen
USART yang mengatur hubungan
interface
mikroprosesor
dengan
komponen serial. Pada reg UCSR.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB

LAMPIRAN
1. Sourcecode untuk tugas III.A.1 :
#include<avr/io.h>
int main (void)
{
//tentukan nilai baudrate yang sesuai dengan inisialisasi
ini
UCSRA=0x00;
UCSRB=0x10;
UCSRC=0x86;
UBRRL=47;
while (1)
{
loop_until_bit_is_set(UCSRA,7);
PORTA=UDR;
UCSRA|=_BV(7);
}
return 0;
}

2. Sourcecode untuk program III.A.2


#include<avr/io.h>
int main (void)
{
//tentukan nilai baudrate yang sesuai dengan inisialisasi ini
UCSRA=0x02; //double speed
UCSRB=0x10;
UCSRC=0x86;
UBRRH=0X01; //tentukan baudrate dengan UBRR
UBRRL=0X7F;
while (1)
{
loop_until_bit_is_set(UCSRA,7);
PORTA=UDR;
UCSRA|=_BV(7);
}
return 0;
}

3. Sourcecode untuk program III.B.1


#include<avr/io.h>
int main (void)
{
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRL=47;
char kal[]=" Praktikum Sistem Mikroprosesor ";
unsigned char i=0;
for (i=0;kal[i]!='\0';++i)
{
loop_until_bit_is_set(UCSRA,5);
UDR=kal[i];
}
return 0;

4. Sourcecode untuk program III.B.2


#include<avr/io.h>
void Delay(void);
void init_tim(void);
int main (void)
{
init_tim();
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRL=47;
char kal1[]=" Ojan ";
char kal2[]=" Marcel ";
unsigned char i=0;
while(1)
{
for (i=0;kal1[i]!='\0';++i)
{
loop_until_bit_is_set(UCSRA,5);
UDR=kal1[i];
}
Delay();
for (i=0;kal2[i]!='\0';++i)
{
loop_until_bit_is_set(UCSRA,5);
UDR=kal2[i];
}
Delay();
}
return 0;
}
void Delay(void)
{
//overflow interrupt enable
TIMSK|=_BV(TOIE1);//(1<<TOIE1);
//penentuan nilai awal timer
TCNT1H = 0x73;
TCNT1L = 0x60;
//penentuan nilai compare untuk delay 1 detik
OCR1AH = 0xFF;
OCR1AL = 0xFF;
//menunggu hingga compare match, nilai TCNT1 = OCR1A)
loop_until_bit_is_set(TIFR,OCF1A);
//meng-nol-kan flag
TIFR|=_BV(OCF1A);

//overflow interrupt disable


TIMSK|=_BV(TOIE1);

void init_tim(void)
{
//mode operasi CTC, sumber clock prescaller 1024
TCCR1A = 0;
TCCR1B = 0b00001101;

//overflow interrupt disable


TIMSK|=(0<<TOIE1);
}

5. Sourcecode untuk program III.C.1


#include<avr/io.h>
#include<avr/interrupt.h>
#define F_CPU 7372800UL
#include <util/delay.h>
ISR(USART_RX_vect)
{
unsigned char kar;
kar = UDR;
PORTA= kar;
loop_until_bit_is_set(UCSRA,5);
UDR = kar;
}
int main (void)
{
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x86;
UBRRL=47;
sei();
while(1)
{
if bit_is_set(UCSRA,3)
{
loop_until_bit_is_set(UCSRA,5);
}
}
return 0;
}

6. Sourcecode untuk program III.C.2


#include<avr/io.h>
#include<avr/interrupt.h>
#define F_CPU 7372800UL
#include <util/delay.h>
ISR(USART_RX_vect)
{
unsigned char kar;
kar = UDR;
char kal1[]="13213076";
char kal2[]="13213078";
unsigned char i=0;
if (kar==1)
for (i=0;kal2[i]!='\0';++i)
{
loop_until_bit_is_set(UCSRA,5);
UDR=kal1[i];
}
else if (kar==2)
for (i=0;kal2[i]!='\0';++i)

{
}

loop_until_bit_is_set(UCSRA,5);
UDR=kal2[i];

}
int main (void)
{
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x86;
UBRRL=47;
sei();
while(1)
{
if bit_is_set(UCSRA,3)
{
loop_until_bit_is_set(UCSRA,5);
}
}
return 0;
}

7. Sourcecode untuk program III.D.1


#include<avr/io.h>
#include<avr/interrupt.h>
#define F_CPU 7372800UL
#include <util/delay.h>
#define OCR1AH = 0x70
#define OCR1AL = 0x80
#include<avr/string.h>
int mode, detik,i;
void Init_Ext_Int(void);
char password[20];
void tugas1B4(void);
void init_int(void);
ISR(INT0_vect)
{
PORTA = 0x01;
_delay_ms(1000);//detik;
PORTA = 0x02;
_delay_ms(1000);
PORTA = 0x04;
_delay_ms(1000);//detik;
PORTA = 0x08;
_delay_ms(1000);//detik;
PORTA = 0x16;
_delay_ms(1000);
if(PORTC==0xF0)
{
PORTA = 0xFF;
_delay_ms(500);
mode = 1;
}
}

ISR(TIMER1_OVF_vect) //timer
{
detik=detik<<1;
}
ISR(USART_RX_vect) //realtemp
{
if (mode==2) //interupt hanya saat mode 2
{
const char password = 'h'; //password huruf yang diinginkan
unsigned char kar;
bool sama;
kar = UDR;
if (kar == 'h')
{ //menyala bergantian saat kode benar
PORTA = 0xFFFF;
_delay_ms(100);
PORTA = 0x0000;
_delay_ms(100);
PORTA = 0xFFFF;
_delay_ms(100);
PORTA = 0x0000;
_delay_ms(100);
mode = 0;
}
else
mode = 0;

int main (void)


{
mode=0;
const char passwordasli[3]="halo";
int led,a;
Init_Ext_Int();
init_tim();
sei();

while(1)
{
if (mode==0)
tugasIB4();
if(mode==1) //counter
{
//penentuan nilai awal timer
TCNT0 = 123;
//penentuan nilai compare lampu 1x
OCR0 = 123;
while(bit_is_clear(TIFR,OCF0))
{
PORTA=0b00000001;
}

TIFR|=_BV(OCF0);
mode = 0;

//penentuan nilai awal timer


TCNT0 = 123;
//penentuan nilai compare lampu 2x
OCR0 = 123;
while(bit_is_clear(TIFR,OCF0))
{
PORTA=0b00000011;
}
TIFR|=_BV(OCF0);
mode = 0;
//penentuan nilai awal timer
TCNT0 = 123;
//penentuan nilai compare lampu 3x
OCR0 = 123;
while(bit_is_clear(TIFR,OCF0))
{
PORTA=0b00000111;
}
TIFR|=_BV(OCF0);
mode = 0;
//penentuan nilai awal timer
TCNT0 = 123;
//penentuan nilai compare lampu 4x
OCR0 = 123;
while(bit_is_clear(TIFR,OCF0))
{
PORTA=0b00001111;
}
TIFR|=_BV(OCF0);
mode = 0;
//penentuan nilai awal timer
TCNT0 = 123;
//penentuan nilai compare lampu 5x
OCR0 = 123;
while(bit_is_clear(TIFR,OCF0))
{
PORTA=0b00011111;
mode = 2;
}
TIFR|=_BV(OCF0);
}
if (mode==2)
{
sisa = 0;
while (mode == 2 && sisa<=5)
{
PORTA = 0x01 * pow(2,i);
_delay_ms(1000);//detik;
sisa--;
}
mode=0;

}
return 0;

void Init_Ext_Int(void)
{
MCUCR=0x02;
MCUCSR=0x00;
GICR=0x40;
GIFR=0x40;
}
void tugasIB4(void)
{
unsigned char i = 0x01;
unsigned int a=1;
DDRA = 0xFF;
PORTA = i;

do
{
i = (i<<1)|(i>>7);
PORTA = ~i;
_delay_ms(120);
if (i==0x80)
a = 0;
else if (i==0x01)
a = 1;
}while(a==1);
do
{
i = (i>>1)|(i<<7);
PORTA = ~i;
_delay_ms(120);
if (i==0x80)
a = 0;
else if (i==0x01)
a = 1;
}while(a==0);

}
void init_int(void)
{
TIMSK=0b000000;
TCCR1A = 0;
TCCR1B = 0b00001101;
TCNT1H=0x0B;
TCNT1L=0xDB;
sei();
}
void init_tim(void)
{
//mode operasi dan sumber clock
TCCR0=0b00000110;

//overflow interrupt disable


TIMSK=(0<<OCIE0);
}