Anda di halaman 1dari 49

. . . . . . modul petunjuk . . .

Praktikum Sistem Mikroprosesor

Jurusan Teknik Elektro Sekolah Tinggi Teknologi Adisutjipto

. . . . . . . . . .
Freddy Kurniawan, S.T., M.T.

Sekolah Tinggi TeknologiAdisutjipto

Modul Petunjuk

. . . . Praktikum . Sistem Mikroprosesor

Program Studi Teknik Elektro, STTA Jl. Janti Blok R, Lanud Adisutjipto, Yogyakarta Telp. (0274) 451 262, 451 263, Faks. (0274) 451 265

. . . . . . . . . .

Daftar Isi
Bab 1. Pengantar Pemrograman Assembler ........................................................... 1-1
1.1 1.2 1.3 1.4 Tujuan Praktikum .............................................................................................. 1-1 Alat dan Bahan ................................................................................................. 1-1 Teori Singkat ..................................................................................................... 1-1 Langkah-langkah Percobaan ............................................................................ 1-2
1.4.1 1.4.2 1.4.3 1.4.4 1.5.1 1.5.2 Membuat Project Baru di AVR Studio Membuat Program Baru Debugging Mengakses Register Debugging Mengakses Register 1-2 1-2 1-3 1-4 1-6 1-6

1.5 Data Pengamatan ............................................................................................. 1-6

Bab 2. Menggunakan Mode Pengalamatan .............................................................. 2-1


2.1 2.2 2.3 2.4 Tujuan Praktikum .............................................................................................. 2-1 Alat dan Bahan ................................................................................................. 2-1 Teori Singkat ..................................................................................................... 2-1 Langkah-langkah Percobaan ............................................................................ 2-1
2.4.1 2.4.2 2.4.3 2.4.4 Mengakses Memori data dengan Data Direct Addressing Mengakses Memori data dengan Data Indirect Addressing Mengakses Memori data dengan Data Indirect with Displacement Addressing Mengakses Memori data dengan Data Indirect Addressing with Preincrement/decrement Addressing Mengakses Memori data dengan Data Direct Addressing Mengakses Memori data dengan Data Indirect Addressing Mengakses Memori data dengan Data Direct Addressing Mengakses Memori data dengan Data Indirect with Displacement Addressing 2-1 2-2 2-2 2-2 2-4 2-4 2-4 2-4

2.5 Data Pengamatan ............................................................................................. 2-4


2.5.1 2.5.2 2.5.3 2.5.4

Bab 3. Menggunakan Port I/O..................................................................................... 3-1


3.1 3.2 3.3 3.4 Tujuan Praktikum .............................................................................................. 3-1 Alat dan Bahan ................................................................................................. 3-1 Teori Singkat ..................................................................................................... 3-1 Langkah-langkah Percobaan ............................................................................ 3-2
3.4.1 3.4.2 3.4.3 3.4.4 3.5.1 3.5.2 3.5.3 3.5.4 Menjadikan Pin sebagai Port Keluaran Menjadikan Pin sebagai Port Masukan Menjadikan Port I/O sebagai Current Source dan Current Sink Memberi Data ke Port Masukan Menjadikan Pin sebagai Port Keluaran Menjadikan Pin sebagai Port Masukan Menjadikan Port I/O sebagai Current Sink dan Current Source Memberi Data ke Port Masukan 3-2 3-3 3-3 3-3 3-5 3-5 3-5 3-5

3.5 Data Pengamatan ............................................................................................. 3-5

Bab 4. Menggunakan Pewaktu/Pencacah................................................................. 4-1


4.1 Tujuan Praktikum .............................................................................................. 4-1 4.2 Alat dan Bahan ................................................................................................. 4-1 4.3 Teori Singkat ..................................................................................................... 4-1
4.3.1 4.3.2 Pewaktu/Pencacah 0 Pewaktu 0 sebagai Penunda dengan Metode Luapan (Overflow) 4-2 4-3

. . . . . . . . . .
4.3.3 Pewaktu 0 sebagai Penunda dengan Metode Pembandingan (Match Compare) Pewaktu 0 sebagai Penunda dengan Metode Luapan (Overflow) Pewaktu 0 sebagai Penunda dengan Metode Pembandingan (Match Compare) Pewaktu 0 sebagai Penunda dengan Metode Luapan (Overflow) Pewaktu 0 sebagai Penunda dengan Metode Pembandingan (Match Compare) 4-3 4-4 4-5 4-6 4-6

4.4 Langkah-langkah Percobaan ............................................................................ 4-4


4.4.1 4.4.2

4.5 Data Pengamatan ............................................................................................. 4-6


4.5.1 4.5.2

Bab 5. Menggunakan Interupsi .................................................................................. 5-1


5.1 Tujuan Praktikum .............................................................................................. 5-1 5.2 Alat dan Bahan ................................................................................................. 5-1 5.3 Teori Singkat ..................................................................................................... 5-1
5.3.1 5.4.1 Interupsi dari Pewaktu 0 Interupsi Terpicu Match Compare di Pewaktu 0 5-2 5-2

5.4 Langkah-langkah Percobaan ............................................................................ 5-2 5.5 Data Pengamatan ............................................................................................. 5-4

Bab 6. Pengantar Pemrograman Menggunakan CodeVisionAVR ......................... 6-1


6.1 6.2 6.3 6.4 Tujuan Praktikum .............................................................................................. 6-1 Alat dan Bahan ................................................................................................. 6-1 Teori Singkat ..................................................................................................... 6-1 Langkah-langkah Percobaan ............................................................................ 6-2
6.4.1 6.4.2 Membuat Project Baru di CodeVisionAVR Menulis Program Menggunakan Pewaktu Nol 6-2 6-2

Bab 7. Komunikasi Serial USART .............................................................................. 7-1


7.1 7.2 7.3 7.4 Tujuan Praktikum .............................................................................................. 7-1 Alat dan Bahan ................................................................................................. 7-1 Teori Singkat ..................................................................................................... 7-1 Langkah-langkah Percobaan ............................................................................ 7-1
7.4.1 7.4.2 Inisiasi Port Serial Pengiriman Data ke Komputer 7-1 7-2

Bab 8. Pengukuran Tegangan DC dengan ADC Mikrokontroler............................ 8-1


8.1 8.2 8.3 8.4 9.1 9.2 9.3 9.4 Tujuan Praktikum .............................................................................................. 8-1 Alat dan Bahan ................................................................................................. 8-1 Teori Singkat ..................................................................................................... 8-1 Langkah-langkah Percobaan ............................................................................ 8-2 Tujuan Praktikum .............................................................................................. 9-1 Alat dan Bahan ................................................................................................. 9-1 Teori Singkat ..................................................................................................... 9-1 Langkah-langkah Percobaan ............................................................................ 9-1

Bab 9. Pengantar Sistem Berbasis Mikroprosesor ................................................. 9-1

. . . . . . . . . . Bab 1

Bab 1. Pengantar Pemrograman Assembler


Tujuan Praktikum
Memahami cara mengakses register.

1.1

1.2
1 2

Alat dan Bahan


Satu set PC Perangkat lunak AVR Studio 4

1.3

Teori Singkat

Mikrokontroler merupakan miniatur dari sebuah komputer. Keping IC ini biasa digunakan untuk mengendalikan suatu peralatan. Sebagaimana komputer, keping ini dapat diprogram. Salah satu bahasa yang digunakan untuk pemrograman adalah bahasa assembler. Untuk memudahkan pemahaman cara kerja suatu listing program, dapat digunakan perangkat lunak simulasi AVR Studio 4 dari Atmel yang dapat diunduh secara gratis di situs Atmel.

Gambar tampilan awal AVR Studio 4 Perangkat lunak AVR Studio 4 dapat digunakan untuk mengedit listing program dan membantu melihat isi register dan memori data. Dengan program ini dapat pula disimulasikan jalannya program langkah demi langkah mendekati kondisi yang sebenarnya.

1-1

. . . . . . . . . .
1.4
1.4.1

Langkah-langkah Percobaan
MEMBUAT PROJECT BARU DI AVR STUDIO

Untuk membuat sebuah aplikasi baru, maka kita harus membuat sebuah project baru di AVR Studio dengan langkah-langkah sebagai berikut. 1. Pilih menu Project New Project Project Type: Atmel AVR Assembler. 2. Isikan nama project di Project Name. Pastikan nama project adalah nama file inisial dan tentukan pula lokasi foldernya. 3. Lanjutkan ke langkah berikutnya dengan menekan tombol Next. 4. Pilih Debug Platform: AVR Simulator dan Device: ATMega8535. Setelah ditekan Finish, akan keluar tampilan seperti berikut.

1.4.2

MEMBUAT PROGRAM BARU

1. Tuliskan instruksi compiler direction untuk ATMega8535 sebagai berikut: .include "m8535def.inc" 2. Tentukan awal program di lokasi 0000h dengan menuliskan: .org 0x0000 3. Set nilai default untuk stack memori di akhir lokasi SRAM dengan menuliskan: ldi r16,low(ramend) out SPL,r16 ldi r16,high(ramend) out SPH,r16 4. Kompilasi program dengan menu: Build Build atau tekan F7. Dan amati jendela di Tab Build.

1-2

. . . . . . . . . .

5. Perhatikan memori yang digunakan: .cseg: code segment (memori program) dimulai dari 000000h hingga 000008h, berisi 8 bahasa mesin, menggunakan 8 byte (0,1 %) dari total 8129 byte. .dseg: data segment (memori data atau SRAM) yang diakses adalah alamat 000060h. Memori ini sebagai penunjuk stack memori. Total memori data adalah 512 byte dan belum digunakan. .eseg: data eeprom sebesar 512 byte belum digunakan.

1.4.3

DEBUGGING

1. Simulasikan program di AVR Studio dengan menggunakan menu Debug Start Debugging atau Ctrl-Shift-Alt-F5. Amati perubahan tampilan.

2. Pastikan frekuensi clock simulasi sama dengan frekuensi clock yang akan digunakan. Frekuensi clock dapat diubah pada saat debugging dengan menggunakan menu Debug AVR Simulation Options Device Selection dan ubah frekuensinya. Gunakan frekuensi 7,372800 MHz dalam simulasi ini!

1-3

. . . . . . . . . .
3. Amati isi memori program dengan menu View Memory atau Alt-4, kemudian pilih memori program. 4. Perhatikan bahwa setiap instruksi assembler yang diketik di listing akan menjadi satu word bahasa mesin dengan panjang 16 bit. Catat bahasa mesin dari keempat instruksi di tabel data pengamatan! 5. Pastikan bahwa penunjuk eksekusi program (panah kuning) berada di baris pertama instruksi sebagaimana gambar di atas. 6. Amati isi register PC (Program Counter) dan SP (Stack Pointer), juga nilai Cylce Counter dan Stop Watch. 7. Jalankan program langkah demi langkah dengan menu Debug - Step Over atau tekan F10, dan catat isi register PC dan SP, dan juga nilai Cylce Counter dan Stop Watch di tabel data pengamatan.

Pertanyaan:
1. Berapa siklus untuk mengerjakan sebuah instruksi? 2. Berapa lama waktu untuk mengerjakan sebuah instruksi dengan frekuensi clock 7,372800 MHz?

1.4.4

MENGAKSES REGISTER

1. Ketikan listing berikut ldi r16,0x12 ldi r17,0x34 mov r0,r16 mov r1,r17 2. Kompilasi program. 3. Amati eksekusi program (debugging) dengan menggunakan menu Debug Start Debugging atau Ctrl-Shift-Alt-F5. 4. Amati isi memori dengan menu View Memory atau Alt-4.

5. Ubah memori yang ditampilkan menjadi register. 6. Jalankan program langkah demi langkah dengan menu Debug - Step Over atau tekan F10. 7. Tekan F10 beberapa kali hingga penunjuk program ada di baris ldi r16,0x12.

1-4

. . . . . . . . . .

8. Tekan F10. Amati isi memori data dan catat isi lokasi mana yang berubah. 9. Ulangi langkah 8 sampai program selesai dieksekusi.

Pertanyaan & Tugas:


1. Jalankan program langkah demi langkah dan amati peruahan isi lokasi yang berubah saat mengeksekusi instruksi berikut: ldi r16,low(ramend) Mengapa r16 berisi 5F? 2. Jalankan program langkah demi langkah lagi dan amati peruahan isi lokasi yang berubah saat mengeksekusi instruksi berikut: ldi r16,high(ramend) Mengapa r16 berisi 02? 3. Apa arti 025Fheks bagi mikrokontroler ini? 4. Berapa siklus waktu untuk mengerjakan potongan listing tersebut? 5. Berapa lama waktu untuk mengerjakan potongan listing tersebut dengan frekuensi clock 7,372800 MHz? 6. Ubahlah clock frekuensi menjadi 12 MHz, berapa lama waktu untuk mengerjakan potongan listing tersebut? 7. Gantilah r16 dan r17 pada percobaan 1.4.4 dengan r2 dan r3! Amati apa yang terjadi! Mengapa?

1-5

. . . . . . . . . .
1.5
1.5.1

Data Pengamatan
DEBUGGING
Instruksi ldi r16,low(ramend) out SPL,r16 ldi r16,high(ramend) out SPH,r16 Pengamatan atas register PC dan SP. Instruksi PC SP ldi r16,low(ramend) out SPL,r16 ldi r16,high(ramend) out SPH,r16 Bahasa Mesin

Cycle Counter

Stop Watch

1.5.2

MENGAKSES REGISTER
Instruksi ldi r16,0x12 ldi r17,0x34 mov r0,r16 mov r1,r17 Isi register r0 r1 r16 r17

Kelompok Praktikum: 1. 2. 3. 4. ...................................... NIM ................. ...................................... NIM ................. ...................................... NIM ................. ...................................... NIM ................. Instruktur, Tgl. .......... ...........................

1-6

. . . . . . . . . .

Bab Bab 22. Menggunakan Mode Pengalamatan


2.1 Tujuan Praktikum
Mahasiswa dapat mengakses memori dengan beberapa mode pengalamatan.

2.2
1. 2.

Alat dan Bahan


Satu set PC Perangkat lunak AVR Studio 4

2.3

Teori Singkat

Penyalinan data dari register ke memori data dapat dilakukan dengan menggunakan instruksi sts (store direct to data space). Penyalinan data dari memori data ke register dapat dilakukan dengan menggunakan instruksi lds (load direct from data space). Kedua instruksi tersebut menggunakan register sebagai operand untuk membentuk mode pengalamatan Data Direct. Penyalinan data dari register ke memori data dan sebaliknya juga dapat dilaksanakan dengan mode pengalamatan Data Indirect. Pada mode ini dapat digunakan salah satu dari tiga pasang register sebagai penunjuk lokasi memori data. Di sini dapat digunakan instruksi st (Store Indirect). Ketiga pasang register tersebut adalah: 1. 2. 3. r26:r27 yang dapat diwakili oleh register x, r28:r29 yang dapat diwakili oleh register y, dan r30:r31 yang dapat diwakili oleh register z.

Kita dapat mengisikan beberapa lokasi memori data dengan suatu konstanta dengan menggunakan mode pengalamatan Data Indirect with Displacement. Di sini register indeks y dapat ditambah dengan suatu konstanta untuk menunjuk lokasi memori data lain. Di sini dapat digunakan instruksi std (Store Indirect with Displacement). Jika diperlukan, kita juga dapat mengisi beberapa lokasi memori data berurutan dengan suatu konstanta dengan mode pengalamatan Data Indirect Addressing with Preincrement/decrement. Di sini register indeks x, y atau z dapat dinaikkan (di-increment) atau diturunkan (di-decrement) untuk menunjuk lokasi memori data di atasnya atau di bawahnya. Di sini dapat digunakan operand x+, x-, y+, dan seterusnya.

2.4
2.4.1

Langkah-langkah Percobaan
MENGAKSES MEMORI DATA DENGAN DATA DIRECT ADDRESSING

Percobaan berikut akan mengisi lokasi memori data 0060h dengan 03h, kemudian menyalin isi lokasi memori data 0060h ke r17. 1. Tulislah potongan listing berikut di AVR Studio. ldi r16,0x03 ;load r16 with immadiate sts 0x60,r16 ;copy from register to memory lds r17,0x60 ;copy from memory to register Kompilasi program dan jalankan program langkah demi langkah.

2.

2-1

. . . . . . . . . .
3. Catat isi register dan memori data pada tabel di subbab Data Pengamatan setiap selesai menjalankan instruksi.

Pertanyaan:
1. Dapatkah mengisi lokasi memori data 0060h dengan 03h secara langsung tanpa menggunakan bantuan r16? 2. Dapatkah suatu lokasi memori data diisi suatu konstanta (immadiate) secara langsung tanpa menggunakan bantuan register?

2.4.2

MENGAKSES MEMORI DATA DENGAN DATA INDIRECT ADDRESSING

Percobaan berikut akan mengisi lokasi memori data 0060h dengan 04 dengan bantuan register penunjuk (pointer register) x, kemudian menyalin isi lokasi memori data 0060h ke r17. 1. Tulislah potongan listing berikut di AVR Studio. ldi r16,0x04 ldi r26,0x60;save target to memory location index register X st x,r16 ;copy from register to memory ld r17,x ;copy from memory to register Kompilasi program dan jalankan program langkah demi langkah. Catat isi register dan memori data pada tabel di subbab Data Pengamatan setiap selesai menjalankan instruksi.

2. 3.

Tugas:
Buatlah listing tersingkat agar memori data di lokasi 0x0060 hingga 0x6F berisi 04h!

2.4.3

MENGAKSES MEMORI DATA DENGAN DATA INDIRECT WITH DISPLACEMENT ADDRESSING

Percobaan berikut akan mengisi lokasi memori data 0060h, 0062h dan 0064h dengan 04 dengan bantuan register penunjuk y. 1. Tulislah potongan listing berikut di AVR Studio. ldi r16,0x04 ldi r28,0x60 ;save target to memory location ;index register Y st y,r16 ;copy from register to memory:0x60 std y+2,r16 ;copy from register to memory:0x62 std y+4,r16 ;copy from register to memory:0x64 Kompilasi program dan jalankan program langkah demi langkah. Catat isi register dan memori data pada tabel di subbab Data Pengamatan setiap selesai menjalankan instruksi.

2. 3.

Pertanyaan:
Bagaimana caranya agar kita dapat menyalin isi lokasi 0x60, 0x62 dan 0x64 ke register r17, r18 dan r19 dengan mode pengalamatan Data Indirect with Displacement? Instruksi apa yang digunakan?

2.4.4

MENGAKSES MEMORI DATA DENGAN DATA INDIRECT ADDRESSING WITH PREINCREMENT/DECREMENT ADDRESSING

Percobaan berikut akan mengisi lokasi memori data 0060h, 0061h dan 0062 dengan 04h dengan bantuan register penunjuk y. 1. Tulislah potongan listing berikut di AVR Studio. ldi r16,0x04 ldi r28,0x60 st y+,r16 ;copy from register to memory:0x60 st y+,r16 ;copy from register to memory:0x61

2-2

. . . . . . . . . .
st 2. 3. y+,r16 ;copy from register to memory:0x62 Kompilasi program dan dan jalankan program langkah demi langkah. Catat isi register dan memori data pada tabel di subbab Data Pengamatan setiap selesai menjalankan instruksi.

Pertanyaan:
1. Bagaimana caranya agar kita dapat menyalin isi lokasi 0x60, 0x61 dan 0x62 ke register r17, r18 dan r19 dengan mode pengalamatan Data Indirect Addressing with Preincrement/decrement Addressing? Instruksi apa yang digunakan? 2. Bagaimana caranya agar urutan pengisian memori data di percobaan di atas dibalik, yaitu dimulai dari 0x62, 0x61 dan terakhir 0x60?

2-3

. . . . . . . . . .
2.5
2.5.1

Data Pengamatan
MENGAKSES MEMORI DATA DENGAN DATA DIRECT ADDRESSING
Instruksi ldi r16,0x03 sts 0x60,r16 lds r17,0x60 Isi register r16 r17 Isi lokasi memori data 0x60

2.5.2

MENGAKSES MEMORI DATA DENGAN DATA INDIRECT ADDRESSING


Isi register Instruksi ldi r16,0x04 ldi r26,0x60 st x,r16 ld r17,x r16 r17 Isi lokasi memori data 0x60

2.5.3

MENGAKSES MEMORI DATA DENGAN DATA DIRECT ADDRESSING


Instruksi ldi r16,0x04 ldi r28,0x60 st y,r16 std y+2,r16 std y+4,r16 Isi register r16 r28 Isi lokasi memori data 0x60 0x62 0x64

2.5.4

MENGAKSES MEMORI DATA DENGAN DATA INDIRECT WITH DISPLACEMENT ADDRESSING


Instruksi ldi r16,0x04 ldi r28,0x60 st y+,r16 st y+,r16 st y+,r16
Kelompok Praktikum: 1. 2. 3. 4. ...................................... NIM ................. ...................................... NIM ................. ...................................... NIM ................. ...................................... NIM ................. Instruktur, Tgl. .......... ...........................

Isi register r16 r28

Isi lokasi memori data 0x60 0x61 0x62

2-4

. . . . . . . . . .

Bab Bab 33. Menggunakan Port I/O


3.1 Tujuan Praktikum
Agar mahasiswa dapat menggunakan port I/O sesuai dengan kebutuhan.

3.2
1. 2. 3. 4.

Alat dan Bahan


Satu set PC. Perangkat lunak AVR Studio 4. Satu set pengunduh K-125 dan sistem minimal ATMega8535. Satu buah multimeter.

3.3

Teori Singkat

Mikrokontroler ATMega8535 mempunyai 4 buah port I/O paralel, yaitu Port A, Port B, Port C dan Port D. Keempat port tersebut membentuk 32 pin port dengan nama PA0, PA1, hingga PD7 sebagaimana gambar di samping. Semua pin dapat difungsikan sebagai pin port masukan atau keluaran. Semua pin terhubung dengan data bus melalui sebuah penyangga yang dibentuk oleh flip-flop D. Terdapat beberapa flip-flop D pada sebuah pin. Setiap flip-flop D membentuk sebuah register yang dapat ditulis atau dibaca. Setiap register mempunyai fungsi khusus untuk keberlangsungan transmisi data dari data bus ke sebuah pin atau sebaliknya.

3-1

. . . . . . . . . .

Daftar fungsi setiap register dapat dilihat pada tabel fungsional di bawah ini.

Dari tabel tersebut, maka sebuah pin port dapat difungsikan sebagai pin masukan atau pin keluaran dengan beberapa pilihan (option). Register DDR (Data Direction Register) berfungsi untuk menentukan arah aliran data. Arah data akan keluar jika pin difungsikan sebagai keluaran, dan arah data akan masuk jika pin difungsikan sebagai masukan. Register ini dapat dibaca dan ditulis. Register PORT digunakan untuk menentukan data yang akan dikeluarkan. Register ini juga dapat dibaca dan ditulis. Sedangkan register PIN akan berisi data yang masuk dari port. Register ini hanya dapat dibaca saja.

3.4
3.4.1

Langkah-langkah Percobaan
MENJADIKAN PIN SEBAGAI PORT KELUARAN

Percobaan berikut akan mengeluarkan logika 0 dan 1 pada PORTC2 dan PORTC3, kemudian membaca data di PORTC dan menyimpannya di r18. 1. Tulislah potongan listing berikut. ldi r16,0b00001100 ;set output to pin 2 and 3 ldi r17,0b00000100 ;set '0' to pin 2 and '1' to pin 3 out ddrc,r16 out portc,r17 nop ;no-operation in r18,pinc ;read port, save to r18

3-2

. . . . . . . . . .
2. 3. 4. Kompilasi program dan buka jendela port dengan menu View Toolbars I/O. Dan buka PORTC dengan mengklik tanda + di depan icon PORTC. Jalankan program langkah demi langkah. Catat isi register DDRC, PINC dan PORTC pada tabel di subbab Data Pengamatan setiap selesai menjalankan instruksi.

Pertanyaan:
Apa guna disisipkan instruksi nop? Bagaimana jika instruksi tersebut dihilangkan? Mengapa?

3.4.2

MENJADIKAN PIN SEBAGAI PORT MASUKAN

Percobaan berikut akan menjadikan PORTC7 ~ PORTC4 sebagai masukan, kemudian membaca data di PORTC dan menyimpannya di r18. 1. Jalankan kembali program di subbab 3.4.1 langkah demi langkah. 2. Setelah menjalankan instruksi nop, isikan data 1 ke PINC bitke-4, 5, 6, 7 dengan mengklik bit-bit tersebut sebagaimana gambar di samping. 3. Jalankan instruksi in r18,pinc. 4. Catat isi register r18!

Pertanyaan:
Pada sebuah port, dapatkah beberapa pin dijadikan port keluaran sementara itu beberapa pin dijadikan port masukan? Bagaimana caranya?

3.4.3

MENJADIKAN PORT I/O SEBAGAI CURRENT SOURCE DAN CURRENT SINK


Vcc 330

Percobaan berikut akan mengeluarkan logika 0 dan 1 pada PORTC2 dan PORTC3. Kedua pin port tersebut akan bertindak sebagai current source dan current sink. 1. Unduhlah program di percobaan 3.4.1 ke mikrokontroler ATMega8535 menggunakan perangkat lunak AVR Prog atau Avr-Osp II. 2. Hubungkan PORTC2 dan PORTC3 sebagaimana gambar disamping. 3. Amati nyala kedua LED.

ATMega8535

LED1 PC3 PC2 330 LED2

Pertanyaan:
Berapa arus maksinal yang dapat dikeluarkan atau ditarik oleh sebuah pin?

3.4.4

MEMBERI DATA KE PORT MASUKAN

Percobaan berikut akan menjadikan PORTC7 ~ PORTC4 sebagai masukan dan PORTC3 dan PORTC2 sebagai keluaran sebagaimana percobaan sebelumnya. Data dari PORTC akan disimpan di r18 dan dikeluarkan ke PORTD. 1. Tambahkan beberapa instruksi pada percobaan 3.4.1 menjadi sebagai berikut. ldi r16,0b00001100 ;set output to pin 2 and 3 ldi r17,0b00000100 ;set '0' to pin 2 and '1' to pin 3 out ddrc,r16 out portc,r17 nop ;no-operation in r18,pinc ;read port, save to r18

3-3

. . . . . . . . . .
ldi r16,0b11111111 ;set output to PORTB out ddrd,r16 out portd,r18 2. Kompilasi program dan amati isi register PORTC. 3. Jalankan program langkah demi langkah. 4. Setelah menjalankan instruksi nop, isikan data 1 ke PINC bitke-4, 5, 6, 7 dengan mengklik bit-bit tersebut sebagaimana percobaan 3.4.2. 5. Jalankan instruksi in r18,pinc. Isi register r18 mestinya sama dengan pada percobaan 3.4.2. 6. Jalankan program hingga baris terakhir dan catat isi register untuk PORTD. 7. Unduh program ke mikrokontroler. 8. Cek logika keluaran setiap pin di PORTD dengan menggunakan voltmeter (0 jika tegangan pin = 0 V, dan 1 untuk jika tegangan pin = 5 V). Catat data di PORTD sebagai data awal. 9. Beri masukan PORTC4 ~ PORTC7 dengan logika 1 dan PORTC0 ~ PORTC1 dengan logika 0 (hubungkan pin PORTC0 ~ PORTC1 ke Ground). 10. Catat data di PORTD saat ini sebagai data akhir. 11. Ubah-ubahlah data di PORTC4 ~ PORTC7 dan amati data di PORTD!

Pertanyaan:
1. Apakah data di PORTD selalu sama dengan data di PORTC? 2. Gambarkan diagram alir (flowchart) program yang sedang dieksekusi mikrokontroler!

3-4

. . . . . . . . . .
3.5
3.5.1

Data Pengamatan
MENJADIKAN PIN SEBAGAI PORT KELUARAN
Instruksi ldi r16,0b00000011 ldi r17,0b00000001 out ddrc,r16 out portc,r17 nop in r18,pinc DDRC Isi register PORTC PINC

3.5.2

MENJADIKAN PIN SEBAGAI PORT MASUKAN


Isi r18 = ... .

3.5.3

MENJADIKAN PORT I/O SEBAGAI CURRENT SINK DAN CURRENT SOURCE


LED1 ............................(menyala/padam) LED2 ............................(menyala/padam)

3.5.4

MEMBERI DATA KE PORT MASUKAN


DDRD PIND = =

Hasil Simulasi:

PORTD = Hasil di mikrokontroler: Data awal PORTD Data akhir PORTD = =

Kelompok Praktikum: 1. 2. 3. 4. ...................................... NIM ................. ...................................... NIM ................. ...................................... NIM ................. ...................................... NIM ................. Instruktur, Tgl. .......... ...........................

3-5

. . . . . . . . . . Bab 44. Menggunakan Pewaktu/Pencacah Bab


4.1 Tujuan Praktikum

Agar mahasiswa dapat menggunakan pewaktu/pencacah (timer/counter) sesuai dengan kebutuhan.

4.2
1. 2. 3. 4.

Alat dan Bahan


Satu set PC. Perangkat lunak AVR Studio 4. Satu set pengunduh K-125 dan sistem minimal ATMega8535. Satu buah osiloskop.

4.3

Teori Singkat

Dapat dipastikan bahwa hampir semua mikroprosesor dan mikrokontroler mempunyai fasilitas pewaktu/pencacah (timer/counter). Mikrokontroler ATMega8535 mempunyai 3 buah pewaktu/pencacah, yaitu pewaktu/pencacah 0, 1, dan 2. Semua pewaktu/pencacah tersebut dapat difungsikan sebagai pewaktu (timer) atau pencacah (coounter). Perangkat ini dapat difungsikan sebagai pewaktu atau pencacah. Sebagaimana gambar blok diagram di bawah, pemilihan fungsi perangkat ini ditentutan oleh Clock Select yang akan menentukan clkTn apakah berasal dari prescaler (clock CPU yang telah dilewatkan ke prescaler) atau berasal dari Tn (clock dari luar).

Blok diagram pewaktu secara umum Setiap terjadi isyarat clkTn, maka sebuah nilai TCNTn secara otomatis akan bertambah satu digit (increment) atau pada beberapa pewaktu dapat berkurang satu digit (decrement). Pewaktu/pencacah 0 dan 2 merupakan pewaktu/pencacah 8 bit, sehingga

4-1

. . . . . . . . . .
TCNT0 dan TCNT2 merupakan register 8 bit; sedangkan pewaktu/pencacah 1 merupakan pewaktu/pencacah 16 bit, sehingga TCNT1 merupakan register 16 bit yang terdiri dari dua register 8 bit TCNT1A dan TCNT1B. Pada saat di TCNTn terjadi luapan (overflow) yaitu bernilai 0xFFh (pada saat menghitung naik) atau bernilai nol (pada saat menghitung turun), maka akan diberikan isyarat ke Control Logic. Perangkat ini akan memberikan aksi tertentu yang dapat ditentukan oleh register TCCRn, misalnya terjadi isyarat interupsi. Aksi di Control Logic juga dapat dibangkitkan jika terjadi peristiwa lain. Pada saat nilai TCNTn bertambah atau berkurang, jika nilai TCNTn sama dengan nilai OCRn, maka Control Logic juga dapat terpicu untuk melakukan aksi tertentu, misalnya: terjadi interupsi, mengeset atau mereset OCn, dan mengeset atau mereset TCNTn. Nilai OCRn dapat diubah-ubah. Dengan mengubah-ubah nilai register tersebut dapat dibentuk untai pembentuk gelombang (Waveform Generator). Semua pewaktu dapat berjalan secara mandiri (independent). Secara umum, jalannya sebuah pewaktu tidak akan mempengaruhi jalannya pewaktu lain. Bahkan jalannya pewaktu tidak akan mempengaruhi jalannya program utama. Jalannya pewaktu/pencacah dan efeknya terhadap program utama dapat ditentukan dengan mengisi beberapa nilai pada register kontrol pewaktu/pencacah. Semua register kontrol pewaktu/pencacah merupakan register I/O, sehingga akses ke register-register tersebut menggunakan instruksi in dan out.

4.3.1

PEWAKTU/PENCACAH 0

Pewaktu 0 merupakan pewaktu 8 bit. Jika pewaktu ini diaktifkan, maka nilai sebuah register bernama TCNT0 akan naik satu digit setiap adanya clock pewaktu. Clock pewaktu dapat ditentukan sebelum pewaktu dijalankan. Register TCNT0 mempunyai nilai awal 0 dan isinya dapat dibaca atau ditulisi (read/write, R/W). Perhatikan gambar berikut.

Jalannya pewaktu/pencacah 0 dapat dikendalikan dengan mengeset nilai register TCCR0 (Timer/Counter Control Register 0) dan TIMSK (Timer/Counter Interrupt Mask). Deskripsi setiap bit pada register TCCR0 dapat dilihat pada gambar berikut.

Bit Bit Bit Bit

Keterangan: 7 FOC0 : Force Output Compare 6, 3 WGM01:0: Waveform Generation Mode 5:4 COM01:0 : Compare Match Output Mode 2:0 CS02:0 : Clock Select Bit-bit CS0 dapat menentukan frekuensi clock pewaktu berdasar tabel berikut.

4-2

. . . . . . . . . .

Hasil pencacahan yang dilakukan oleh pewaktu 0 dapat dilihat pada register bit 1 dan bit 0 register TIFR (Timer/Counter Interrupt Flag). Lihat gambar berikut.

Keterangan: Bit 1 OCF0: Output Compare Flag 0 Bit 0 TOV0: Timer/Counter0 Overflow Flag

4.3.2

PEWAKTU 0 SEBAGAI PENUNDA DENGAN METODE LUAPAN (OVERFLOW)

Pewaktu sering difungsikan sebagai penunda eksekusi suatu baris program. Algoritma penundaan paling sederhana untuk keperluan ini sebagai berikut: 1. Set nilai awal pewaktu 0 (TCNT0) ke 00h. 2. Set nilai register kontrol pewaktu 0 (TCCR0) sebagai berikut: a. b. c. d. Matikan bit FOC0. Set bit WGM0 ke mode normal: 00. Set COM0 ke operasi port normal: 00. Isi bit-bit CS0, maka pewaktu akan aktif.

3. Tunggu hingga bit TOV0 pada TIFR diset. Pada saat TCNT0 berubah dari 0xFF ke 0x00, maka secara otomatis bit TOV0 akan diset. Jika pewaktu ini akan digunakan kembali, matikan bit TOV0 dengan memberikan logika 1.

4.3.3

PEWAKTU 0 SEBAGAI PENUNDA DENGAN METODE PEMBANDINGAN (MATCH COMPARE)

Pewaktu lebih sering difungsikan dengan mode match compare. Algoritma penundaan paling sederhana untuk keperluan ini sebagai berikut: 1. Set nilai awal pewaktu 0 (TCNT0) ke 00h. 2. Set nilai pembanding ke OCR0. 3. Set nilai register kontrol pewaktu 0 (TCCR0) sebagai berikut: a. b. c. d. Matikan bit FOC0. Set bit WGM0 ke mode CTC (Clear Timer on Compare Match): 10. Set COM0 ke operasi port normal: 00. Isi bit-bit CS0, maka pewaktu akan aktif.

4. Tunggu hingga bit OCF0 pada TIFR diset. Pada saat TCNT0 = OCR0, maka secara otomatis bit OCF0 akan diset. Jika pewaktu ini akan digunakan kembali, matikan bit OCF0 dengan memberikan logika 1.

4-3

. . . . . . . . . .
4.4
4.4.1

Langkah-langkah Percobaan
PEWAKTU 0 SEBAGAI PENUNDA DENGAN METODE LUAPAN (OVERFLOW)

Pada percobaan ini, pewaktu 0 akan difungsikan sebagai penunda berubahnya logika keluaran di port C pin 2 dan 3. 1. Tulislah potongan listing berikut. .include "m8535def.inc" .def tmp=r16 .org 0x0000 rjmp main Timer: ldi tmp,0b00000000 out tcnt0,tmp ldi tmp,0b00000000 out timsk,tmp ldi tmp,0b00000001 out tccr0,tmp ret Main: ldi tmp,low(ramend) out SPL,tmp ldi tmp,high(ramend) out SPH,tmp ldi r16,0b00001100 ;set output to pin 2 and 3 ldi r17,0b00000100 ;set '0' to pin 2, '1' to pin 3 out ddrc,r16 out portc,r17 rcall Timer Loop: in tmp,tifr sbrs tmp,0 rjmp loop ori tmp,0b00000001 out tifr,tmp in tmp,PORTC ldi r17,0b00001100 eor tmp,r17 out portc,tmp rjmp loop Kompilasi program. Jalankan program langkah demi langkah. Pada saat akan menjalankan instruksi rcall mengggunakan menu Debug Step Into atau F11. 5. Pada saat akan menjalankan ret, lihatlah isi seting pada TIMER_COUNTER_0 di jendela I/O View. Pastikan pewaktu dijalankan dengan clock pewaktu = clock CPU (No Prescalling). Pastikan juga isi register OCR0, TCCR0, TCNT0 dan TIFR seperti yang tertampil di gambar tersebut. Buka jendela port PORTC dan catat data di PORTC sebagai data awal PORTC. Catat nilai register TCNT0, siklus prosesor (Cycle Counter), dan waktu yang telah digunakan prosesor (Stop Watch). Jalankan program dengan Step Over (F10) hingga nilai TCNT0 naik satu. Timer, masuklah ke rutin Timer

2. 3. 4.

6.

7. 8.

9.

10. Ulangi langkah 7 dan 8 hingga semua baris

4-4

. . . . . . . . . .
pada tabel di Data pengamatan terisi semua. 11. Jalankan program hingga instruksi out portc,tmp dengan mengeklik baris sesudah instruksi tersebut dan perintah Debug Run to Cursor (Ctrl-F10). 12. Perhatikan isi PORTC! Catat nilai siklus dan waktu terjadinya perubahan pada PORTC (lihat Cycle Counter dan Stop Watch). 13. Ulangi langkah 11 dan 12 hingga baris di data tabel kebenaran terisi semua. 14. Unduhlah program tersebut ke mikrokontroler! 15. Gambarkan grafik gelombang keluaran di port C pin 2 dan 3 dengan osiloskop.

Pertanyaan:
1. Hitunglah selang waktu berubahnya logika port C pin 2 dan 3 pada simulasi menggunakan AVR Studio dan kenyataan setelah program diunduh ke mikrokontroler! 2. Berapa periode gelombang kotak yang terjadi? 3. Gambarkan diagram alir (flowchart) program yang sedang dieksekusi mikrokontroler!

4.4.2

PEWAKTU 0 SEBAGAI PENUNDA DENGAN METODE PEMBANDINGAN (MATCH COMPARE)

Pada percobaan ini, pewaktu 0 akan difungsikan sebagai penunda berubahnya logika keluaran di port C pin 2 dan 3. 1. Gantilah subrutin Timer: ldi out ldi out ldi out ldi out ret Timer pada percobaan 4.4.1 dengan berikut. tmp,0b00000000 tcnt0,tmp tmp,0b00000000 timsk,tmp tmp,0b00100000 ocr0,tmp ;count 216 cycles tmp,0b00001001 tccr0,tmp

2. 3. 4. 5. 6. 7. 8. 9.

Kompilasi program. Jalankan program langkah demi langkah. Setelah menjalankan rcall Timer (kursor di baris berikutnya), catat isi register OCR0. Buka jendela port PORTC dan catat data di PORTC sebagai data awal PORTC. Jalankan program dengan Step Over (F10) hingga nilai TCNT0 mendekati OCR0. Pada saat nilai TCNT0 = OCR0, perhatikan isi register TIFR. Tekan F10 dan catat isi register TIFR dan TCNT0. Jalankan program hingga instruksi out portc,tmp dengan mengeklik baris sesudah instruksi tersebut dan memberikan perintah Debug Run to Cursor (Ctrl-F10).

10. Perhatikan isi PORTC! Catat nilai siklus dan waktu terjadi perubahan pada PORTC (lihat Cycle Counter dan Stop Watch). 11. Ulangi langkah 10 dan 11 hingga baris di data tabel kebenaran terisi semua. 12. Unduhlah program tersebut ke mikrokontroler! 13. Gambarkan grafik gelombang keluaran di port C pin 2 dan 3 dengan osiloskop.

Pertanyaan & Tugas:


1. Hitunglah selang waktu berubahnya logika port C pin 2 dan 3 pada simulasi menggunakan AVR Studio dan kenyataan setelah program diunduh ke mikrokontroler!! 2. Berapa periode gelombang kotak yang terjadi? 3. Gambarkan diagram alir (flowchart) program yang sedang dieksekusi mikrokontroler! 4. Buatlah periode gelombang kotak yang terjadi menjadi 2 kalinya!

4-5

. . . . . . . . . .
4.5
4.5.1

Data Pengamatan
PEWAKTU 0 SEBAGAI PENUNDA DENGAN METODE LUAPAN (OVERFLOW)
Data awal di PORTC = Nilai TCNT0 0x00 0x 0x 0x 0x Waktu pada saat berubahnya isi PORTC: Nilai Siklus Waktu (s) Siklus Prosesor Waktu yang telah digunakan (s)

Gambar di osiloskop:

4.5.2

PEWAKTU 0 SEBAGAI PENUNDA DENGAN METODE PEMBANDINGAN (MATCH COMPARE)


Data OCR0 = Data awal di PORTC = Waktu pada saat berubahnya isi PORTC: Isi PORTC Nilai Siklus Waktu (s)

Gambar di osiloskop:
Kelompok Praktikum: 1. 2. 3. 4. ...................................... NIM ................. ...................................... NIM ................. ...................................... NIM ................. ...................................... NIM ................. Instruktur, Tgl. .......... ...........................

4-6

. . . . . . . . . . Bab 55. Menggunakan Interupsi Bab


5.1 Tujuan Praktikum
Agar mahasiswa dapat menggunakan fasilitas interupsi dengan benar.

5.2
1. 2. 3. 4.

Alat dan Bahan


Satu set PC. Perangkat lunak AVR Studio 4. Satu set pengunduh K-125 dan sistem minimal ATMega8535. Satu buah osiloskop.

5.3

Teori Singkat

Interupsi merupakan suatu fasilitas yang dapat memaksa prosesor untuk mengerjakan suatu rutin. Terdapat beberapa kejadian yang menyebabkan prosesor mandapat isyarat interupsi. Misalnya penekanan tombol reset. Penekanan tombol ini akan menyebabkan prosesor terkena interupsi yang bersumber dari RESET. Sebagaimana terlihat pada tabel di bawah, interupsi RESET mempunyai alamat program (program address) 0x000, sehingga pada saat prosesor terkena interupsi ini, maka akan langsung mengeksekusi instruksi di memori program beralamat 0x000. Seluruh interupsi yang ada diberi identitas dengan nomor vektor sesuai tabel berikut ini.

5-1

. . . . . . . . . .
5.3.1 INTERUPSI DARI PEWAKTU 0
Pewaktu 0 dapat memberikan isyarat interupsi. Sesuai dengan tabel di atas, pewaktu 0 dapat memberikan interupsi TIMER0 OVF dan TIMER0 COMP. Interupsi pertama akan terpicu jika terjadi luapan (overflow); sedang interupsi kedua akan terpicu jika terjadi match compare pada pewaktu 0. Rutin layanan interupsi (Interrupt Service Routine, ISR) TIMER0 OVR diletakkan di lokasi memori program 0x009; sedangkan ISR TIMER COMP di lokasi memori program 0x013. Pengaktifan interupsi dari pewaktu/pencacah 0 menggunakan seting bit 1 dan bit 0 pada register TIMSK sebagaimana gambar berikut.

Keterangan: Bit 1 OCIE0: Timer/Counter0 Output Compare Match Interrupt Enable Bit 0 TOIE0: Timer/Counter0 Overflow Interrupt Enable

5.4
5.4.1

Langkah-langkah Percobaan
INTERUPSI TERPICU MATCH COMPARE DI PEWAKTU 0

Pada percobaan ini, terjadinya match compare di pewaktu 0 akan memicu terjadinya interupsi TIMER0 COMP. ISR TIMER0 COMP berfungsi sebagai pengubah logika keluaran di port C pin 2 dan 3. Waktu tunda berubahnya kedua pin tersebut mestinya sama dengan waktu tunda pada percobaan 4.4.2. 1. Tulislah potongan listing berikut. .include "m8535def.inc" .def tmp=r16 .org 0x000 rjmp .org 0x013 rjmp Timer: ldi out ldi out ldi out ldi out sei ret Main: ldi out ldi out ldi out ldi out rcall Loop: rjmp main ISR tmp,0b00000000 tcnt0,tmp tmp,0b00000010 timsk,tmp tmp,0b00100000 ocr0,tmp ;count 216 cycles tmp,0b00001001 tccr0,tmp

tmp,low(ramend) SPL,r16 tmp,high(ramend) SPH,r16 tmp,0b00001100 ;set output to pin 2 and 3 ddrc,tmp tmp,0b00000100 ;set '0' to pin 2, '1' to pin 3 portc,tmp Timer Loop

5-2

. . . . . . . . . .
ISR: in ldi eor out reti 2. 3. 4. 5. 6. 7. 8. 9. tmp,portc r17,0b00001100 tmp,r17 portc,tmp

Kompilasi program. Jalankan program langkah demi langkah. Setelah menjalankan rcall Timer (kursor di baris berikutnya), catat isi register OCR0. Buka jendela port PORTC dan catat data di PORTC sebagai data awal PORTC. Jalankan program dengan Step Over (F10) hingga nilai TCNT0 mendekati OCR0. Pada saat nilai TCNT0 = OCR0, perhatikan isi register TIFR. Tekan F10 dan catat isi register TIFR dan TCNT0. Jalankan program hingga instruksi out portc,tmp dengan mengeklik baris sesudah instruksi tersebut dan memberikan perintah Debug Run to Cursor (Ctrl-F10).

10. Perhatikan isi PORTC! Catat nilai siklus dan waktu terjadi perubahan pada PORTC (lihat Cycle Counter dan Stop Watch). 11. Ulangi langkah 10 dan 11 hingga baris di data tabel kebenaran terisi semua. 12. Unduhlah program tersebut ke mikrokontroler! 13. Gambarkan grafik gelombang keluaran di port C pin 2 dan 3 dengan osiloskop.

Pertanyaan:
1. Hitunglah selang waktu berubahnya logika port C pin 2 dan 3! 2. Berapa periode gelombang kotak yang terjadi? 3. Gambarkan diagram alir (flowchart) program yang sedang dieksekusi mikrokontroler!

5-3

. . . . . . . . . .
5.5 Data Pengamatan
Data OCR0 = Data awal di PORTC = Pada saat nilai TCNT0 = OCR0, isi register TIFR = Waktu pada saat berubahnya isi PORTC: Isi PORTC Nilai Siklus Waktu (s)

Gambar di osiloskop:

Kelompok Praktikum: 1. 2. 3. 4. ...................................... NIM ................. ...................................... NIM ................. ...................................... NIM ................. ...................................... NIM ................. Instruktur, Tgl. .......... ...........................

5-4

. . . . . . . . . . Bab 6

Bab 6. Pengantar Pemrograman Menggunakan CodeVisionAVR


Tujuan Praktikum
Memahami cara mengakses register.

6.1

6.2

Alat dan Bahan

1. Satu set PC 2. Perangkat lunak CodeVisionAVR

6.3

Teori Singkat

Untuk membentuk aplikasi yang lebih kompleks, bahasa pemrograman tingkat rendah kadang sudah tidak memadai. Maka dapat digunakan bahasa tingkat menengah. Salah satu bahasa tingkat menengah yang sering digunakan adalah bahasa C. Dan salah satu kompilernya adalah CodeVisionAVR. Perangkat lunak ini dapat digunakan untuk menulis dan mengedit listing program. Namun program ini tidak dapat mensimulasikan jalannya program.

Gambar 6.1 Tampilan awal CodeVision 2.05.0 Sebagaimana bahasa pemrograman C, pada sebuah program kita dapat menggunakan beberapa variabel yang kita definisikan sendiri dengan ukuran bit yang sesuai. Namun dalam praktek direkomendasikan untuk menggunakan ukuran sekecil mungkin agar lisgting program dapat dieksekusi lebih cepat.

6-1

. . . . . . . . . .
Tipe bit bool, _Bool char unsigned char signed char int short int unsigned int signed int long int unsigned long int signed long int float double Ukuran (Bit) 1 8 8 8 8 16 16 16 16 32 32 32 32 32 Kisaran 0,1 0,1 -128 ~ 127 0 ~ 255 -128 ~ 127 -32768 ~ 32767 -32768 ~ 32767 0 ~ 65535 -32768 ~ 32767 -2147483648 ~ 2147483647 0 ~ 4294967295 -2147483648 ~ 2147483647 1.175e-38 ~ 3.402e38 1.175e-38 ~ 3.402e38

6.4
6.4.1

Langkah-langkah Percobaan
MEMBUAT PROJECT BARU DI CODEVISIONAVR

Untuk membuat sebuah aplikasi baru secara mudah, kita dapat menggunakan Wizard dengan langkah-langkah sebagai berikut. 1. Dari tampilan utama jendela CodeVision pilih menu Tools CodeWizardAVR dan pilih chip mikrokontroler yang akan digunakan yaitu Atmega dan tekan OK. Dalam praktek kita gunakan mikrokontroler ATmega8535 menggunakan clock 7,372800 MHz sehingga pada pilihan Chip pilihlah ATmega8535 dan Clock 7,372800 MHz. 2. Untuk melihat listing yang akan dihasilkan wizard, pilih menu Program Preview. 3. Klik Program Generate, Save, and Exit. 4. Pada jendela editor akan muncul listing awal yang diberikan CodeVision. 5. Secara default, program sudah berisi inisiasi seluruh port, pewaktu, interupsi dan beberapa perangkat pendukung lain.

6.4.2

MENULIS PROGRAM MENGGUNAKAN PEWAKTU NOL

Pada percobaan ini, pewaktu 0 akan difungsikan sebagai penunda berubahnya logika keluaran di port C. 1. Buka kembali menu Tools CodewWizardAVR, pilih chip ATmega8535 dan clock 7,372800 MHz. 2. Pilih Timers Timer0. 3. Pilih Clock Sources: System Clock, Clock Value: 7200 kHz, Mode: CTC top=OCR0, Output: Disconnected. 4. Isikan nilai Compare 47 (berarti 47heks) 5. Aktifkan Compare Match Interrupt dengan memberi tanda pada ceck box di depannya. 6. Klik Program Generate, Save, and Exit. 7. Jadikan PORTC sebagai port keluaran dengan mengganti isi DDRC menjadi 0xff sebagaimana listing di halaman berikutnya.

6-2

. . . . . . . . . .
8. Tuliskan PORTC=~PINC; pada fungsi interrupt [TIM0_COMP] void timer0_comp_isr(void) seperti listing di bawah. 9. Kompilasi program menggunakan menu Project Build All. Unduh file hex ke mikrokontroler. 10. Lihat grafik gelombang yang terjadi di PORTC menggunakan osiloskop.

Pertanyaan:
1. Hitunglah selang waktu berubahnya logika port C! 2. Berapa periode gelombang kotak yang terjadi? 3. Buatlah diagram alir program! /***************************************************** This program was produced by the CodeWizardAVR V2.05.0 Professional Automatic Program Generator Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Version : Date : 05/04/2012 Author : Company : Comments: Chip type : ATmega8535L Program type : Application AVR Core Clock frequency: 7,372800 MHz Memory model : Small External RAM size : 0 Data Stack size : 128 *****************************************************/ #include <mega8535.h> // Timer 0 output compare interrupt service routine interrupt [TIM0_COMP] void timer0_comp_isr(void) { // Place your code here PORTC=~PINC; } // Declare your global variables here 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 6-3

. . . . . . . . . .
// 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=0xff; // 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=0x00; DDRD=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 7,200 kHz // Mode: CTC top=OCR0 // OC0 output: Disconnected TCCR0=0x0D; TCNT0=0x00; OCR0=0x47; // 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=0x02; // USART initialization // USART disabled

6-4

. . . . . . . . . .
UCSRB=0x00; // 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; // Global enable interrupts #asm("sei") while (1) { // Place your code here } }

6-5

. . . . . . . . . . Bab 77. Komunikasi Serial USART Bab


7.1 Tujuan Praktikum
Agar mahasiswa dapat menggunakan fasilitas komunikasi serial USART.

7.2

Alat dan Bahan

1. Satu set PC. 2. Perangkat lunak CodeVisionAVR. 3. Satu set pengunduh K-125 dan sistem minimal ATMega8535.

7.3

Teori Singkat

UART (Universal Asyncrhronous Receiver/Transmitter) merupakan salah satu metode untuk komunikasi serial pada sebuah komputer. Komunikasi biasanya terselenggara menggunakan port serial. Port ini dapat dihubungkan ke port USB melalui sebuah konverter. Salah satu perangkat lunak bawaan Windows yang dapat menyelenggarakan komunikasi serial dengan port USB adalah Hyperterminal. Saat ini banyak mikrokontroler yang menambahkan fasilitas ini untuk melakukan komunikasi serial ke komputer. Mikrokontroler ATmega8535 selain dapat melakukan komunikasi tak-sinkron, dapat pula melakukan komunikasi sinkron. Mikrokontroler ini dapat melakukan komunikasi dengan metode USART (Universal Synchronous/Asyncrhronous Receiver/Transmitter). Format data yang digunakan seperti gambar di bawah ini.

Dalam kondisi tidak ada transmisi data (idle), logika di jalur transmisi dapat 0 atau 1. Pengiriman data didahului oleh Start-bit, baru kemudian data dikirim. Data dapat menggunakan format 5 hingga 9 bit. Pengiriman data diakhiri dengan Stop-bit yang dapat mempunyai panjang 1 hingga 2 bit. Data dari mikrokontroler dapat dikirim ke komputer menggunakan port serial. Salah satu perangkat lunak di komputer yang dapat digunakan untuk berkomunikasi dengan metode USART adalah hyperterminal. Perangkat lunak ini ada di sistem operasi Windows XP dan generasi sebelumnya. Bagi pengguna Windows Vista dan 7 dapat mengunduh di internet. Pengiriman dan penerimaan data melalui port serial dapat dilakukan dengan mengisi dan mengambil data di register UDR. UDR=data; //mengirim data ke port serial data=UDR; //data yang diterima dimasukkan ke variabel data

7.4
7.4.1

Langkah-langkah Percobaan
INISIASI PORT SERIAL

Pada percobaan ini akan diinisiasi port serial yang digunakan untuk berkomunikasi antara komputer dengan mikrokontroler. Sebelumnya, installah driver untuk kit K-125 dengan sebagai berikut.

7-1

. . . . . . . . . .
1. Tancapkan koneksi kabel USB kit K-125 ke port USB. 2. Ubah saklar pada K-125 ke Komunikasi Serial.
Komunikasi Serial Unduh Program

3. Ikuti petunjuk di Windows dan arahkan untuk menginstal driver K-125 (untuk pengguna Windows 7, pakailah driver untuk Windows 7. 4. Lihatlah di Device Manager nomor Port COM yang digunakan. Catat nomor Port COM yang digunakan.

7.4.2

PENGIRIMAN DATA KE KOMPUTER

Percobaan ini akan menjadikan mikrokontroler mengirim data berupa karakter ASCII A. Ikuti langkah-langkah pembuatan program menggunakan CodeVisionAVR berikut. 1. Buka Tools CodeWizardAVR, pilih chip ATmega8535 dan clock 7,372800 MHz 2. Pilih USART, enable-kan Transmitter, baud rate = 9600 dengan parameter komunikasi 8 data 1 stop no parity, mode asynchronous. 3. Pilih: Program Generate, Save, and Exit. 4. Ketikan listing berikut di bawah komentar // Place your code here sebagaimana listing di halaman berikutnya. delay_ms(100); UDR='A'; 5. Tambahkan pengarah prosesor #include #include <stdio.h> seperti pada contoh listing. 7. Ubah saklar di K-125 ke Komunikasi Serial. 8. Jalankan perangkat lunak Hyperterminal. 9. Beri nama koneksi pada form Connections Description (nama bebas). 10. Pilih port koneksi yang akan digunakan pada form Connect to. 11. Tentukan properti koneksi dengan mengeset pesat data = 9600 bps, format data = 8 bit, bit paritas = tidak ada (none), bit stop = 1, dan flow control = none. <delay.h> di bawah pengarah

6. Unduh program (jangan lupa ubah saklar di K-125 ke Unduh Program).

7-2

. . . . . . . . . .

12. Pilih menu Call dan lihat tampilan layar Hyperterminal.

Pertanyaan/Tugas
1. Apa yang terjadi jika setting pesat data di Hyperterminal diubah menjadi 19200 bps atau yang lain? Mengapa demikian? 2. Jelaskan maksud dua baris yang diketik dalam langkah nomor 4 tadi! 3. Buatlah diagram alir program yang telah dibuat! 4. Bukalah file text delay.h! Apa fungsi pemanggilan file tersebut melalui perintah #include <delay.h>?

7-3

. . . . . . . . . .
Listing progam untuk pengiriman data ke port serial melalui kabel USB. /***************************************************** This program was produced by the CodeWizardAVR V2.05.0 Evaluation Automatic Program Generator Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Version : Date : 07/04/2012 Author : Freeware, for evaluation and non-commercial use only Company : Comments: Chip type : ATmega8535 Program type : Application AVR Core Clock frequency: 7,372800 MHz Memory model : Small External RAM size : 0 Data Stack size : 128 *****************************************************/ #include <mega8535.h> // Standard Input/Output functions #include <stdio.h> #include <delay.h> // Declare your global variables here 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=0x00; // 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=0x00; DDRD=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped

7-4

. . . . . . . . . .
// 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: Off // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00; UCSRB=0x08; UCSRC=0x86; UBRRH=0x00; UBRRL=0x2F; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80;

7-5

. . . . . . . . . .
SFIOR=0x00; // ADC initialization // ADC disabled ADCSRA=0x00; // SPI initialization // SPI disabled SPCR=0x00; // TWI initialization // TWI disabled TWCR=0x00; while (1) { // Place your code here UDR='A'; delay_ms(100); } }

7-6

. . . . . . . . . . Bab 8
8.1

Bab 8. Pengukuran Tegangan DC dengan ADC Mikrokontroler


Tujuan Praktikum

Agar mahasiswa dapat menggunakan ADC mikrokontroler untuk pengukuran tegangan DC.

8.2

Alat dan Bahan

1. Satu set power supply dengan tegangan keluaran variasi. 2. Satu set PC. 3. Perangkat lunak CodeVisionAVR. 4. Satu set pengunduh K-125 dan sistem minimal ATMega8535.

8.3

Teori Singkat

ADC mikrokontroler ATmega8535 mempunyai resolusi 10 bit dengan 8 saluran masukan mandiri atau 7 saluran diferensial. Pemilihan saluran dan mode yang digunakan menggunakan program. ADC yang menggunakan metode successive aproximation ini mempunyai tegangan catu daya yang dimasukkan ke pin AVCC. Tegangan di pin ini tidak boleh berbeda lebih dari 0,3 V dari tegangan Vcc. Biasanya tegangan dari Vcc dilewatkan sebuah tapis lulus rendah sebelum dimasukkan ke AVCC.

8-1

. . . . . . . . . .
Terdapat tiga pilihan tegangan referensi ADC (VREF): AVCC, referensi internal 2,56 V atau pin ekternal AREF. Pemilihan saluran masukan dan tegangan referensi ini dapat dilakukan dengan mengubah isi register ADMUX. ADC pada mikrokontroler ini menggunakan clock dari clock CPU. Frekuensi clock CPU dapat diturunkan melalui sebuah prescaler. Waktu konversi ADC dapat bervariasi dari 65 hingga 260 mikrodetik, tergantung clock yang diberikan. Satu kali konversi normal, ADC ini membutuhkan waktu sekitar 14 periode clock. Jika dikehendaki hasil pengonversian berupa data 10 bit, maka clock ADC tidak boleh melebihi 200 kHz. Sehingga ADC ini mampu mengonversi hingga 15 ribu kali per detik (15 kSPS) pada resolusi penuh. Dengan delapan saluran masukan, ADC ini mempunyai fasilitas untuk mengonversi isyarat secara diferensial. Dan jika isyarat masukan terlalu kecil, telah disediakan op-amp dengan nilai penguatan 10 kali dan 200 kali.

8.4

Langkah-langkah Percobaan

Pada percobaan ini akan diukur tegangan di saluran 0 menggunakan ADC mikrokontroler. Data keluaran ADC yang berupa bilangan biner tak bertanda menggunakan panjang 8 bit, dikonversi ke format desimal dan dijadikan karakter ASCII. Data selanjutnya dikirim ke komputer melalui USB untuk ditampilkan oleh hyperterminal. 1. Buka Tools CodeWizardAVR, pilih chip ATmega8535 dan clock 7,372800 MHz 2. Pilih ADC dan enable-kan ADC 3. Gunakan format 8 bit dengan meng-enable pilihan Use 8 bit 4. Pilih tegangan referensi AVCC 5. Pilih clock 921,600 kHz 6. Pilih USART, enable-kan Transmitter, baud rate = 9600 dengan parameter komunikasi 8 data 1 stop no parity, mode asynchronous. 7. Pilih: Program Generate, Save, and Exit. 8. Buat deklarasi untuk tipe variabel berikut di bawah komentar // Declare your global variables here sesuai listing program pada halaman berikutnya. unsigned char adc0,digit,tmp; 9. Ketikan listing berikut untuk mengonversi data heksadesimal dari ADC ke BCD, mengubahnya menjadi ASCII, dan mengirim ke port serial di bawah komentar // Place your code here. adc0=read_adc(0); tmp=adc0/5; digit=tmp/10; digit=digit+'0'; delay_ms(50); UDR=digit; delay_ms(50); UDR='.'; digit=tmp%10; digit=digit+'0'; delay_ms(50); UDR=digit; delay_ms(500); UDR=13; 10. Tambahkan pengarah prosesor untuk header #include <mega8535.h> seperti pada contoh listing. berikut di bawah pengarah

8-2

. . . . . . . . . .
#include <delay.h> #include <stdio.h> #include <math.h> 11. Unduh program (jangan lupa ubah saklar di K-125 ke Unduh Program). 12. Ubah saklar di K-125 ke Komunikasi Serial. 13. Jalankan perangkat lunak Hyperterminal. 14. Berikan tegangan variasi 0 ~ 5 V di pin ADC0 dan amati tampilan di jendela Hyperterminal.

Pertanyaan/Tugas
1. Jelaskan proses konversi dari masukan analog ke data digital hingga tampil ke layar Hyperterminal. 2. Jelaskan dengan singkat proses pengubahan data heksadesimal dari ADC ke BCD, dan mengubahnya menjadi format ASCII! 3. Buatlah diagram alir program yang telah dibuat! 4. Apa fungsi header delay.h, stdio.h, dan math.h?

8-3

. . . . . . . . . .
/***************************************************** This program was produced by the CodeWizardAVR V2.05.0 Evaluation Automatic Program Generator Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Version : Date : 07/04/2012 Author : Freeware, for evaluation and non-commercial use only Company : Comments: Chip type : ATmega8535 Program type : Application AVR Core Clock frequency: 7,372800 MHz Memory model : Small External RAM size : 0 Data Stack size : 128 *****************************************************/ #include <mega8535.h> // Standard Input/Output functions #include <delay.h> #include <stdio.h> #include <math.h> #define ADC_VREF_TYPE 0x60 // Read the 8 most significant bits // of the AD conversion result unsigned char read_adc(unsigned char adc_input) { ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=0x40; // Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; return ADCH; } // Declare your global variables here unsigned char adc0,digit,tmp; 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;

8-4

. . . . . . . . . .
// 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=0x00; // 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=0x00; 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;

8-5

. . . . . . . . . .
// USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: Off // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00; UCSRB=0x08; UCSRC=0x86; UBRRH=0x00; UBRRL=0x2F; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // ADC initialization // ADC Clock frequency: 921,600 kHz // ADC Voltage Reference: AVCC pin // ADC High Speed Mode: Off // ADC Auto Trigger Source: ADC Stopped // Only the 8 most significant bits of // the AD conversion result are used ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x83; SFIOR&=0xEF; // SPI initialization // SPI disabled SPCR=0x00; // TWI initialization // TWI disabled TWCR=0x00; while (1) { // Place your code here adc0=read_adc(0); tmp=adc0/5; digit=tmp/10; digit=digit+'0'; delay_ms(50); UDR=digit; delay_ms(50); UDR='.'; digit=tmp%10; digit=digit+'0'; delay_ms(50); UDR=digit; delay_ms(500); UDR=13; } }

8-6

. . . . . . . . . . Bab 9
9.1

Bab 9. Pengantar Sistem Berbasis Mikroprosesor


Tujuan Praktikum
Agar mahasiswa dapat merancang sistem berbasis mikroprosesor sederhana.

9.2

Alat dan Bahan

1. Satu set PC. 2. Perangkat lunak CodeVisionAVR. 3. Perangkat lunak Proteus.

9.3

Teori Singkat

Perkembangan teknologi elektro cenderung akan menggeser aplikasi berbasis perangkat keras ke aplikasi berbasis perangkat lunak. Aplikasi ini ditandai dengan adanya program yang akan mengendalikan seluruh kerja suatu sistem. Dengan penggantian beberapa fungsi suatu blok dengan suatu algoritma program, maka penggunaan perangkat keras akan semakin berkurang sehingga secara keseluruhan sistem akan dapat dibuat semakin kecil, ringkas dan semakin hemat sumber daya. Mikrokontroler keluarga AVR merupakan salah satu jenis mikrokontroler yang banyak digunakan di Indonesia baik di kalangan pendidikan maupun untuk keperluan proyek komersial. Dukungan pemrograman dalam bahasa tingkat menengah dan simulasi elektronis telah menjadikan sistem berbasis mikrokontroler jenis keluaraga ini menjadi semakin banyak digunakan untuk berbagai keperluan. CodeVisionAVR 2.05.0 Evaluation merupakan salah satu perangkat lunak yang dapat digunakan untuk pembuatan program. Sedangkan untuk simulasi dapat digunakan perangkat lunak Proteus 4.21. Kedua perangkat lunak tersebut bersifat bebas (freeware) dan dapat diunduhn secara gratis. Dengan kedua perangkat lunak tersebut, sudah dapat dibuat sistem berbasis mikroprosesor yang cukup kompleks.

9.4

Langkah-langkah Percobaan

Pada percobaan ini, akan dibuat simulasi sistem yang akan menampilkan karakter di layar LCD. 1. Dengan CodeVisionAVR, bukalah file project di C:\cvavreval\examples\LCDDEMO\LCDDEMO.PRJ 2. Ubahlah prosesor dan clock dengan cara membuka menu Project Configure. Klik C Compiler, ubah Chip menjadi ATmega8535 dan Clock menjadi 7,372800 MHz dan tekan OK. 3. Kompilasi program dengan Build All. 4. Dengan Proteus buatlah untai berbasis mikroprosesor dengan sebuah LCD seperti gambar berikut.

9-1

. . . . . . . . . .

5. Atur agar mikrokontroler menggunakan file .hex hasil kompilasi tadi dengan cara mengklik ganda gambar IC mikrokontroler. Pada jendela Edit Component, isilah Program File dengan C:\cvavreval\examples\LCDDEMO\exe\LCDDEMO.hex atau arahkan dengan tombol di sebelah kanannya. Pada bagian Advanced Properties, pilihlah agar Clock Frequency menjadi 7.372800MHz. 6. Jalankan program simulasi dan amati tampilan di layar LCD.

Pertanyaan/Tugas
1. Buatlah program yang menampilkan namamu di baris pertama dan NIM di baris kedua LCD! 2. Dengan memodifikasi program pada bab 8, rancang dan buatlah program pembangkit clock untuk frekukensi 1 kHz dan 100 kHz! Simulasikan dengan Proteus apakah program sudah berjalan dengan benar!

9-2

. . . . . . . . . .
/* LCD Demo CodeVisionAVR C Compiler (C) 2000-2010 HP InfoTech S.R.L. www.hpinfotech.ro Chip: ATmega8515 Memory Model: SMALL Data Stack Size: 128 bytes Use an 2x16 alphanumeric LCD connected to the STK500 PORTC header as follows: [LCD] 1 GND2 +5V3 VLC4 RS 5 RD 6 EN 11 D4 12 D5 13 D6 14 D7 */ // Alphanumeric LCD Module functions // The LCD connections are specified in the // Project|Configure|C Compiler|Libraries|Alphanumeric menu #include <alcd.h> void main(void) { // initialize the LCD for // 2 lines & 16 columns lcd_init(16); // go on the second LCD line lcd_gotoxy(0,1); // display the message lcd_putsf("Hello world"); // stop here while (1); } [STK500 PORTC HEADER] 9 GND 10 VCC LCD contrast control voltage 0..1V 1 PC0 2 PC1 3 PC2 5 PC4 6 PC5 7 PC6 8 PC7

9-3