Note : bagian yang dicoret mohon jangan dianggap serius.
Penjelasan Studi Kasus
Pada pratikum hari ini menggunakan aplikasi software ISIS Protheus 7 bajakan dan AVR Studio, dan kali ini kami akan membuat rangkaian lampu LED menggunakan 8 lampu LED yang merespon inputan tombol.
- Dasar Teori
ATMega8535 memfasilitasi setiap PORT I/O-nya dengan fitur internal pull-up yang dapat diatur aktif/tidaknya. Fitur internal pull-up penting untuk diperhatikan pada saat PORTX yang bersangkutan diset sebagai masukan (input). Jika pull-up internal pada PORTX diaktifkan, setiap pin pada PORTX tersebut seolah tersambung ke VCC melalui sebuah resistor, sehingga pada kondisi tidak ada rangkaian lain yang terhubung dengan pin tersebut maka logika yang terbaca yang masuk ke pin tersebut adalah logika ‘1’ (high). Logika yang terbaca akan bernilai 0 (low) jika pada pin tersebut terhubung ke ground melalui sebuah saklar. Illustrasi ditunjukkan pada gambar 1.
Untuk menjadilkan PORTX sebagai input maka register DDRX harus diberikan nilai 0, sedangkan untuk mengaktifkan dan menonaktifkan internal pull-up dengan cara memberikan nilai ke register PORTX. Tabel inisialisasi harus diberikan ke register DDRX dan PORTX seperti ditunjukkan pada tabel 1.
Tabel 1. Inisialisasi Register PORTX
DDRX | PORTX | PINX | Keterangan |
0 | 0 | Pull Up High Impedance | Data input dibaca via PINX |
0 | 1 | Pull Up Active | Data input dibaca via PINX |
1 | 0 | – | PORTX sebagai Output, Data output = 0 (LOW) |
1 | 1 | – | PORTX sebagai output, Data output = 1 (HIGH) |
Secara rangkaian elektronika, ada dua alternatif jika menjadikan PORT pada mikrokontrol AVR sebagai port input, yaitu dengan menggunakan resistor pull-up eksternal atau dengan mengaktifkan fitur internal pull-up. Gambar 2 menunjukan jika menggunakan resistor pull-up eksternal, maka fitur internal pull-up tidak perlu diaktifkan. Namun jika ingin menggunakan fitur internal pull-up, maka tidak perlu menggunakan eksternal pull-up seperti ditunjukkan pada gambar 3.
LANGKAH PERCOBAAN
- Buatlah skema rangkaian seperti gambar 2 berikut :
- Ketik dan build program assembly berikut :
Program 1 :
.org 0x0000 rjmp persiapan persiapan: ldi r16, low(RAMEND) ; inisialisasi stack pointer out SPL, r16 ldi r16, high(RAMEND) out SPH, r16 inisialisasi_port: ldi r17, 0xFF out DDRA, r17 ldi r17, 0x00 out DDRC, r17 out PORTC, r17 baca_input: in r20, PINC out PORTA, r20 rjmp baca_input
- Isikan file .HEX yang sudah sukses di-assembler ke simulator
- Jalankan (Run the simulation) skema yang sudah anda buat dan Amatilah, Tekan push-button 0 (PB0) sampai PB7 dan perhatikan lampu LED mana yang padam.
- Buatlah skema rangkaian seperti gambar 3.
- Ketik dan build program assembly berikut :
Program #2
.org 0x0000 rjmp persiapan persiapan: ldi r16, low(RAMEND) ; inisialisasi stack pointer out SPL, r16 ldi r16, high(RAMEND) out SPH, r16 inisialisasi_port: ldi r17, 0xFF out DDRA, r17 ldi r17, 0x00 out DDRC, r17 ldi r17, 0xFF out PORTC, r17 baca_input: in r20, PINC out PORTA, r20 rjmp baca_input
- Jalankan (Run the simulation) skema yang sudah anda buat dan Amatilah, Tekan push-button 0 (PB0) sampai PB7 dan perhatikan lampu LED mana yang padam.
- Cobalah untuk men-download Program #1 ke rangkaian gambar 3. Apakah tombol yang ditekan dapat membuat perubahan pada lampu ? Jelaskan & tuliskan analisa anda di laporan resmi !
- Cobalah untuk men-download Program #2 ke rangkaian gambar 2. Apakah tombol yang ditekan dapat membuat perubahan pada lampu ? Jelaskan & tuliskan analisa anda di laporan resmi !
HASIL PERCOBAAN
Menggunakan Program 1 dengan rangkaian pada Gambar 2, hasilnya adalah lampu LED mati sesuai dengan tombol yang ditekan.
Menggunakan Program 2 dengan rangkaian pada Gambar 3, hasilnya adalah lampu LED mati sesuai dengan tombol yang ditekan.
Menggunakan Program 1 dengan rangkaian pada Gambar 3, hasilnya adalah lampu LED mati dan semua tombol tidak berfungsi.
Menggunakan Program 2 dengan rangkaian pada Gambar 2, hasilnya adalah lampu LED mati sesuai dengan tombol yang ditekan.
TUGAS :
Diketahui gambar skema seperti berikut :
- Buatlah skema seperti gambar #4.
- Buatlah program dengan skenario sebagai berikut :
- Jika tidak ada PB yang ditekan, maka 7-segmen padam.
- Jika PB0 ditekan, maka tampilan 7-segmen menunjukkan angka ‘0’
- Jika PB1 ditekan, maka tampilan 7-segmen menunjukkan angka ‘1’ dan seterusnya sampai PB7
Hasil :
Kode program :
.org 0x0000 rjmp persiapan persiapan: ldi r16, low(RAMEND) ; inisialisasi stack pointer out SPL, r16 ldi r16, high(RAMEND) out SPH, r16 inisialisasi_port: ldi r18, 0xFF out DDRA, r18 ldi r17, 0x00 out DDRC, r17 ldi r17, 0x00 out PORTC, r17 ldi r18, 0xFF out PORTA, r18 baca_input: in r20,PINC cpi r20,0b11111110 breq nol in r20,PINC cpi r20,0b11111101 breq satu in r20,PINC cpi r20,0b11111011 breq dua in r20,PINC cpi r20,0b11110111 breq tiga in r20,PINC cpi r20,0b11101111 breq empat in r20,PINC cpi r20,0b11011111 breq lima in r20,PINC cpi r20,0b10111111 breq enam in r20,PINC cpi r20,0b01111111 breq tujuh rjmp baca_input nol: ldi r20,0b01000000 out PORTA,r20 rjmp baca_input satu: ldi r20,0b01111001 out PORTA,r20 rjmp baca_input dua: ldi r20,0b00100100 out PORTA,r20 rjmp baca_input tiga: ldi r20,0b01001111 com r20 out PORTA,r20 rjmp baca_input empat: ldi r20,0b01100110 com r20 out PORTA,r20 rjmp baca_input lima: ldi r20,0b00010010 out PORTA,r20 rjmp baca_input enam: ldi r20,0b00000010 out PORTA,r20 rjmp baca_input tujuh: ldi r20,0b01111000 out PORTA,r20 rjmp baca_input
Masih menggunakan skema pada gambar 4, buatlah program dengan skenario sebagai berikut :
- Jika tidak ada PB yang ditekan, maka 7-segmen padam.
- Jika PB0 ditekan, maka tampilan 7-segmen menunjukkan angka ‘7’ .
- Jika PB1 ditekan, maka tampilan 7-segmen menunjukkan angka ‘6’ .
- Jika PB2 ditekan, maka tampilan 7-segmen menunjukkan angka ‘5’ .
- Dan seterusnya sampai …
- Jika PB7 ditekan, maka tampilan 7-segmen menunjukkan angka ‘0’ .
Kode Program :
.org 0x0000 rjmp persiapan persiapan: ldi r16, low(RAMEND) ; inisialisasi stack pointer out SPL, r16 ldi r16, high(RAMEND) out SPH, r16 inisialisasi_port: ldi r18, 0xFF out DDRA, r18 ldi r17, 0x00 out DDRC, r17 ldi r17, 0x00 out PORTC, r17 ldi r18, 0xFF out PORTA, r18 baca_input: in r20,PINC cpi r20,0b11111110 breq tujuh in r20,PINC cpi r20,0b11111101 breq enam in r20,PINC cpi r20,0b11111011 breq lima in r20,PINC cpi r20,0b11110111 breq empat in r20,PINC cpi r20,0b11101111 breq tiga in r20,PINC cpi r20,0b11011111 breq dua in r20,PINC cpi r20,0b10111111 breq satu in r20,PINC cpi r20,0b01111111 breq nol rjmp baca_input nol: ldi r20,0b01000000 out PORTA,r20 rjmp baca_input satu: ldi r20,0b01111001 out PORTA,r20 rjmp baca_input dua: ldi r20,0b00100100 out PORTA,r20 rjmp baca_input tiga: ldi r20,0b01001111 com r20 out PORTA,r20 rjmp baca_input empat: ldi r20,0b01100110 com r20 out PORTA,r20 rjmp baca_input lima: ldi r20,0b00010010 out PORTA,r20 rjmp baca_input enam: ldi r20,0b00000010 out PORTA,r20 rjmp baca_input tujuh: ldi r20,0b01111000 out PORTA,r20 rjmp baca_input