Setelah Anda mengikuti artikel saya tentang belajar membuat program atau aplikasi mikrokontroler AT89/AVR (Membuat Aplikasi Mikrokontroler AVR/AT89: Khusus Pemula!), rasanya tidak afdol jika saya tidak atau belum memberikan contoh kasus sangat sederhana, untuk memberikan gambaran begitu mudahnya kita membuat aplikasi mikrokontroler!
Kasus!
Di sebuah kampung Ngebut Benjut ternyata masih banyak orang-orang mengendari sepeda motornya dengan ngebut, untuk itu pak RW mengundang mas Yusi untuk menyelesaikan masalah ini, yaitu membuatkan sebuah tanda yang berupa LAMPU BERKEDIP DENGAN SELANG WAKTU SETENGAH DETIK-an.
Solusi: Diagram Alir!
Sebenarnya solusi tanpa Mikrokontroler sangat mudah dilakukan, lha wong cuman lampu berkedip (LED) dengan durasi setengah detik-an, cuman karena diminta menggunakan mikrokontroler maka dengan segera mas Yusi membuat sebuah diagram alir untuk solusi kasus tersebut, berikut diagram alir yang telah dibuat oleh mas Yusi, perhatikan bahwa diagram alir tidak boleh menunjukkan suatu bahasa pemrograman tertentu…
Gambar 1
Nah, begitu kata mas Yusi, sekarang aku mau mengimplementasikan-nya dengan mikrokontroler, namun pake mikrokontroler yang mana ya? Keluarga AT89 atau AVR?
Solusi: Menentukan mikrokontroler!
Sebelum membuat rangkaian dasar, mas Yusi berpikir sejenak untuk menentukan mikrokontroler apa yang akan digunakan, apakah menggunakan mikrokontroler keluarga AT89 atau keluarga AVR, semuanya berasal dari pabrik yang sama yaitu Atmel Corporation, dan di Indonesia dua-duanya sudah cukup populer, apalagi sudah lumayan banyak buku-buku yang mengulas kedua mikrokontroler tersebut.
Mmmm… Pake yang mana ya?
Fitur AT89LS53 (yang pokok-pokok saja, detilnya lihat datasheet):
- Three 16-bit Timer/Counters
- Nine Interrupt Sources
- Programmable UART Serial Channel
- SPI Serial Interface
- Low Power Idle and Power Down Modes
- Interrupt Recovery From Power Down
- Programmable Watchdog Timer
Fitur ATMega32 (yang pokok-pokok saja, detilnya lihat datasheet):
- Two 8-bit Timer/Counters with Separate Prescalers and Compare Modes
- One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode
- Real Time Counter with Separate Oscillator
- Four PWM Channels
- 8-channel, 10-bit ADC
- 8 Single-ended Channels
- 7 Differential Channels in TQFP Package Only
- 2 Differential Channels with Programmable Gain at 1x, 10x, or 200x
- Byte-oriented Two-wire Serial Interface
- Programmable Serial USART
- Master/Slave SPI Serial Interface
- Programmable Watchdog Timer with Separate On-chip Oscillator
- On-chip Analog Comparator
Wah, lumayan juga fitur-fitur si ATMega32, kelihatannya cocok pake AT89LS53 nich, begitu pikir mas Yusi. Memang benar untuk aplikasi yang sangat sederhana ini, hanya cukup diperlukan mikrokontroler yang sederhana juga, Anda bisa membandingkan semua mikrokontroler dari Atmel di websitenya. Namun kali ini, dengan kebaikan mas Yusi, beliau akan berikan contoh dua-duanya. Oya, masih ada mikrokontroler mini lainnya yang bisa digunakan termasuk ATTiny dan yang sejenisnya.
Solusi: Membuat Rangkaian Minimal
Rangkaian minimal berdasarkan kasus dan diagram alir yang telah dijelaskan sebelumnya mengikuti gambar 2, untuk penggunaan AT89LS53, dan gambar 3, untuk penggunaan ATMega32.
Gambar 2
Gambar 3
Membuat Program-nya!
Sekarang, berdasarkan diagram alir atau flowchart yang sudah dibuat sebelumnya dan mengikuti rangkaian Gambar 2 atau Gambar 3, mas Yusi mulai membuat program, cuman pake bahasa apa ya? Apakah pake assembly aja atau C perawan (belum ada pustaka macem-macem seperti Native C di winAVR atau GCC), Codevision (c plus pustaka macem-macem), Basic (dengan varian BASCOM 8051 dan BASCOM AVR)…??
Oke dach pake BASCOM 8051 dan BASCOM AVR aja lach biar pembaca juga bisa mengikuti dengan mudah…
Menggunakan BASCOM 8051, instruksi di awal program adalah deklarasi pustaka dan besar frekuensi kristal yang digunakan (lihat Gambar 2 dan Gambar 3):
$regfile = “reg51.dat”
$crystal = 12000000
Sedangkan untuk BASCOM AVR deklarasinya sebagai berikut:
$regfile = “m32def.dat”
$crystal = 8000000
Langkah selanjutnya adalah mengimplementasikan diagram alir ke masing-masing mikrokontroler, untuk AT89 menggunakan BASCOM 8051 diperoleh hasil (listing program) sebagai berikut:
Do
P1 = &H00
Waitms 250
Waitms 250
P1 = &HFF
Waitms 250
Waitms 250
Loop
Sedangkan menggunakan ATMega32 berbasis BASCOM AVR diperoleh listing berikut:
Config Portb = Output
Do
Portb = &H00
Waitms 500
Portb = &HFF
Waitms 500
Loop
Penjelasan program:
- Awal program sama semua, memberitahukan compiler BASCOM 8051 atau BASCOM AVR agar menggunakan pustakanya masing-masing ($regfile) dan memberitahukan besarnya frekuensi kristal yang digunakan ($crystal);
- Penggunaan ATMega32 atau keluarga AVR mengharuskan pendefinisian port dilakukan terlebih dahulu, apakah suatu PORT atau PIN akan dijadikan sebagai masukan atau luaran, untuk itu digunakan instruksi atau deklarasi CONFIG PORTB = OUTPUT yang artinya mendeklarasikan bahwa PORTB pada ATMega32 digunakan sebagai luaran, dihubungkan ke LED. Namun untuk AT89, deklarasi semacam ini tidak perlu dilakukan;
- Jika Anda perhatikan program utama untuk AT89LS53 dan ATMega32 semuanya hampir sama:
- DO..LOOP digunakan untuk melakukan pengulangan terus menerus tanpa henti, kecuali catu daya dimatikan;
- P1=&H00 atau PORTB=&H00 dua-duanya digunakan untuk menghidupkan LED, mengapa diberi logika “0”, karena rangkaiannya menggunakan konfigurasi active low. Untuk ATmega32 atau AVR, Anda bisa mengkonfigurasi active low atau active high tidak masalah semua bisa berjalan dengan baik, cuman hati-hati dengan AT89LS53 atau AT89, karena yang paling cocok dan sederhana adalah active low (hal ini saya jelaskan secara gamblang di buku saya “Belajar Mikrokontroler AT89C51/52/55: Teori dan Aplikasi, Edisi 2“);
- Untuk melakukan penundaan digunakan instruksi WAITMS (menunggu dalam satuan milidetik), mengapa di BASCOM 8051 dituliskan WAITMS 250 (menunggu 250 milidetik) dua kali sedangkan di BASCOM AVR cukup hanya satu kali WAITMS 500. Hal ini disebabkan fasilitas WAITMS di BASCOM 8051 hanya menerima maksimum angka 255, sedangkan pada BASCOM AVR bisa maksimum 65.535;
Saatnya Uji coba…
Langkah berikutnya adalah menjalankan atau menguji coba program dengan cara (1) menggunakan simulator, atau (2) langsung download ke rangkaian minimal sesuai Gambar 2 dan/atau Gambar 3. Penggunaan simulator sangat bermanfaat sebelum membuat rangkaian dalam PCB-nya.
Demikianlah solusi dari masalah pak RW oleh mas Yusi, monggo saja jika ada pertanyaan atau komentar bisa dituliskan dan disharingkan, semoga bermanfaat.