• Tidak ada hasil yang ditemukan

USART praktikum.docx

N/A
N/A
Protected

Academic year: 2021

Membagikan "USART praktikum.docx"

Copied!
15
0
0

Teks penuh

(1)

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

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.

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. 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, baudrate, hyperterminal, PC.

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.

2. STUDI PUSTAKA

KONFIGURASI TIMER/COUNTER DAN INTERRUPT

Gambar dan tabel di bawah dikutip dari datasheet ATMega8535.

USART Data Register

USART Control and Status Register A

USART Control and Status Register B

USART Control and Status Register C

(2)

III.A.2 Modifikasi program sehingga -nilai baudrate = 2400 bps -mengaktifkan fasilitas double USART

transmission speed

III.A.1 Masukkan kode program seperti dalam modul dan setting baudrate realterm yang

sesuai 9600 bps

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

Jalankan realterm.

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

Hubungkan kit dengan USB komputer.

III.B.2 Modifikasi program sehingga pada layar RealTerm ditampilkan nama masing-masing anggota kelompok

bergantian selama x detik.

III.B.1 Masukkan kode program sesuai dalam modul Settinf sumber clock menggunakan kristal 7372800Hz

dengan cara mengatur fuse. Jalankan realterm. Sambungkan kit pada power supply 9V. Hubungkan port A pada port output LED. Hubungkan kit dengan USB komputer.

III.C.2 Modifikasi kode program sehingga Mikroprosesor menerima input 1 atau 2 dari realterm

dan menampilkan NIM

III.C.1 Masukkan kode program sesuai dalam modul Settinf sumber clock menggunakan kristal 7372800Hz dengan cara mengatur fuse. Jalankan

realterm.

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

USB komputer.

Atur spesifikasi program sesuai dengan perintah dalam modul

Buat program yang berfungsi untuk memeriksa password yang diberikan melalui komunikasi serial

dan SWITCH INPUT 3. METODOLOGI

3.1 MENERIMA DATA DARI PC

3.2 MENGIRIM DATA KE PC

3.3 PENGIRIMAN DAN PENERIMAAN DATADARI DANKE PC

3.4 REVIEW MODUL 1-3

4. HASIL DAN ANALISIS

4.1 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

(3)

⦿⦿⦿⦿⦿⦿⦿⦿

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.

Ketika ditekan tombol ’15’ (send number): 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

⦿⦿⦿⦿⦿⦿⦿⦿

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 :

Gambar 4.1 Flowchart program IIIA ANALISIS IIIA:

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

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.

(4)

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.4 Flowchart program III.B.1

Gambar 4.5 Flowchart program utama III.B.2

Gambar 4.6 Flowchart Delay (dari modul sebelumnya)

Gambar 4.7 Flowchart init_tim (dari modul sebelumnya)

ANALISIS : Tugas III.B

Kita dapat mengirimkan data dengan meng-assign 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.

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

4

(5)

sebelumnya. Delay ini menggunakan counter dengan menyeting TCNT tertentu dan OCR 0xFFFF.

TCNT = (1+0x0000) – T x Fclk / prescaler Nilai delay ini akan diselipkan diantara kemunculan dua nama.

4.3 PENGIRIMAN DAN PENERIMAAN DATADARI DANKE 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): 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 :

Gambar 4.8 Flowchart program utama

Gambar 4.9 Flowchart Interrupt 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

(6)

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

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.

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).

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.

2. USART dapat digunakan mengirim atau menerima data pada interface ini, dengan cara meng-assign UDR 3. Untuk mengeset nilai kecepatan

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

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 ATMega8535,

www.atmel.com

[3] www.asciitable.com, diakses pada tanggal 13 April 2015 pukul 22.03. [4] Flowchart pada www.draw.io

(7)
(8)

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;

(9)

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;

(10)

//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)

(11)

{

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

(12)

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

(13)

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

(14)

} }

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;

(15)

//overflow interrupt disable TIMSK=(0<<OCIE0);

Gambar

Gambar   dan   tabel   di   bawah   dikutip   dari datasheet ATMega8535.
Gambar 4.1 Flowchart program IIIA
Gambar 4.6 Flowchart Delay (dari modul sebelumnya)
Gambar 4.8 Flowchart program utama

Referensi

Dokumen terkait