Schematic

Sudah lama saya tidak sharing disini, walaupun ada beberapa hal yang bisa dituliskan dalam blog ini. Hari ini puasa Ramadhan hari ke-5 bertepatan dengan hari Minggu, untuk mengisi waktu saya akan mencoba sharing sebuah proyek sederhana menggunakan mikrokontroler AVR, yaitu Simple AVR LCD Voltemeter dengan menggunakan tampilan LCD berbasiskan mikrokontroler AVR ATMEGA-16.

Tidak biasanya saya menggunakan mikrokontroler jenis ini, namun beberapa waktu yang lalu, saya mulai tertarik mencobanya dengan salah satu alasannya adalah flash memory yang besar, jumlah pin yang banyak, jumlah port ADC yang banyak dan harganya cukup murah. Dengan kata lain rasio antara fitur yang ditawarkan AVR ATMEGA-16 terhadap harganya melebihi mikrokontroler buatan yang lain. Tidaklah salah bila mikrokontroler jenis ini paling banyak digunakan Rekan-rekan Mahasiswa dalam proyek tugas akhir mereka.

Message #1

Untuk bermain-main mikrokontroler ini kita bisa membuat sendiri downloader menggunakan RS232 serial atau paralel, skema bisa dicari dengan mudah di Internet, salah satu rekomendasi saya adalah di http://www.electronics-diy.com/avr_programmer.php karena kesederhanaanya. Namun perlu menjadi perhatian disini adalah, downloader tersebut dapat bekerja dengan baik pada RS-232 serial tanpa menggunakan USB-to-Serial adapter. Walaupun penggunaan USB-to-Serial Adapter juga masih dapat digunakan, namun akan dirasakan delay penulisan yang sangat lambat. Pengalaman saya dalam mencobanya adalah, untuk mendownload program LCD Voltmeter ini ke ATMEGA-16 dibutuhkan waktu hampir 1/2 jam … wow hihihihi.

Measurement

Karena sedang malas untuk membuat development board sendiri, maka dalam bermain-main dengan AVR ini saya langsung membeli produk jadi, anda dapat menemukan beberapa merek produk di Pasar dan saya kira semuanya dapat digunakan dengan harga bersaing. Kebetulan di Jaya Plaza tempat saya membelinya terdapat 2 jenis produk ini. Namun demikian, sebenarnya membuat development board tersebut di atas cukuplah mudah dilakukan, bekalnya hanyalah ketersediaan waktu dan sedikit kesabaran saja.

Karena saya tidak mau dibuat pusing berurusan dengan bahasa pemrograman tingkat rendah (assembly), walaupun banyak yang menyebutkan kelebihan diantaranya adalah: ukuran file *.hex yang kecil, kecepatan lebih baik dan masih banyak lagi, namun saya saat ini tidaklah terlalu sensitif dengan hal tersebut. Karena isu-isu tersebut bukan menjadi kendala buat saya dalam bermain-main dengan AVR saat ini. Saya hanya ingin menunjukkan, betapa mudah dan hematnya waktu yang kita luangkan untuk membuat sebuah proyek sederhana, namun dengan algoritma yang cukup rumit. Untuk belajar dan mendapatkan compiler bahasa pemrograman tingkat tinggi anda dapat mencarinya di Internet, diantaranya yang saya ketahui adalah menggunakan bahasa BASIC, salah satu produsen software mengemasnya dengan merek jual BASCOM-AVR, silakan lihat di http://www.mcselec.com/ . Kita dapat mendownload program demo BASCOM-AVR dengan fitur lengkap, namun dibatasi besarnya file yang dicompile sebesar 4KB saja, cukup besar untuk digunakan bermain-main dengan si-AVR dalam rangka mengisi waktu senggang di akhir pekan.

Salah satu kelebihan AVR yang saya sukai adalah banyaknya jumlah port ADC dalam satu kemasan ATMEGA-16, yaitu tersedia sebanyak 7 buah port ADC mulai dari PA0 (ADC0) sampai dengan PA7 (ADC7) dan bisa digunakan secara simultan. Dengan harga hanya Rp.52.500 kita bisa mendapatkan itu semuanya, jauh lebih murah dibandingkan dengan jenis mikrokontroler lain yang ada di pasar. Oleh karena itu, proyek pertama ini adalah bertemakan optimalisasi ADC. Saya sebenarnya telah menyiapkan program yang lebih kompleks, bahkan bisa dibilang sangat komplek, yaitu Antenna Analyzer dengan menggunakan fungsi ADC pada ATMEGA-16, software telah rampung 100%, tinggal sisi hardware. Pada saatnya nanti akan saya share juga disini. Pemanfaatkan ADC ini dapat digunakan dalam berbagai proyek menarik diantaranya adalah: Voltmeter seperti saat ini, Thermometer, Oscilloscope, Spectrum Analyzer, Antenna Analyzer, SWR Meter, RF Power Meter dan tentunya masih banyak lagi.

Rangkaian proyek ini ditunjukkan oleh gambar di atas. Cara kerja rangkaian sangat sederhana, pertama ADC0 digunakan sebagai input tegangan yang akan diukur. Karena tegangan yang sampai ke ADC0 atau Vs harus < 5 volt (hati-hati bila > 5 volt akan merusak mikrokontroler), maka untuk mendapatkan range pengukuran sekitar Vin 12 Volt, maka diperlukan sebuah rangkaian pembagi tegangan yang dibentuk oleh R1 dan R2, dimana hubungan antara Vs (tegangan masuk ke ADC0) dan Vin (tegangan yang diukur) adalah Vs = Vin * R2 / (R1 + R2). Selain sebagai pembagi tegangan, rangkaian ini juga berguna untuk membatasi jumlah arus yang masuk ke ADC0. Saya mempergunakan R1=18K dan R2=4.7K yaitu nilai-nilai resistor yang umum dijumpai di pasaran, dengan Vin maksimum yang akan saya ukur adalah 12 Volt, maka kita mendapatkan beberapa data teknis sebagai berikut:

– Arus yang melewati ADC0 sekitar = 12 / (18K + 4.7K) = 0.000529 A

– Tegangan Vs maksimum = 12 * 4.7K / (18K + 4.7K) = 2.485 Volt (masih aman dan jauh dari 5 volt)

Karena ADC yang digunakan di ATMEGA-16 berbasiskan kepada 10 bits, maka tegangan 0 volt akan direpresentasikan oleh 0 dan tegangan maksimum 5 volt akan direpresentasikan dengan 2^10 – 1 = 1023. Konsekuensinya, tegangan Vs maksimum di atas akan direpresentasikan dengan = 1023 * 2.485 / 5 = 508. Jadi dalam perhitungan yang dilakukan oleh mikrokontroler nantinya dibutuhkan sebuah faktor koreksi sebesar fc = 12 / 508.

Setelah mendapatkan hasil perhitungan di atas, kemudian angka akan ditampilkan di LCD dengan format “floating point” berupa “##.##” Volt. Perhitungan dan pembaharuan tampilan ini dilakukan setiap 1 detik sekali, sehingga masih mudah diikuti oleh mata telanjang.

Oh yaa, saya juga menambahkan fungsi untuk mengetes tenaga dari battery yang sedang diukur, yaitu bila tegangan Vin nilainya di bawah 10 Volt (dalam angka 12 bits adalah sekitar 430) maka akan ditampilkan peringatan kondisi battery (“BAD”), demikian juga sebaliknya bila battery dalam kondisi bagus akan diberikan keterangan baik (“OK”).

Berikut adalah script dalam BASCOM:
‘1. Hardware Configuration
‘—————————————————————————-
$regfile = “m16def.dat”                                     ‘Atmega-16
$crystal = 8000000                                          ‘Xtal 8MHz

‘2. LCD & Port Configuration
‘—————————————————————————-
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0
Config Lcd = 16 * 2
Cls
Cursor Off
Waitms 500

‘3. Print Welcome Messages & Wait until VCO is Steady state
‘—————————————————————————-
Lcd “AVRLCD Voltmeter”
Waitms 100
Lowerline
Lcd “by Cholis YD1CHS”
Waitms 2000
Cls

‘4. ADC and Varibles Configuration
‘—————————————————————————-
Config Adc = Single , Prescaler = Auto
Start Adc

‘5. Battery’s Power Testing dan Display Into LCD
‘—————————————————————————-
Dim Bat_pow As Word
Dim Bat_fact As Single
Dim Bat_volt As Single
Bat_fact = 12 / 508

Do
Bat_pow = Getadc(0)
Bat_volt = Bat_pow * Bat_fact
If Bat_pow < 430 Then
Lcd “Batt. Power: BAD”
Lowerline
Lcd Fusing(bat_volt , “##.##”) ; ” Volts”
Waitms 1000
Else
Lcd “Batt. Power: OK”
Lowerline
Lcd Fusing(bat_volt , “##.##”) ; ” Volts”
Waitms 1000
End If
Cls
Loop

‘6. End of Program
‘—————————————————————————-
End

Berikut adalah source code proyek di atas, mohon ganti ekstensi file dari *.pdf menjadi *.zip
AVR_Simple_VM.zip

Hasilnya … cukup lumayan, bila dikalibrasi dengan digital AVO meter maka telah memiliki nilai pengukuran yang hampir mendekati.

Kesimpulan dari proyek sederhana ini adalah, menggunakan bahasa pemrograman tingkat tinggi untuk mikrokontroler kita dimanjakan dengan waktu yang lebih hemat dan kemudahan yang mengenakkan, … sangat mengasyikkan. Oh yaa, hampir lupa, di dalam simulasi saya menggunakan LCD 20×4, karena yang tersedia dan siap di meja workshop saya adalah LCD 20×4 tersebut.

Have a nice day,
Cholis Safrudin YD1CHS