Saturday, March 5, 2011

BELAJAR ADC (Analog Digital Converter) MENGASYIKAN


By Dewi Ambarsari

Dasar Teori
·         Mikrokontroler ATmega8535 merupakan versi terbaru mikrokontroler yang mempunyai ADC Internal dengan resolusi 10 bit. Dimana input ADC dihubungkan dengan suatu tegangan dengan referensi ground.
·         Macam-macam input ADC pada mikrokontroler yaitu single ended input dan differential input. Pada single ended input , hanya terhubung dengan satu tegangan input. Sedangkan pada differential input bisa dikombinasikan dengan penguatan yang diatur.
·         Untuk memilih chanel ADC yang mana yang akan digunakan yaitu dengan mengatur nilai MUX4:0. Misalnya dipilih ADC chanel 0 (port A0) maka nilai mux4:0 diberi nilai 00000B. jika dipilih port A4 maka MUX4:0 diberi nilai 00100B.
·         Tegangan referensi pada ADC dapat dipilih. Antara lain menggunakan AVCC, AREF,  tegangan rferensi internal.
·         Agar ADC dapat digunakan maka ADC enabed harus bernilai true atau ‘1’.
·         Pengaturan clock pada ADC berfungsi untuk proses konversi tegangan analog menjadi digital. Untuk mendapatkan nilai konversi yang tinggi
Skematik dan Contoh Program
Perancangan program C yang digunakan pada mikrokontroler ATmega8535 ini menggunakan software CVAVR. Proses pertama dalam perancangan program yaitu proses inisialisasi. Proses inisialisasi pada CVAVR ini menggunakan fungsi CodeWizardAVR. Inisialisasi yang diperlukan antara lain inisialisasi chip, port, ADC, LCD dan USART. Setelah proses inisialisasi selesai maka masuk ke proses penyimpanan file, caraya pilih File, kemudian Generate, Save and Exit.  Kemudian mulai mengetikan program utama di bagian setelah inisialisasi.
            Pada perancangan program menggunakan dua fungsi yaitu read_adc dan bin2BCD. Fungsi read_adc digunakan untuk membaca tegangan input ADC yang disesuaikan dengan nilai variabel adc_input yang terbaca di ADC channel A0. Fungsi bin2BCD digunakan untuk mengubah 16-bit kode biner menjadi 5 digit kode bin2BCD sesuai nilai variabel input. Pada fungsi bin2BCD menggunakan prinsip pembagian (hasil dan sisa pembagian yang digunakan). Misalkan didapatkan nilai input sebesar 3 V maka pembacaan di read_adc adalah
ADC =  =  = 614.4 = 614 desimal.
1 LSB =  = 0.00489 V = 4.89 mV
Jadi nilai yang keluar di LCD yaitu nilai ADC dikalikan dengan LSB.
Tegangan output = 614 x 0.00489 V = 3.00426 V

UNTUK MENAMPILKAN NILAI DESIMAL
Untuk menampilkan nilai decimal sangatlah mudah, dengan menggunakan fungsi aritmatika bisa didapatkan nilai koma yang kita inginkan.
a.       Nilai input 614 dibagi dengan 10000 (input/10000), hasilnya adalah 0. Kemudian hasil tersebut dikalikan dengan 65536 dan didapatkan hasil akhir 0 (0H).
b.      Nilai input 614 dibagi dengan 10000 (input%10000), didapatkan sisa pembagian 614. Sisa pembagian pertama tersebut (614) dibagi dengan 1000, hasilnya adalah 0. Kemudian hasil tersebut dikalikan dengan 4096 dan didapatkan hasil akhir 0 (0H).
c.       Sisa pembagian pertama (614) dibagi dengan 1000, didapatkan sisa pembagian 614. Sisa pembagian kedua tersebut (614) dibagi dengan 100, hasilnya adalah 6. Kemudian hasil tersebut dikalikan dengan 256 dan didapatkan dengan nilai akhir 1536 (600H).
d.      Sisa pembagian kedua (14) dibagi dengan 100, didapatkan sisa pembagian 14. Sisa pembagian kedua tersebut (14) dibagi dengan 10, hasilnya adalah 1. Kemudian hasil tersebut dikalikan dengan 16 dan didapatkan dengan nilai akhir 16 (10H).
e.       Sisa pembagian ketiga (4) dibagi dengan 1, hasilnya adalah 4. Lalu hasil tersebut dikalikan dengan 1 dan didapatkan nilai akhir 4 (4H).
f.       Hasil konversi biner ke kode BCD yaitu menjumlahkan hasil akhir dari langkah a sampai e (yang dicetak tebal). Jadi hasil konversi nilai input 614 desimal dalam kode BCD adalah 0H + 0H + 600H + 10H + 4H = 00614H.

Pengubahan konversi ke kode BCD ini diperlukan agar hasil konversi ADC dapat ditampilkan ke program terminal pada PC/laptop dan LCD (karakter ASCII). Misalkan hasil konversi ADC adalah 52 desimal (034H) jika langsung dikirimkan ke USART maka program terminal akan menampilkan karakter 4 (ASCII dari 34H) bukan karakter 052.

Untuk mengetahui besar tegangan sebenarnya yang dikonversi ADC yaitu dengan mengalikan hasil konversi ADC dengan perubahan persatu LSB. Dalam proyek akhir ini 1 LSB= 4.87 mV maka input ADC mengukur tegangan sebesar 52 x 4.89 = 254.28 mV. Karena tipe variable yang digunakan bertipe long int bukan float. Sehingga hasil perkalian 52 * 49 = 2548 desimal. Yang sebenarnya berarti 254.8mV = 0.2548 V = 25.48 kΩ (berbeda sedikit dengan 254.28 mV, sebab perubahan persatu LSB dibulatkan 1 ke atas). Kemudian untuk menampilkan 25.48 kΩ pada Laptop/PC dilakukan dengan langkah berikut ini :
a.       Angka 02548H digeser ke kanan per bit sebanyak 16 kali, sehingga didapat hasil sementara 00000H. Lalu program akan melakukan operasi logika AND antara hasil sementara tersebut dengan 0FH dan didapatkan 00H. Nilai 00H tersebut ditambah dengan 30H, didapatkan nilai 30H. Karena selalu bernilai 30H maka hasil ini tidak akan pernah dikirimkan ke LCD maupun ke komunikasi serial.
b.      Angka 02548H digeser ke kanan per bit sebanyak 12 kali, sehingga didapat hasil sementara 00002H. Lalu program akan melakukan operasi logika AND antara hasil sementara tersebut dengan 0FH dan didapatkan 02H. Nilai 02H tersebut ditambah dengan 30H, didapatkan nilai 32H (ASCII dari angka 2). Nilai 32H ini dikirimkan melalui komunikasi serial USART dan tampil di LCD sehingga pada program akan menampilkan angka 2.
c.       Angka 02548H digeser ke kanan per bit sebanyak 8 kali, sehingga didapat hasil sementara 00025H. Lalu program akan melakukan operasi logika AND antara hasil sementara tersebut dengan 0FH dan didapatkan 05H. Nilai 05H tersebut ditambah dengan 30H, didapatkan nilai 35H (ASCII dari angka 5). Nilai 35H ini dikirimkan melalui komunikasi serial USART dan tampil di LCD sehingga pada program akan menampilkan angka 5.
d.      Selanjutnya mengirimkan karakter koma (,) dengan perintah putchar (‘,’) untuk komunikasi serial dan lcd_putchar (‘,’).
e.       Angka 02548H digeser ke kanan per bit sebanyak 4 kali, sehingga didapat hasil sementara 00254H. Lalu program akan melakukan operasi logika AND antara hasil sementara tersebut dengan 0FH dan didapatkan 04H. Nilai 04H tersebut ditambah dengan 30H, didapatkan nilai 34H (ASCII dari angka 4). Nilai 34H ini dikirimkan melalui komunikasi serial USART dan tampil di LCD sehingga pada program akan menampilkan angka 4.
f.       Lalu program akan melakukan operasi logika AND antara angka 02548H tersebut dengan 0FH dan didapatkan 08H. Nilai 08H tersebut ditambah dengan 30H, didapatkan nilai 38H (ASCII dari angka 8). Nilai 38H ini dikirimkan melalui komunikasi serial USART dan tampil di LCD sehingga pada program akan menampilkan angka 8.
g.      Selanjutnya mengirimkan karakter Kohm (Kohm) dengan perintah putchar (‘ Kohm’) untuk komunikasi serial dan lcd_putchar (‘ Kohm’).
Dari langkah-langkah diatas akan didapatkan hasil pada LCD dan menampilkan angka 25.48 Kohm.

No comments:

Post a Comment

Cara Menyenangkan Mengajarkan Bahasa Inggris Pada Anak

pic from : bnu.edu.iq Mumpung lagi on-fire nulis blog, mari lanjutkan tulisan yang udah terlanjur numpuk di otak. Hehe.. Kali ini saya...