JAM DIGITAL
Ilhami Prinsip Dasar Microcontroller
Oleh:
Budhy Sutanto
Mungkin bagi
sebagian pembaca Jam Digital merupakan hal yang sangat sederhana atau sudah
terlalu umum, tapi dari Jam Digital bisa dipelajari prinsip-prinsip dasar
kontrol dengan microcontroller, antara lain sistem tampilan 7 ruas dan
pemakaian timer.

Gambar 1 Jam
Digital dengan AT89C2051
Rangkaian lengkap Jam Digital ini
terlihat pada Gambar 1, dilengkapi 4 buah tampilan 7 ruas LED untuk menampilkan
waktu, terdiri atas angka-angka puluhan jam, satuan jam, puluhan menit dan
satuan menit. Tombol
SW1 dan
SW2 dipakai untuk mengatur tampilan waktu, saat
SW1 ditekan
angka pada tampilan jam akan bertambah setiap detik, sedangkan
SW2 dipakai
untuk mengatur angka tampilan menit dengan cara yang sama.
Kristal 12 MHz dan kapasitor
C1 dan
C2 membentuk
rangkaian oscilator pembangkit frekuensi kerja AT89C2051, rangkaian ini
merupakan rangkaian baku, artinya bentuk rangkaian oscilator ini selalu seperti
ini untuk semua rangkaian AT89C51, kecuali untuk keperluan yang lain nilai
kristalnya saja yang mungkin berbeda.
Kombinasi kapasitor
C3 dan
tahanan R8
juga merupakan rangkaian baku, komponen ini dipakai untuk membentuk rangkaian
‘power on reset’, artinya rangkaian yang akan otomatis me-reset AT89C2051
setiap kali AT89C2051 mulai menerima sumber daya listrik.
Melihat rangkaian pada Gambar 1, memang
tidak bisa dijelaskan bagaimana Jam Digital ini bekerja, karena rangkaian itu
hanyalah bagian tampilan dan tombol pengatur waktu waktu saja, ‘Jam’ yang
sesungguhnya berupa program yang disimpan di dalam ROM yang ada di dalam IC
AT89C2051.
Sistem tampilan 7
ruas
Untuk menampilkan waktu dipakai 4 buah tampilan 7 ruas LED yang dibentuk dengan
IC2 dan IC3 (masing-masing IC berisikan 2 tampilan angka), dengan demikian untuk
menampilkan 4 buah angka diperlukan 28 LED, kalau ke-28 LED ini dinyala-padamkan
dengan cara biasa, maka diperlukan 28 saklar dan rangkaian menjadi rumit sekali.
Cara yang umum dipakai adalah sistem tampilan 7 ruas yang di-multiplek seperti
nampak dalam Gambar 1, sedangkan Gambar 2 memperlihatkan detil sistem tampilan
ini.

Gambar 2 Sistem Tampilan 7 Ruas
Setiap tampilan angka dibentuk dengan 7 buah LED (Light Emitting Diode),
masing-masing diode itu ditandai sebagai ruas ‘a’ sampai dengan ‘g’, anode dari
ketujuh LED itu sudah dihubungkan jadi satu di dalam IC. Katode ruas ‘a’ dari
angka puluhan jam dihubungkan dengan katode ruas ‘a’ dari angka satuan jam dan
seterusnya. Demikian pula dengan ruas ‘b’; ruas ‘c’ dan lain sebagainya.
Saklar Ruas P10..P16 dipakai untuk
menentukan ruas mana yang akan dinyalakan, misalkan untuk membentuk angka 1 maka
saklar P11 (ruas b) dan saklar P12 (ruas c) dalam posisi ‘on’. Sedangkan Skalar
Digit dipakai untuk menentukan tampilan angka mana yang dipakai, misalkan angka
1 tadi ingin ditampilkan pada tampilan puluhan jam, maka posisi skalar pada Q1.
Jika posisi ‘on’ pada Saklar Digit digilir
dari Q1,
Q2,
Q3 dan
Q4 kemudian
kembali ke Q1
dan seterusnya secara cepat, maka angka 1 di atas akan nampak pada semua
tampilan angka!
Selanjutnya, andaikan sebelum merubah
posisi Saklar Digit kombinasi Skalar Ruas diatur terlebih dulu, maka angka yang
tertampil dalam sistem tampilan 7 ruas ini bisa diatur dengan tepat.
Dalam Gambar 1 terlihat Saklar Ruas
dibentuk dengan kaki
P1.0 sampai kaki
P1.6
AT89C2051, sedangkan Saklar Digit dibentuk dengan sebuah transistor PNP dan
sebuah tahanan yang masing-masing dikendalikan lewat kaki
P3.0 sampai
kaki P3.3.
Proses pengaturan sistem tampilan seperti
yang dibahas diatas, diatur oleh AT89C2051 lewat potongan program yang biasanya
dinamakan sebagai
ScanDisplay seperti berikut :
1
ScanDisplay:
2
MOV
P1,RuasJam10
3
MOV
P3,#%11110111
4
ACALL
TungguSebentar
5 ;
6
MOV
P1,RuasJam1
7
MOV
P3,#%11111011
8
ACALL
TungguSebentar
9 ;
10
MOV
P1,RuasMenit10
11
MOV
P3,#%11111101
12
ACALL
TungguSebentar
13 ;
14
MOV
P1,RuasMenit1
15
MOV
P3,#%11111110
16
ACALL
TungguSebentar
17
SJMP
ScanDisplay
Potongan program di atas bisa dijelaskan
sebagai berikut :
RuasJam10,
RuasJam1,
RuasMenit10
dan RuasMenit1
merupakan variabel tempat menampung kombinasi ruas dari angka yang akan
ditampilkan, isi dari variabel ini akan dirubah dibagian lain dari program
sesuai dengan perubahan waktu. Isi variabel–variabel ini diumpankan langsung ke
Port 1 (baris 2, 6, 10 dan 14 pada potongan program di atas), untuk
mengendalikan Saklar Ruas.
Saklar Digit dibentuk dengan transistor
PNP, jadi untuk meng-on-kan diperlukan tegangan ‘0’ pada salah satu kaki Port 3,
seperti terlihat pada baris 3, 7, 22 dan 15. Perhatikan posisi angka ‘0’ pada
keempat baris itu, akan nampak ‘0’ tersebut ber-‘jalan’ dari kiri ke kanan yang
setara dengan Saklar Digit bergilir ‘on’ dari
Q1 sampai
Q4.
TungguSebentar
merupakan sub-rutin yang berfungsi untuk menunda waktu (delay), agar angka yang
ditampilkan bisa tertahan sesaat sebelum berganti. Pada baris 17, aliran program
di alihkan kembali ke baris 1, sehingga potongan program ini akan bekerja terus
menerus tanpa henti menampilkan angka.
Jam Digital
Jam
Digital dalam proyek ini, sesungguhnya hanya berupa program. Pada dasarnya Jam
Digital adalah sistem pencacah (counter) bertingkat, dimulai dari pencacah menit
yang mencacah dari 0 sampai 59 dan melimpah kembali ke 0, dan pencacah jam dari
0 sampai 23 yang mencacah setiap kali ada limpahan dari pencacah menit, hal ini
bisa direalisasikan dengan program berikut:
1
JamDigital:
2
INC Menit
3
MOV
A,Menit
4
CJNE
A,#60,Keluar
5
MOV Menit,#0
6
INC JAM
7
MOV A,Jam
8
CJNE
A,#24,Keluar
9
MOV Jam,#0
10
Keluar:
11
RET
Menit dan Jam pada potongan program ini,
adalah variabel yang berfungsi sebagai pencacah menit dan pencacah jam. Sub-rutin
JamDigital ini akan dijalankan setiap menit sekali, sehingga perubahan nilai
pada variable Menit dan variable Jam persis mencerminkan perubahan waktu.
Interupsi Timer
Setelah membentuk sub-rutin
JamDigital di
atas, persoalan berikutnya adalah bagaimana agar sub-rutin itu benar-benar bisa
dijalankan satu kali setiap menit, untuk keperluan ini dipakai fasilitas timer
yang dimiliki AT89C2051.
Jam
Digital yang dibuat selalu menjalankan program
ScanDisplay
terus menerus tanpa henti, dengan mengggunakan fasilitas interupsi dari timer,
program ScanDisplay
di atas dihentikan sebentar setiap 50 mili detik, pada saat itu AT89AT2051
menggerakan untaian pencacah 20 dan pencacah 60, pencacah 20 akan melimpah
sekali per detik, dan pencacah 60 akan melimpah sekali per menit. Pada saat
terjadi limpahan pencacah 60, AT89C2051 akan menjalankan sub-rutin
JamDigital di
atas.
1
TimerInterrupt:
2
MOV TL0,#-50000
3
MOV TH0,#>-50000/256
4
DJNZ Pencacah20,Terus
5
MOV Pencacah20,#20
6
DJNZ Pencacah60,Terus
7
MOV Pencacah60,#60
8
ACALL JamDigital
9
Terus:
10
RETI
Baris 2 dan 3 di atas yang mempertahankan agar AT89C2051 menjalankan rutin
TimerInterrupt
setiap 20 mili detik, baris 4 sampai 7 merupakan untaian pencacah 20
dan pencacah 60, saat pencacah 60 melimpah pada baris 8 AT89C2051 menjalankan
sub-rutin JamDigital.
Agar mekanisme interupsi timer ini bisa bekerja seperti apa yang diharapkan,
pada awal program ditambahkan potongan program berikut :
1
ANL TMOD,#%11110000
2
ORL TMOD,#%00000001
3
MOV TL0,#-50000
4
MOV TLH,#-50000/256
5
SETB ET0
6
SETB EA
7
SETB TR0
Baris 1 dan 2 menentukan mode kerja dari Timer 0, Baris 3 dan 4 yang menentukan
agar AT89C2051 menjalankan rutin
TimerInterrupt
setiap 20 mili detik, baris 5 mengaktipkan interupsi Timer 0, baris 6
mengaktipkan sistem interupsi AT89C2051 dan baris 7 menjalankan Timer 0. Bagian
ini kelak akan dijelaskan lebih mendetil dalam artikel tersendiri.
Penutup
Sistem tampilan 7 ruas yang dibahas dalam artikel ini, merupakan hal baku yang
mendasari peralatan yang memerlukan tampilan, sistem tampilan ini dipakai untuk
membangun
Alat pengukur jarak dengan bantuan sinyal ultra sonic.