MENGHUBUNGKAN MCS-51 KE DUNIA ANALOG
Oleh: Budhy Sutanto
Beyond microcontroller world is not all black or white (zero or one), but even
more gray levels (values between zero and one). Thus the microcontroller must
often relate to the world Analogue, Analog both received voltage from outside,
as well as Analog voltage issue.
Dunia di luar mikrokontroler tidak semuanya hitam atau putih (nol atau satu),
tapi justru lebih banyak tingkatan warna kelabu (nilai antara nol dan satu).
Dengan demikian sering kali mikrokontroler harus berhubungan dengan dunia
Analog, baik menerima tegangan Analog dari luar, maupun mengeluarkan tegangan
Analog.
Dalam dunia elektronika dikenal dua jenis rangkaian
untuk menjembatani dunia Analog ke Digital, jenis pertama dikenal sebagai
rangkaian konversi besaran digital ke analog (Digital Analog Converter –
disingkat sebagai DAC), yang kedua adalah rangkaian konversi besaran analog ke
digital (Analog Digital Converter – disingkat sebagai ADC).
Dua jenis rangkaian di atas dipakai cukup luas,
pabrik pembuat IC banyak membuat berbagai jenis IC ADC maupun DAC, sehingga
untuk menghubungkan mikrokontroler ke dunia Analog cukup memilih salah satu chip
yang sesuai dengan kebutuhan, tidak perlu repor-repot merangkai sendiri.
Ketelitian DAC dan ADC tergantung pada berapa bit
sinyal digital yang diharapkan, yang paling umum dipakai 8 bit sinyal digital.
Dengan 8 bit sinyal digital sebuah DAC bisa membangkitkan tegangan dengan 256
tingkatan, misalkan tegangan maksimum yang bisa dibangkitkan sebesar 2,55 Volt,
maka DAC ini bisa membangkitkan tegangan 0 sampai 2.55 Volt dengan tingkatan
0,01 Volt, artinya input biner bernilai
$01
pada input DAC akan membangkitkan tegangan output 0,01 Volt, biner
$02
membangkitkan 0,02 Volt dan seterusnya biner
$FF
(255) menghasilkan 2,55 Volt. Sebaliknya, tegangan
0 sampai 2,55 Volt akan di-skala oleh ADC menjadi besaran digital
$00
sampai $FF
(255).
IC DAC yang banyak dipakai dan mudah dijumpai di
pasar Indonesia adalah DAC0800 / DAC0801 / DAC0802 8-Bit Digital-to-Analog
Converters, sedangkan ADC yang banyak dipakai adalah
ADC0801 / ADC0802 /
ADC0803 / ADC0804 / ADC0805 8-Bit Microprocessor Compatible A/D Converters,
keduanya buatan National Semiconductor.
Di luar IC ADC tersebut di atas, dikenal pula IC
ADC dengan rangcangan khusus, yang sudah dilengkapi untuk keperluan membangun
Digital Volt Meter, misalnya ICL7106/ICL7107 3 1/2-Digit A/D Converter produksi
Maxim. IC semacam ini sesungguhnya merupakan ADC biasa yang dilengkapi dengan
rangkaian untuk menampilkan tegangan yang diukur, keteletiannya lebih besar dari
ADC 8 bit, bisa dipakai untuk mengukur tegangan 0 sampai 1,999 (hampir 11 bit).
DAC0800
Gambar 1 memperlihatkan mikrokontroler
AT89Cx051 yang dihubungkan ke DAC0800 buatan National Semiconductor,
kapasitor C1,
C2
dan Xtal
12 MHz membentuk rangkaian osilator, kapasitor
C3
dan resistor R1
membentuk rangkaian reset.
Besaran digital diumpankan ke
B1
sampai B7
(kaki 5 sampai 12) IC DAC0800, bobot biner dari besaran digital ini dirubah
menjadi besaran analog berupa arus pada
IOUT
(kaki 4 DAC0800) dan IOUT*
(kaki 2 DAC0800), oleh IC Operational Amplifier LM741 arus tersebut dirubah
menjadi tegangan.
Tegangan yang dihasilkan dinyatakan dengan rumus
yang tertera pada Gambar 1, selain tergantung pada bobot besaran digital yang
diumpankan, tegangan ini tergantung pula pada besarnya
Vref
(kaki 14 DAC0800). C3
yang dipasang pada kaki 16 dan ground berguna untuk menstabilkan tegangan yang
dihasilkan.
DAC0800 dan LM741 memakai sumber tegangan +12 Volt
dan –12 Volt, ini agak berbeda dengan tegangan yang biasa dipakai untuk
rangkaian digital, agar sinyal digital bisa diterima IC DAC0800 dengan baik,
DAC0800 dilengkapi kaki VLC
(kaki nomor 1) untuk menyesesuaikan level tegangan berbagai jenis IC digital.
Dalam data sheet DAC0800 diperlihatkan berbagai rangkaian yang harus dipasang
pada kaki ini agar DAC0800 bisa dipakai untuk berbagai keluarga IC digital.
Dalam rangkaian Gambar 1, DAC0800 dihubungkan ke
keluarga mikrokontroler MCS51 yang bekerja pada level tegangan TTL, untuk
keperluan ini kaki VLC
dihubungkan ke ground.

Gambar 1Hubungan AT89Cx051 dengan DAC0800
Di balik kaki-kaki
B1
sampai B8
IC DAC0800 tidak dilengkapi latch untuk menampung besaran digital yang
diumpankan, perubahan kombinasi sinyal digital pada kaki-kaki ini langsung
mengakibatkan perubahan tegangan output. Konstruksi input DAC0800 semacam ini,
mengakibatkan DAC0800 tidak bisa dihubungkan langsung ke saluran-data (data bus)
sistem mikroprosesor, hubungan DAC0800 ke prosesor harus melalui port paralel.
Dalam Gambar 1, DAC0800 dihubungkan ke port paralel
P1
dari AT89Cx051. Menghubungkan DAC0800 ke keluarga MCS51 yang lain, misalnya
AT89C51, bisa lewat port parelel
P0,
P1,
P2
ataupun P3,
tergantung pada kondisi rangkaian yang dibentuk.
Instruksi untuk mengeluarkan tegangan pada
rangkaian Gambar 1 sangat sederhana, cukup mamakai instruksi
MOV P1,A
dengan pengertian besaran analog yang ingin dibangkitkan sebelumnya sudah
disimpan pada Akumulator A.
ADC0804
Gambar 2 menggambarkan ADC0804 yang dihubungkan ke
AT89C51, lengkap dengan rangkaian osilator yang dibentuk dengan
C1,
C2
dan kristal
12 MHz, dan rangkaian reset yang dibentuk dengan
C3
dan R1.
Catu Daya untuk ADC0804 merupakan catu daya standar bagi rangkaian digital,
yakni +5 Volt.
ADC0804 memerlukan sinyal denyut untuk bekerja,
sinyal denyut ini bisa diumpan dari luar ADC0804, tapi bisa bisa pula
dibangkitkan sendiri oleh ADC0804. Dalam Gambar 2 rangkaian denyut tersebut
dibangkitkan lewat bantuan resistor
R2
(terhubung pada kaki 19 dan 4) dan kapasitor
C4
(terhubung antara kaki 19 dan ground).
Waktu yang diperlukan konversi tegangan analog
menjadi besaran digital, sekitar 64 periode dari sinyal denyut di atas, dengan
demikian makin tinggi frekuensi sinyal denyut tadi makin cepat pula waktu
konversi. Frekuensi sinyal denyut tersebut tidak boleh lebih dari 1460 KHz, dan
umumnya cukup dipakai 640 KHz.
Berlainan dengan DAC0800, ADC0804 adalah IC yang
siap dihubungkan ke saluran-data sistem mikroprosesor, sehingga rangkaian dalam
Gambar 2 ADC0804 dihubungkan lewat
P0
yang difungsikan sebagai saluran-data.
Untuk keperluan ini sinyal-sinyal pengendali
ADC0804 dipilih sinyal WR*
(kaki 16 AT89C51) yang dihubungkan ke
WR*
(kaki 3 ADC0804), sinyal
RD* (kaki 17 AT89C51) yang dihubungkan
ke RD*
(kaki 2 ADC0804). Sinyal WR*
dan RD*
dari AT89C51 merupakan sinyal pengendali saluran-data, yang dipakai saat AT89C51
bekerja dengan memori-data ekternal.
Sinyal
INTR*
(kaki 5 ADC0804) dihubungkan ke
INT0*
(kaki 12 AT89C51), dipakai untuk memberitahu AT89C51 saat ADC0804 sudah selesai
konversi data analog.

Gambar 2 Hubungan AT89C51 dengan ADC0804
Dalam rangkaian Gambar 2, ADC0804 menunggu perintah
dari AT89C51 untuk mulai melakukan konversi tegangan analog, perintah ini berupa
perubahan tegangan dari ‘1’
menjadi ‘0’
pada WR*
(kaki 3 ADC0809). Hal ini dilakukan dengan instruksi
MOVX @R0,A,
yakni perintah menuliskan data ke memori-data eksternal yang di-sinkron-kan
dengan sinyal WR*
(kaki 16 AT89C51) menjadi ‘0’
sesaat.
Setelah menerima perintah tersebut, ADC0804 mulai
melakukan konversi yang memerlukan waktu sekitar 64 periode sinyal denyut pada
kaki CLK
(kaki 4 ADC0804). Selesai konversi, ADC0804 me-‘nol’-kan
INTR*
(kaki 5 ADC0804), sinyal ini diterima AT89C51 lewat
INT0*
(kaki 12 AT89C51). AT89C51 menunggu sinyal
INTR*
dari ADC0804 dengan instruksi
JB INT0,$.
Berikutnya AT89C51 mengambil data hasil konversi
ADC0904 dengan intruksi
MOVX A,@R0. Instruksi ini merupakan
instruksi untuk mengambil data dari memori-data ekternal, dalam melaksanakan
instruksi ini MCS51 membuat
RD*
(kaki 17 AT89C51) sesaat menjadi ‘0’,
sinyal ini diterima ADC0804 lewat kaki 2 yang mengakibatkan penyangga (tristate
buffer) pada DB0
.. DB7
(kaki 18 sampai 11 ADC0804) mem-‘buka’, sehingga data hasil konversi ADC0804
bisa diambil AT89C51 lewat
P0.0 ..
P0.7.
Dalam pembahasan di atas,
R0
hanya sekedar dipinjam untuk melaksanakan instruksi-instruksi memori-data
ekternal, MOVX A,@R0
maupun MOVX @R0,A,
nilai dari R0
tidak berpengaruh, mengingat dalam rangkaian Gambar 2 pada saluran-data hanya
dipasang ADC0804 saja, tidak ada peralatan digital lainnya.
Program pendek untuk melakukan hal hal tersebut di
atas, dengan demikian bisa dituliskan sebagai berikut :
01: ReadADC0804:
02: MOVX @R0,A
03: JB INT0,*
04: MOVX A,@R0
05: RET