BAB III
PERANCANGAN DAN REALISASI ALAT
Pada bab ini akan dijelaskan secara rinci perancangan alat yang dibuat, dimulai dari penjelasan blok diagram sistem dan penjelasan bagian-bagiannya, kegunaan, cara kerja, dan perhitungannya. Perancangan sistem ini dibagi menjadi dua bagian utama, yaitu perancangan perangkat keras dan perangkat lunak. Perancangan dan realisasi sistem yang terdiri dari perangkat keras dan perangkat lunak digabungkan dalam bentuk blok diagram yang ditunjukkan pada Gambar 3.1. Bagian-bagian penyusun sistem penampil teks bergerak RGB merupakan bagian perangkat kerasnya, sedangkan perangkat lunaknya ada pada program interface dan program mikrokontroler.
Sistem Penampil Teks Bergerak RGB Komputer Modul kendali baris
Program Interface
Koneksi serial
Modul mikrokontroler AVR ATmega32
Modul penampil teks bergerak
Dot Matrix RGB 64 kolom x 7 baris
Modul kendali kolom
Koneksi catu daya
Gambar 3.1. Blok diagram sistem keseluruhan.
Sistem yang dibuat merupakan penggabungan sistem kendali digital, penyaklaran, dan komunikasi data serial komputer. Proses pengendalian baris dan kolom dilakukan secara otomatis oleh sistem, pengguna cukup menulis teks pada program interface, melakukan pengaturan animasi, memori penyimpanan, serta warna teks dan latar belakang, kemudian mengirimkannya ke mikrokontroler lewat komunikasi serial. Sistem penampil teks bergerak RGB terhubung dengan komputer selain untuk komunikasi serialnya, juga untuk hubungan catu dayanya. Sistem penampil teks 13
14
bergerak RGB mendapat catu daya dari power supply komputer, dengan tegangan masukan tetap sebesar lima volt.
3.1.
Perancangan dan Realisasi Perangkat Keras Sistem Bagian ini menjelaskan tentang perancangan dan realisasi perangkat keras
sistem. Perangkat keras sistem terdiri dari: 1. Modul mikrokontroler 2. Modul pengendali baris dan kolom 3. Modul penampil teks bergerak
Mikrokontroler berfungsi sebagai pengendali utama dari modul pengendali baris, pengendali kolom, dan komunikasi serial dengan komputer. Modul pengendali baris berfungsi untuk mengatur baris LED yang akan dihidupkan, karena dalam satu kondisi hanya diperbolehkan satu baris saja yang dihidupkan. Proses pengendalian baris ini dilakukan secara bergantian dan berurutan. Modul pengendali kolom berfungsi untuk mengatur kolom LED yang akan dihidupkan, kondisinya tergantung pada nilai logika baris yang dihidupkan. Modul penampil berfungsi sebagai media untuk mengatur baris LED yang akan dihidupkan, sehingga dapat membentuk suatu teks dengan warna dan animasi tertentu, berikut juga warna latar belakangnya.
3.1.1. Perancangan dan Realisasi Modul Mikrokontroler Mikrokontroler digunakan sebagai kendali utama dari keseluruhan sistem. Mikrokontroler terhubung dengan dua modul lain yang berfungsi sebagai pengendali khusus, yaitu: 1. Modul kendali baris, dan 2. Modul kendali kolom
Mikrokontrol dan PC berkomunikasi secara serial dengan kecepatan 9600 bps. Data yang dikirimkan dari PC akan melalui MAX232 terlebih dahulu untuk konversi level tegangannya, kemudian diteruskan ke mikrokontroler. Mikrokontroler pada perancangan diatur sebagai pengirim dan penerima, yaitu sebagai penerima data dari PC untuk masukan data, dan sebagai pengirim untuk memberi informasi bahwa data sudah
15
lengkap diterima. Kaki RX-TX pada PC dan MAX232 dihubungkan secara bersilangan untuk hubungan pengiriman dan penerimaan datanya, ditunjukkan pada Gambar 3.2.
TX
T1OUT
PC
T1IN
MAX232 RX
R1IN
TXD (PORTD.1)
ATmega32 R1OUT
RXD (PORTD.0)
Gambar 3.2. Komunikasi data antara PC dan ATmega32.
Pada perancanganada tiga PORT mikrokontroler yang digunakan sebagai kendali utama untuk baris dan shift register yang secara bersesuaian ditunjukkan pada Tabel 3.1.
Tabel 3.1. Koneksi baris dan shift register dengan PORT mikrokontroler. PORT PORTA
Urutan
Fungsi Kendali
PORTA.0 K PORTA.6
Baris 1 K Baris 7
PORTC.0
Shift register untuk warna red
K PORTC.3
PORTC PORTB
PORTC.4 K PORTC.7
Shift register untuk warna blue
PORTB.0
Shift register untuk warna green
K PORTB.3
Komunikasi serial yang digunakan mikrokontroler adalah level tegangan TTL, sedangkan PC menggunakan level tegangan yang bersesuaian dengan protokol RS232. Oleh sebab itu dibutuhkan suatu konverter tegangan untuk mengubah level tegangan dari TTL ke RS232 dan sebaliknya, yaitu dengan menggunakan MAX232 produksi Maxim. Untai mikrokontroler, dan koneksinya untuk reset dan serial secara lengkap ditunjukkan pada Gambar 3.3.
16
LED VCC JPS
VCC
J1 5 9 4 8 3 TIGA 7 2 DUA 6 1
1 2 10 11
RLD
RR SR CR IC1 DT12 CL2 ST2 OE2
VCC D Connector 9 JP1 C1 IC2
6 5 4 3 2 1
VCC
1 MAX232
C2
C3
DUA TIGA RX TX
RST
RST VCC
CX1 RX TX
JP2 C4 CX2
Y1 XTAL
5 4 3 2 1
PB0 PA0 PB1 PA1 PB2 PA2 PB3 PA3 PB4 PA4 PB5/MOSI PA5 PB6/MISO PA6 PB7/SCK PA7 RST AREF VCC GND GND AVCC XTAL1 PC7 XTAL2 PC6 PD0/RXD PC5 PD1/TXD PC4 PD2 PC3 PD3 PC2 PD4 PC1 PD5 PC0 PD6 PD7
SW1 SW2 SW3 SW4 SW5 SW6 SW7
VCC DT13 CL3 ST3 OE3 DT11 CL1 ST1 OE1
ATMega32
Gambar 3.3. Untai mikrokontroler, reset, dan tx-rx serial.
3.1.2. Perancangan dan Realisasi Modul Pengendali Baris Modul ini berfungsi sebagai kendali untuk baris, untuk memilih baris LED RGB mana yang akan dihidupkan. Dot matrix RGB yang digunakan pada perancangan yang menjadi kaki common-nya adalah anoda dari LED RGB, oleh sebab itu kaki common dari tiap-tiap baris dihubungkan ke kendali untuk masing-masing baris secara bersesuaian. Keluaran dari PORTA tidak dapat dihubungkan secara langsung ke kaki common untuk masing-masing baris, karena port I/O untuk keluaran hanya dapat memberikan arus sebesar 20mA, sehingga hanya dapat menghidupkan satu LED dengan satu warna dasar saja. Jadi jika port I/O keluaran ingin digunakan untuk mengendalikan piranti yang konsumsi arus maupun tegangannya lebih besar, maka harus ditambahkan rangkaian pengendali untuk piranti tersebut. Rangkaian pengendali tambahan yang digunakan pada perancangan adalah rangkaian penyaklaran, dengan menggunakan MOSFET sebagai komponen utamanya. Kelebihan MOSFET dibanding transistor adalah lebih mudah dalam pengontrolannya, karena cukup memberikan bias tegangan saja. Selain itu penggunaan MOSFET juga lebih hemat daya dibanding transistor, dan dapat mengalirkan arus yang cukup besar. Untuk mengalirkan arus yang cukup besar dibutuhkan transistor yang ukurannya semakin besar pula, namun jika yang digunakan adalah MOSFET maka luasan rangkaian dapat diperkecil, karena ukuran MOSFET lebih kecil dari transistor daya. Pada rangkaian, MOSFET difungsikan sebagai saklar elektronik, yaitu untuk
17
melewatkan arus yang cukup dari sumber daya untuk menghidupkan LED untuk tiap barisnya. Rangkaian kendali baris yang dirancang dapat dilihat pada Gambar 3.4.
Gambar 3.4. Rangkaian kendali untuk tiap baris.
Pada rangkaian terlihat bahwa antara Gate (G) dan Source (S) dihubungkan dengan sebuah resistor 1 KΩ, resistor ini berfungsi sebagai R-pull up bagi masukan MOSFET yaitu pada kaki Gate. Saat PORTA.n bernilai logika 0, maka terdapat perbedaan tegangan antara kaki G dan S sebesar -5V, MOSFET akan berada dalam kondisi triode sehingga dapat melewatkan arus dari catu daya ke baris yang bersangkutan. Sebaliknya saat PORTA.n bernilai logika 1, maka antara kaki G dan S tidak terdapat perbedaan tegangan, MOSFET akan berada dalam kondisi cut-off, sehingga jalur antara catu daya dan baris yang bersangkutan menjadi terputus. Dot matrix yang digunakan pada perancangan adalah tujuh baris, mulai dari baris satu sampai tujuh, sehingga PORTA yang digunakan adalah PORTA.0 hingga PORTA.6, yaitu bersesuaian dengan nilai n pada Gambar 3.4, dimulai dari nol hingga enam. Bersesuaian dengan Gambar 3.4, PORTA.n digunakan untuk mengendalikan MOSFET pada baris (n+1). Komponen MOSFET yang digunakan dalam perancangan adalah HEXFET Power MOSFET tipe P-channel dengan nama IRF9540 buatan International Rectifier yang digunakan dalam perancangan karena memiliki beberapa keunggulan, antara lain: 1. Fast switching 2. Maximum drain current up to 23A 3. RDS(on) maks. = 0,117Ω, sehingga extremely efficient Sedangkan kekurangan dari IRF9540 ditunjukkan pada lampiran B, yaitu mengenai pengaruh suhu terhadap arus drain maksimum yang dapat dilewatkan. Dari gambar terlihat bahwa pengaruh panas menyebabkan arus drain maksimum yang dapat
18
dilewatkan menjadi turun, faktor yang paling umum adalah paparan panas matahari, khususnya apabila sistem penampil diletakkan di tempat yang terkena panas matahari secara langsung, seperti yang ada pada lampu lalu lintas. Arus maju puncak yang dilewatkan pada tiap warna dasar RGB berbeda-beda, untuk R = 105 mA, G = 52,5 mA, dan B = 105 mA, penjelasan perolehan nilai-nilai ini dapat dilihat pada penjelasan untuk persamaan (3.4). Jika ketiga LED dihidupkan bersama, maka hubungan konsumsi arus yang dibutuhkan untuk satu dot dengan duty cycle yang digunakan sesuai persamaan berikut:
I dot = (I R + I G + I B ) . duty cycle ……………………………………….(3.1)
DenganIdot= arus satu dot, IR = arus LED red, IG = arus LED green, IB = arus LED blue. Demikian nilai Idot untuk duty cycle satu per tujuh diperoleh: I dot = (105 mA + 52,5 mA + 105 mA ) . 1
7
I dot = 37,5 mA
Penampil teks bergerak RGB yang dibuat standarnya menggunakan delapan buah dot matrix ukuran 7 baris x 8 kolom. Sehingga perhitungan total arus untuk satu baris penampil sebanyak 64 dot dengan duty cycle satu per tujuh adalah:
I 64 dot = 64 x I dot …………………………………………………………...(3.2) I 64 dot = 64 x 37,5 mA I 64 dot = 2,4 A
Didapatkan nilai arus maksimum yang lewat pada MOSFET adalah 2,4 Ampere. Dengan menggunakan nilai ini, maka disipasi daya maksimum yang terpakai oleh MOSFET dengan duty cycle satu per tujuh dapat dicari dengan menggunakan persamaan berikut:
P = I 2 . RDS (on) ……………………………………………………………(3.3) P = (2,4 A ) .0,117 Ω 2
P = 0,674 Watt
Saat MOSFET dalam kondisi triode maka disipasi daya maksimum yang terpakai adalah 0,674 Watt. Hal ini hanya berlaku apabila ketiga LED RGB dinyalakan
19
bersama, selain daripada itu tentu nilainya lebih kecil dari 0,674 Watt. Perhitungan dapat dilakukan sama seperti yang sebelumnya, yaitu menggunakan persamaan (3.1), (3.2), dan (3.3). Untai pengendali baris ada tujuh buah, yang masing-masing memiliki gambar untai yang sama, hanya koneksinya pada port yang bersesuaian yang berbeda. Gambar untai pengendali baris ditunjukkan pada Gambar 3.5. VCC
RP1 SW1
RP2 Q1 MOSFET-P
SW2
VCC
RP3 Q2 MOSFET-P
SW3
B2
B3
VCC
VCC
VCC
RP6 Q5 MOSFET-P B5
SW6
VCC
RP4 Q3 MOSFET-P
B1
RP5 SW5
VCC
SW4
Q4 MOSFET-P B4
RP7 Q6 MOSFET-P B6
SW7
Q7 MOSFET-P B7
Gambar 3.5.Untai pengendali baris dengan MOSFET tipe-P.
3.1.3. Perancangan dan Realisasi Modul Pengendali Kolom Modul ini berfungsi sebagai kendali untuk kolom, untuk mengisi data kolom LED RGB yang akan dihidupkan. Kaki common katoda untuk tiap warna dasar dihubungkan ke kaki keluaran paralel shift register yang bersesuaian dengan masingmasing warnanya melalui sebuah resistor. Pemasangan kaki common katoda untuk tiap warna dasar bersesuaian dengan shift register-nya dapat dilihat pada Gambar 3.6.
Gambar 3.6. Koneksi tiap satu kolom LED RGB dan shift register pasangannya.
20
Keterangan S.REG pada Gambar 3.6 menunjuk pada pin keluaran shift register yang digunakan. Komponen shift register yang digunakan pada perancangan adalah shift register HCF4094BE 8 stage tipe MOS buatan STMicroelectronics yang didalamnya telah dilengkapi store bus register dengan tri-state output. Keunggulan dari chip ini adalah memiliki pin strobe dan output enable, sehingga dapat diatur kapan data harus dikeluarkan ataupun ditahan, selain itu pada saat yang sama data yang baru dapat langsung diisikan dan disimpan tanpa mengubah data lama yang sudah ada. Konfigurasi kaki dari IC HCF4094BE dapat dilihat pada lampiran B bagian konfigurasi kaki. Data masukan yang diterima dari 8-stage shift registerakan disimpan dalam 8-bit storage register, kemudian baru diteruskan ke tri-state output. Masukan datanya berupa serial dan hasil keluarannya berupa data paralel. Tabel kebenaran dari shift register HCF4094BE ditunjukkan pada lampiran C bagian Tabel Kebenaran HCF4094BE, yang digunakan sebagai pedoman pengendalian untuk masing-masing pin kendali pada shift register. Saat output enable bernilai logika low, maka output akan berada dalam kondisi tri-state. Data pada tiap stage shift register akan dikirim ke storage register ketika masukan strobe bernilai logika high, sebaliknya ketika masukan strobe bernilai logika low, maka data yang tertampil adalah data terakhir yang ada pada storage register, dengan syarat output enable-nya bernilai logika high. Pada saat output enable dan strobe keduanya bernilai logika high, maka saat terjadi clock transisi dari low ke high, data yang ada pada Qn adalah data yang ada pada Qn-1 sebelumnya dan data yang ada pada stage tujuh dipindahkan ke Q7 dan keluaran Qs. Keluaran Qs ini dihubungkan ke pin data shift register selanjutnya untuk warna yang sama, melalui hubungan kaskade seperti yang ditunjukkan pada Gambar 3.7. Resistor kolom 1 …………………..………………………………………………………………………………………………………….……… kolom ke 64 8
data
Parallel data
output Qs
Parallel data
output Qs
8
8
8
8
Parallel
output
data
str clk oe
str = strobe, clk = clock, oe = output enable Gambar 3.7. Hubungan kaskade HCF4094BE.
Qs
21
Karena jumlah kolom yang digunakan ada 64, maka dibutuhkan delapan shift register yang dihubungkan secara kaskade untuk masing-masing warna dasar. Pin output enable, strobe, data, dan clock diatur lewat port keluaran mikrokontroler. Jadi untuk tiap warna dasar R, G, dan B masing-masing membutuhkan empat port keluaran mikrokontroler untuk pengaturan shift register-nya. Koneksi kontrol shift register dengan PORT pada mikrokontrol berdasarkan warna dasarnya secara bersesuaian ditunjukkan pada Tabel 3.2.
Tabel 3.2. Koneksi per bagian kontrol shift register dengan PORT mikrokontroler.
Red
Kaki Kontrol
Green
Blue
Data
PORTC.2 PORTB.2
PORTC.6
Clock
PORTC.0 PORTB.0
PORTC.4
Strobe
PORTC.1 PORTB.1
PORTC.5
Output enable PORTC.3 PORTB.3
PORTC.7
PORT pada mikrokontroler cukup mengeluarkan logika high mauupun low untuk mengontrol kaki kontrol pada shift register. Keluaran data dari kaki kontrol dianggap valid apabila memenuhi kriteria waktu tunda minimal yang ditunjukkan pada lampiran C bagian Tabel Karakteristik Elektrik HCF4094BE. Shift register yang digunakan untuk pengendali kolom ada 24 buah, yang terdiri dari delapan shift register untuk warna red, delapan shift register untuk warna green, dan delapan shift register untuk warna blue. Untai pengendali baris yang digunakan ditunjukkan pada Gambar 3.8. RR21 RR22 RR23 RR24
IC11
ST2 DT22 CL2 G21 G22 G23 G24
RG21 RG22 RG23 RG24
1
IC13
OE3 RB15 RB16 RB17 RB18 DT23
B15 B16 B17 B18
B21 B22 B23 B24
RB21 RB22 RB23 RB24
1
IC23
OE1 RR35 RR36 RR37 RR38 DT41
VCC C41
R35 R36 R37 R38
ST1 DT41 CL1 R41 R42 R43 R44
RR41 RR42 RR43 RR44
IC31
OE2 RG25 RG26 RG27 RG28 DT32
ST2 DT32 CL2 G31 G32 G33 G34
RG31 RG32 RG33 RG34
1
OE2 RG35 RG36 RG37 RG38 DT42
B25 B26 B27 B28
B31 B32 B33 B34
RB31 RB32 RB33 RB34
1
IC33
R45 R46 R47 R48
VCC C42 G35 G36 G37 G38
ST2 DT42 CL2 G41 G42 G43 G44
RG41 RG42 RG43 RG44
1
OE2 RG45 RG46 RG47 RG48 DT52
G45 G46 G47 G48
IC42
VCC C33 ST3 DT33 CL3
OE1 RR45 RR46 RR47 RR48 DT51
IC41
IC32
OE3 RB25 RB26 RB27 RB28 DT33
1
VCC C32 G25 G26 G27 G28
VCC C23 ST3 DT23 CL3
SHIFT REGISTER
RB11 RB12 RB13 RB14
SHIFT REGISTER
B11 B12 B13 B14
RR31 RR32 RR33 RR34
IC22
VCC C13 1
R31 R32 R33 R34
1
VCC C22 G15 G16 G17 G18
IC12
ST3 DT13 CL3
ST1 DT31 CL1
SHIFT REGISTER
OE2 RG15 RG16 RG17 RG18 DT22
SHIFT REGISTER
RG11 RG12 RG13 RG14
SHIFT REGISTER
G11 G12 G13 G14
1
VCC C31
R25 R26 R27 R28
IC21
VCC C12 ST2 DT12 CL2
OE1 RR25 RR26 RR27 RR28 DT31
SHIFT REGISTER
R21 R22 R23 R24
1
OE3 RB35 RB36 RB37 RB38 DT43
VCC C43 B35 B36 B37 B38
ST3 DT43 CL3 B41 B42 B43 B44
RB41 RB42 RB43 RB44
1
SHIFT REGISTER
ST1 DT21 CL1
SHIFT REGISTER
VCC C21
R15 R16 R17 R18
SHIFT REGISTER
OE1 RR15 RR16 RR17 RR18 DT21
SHIFT REGISTER
RR11 RR12 RR13 RR14
SHIFT REGISTER
R11 R12 R13 R14
1
SHIFT REGISTER
VCC C11
ST1 DT11 CL1
OE3 RB45 RB46 RB47 RB48 DT53
IC43
Gambar 3.8. Untai pengendali baris dengan menggunakan shift register.
B45 B46 B47 B48
22
RR61 RR62 RR63 RR64
IC51
ST2 DT62 CL2 G61 G62 G63 G64
RG61 RG62 RG63 RG64
1
OE3 RB55 RB56 RB57 RB58 DT63
B55 B56 B57 B58
IC53
B61 B62 B63 B64
RB61 RB62 RB63 RB64
1
OE1 RR75 RR76 RR77 RR78 DT81
VCC C81
R75 R76 R77 R78
ST1 DT81 CL1 R81 R82 R83 R84
RR81 RR82 RR83 RR84
IC71
OE2 RG65 RG66 RG67 RG68 DT72
ST2 DT72 CL2 G71 G72 G73 G74
RG71 RG72 RG73 RG74
1
OE2 RG75 RG76 RG77 RG78 DT82
IC63
B65 B66 B67 B68
B71 B72 B73 B74
RB71 RB72 RB73 RB74
1
R85 R86 R87 R88
VCC C82 G75 G76 G77 G78
ST2 DT82 CL2 G81 G82 G83 G84
RG81 RG82 RG83 RG84
1
OE2 RG85 RG86 RG87 RG88 DT92
G85 G86 G87 G88
IC82
VCC C73 ST3 DT73 CL3
OE1 RR85 RR86 RR87 RR88 DT91
IC81
IC72
OE3 RB65 RB66 RB67 RB68 DT73
1
VCC C72 G65 G66 G67 G68
VCC C63 ST3 DT63 CL3
SHIFT REGISTER
RB51 RB52 RB53 RB54
SHIFT REGISTER
B51 B52 B53 B54
RR71 RR72 RR73 RR74
IC62
VCC C53 1
R71 R72 R73 R74
1
VCC C62 G55 G56 G57 G58
IC52
ST3 DT53 CL3
ST1 DT71 CL1
SHIFT REGISTER
OE2 RG55 RG56 RG57 RG58 DT62
SHIFT REGISTER
RG51 RG52 RG53 RG54
SHIFT REGISTER
G51 G52 G53 G54
1
VCC C71
R65 R66 R67 R68
IC61
VCC C52 ST2 DT52 CL2
OE1 RR65 RR66 RR67 RR68 DT71
SHIFT REGISTER
R61 R62 R63 R64
1
OE3 RB75 RB76 RB77 RB78 DT83
VCC C83 B75 B76 B77 B78
ST3 DT83 CL3 B81 B82 B83 B84
RB81 RB82 RB83 RB84
IC73
SHIFT REGISTER
ST1 DT61 CL1
SHIFT REGISTER
VCC C61
R55 R56 R57 R58
SHIFT REGISTER
OE1 RR55 RR56 RR57 RR58 DT61
SHIFT REGISTER
RR51 RR52 RR53 RR54
SHIFT REGISTER
R51 R52 R53 R54
1
SHIFT REGISTER
VCC C51
ST1 DT51 CL1
1
OE3 RB85 RB86 RB87 RB88 DT93
B85 B86 B87 B88
IC83
Gambar 3.8 (Lanjutan). Untai pengendali baris dengan menggunakan shift register.
3.1.4. Perancangan dan Realisasi Modul Penampil Teks Bergerak Modul ini terdiri dari delapan buah dot matrix RGB ukuran 7 baris x 8 kolom yang dihubungkan secara kaskade seperti yang ditunjukkan pada Gambar 3.9, berfungsi untuk menampilkan teks berikut warnanya dan warna latar belakang sesuai dengan masukan data sebelumnya pada program interface. Namun jika diinginkan penampil yang lebih panjang, modul ini dapat juga ditambah dengan melakukan expand hingga lima belas dot matrix RGB. Panjang sebanyak delapan buah dot matrix RGB ini disesuaikan dengan standar umum yang ada, yaitu kelipatan empat. Panjang minimal yang digunakan pada perancangan adalah delapan dot matrix RGB, yaitu 64 kolom x 7 baris. Dot
8
Dot
matrixRGB(1)
matrixRGB(2)
7 baris x 8 kolom
7 baris x 8 kolom
Dot
………………………………………
matrixRGB(8) 7 baris x 8 kolom
Gambar 3.9. Hubungan kaskade dot matrix RGB 64 kolom x 7 baris.
Pemilihan dot matrix RGB ini didasarkan pada latar belakang yang telah dijelaskan sebelumnya. Satu piksel pada dot matrix RGB sesuai namanya terdiri dari tiga warna dasar, yaitu red, green, dan blue ditunjukkan pada Gambar 3.10, yang dapat dikombinasi sehingga dapat menghasilkan empat warna lain, yaitu cyan, magenta, yellow, dan white. Pemilihan warna teks dan latar belakang didasarkan pada tujuh pilihan warna yang tersedia tersebut.
23
Gambar 3.10. Komposisi satu piksel dot matrix RGB
Gambar untuk satu dot matrix RGB lebih lengkapnya dapat dilihat pada lampiran D bagian Gambar Koneksi Pin. Sesuai dengan gambar tersebut, yang menjadi kaki common pada LED yang berbeda warna untuk satu baris adalah kaki anoda, oleh sebab itu kaki common anoda tersebut dihubungkan ke kendali baris, dan kaki common katoda untuk satu kolom LED dengan warna yang sama dihubungkan ke kendali kolom yang bersesuaian. Spesifikasi untuk dot matrix RGB yang digunakan dapat dilihat pada lampiran D bagian Tabel Karakteristik Elektrik. Arus yang dilewatkan untuk tiap warna dibuat berbeda, yaitu untuk mendapatkan warna dengan intensitas yang sama untuk ketiga warna dasar di tiap piksel yang digunakan, agar ketika ketiga warna dasar tersebut dinyalakan, diharapkan dapat memiliki intensitas cahaya yang sama sehingga dapat dimunculkan warna white. Perhitungan nilai resistansi yang digunakan untuk tiap kolom tiap warna mengacu pada lampiran C bagian Grafik intensitas cahaya. Pada grafik lampiran terlihat bahwa dengan menurunkan arus typical menjadi setengah, maka intensitas cahaya typical-nya juga turun menjadi setengahnya. Hal ini hanya diterapkan untuk warna hijau, karena sesuai datasheet dot matrix yang digunakan warna hijau memiliki intensitas cahaya dua kali lebih besar dibanding dua warna yang lain. Nilai resistor yang dipasang untuk tiap warna dasar dapat dihitung dan ditentukan dengan persamaan sebagai berikut: R warna =
Rred =
typ . warna
). duty cycle
I warna
(5 − 1,9) V .
1
(5 − 3,3) V .
1 7
7,5 mA
(5 − 3,3) V . 15 mA
1
………………………………..……(3.4)
= 29,52 Ohm ≈ 30 Ohm
7
15 mA
Rgreen = Rblue =
(Vi − V
7
= 32,38 Ohm ≈ 33 Ohm
= 16,19 Ohm ≈ 18 Ohm
24
Pada kenyataannya, nilai-nilai resistansi yang didapat dari perhitungan sulit untuk didapatkan. Oleh sebab itu nilai yang ada pada sisi paling kanan digunakan sebagai nilai pendekatan dari nilai-nilai yang didapat dari perhitungan. Pada perancangan digunakan nilai duty cycle-nya adalah satu per tujuh, karena metode yang digunakan adalah scanning baris, dengan jumlah baris yang digunakan ada tujuh. Perhitungan arus maksimum yang digunakan untuk penampil teks bergerak sudah dilakukan pada bagian pembahasan kendali baris persamaan (3.2), yaitu maksimal sebesar 2,4 A. Nilai arus yang dibutuhkan tersebut tidak terlalu besar karena perangkat keras yang dirancang menggunakan kendali yang dilakukan secara scanning, sehingga meminimalkan arus yang digunakan. Nilai daya maksimum yang digunakan oleh penampil dengan duty cycle satu per tujuh dapat dihitung dengan menggunakan persamaan di bawah ini. Ppenampil = V .I 64 dot ……………………………………………………….(3.5) Ppenampil = 5 V. 2,4 A Ppenampil = 12 Watt
Penampil teks bergerak RGB yang digunakan disusun dari 8 buah dot matrix RGB ukuran 7 baris x 8 kolom yang disusun memanjang ke samping, dan terhubung dengan MOSFET dan resistor pada shift register yang bersesuaian. Untai penampil yang
B7 B6 B5 G81 G82 G83 G84 G85 G86 G87 G88 B4 B3 B2 B1
B7 B6 B5 G71 G72 G73 G74 G75 G76 G77 G78 B4 B3 B2 B1
DOT MATRIX RGB 8x8
BK1 BK2 BK3 BK4 BK5 BK6 BK7 BK8 RK1 RK2 RK3 RK4 RK5 RK6 RK7 RK8 B7 B6 B5 G41 G42 G43 G44 G45 G46 G47 G48 B4 B3 B2 B1 B8 B7 B6 B5 GK1 GK2 GK3 GK4 GK5 GK6 GK7 GK8 B4 B3 B2 B1
DOT MATRIX RGB 8x8
BK1 BK2 BK3 BK4 BK5 BK6 BK7 BK8 RK1 RK2 RK3 RK4 RK5 RK6 RK7 RK8
B8 B7 B6 B5 GK1 GK2 GK3 GK4 GK5 GK6 GK7 GK8 B4 B3 B2 B1
DM4
BK1 BK2 BK3 BK4 BK5 BK6 BK7 BK8 RK1 RK2 RK3 RK4 RK5 RK6 RK7 RK8
B8 B7 B6 B5 GK1 GK2 GK3 GK4 GK5 GK6 GK7 GK8 B4 B3 B2 B1 BK1 BK2 BK3 BK4 BK5 BK6 BK7 BK8 RK1 RK2 RK3 RK4 RK5 RK6 RK7 RK8
B8 B7 B6 B5 GK1 GK2 GK3 GK4 GK5 GK6 GK7 GK8 B4 B3 B2 B1
B8 B7 B6 B5 GK1 GK2 GK3 GK4 GK5 GK6 GK7 GK8 B4 B3 B2 B1 B7 B6 B5 G31 G32 G33 G34 G35 G36 G37 G38 B4 B3 B2 B1
B7 B6 B5 G21 G22 G23 G24 G25 G26 G27 G28 B4 B3 B2 B1
B7 B6 B5 G11 G12 G13 G14 G15 G16 G17 G18 B4 B3 B2 B1 B8 B7 B6 B5 GK1 GK2 GK3 GK4 GK5 GK6 GK7 GK8 B4 B3 B2 B1 BK1 BK2 BK3 BK4 BK5 BK6 BK7 BK8 RK1 RK2 RK3 RK4 RK5 RK6 RK7 RK8
R88 R87 R86 R85 R84 R83 R82 R81 B88 B87 B86 B85 B84 B83 B82 B81
DM3
DOT MATRIX RGB 8x8
DOT MATRIX RGB 8x8
R78 R77 R76 R75 R74 R73 R72 R71 B78 B77 B76 B75 B74 B73 B72 B71
DOT MATRIX RGB 8x8
DOT MATRIX RGB 8x8
R68 R67 R66 R65 R64 R63 R62 R61 B68 B67 B66 B65 B64 B63 B62 B61
R58 R57 R56 R55 R54 R53 R52 R51 B58 B57 B56 B55 B54 B53 B52 B51
DM2
DM8
BK1 BK2 BK3 BK4 BK5 BK6 BK7 BK8 RK1 RK2 RK3 RK4 RK5 RK6 RK7 RK8
DOT MATRIX RGB 8x8
BK1 BK2 BK3 BK4 BK5 BK6 BK7 BK8 RK1 RK2 RK3 RK4 RK5 RK6 RK7 RK8
BK1 BK2 BK3 BK4 BK5 BK6 BK7 BK8 RK1 RK2 RK3 RK4 RK5 RK6 RK7 RK8
DOT MATRIX RGB 8x8
DM1
DM7
B8 B7 B6 B5 GK1 GK2 GK3 GK4 GK5 GK6 GK7 GK8 B4 B3 B2 B1
DM6
B8 B7 B6 B5 GK1 GK2 GK3 GK4 GK5 GK6 GK7 GK8 B4 B3 B2 B1
DM5
B7 B6 B5 G61 G62 G63 G64 G65 G66 G67 G68 B4 B3 B2 B1
B7 B6 B5 G51 G52 G53 G54 G55 G56 G57 G58 B4 B3 B2 B1
digunakan ditunjukkan pada Gambar 3.11.
R48 R47 R46 R45 R44 R43 R42 R41 B48 B47 B46 B45 B44 B43 B42 B41
R38 R37 R36 R35 R34 R33 R32 R31 B38 B37 B36 B35 B34 B33 B32 B31
R28 R27 R26 R25 R24 R23 R22 R21 B28 B27 B26 B25 B24 B23 B22 B21
R18 R17 R16 R15 R14 R13 R12 R11 B18 B17 B16 B15 B14 B13 B12 B11
Gambar 3.11. Untai penampil teks bergerak RGB.
25
3.2.
Perancangan dan Realisasi Perangkat Lunak Sistem Bagian ini menjelaskan tentang perancangan dan realisasi perangkat lunak
sistem. Perangkat lunak sistem terdiri dari dua bagian, yaitu program interface dan program mikrokontroler. Kedua program tersebut menggunakan bahasa pemrograman yang berbeda, program interface dibuat dengan bahasa pemrograman Visual Basic, sedangkan program mikrokontroler dibuat dengan bahasa pemrograman C. Program interface digunakan oleh pengguna untuk menuliskan data teks yang akan dikirimkan, mengatur pengaturan memori penyimpanan data, animasi, warna teks dan latar belakang, dan pengiriman data keseluruhan. Program mikrokontroler digunakan untuk mengendalikan proses pengendalian baris dan kolom pada sistem penampil teks bergerak RGB, sehingga data teks yang ditampilkan sesuai dengan yang diharapkan.
3.2.1. Perancangan dan Realisasi Program Interface Program interface merupakan suatu program untuk tampilan yang digunakan pengguna untuk menuliskan atau mengubah data teks, melakukan pengaturan memori penyimpanan, animasi, warna teks dan latar belakang, dan mengirimkan keseluruhan data. Proses kerja dari program interface mengacu pada diagram alir program yang ditunjukkan pada Gambar 3.12. Mulai
Inisialisasi tampilan awal
ubah teks, animasi,
warna teks dan latar belakang,
Tidak
atau memori penyimpanan
Tidak
Ya
Ya
kirim
Keluar
Ya
Selesai
Gambar 3.12. Diagram alir program interface.
26
Program interface tidak harus aktif setiap saat, program ini hanya perlu diaktifkan pada saat pengguna ingin melakukan perubahan data, yang meliputi teks, warna, memori penyimpanan, dan animasi. Setiap kali program interface diaktifkan atau dibuka, maka program akan melakukan inisialisasi data dan tampilan awal sebagai standar pengaturan agar program siap untuk digunakan. Setelah proses tersebut berlangsung pengguna dapat melakukan pengubahan data teks, warna teks atau latar belakang, memori penyimpanan, maupun animasi. Data yang sudah siap untuk dikirim akan terlebih dahulu dicek oleh program, jika data valid maka data segera dikirimkan melalui komunikasi serial ke mikrokontroler, sebaliknya bila data tidak valid maka pengguna diharuskan melakukan pengaturan ulang. Data dianggap valid apabila data teks yang dimasukkan pengguna tidak melebihi 50 karakter. Setelah proses pengiriman, pengguna dapat menutup aplikasi maupun kembali melakukan pengaturan data. Berikut adalah tampilan program interface yang dibuat, ditunjukkan pada Gambar 3.13.
Tombol keluar Tempat
menulis teks Sisa ruang kosong
Pengaturan
karakter yang tersedia
warna teks
Contoh tampilan berdasar Pengaturan
warna latar belakang
pengaturan warna teks dan Pengaturan
latar belakang
animasi Pengaturan memori
Gambar 3.13. Tampilan program interface.
Gambar di atas merupakan tampilan ketika aplikasi mula-mula diaktifkan, tombol kirim belum ada karena belum ada teks yang dituliskan pada kotak tempat menulis teks. Penempatan tombol kirim berada tepat di bawah tombol keluar dan
27
letaknya sejajar. Saat ada teks yang dituliskan pada kotak teks, maka tombol kirim akan muncul. Tombol kirim akan kembali tidak terlihat apabila isi kotak teks kosong. Tampilan mula-mula aplikasi dapat terjadi demikian karena pada saat awal program melakukan inisialisasi untuk warna teks dan latar belakang, memori, dan animasi. Pengaturan tersebut merupakan pengaturan awal standar, yang akan selalu menghasilkan tampilan demikian setiap kali aplikasi diaktifkan. Program melakukan inisialisasi tampilan setiap kali aplikasi diaktifkan dengan algoritma yang ditunjukkan pada Kode 3.1.
application_Open() { list_textcolor_1 list_textcolor_2 list_textcolor_3 list_backcolor_1 list_backcolor_2 list_memory list_animation button_kirim }
= = = = = = = =
“Red” “Red” “Red” “No color” “No color” “RAM” “Shift Left” hide()
Kode 3.1. Inisialisasi tampilan awal aktif.
Pada tampilan aplikasi terdapat sebuah label bertuliskan “Remain: 50”, ini merupakan label penunjuk sisa karakter, yang fungsinya sebagai indikator bagi pengguna untuk mengetahui sisa ruang kosong karakter yang tersedia. Proses pengisian nilai sisa karakter ini berada didalam fungsi penerimaan data karakter pada kotak teks yang ditunjukkan pada Kode 3.2.
textbox_TextChanged() { label_remain= 50 – TextLength If(TextLength == 0) hide(button_kirim) Else show(button_kirim) }
Kode 3.2. Penerimaan data karakter pada kotak teks.
Setiap kali pengguna menuliskan suatu karakter maka nilai sisa karakter ini akan berkurang satu, jadi sisa karakter ini dapat bernilai positif atau nol. Positif terjadi bila
28
jumlah data teks yang dituliskan kurang dari 50, nol jika jumlah data teks sama dengan 50. Terdapat proteksi saat nilai sisa karakter mencapai nol, kotak teks tidak dapat diisi kembali, tujuannya adalah agar karakter yang dituliskan tidak melebihi 50 karakter. Ada beberapa bagian yang nilainya telah dideklarasi terdahulu di bagian properti sistem, antara lain adalah warna dari form aplikasi dan contoh tampilan, daftar isi dari memori, animasi, warna teks, dan warna latar belakang. Terdapat tujuh pilihan memori penyimpanan yang dapat digunakan, deklarasi isi dari daftar memori yang tersedia ditunjukkan pada Tabel 3.3.
Tabel 3.3. Daftar isi pilihan memori penyimpanan. Indeks 0 1 2 3 4 5 6 7 8
Nama Memori EEPROM 1 EEPROM 2 EEPROM 3 EEPROM 4 EEPROM 5 EEPROM 6 EEPROM 7 EEPROM 8 RAM
Setiap kali ada perubahan pada memori yang dipilih maka secara otomatis program menyimpan indeks dari nama memori yang dipilih dari daftar, sehingga tidak perlu ada fungsi pada kode program untuk mendeteksi memori yang dipilih oleh pengguna. Lain halnya dengan daftar animasi yang pemilihannya terkait erat dengan jumlah karakter dari teks yang dimasukkan. Terdapat lima pilihan animasi yang tersedia, ditunjukkan pada Tabel 3.4.
Tabel 3.4. Daftar isi pilihan animasi dan persyaratan penggunaannya. Indeks
Nama Animasi
0
Shift Left
1 2 3 4
Static Blink Scroll Down Show Horizontal
Syarat Penggunaan Tersedia untuk jumlah karakter pada kotak teks dari 1 sampai 50 Tersedia apabila jumlah karakter yang dituliskan pada kotak teks tidak melebihi 10 karakter
29
Proses pendeteksian jumlah karakter yang ada pada kotak teks, terjadi setiap kali saat pengguna membuka daftar animasi untuk memilih. Proses ini dilakukan dengan mengikuti algoritma yang ditunjukkan pada Kode 3.3. list_anim_Open() { if(TextLength > 10) hide(“Static”) hide(“Blink”) hide(“Scroll Down”) hide(“Show Horizontal”) Else show(“Static”) show(“Blink”) show(“Scroll Down”) show(“Show Horizontal”) }
Kode 3.3. Pemilihan animasi pada daftar.
Setiap kali ada perubahan pada animasi yang dipilih maka secara otomatis program menyimpan indeks dari nama animasi yang dipilih pada daftar. Fungsi yang ada pada Kode 3.3 digunakan sebagai proteksi yang berkaitan dengan jumlah karakter yang ada pada kotak teks, sesuai dengan persyaratan yang ada pada Tabel 3.4. Pada saat pengguna membuka daftar animasi dan jumlah karakter pada saat itu kurang dari atau sama dengan sepuluh maka nama animasi pada indeks satu sampai empat tetap ditampilkan, sebaliknya bila jumlah karakter pada saat itu lebih besar dari sepuluh maka nama animasi pada indeks satu sampai empat disembunyikan. Pengaturan untuk warna teks dan latar belakang tampilan dilakukan dalam dua tahapan, yaitu pemilihan banyaknya variasi warna dan jenis warna yang ingin digunakan. Banyaknya variasi warna hanya satu saja yang dapat dipilih dari beberapa pilihan yang tersedia, yaitu maksimal tiga untuk warna teks dan dua untuk warna latar belakang. Jumlah daftar warna yang tertampil sesuai dengan pilihan banyaknya variasi warna yang dipilih. Daftar warna diletakkan tepat di sebelah kanan pilihan jumlah variasi warna, yang hanya akan tertampil pada saat pilihan jumlah variasi warna yang ada tepat di sebelah kirinya dipilih, konsepnya sesuai dengan petunjuk yang ada pada Tabel 3.5.
30
Tabel 3.5. Hubungan pemilihan jumlah variasi warna dan daftar yang tertampil. Keperluan Warna teks
Warna latar belakang
Jumlah Variasi Warna 1 2 3 1 2
Daftar Warna yang Tertampil Teks 1 Teks 1 dan 2 Teks 1, 2, dan 3 Latar belakang 1 Latar belakang 1 dan 2
Konsep yang ada pada Tabel 3.5 digunakan sebagai algoritma untuk mengatur hubungan pemilihan jumlah variasi warna dan daftar yang ditampilkan. Penggunaan algoritma ini jelas terlihat ketika pilihan banyaknya variasi warna dipilih yang ditunjukkan pada Kode 3.4.
optionbutton_tc1_Select() { show(list_tc1) hide(list_tc2) hide(list_tc3) } optionbutton_tc2_Select() { show(list_tc2) hide(list_tc3) } optionbutton_tc3_Select() { show(list_tc3) } optionbutton_bc1_Select() { show(list_bc1) hide(list_bc2) } optionbutton_bc2_Select() { show(list_bc2) }
Kode 3.4. Penampilan daftar warna berdasarkan banyak variasi warna yang dipilih.
Pengubahan jenis warna yang dipilih dari daftar tidak akan berpengaruh terhadap tampilan pilihan banyaknya variasi warna, karena daftar warna yang tertampil bergantung pada banyaknya variasi warna yang dipilih. Pengubahan warna pada daftar hanya akan berpengaruh terhadap warna dari gambar contoh tampilan yang ada pada form, yaitu dengan mengatur nilai data RGB-nya dari 0 sampai 255. Dalam hal ini yang dipakai adalah nilai minimal atau maksimalnya saja, yaitu 0 atau 255. Warna yang ditampilkan pada gambar sesuai kombinasi nilai data RGB-nya ditunjukkan pada Tabel 3.6.
31
Tabel 3.6. Hubungan nilai data RGB dan warna yang ditampilkan. Kombinasi Nilai Warna R G B 255 0 0 0 255 0 0 0 255 0 255 255 255 0 255 255 255 0 255 255 255 0 0 0
Warna yang Ditampilkan Red Green Blue Cyan Magenta Yellow White No Color
Konsep yang digunakan pada daftar warna ini sama seperti yang digunakan pada daftar memori penyimpanan dan animasi, program secara otomatis menyimpan nilai indeks dari warna yang dipilih. Urutan indeks dari daftar warna ditunjukkan pada Tabel 3.7.
Tabel 3.7. Daftar warna berdasarkan urutan indeks. Indeks 0 1 2 3 4 5 6 7
Warna Red Green Blue Cyan Magenta Yellow White No Color
Data warna yang nantinya akan dikirimkan ke mikrokontroler tidak sama seperti yang digunakan pada memori penyimpanan dan animasi. Data memori penyimpanan dan animasi dikirimkan dalam bentuk karakter angka, sedangkan data warna dikirimkan dalam bentuk karakter huruf. Oleh sebab itu pada program diperlukan suatu fungsi untuk mengecek nilai indeks dari warna yang dipilih, kemudian menyimpannya dalam bentuk karakter huruf yang bersesuaian dengan warnanya. Algoritma dari fungsi tersebut ditunjukkan pada Kode 3.5.
32
cek_color() { If (index_color == 0) set_color(255,0,0) data_color = ‘r’ Else If(index_color == 1) set_color(0,255,0) data_color = ‘g’ Else If(index_color == 2) set_color(0,0,255) data_color = ‘b’ Else If(index_color == 3) set_color(0,255,255) data_color = ‘c’ Else If(index_color == 4) set_color(255,0,255) data_color = ‘m’ Else If(index_color == 5) set_color(255,255,0) data_color = ‘y’ Else If(index_color == 6) set_color(255,255,255) data_color = ‘w’ }
Kode 3.5. Hubungan indeks warna dan data warna.
Setelah semua pengaturan selesai dilakukan, pengguna hanya perlu menekan tombol kirim untuk mengirimkan data ke mikrokontroler. Data dikirimkan dari komputer ke mikrokontroler menggunakan komunikasi serial RS232. Untuk dapat melakukan pengiriman data maka diperlukan fungsi untuk menangani inisialisasi port dan pengiriman data, yang ditunjukkan pada Kode 3.6, sedangkan fungsi deteksi penekanan tombol kirim ditunjukkan pada Kode 3.7. Send_Serial_Data(alldata) { port_name = COM1 baudrate = 9600 parity = none data_bit = 8 stop_bit = 1 serial_port_send(alldata) }
Kode 3.6. Inisialisasi port serial dan pengiriman data.
33
button_send_Click() { Send_serial_data(alldata) Message(“Success”) }
Kode 3.7. Deteksi penekanan tombol kirim.
Ketika tombol kirim ditekan maka fungsi pada Kode 3.7 akan dijalankan, data akan dikirimkan dan terdapat pesan bahwa data pengaturan telah berhasil dikirimkan. Pada Kode 3.7, “alldata” menunjuk pada keseluruhan data pengaturan yang akan dikirimkan, yang terdiri dari indeks memori penyimpanan, indeks animasi, warna teks, warna latar belakang, jumlah karakter teks, dan data teks. Format dari data serial yang dikirimkan ditunjukkan pada Gambar 3.14.
array data pengaturan
Mikrokontroler
AVR
Data warna teks (tc1, tc2, dan tc3)
Index animasi
[0]
[1]
Index memori
Jumlah karakter (puluhan, dan satuan)
[2]
[3]
[4]
[5]
[6]
[7]
[8]
Data warna latar belakang (bc1, dan bc2)
[9]
[10] [11] [12] [13] ……………… dst.
Data karakter
Gambar 3.14. Format dari data yang dikirimkan secara serial.
Keseluruhan data yang dikirim dikemas dalam suatu tipe data string / array karakter. Nilai dari indeks memori dan animasi adalah suatu karakter angka, nilai data warna teks dan latar belakang adalah suatu karakter huruf, nilai dari jumlah karakter adalah suatu karakter angka dengan array[8] menyimpan nilai puluhan, dan array[9]
34
menyimpan nilai satuannya. Array yang berikutnya digunakan untuk menampung data teks yang dimasukkan oleh pengguna, yang panjangnya dapat bervariasi, mulai dari 1 hingga 50. Jadi panjang array maksimal keseluruhan adalah 60 array, 10 array pertama untuk data pengaturan, dan 50 array terakhir untuk data teks. Tombol keluar pada tampilan digunakan untuk keluar dari aplikasi. Program interface ini merupakan program tambahan, tidak mutlak harus ada namun keberadaannya sangat membantu dan memudahkan pengguna dalam melakukan pengaturan keseluruhan data. Program tidak perlu aktif setiap saat, hanya perlu dijalankan saat pengguna ingin melakukan perubahan data dan mengirimkannya ke memori penyimpanan yang diinginkan saja. Setelah proses pengaturan dan pengiriman keseluruhan selesai dilakukan, program dapat dinon-aktifkan.
3.2.2. Perancangan dan Realisasi Program Mikrokontroler Program mikrokontroler merupakan program utama dari keseluruhan sistem, tidak seperti program interface yang keberadaanya hanya sebagai tambahan. Program mikrokontroler merupakan program yang mutlak harus ada, karena program ini berisi algoritma yang mengatur keseluruhan fungsi dan kendali dari sistem. Data warna, memori, animasi, dan teks disimpan dalam memori yang ada di dalam mikrokontroler, sebagian besar data disimpan dalam memori penyimpanan primer dan sebagian lagi disimpan dalam memori penyimpanan sekunder. Memori penyimpanan primer yang dimaksud adalah Electrically Erasable Programmable ReadOnly Memory (EEPROM), sedangkan memori penyimpanan sekunder yang dimaksud adalah Random Access Memory (RAM). Memori penyimpanan primer digunakan sebagai tempat penyimpanan permanen, yang akan tetap tersimpan meskipun catu daya dimatikan. Sedangkan memori penyimpanan sekunder digunakan sebagai tempat penyimpanan sementara, yang akan hilang ketika catu daya dimatikan. Program mikrokontroler terdiri dari dua bagian, yaitu program utama dan program interupsi. Program utama berisi kendali untuk baris dan pengiriman data untuk kendali kolom, sedangkan program interupsi digunakan untuk menangani interupsi pengiriman data dari komputer ke mikrokontroler, dan menyimpannya ke dalam memori yang bersesuaian. Pengendalian baris lebih mudah dilakukan dibandingkan pengendalian kolom, karena dalam satu kali proses dapat mengendalikan tujuh baris secara bersamaan. Sedangkan pengendalian kolom membutuhkan teknik yang lebih
35
rumit, karena pengisian datanya dilakukan secara serial dan nilai tiap baris penampil umumnya berbeda, sehingga pengubahannya lebih sering dilakukan. Proses kerja dari program mikrokontroler mengacu pada diagram alir program yang ditunjukkan pada Gambar 3.15.
Mulai
Inisialisasi variabel penyimpan data
Baca data dari EEPROM dan salin ke array
Cek dan inisialisasi
index penyimpanan data
Proses tampil: Interupsi
terima data serial
Teks EEPROM 1 Teks EEPROM 2 Teks EEPROM 3 Teks EEPROM 4
Salin data ke
Teks EEPROM 5
EEPROM atau RAM
Teks EEPROM 6 Teks EEPROM 7 Teks EEPROM 8 Teks RAM
Gambar 3.15.Diagram alir program mikrokontroler.
Setiap kali mikrokontroler dihidupkan, maka program akan selalu dimulai dengan insialisasi variabel penyimpan data. Tujuan inisialisasi tersebut adalah menyiapkan variabel-variabel yang akan digunakan program untuk proses perhitungan dan penyimpanan data sementara. Proses kemudian dilanjutkan ke pembacaan data yang tersimpan pada EEPROM, kemudian menyalin data tersebut ke array penampungan data sementara. Algoritma pengisian data dari EEPROM ke array penampungan sementara ditunjukkan pada Kode 3.8.
36
eeprom_to_array(index) { puluhan = data_eeprom[index][8] satuan = data_eeprom[index][9] ulang = puluhan x 10 + satuan i=0 repeat(from i to (ulang + 9)) { data_array[i] = data_eeprom[index][i] i=i+1 } }
Kode 3.8. Penyalinan data EEPROM ke array penampung sementara.
Setelah penyalinan data dari EEPROM ke array penampung sementara selesai dilakukan, maka langkah selanjutnya adalah pemeriksaan dan inisialisasi indeks penyimpan data. Pada langkah ini, data yang sudah ditampung dalam array penampung sementara dipecah ke tempat penampung khusus, tujuannya adalah menempatkan data pada tempat yang bersesuaian. Tempat penampung khusus tersebut mencakup data warna teks dan latar belakang, indeks animasi dan memori penyimpanan, serta data teks. Proses inisialisasi masing-masing tempat penyimpanan khusus tesebut ditunjukkan pada Kode 3.9. init_specific_data() { index_memori = data_array[1] index_animasi = data_array[2] warna_teks[0] = data_array[3] warna_teks[1] = data_array[4] warna_teks[2] = data_array[5] warna_background[0] = data_array[6] warna_background[1] = data_array[7] jml_teks = data_array[8] x 10 + data_array[9] i=0 repeat(from i to (i < jml_teks)) { data_teks[i]=data_array[i + 10] i=i+1 } }
Kode 3.9. Penyalinan data array penampung sementara ke data penampung khusus.
Dengan menempatkan data pada tempat penyimpanan khusus yang bersesuaian, maka akan memudahkan pembuat program dalam melakukan proses penyeleksian, dan kendali untuk baris dan kolom. Langkah selanjutnya adalah mengisi nilai array
37
penampil, array penampil berbeda dengan array untuk data teks. Perbedaannya adalah satu karakter pada data teks hanya membutuhkan satu elemen saja, sedangkan satu karakter untuk penampil membutuhkan enam buah elemen yang masing-masing nilainya elemennya dapat berbeda-beda. Satu elemen pada data teks direpresentasikan pada penampil dalam enam buah elemen yang ditunjukkan pada Gambar 3.16. Dibutuhkan enam elemen karena satu karakter penampil membutuhkan ruang tujuh baris dan lima kolom, satu kolom tersisa digunakan untuk spasi. Array data teks
[0]
[1]
[2]
[3]
[4]
[0]
[1]
[5]
[6]
Elemen untuk spasi
….
[7]
[8]
[9]
[9]
[10]
…. Elemen untuk spasi
Array penampil
Gambar 3.16. Representasi array data teks ke array penampil.
Tipe data untuk masing-masing elemen adalah karakter, namun yang membuat berbeda adalah kegunaannya. Satu elemen array data teks digunakan untuk menyimpan satu karakter, sedangkan enam elemen array penampil digunakan untuk menyimpan nilai-nilai tampilan dari karakter tersebut. Contoh representasi dari array data teks ke array penampil ditunjukkan pada Gambar 3.17. Nilai tiap elemen dapat dituliskan dalam bentuk biner maupun heksadesimal. Array data teks A
b
….
MSB Nilai satu elemen array penampil
Nilainya adalah 7F heksa
Gambar 3.17. Contoh representasi isi array data teks ke array penampil.
Karena enam elemen array penampil digunakan untuk merepresentasikan satu karakter pada data teks, maka array penampil membutuhkan tempat yang lebih besar dibanding array data teks. Perbandingan kapasitas array data teks dibandingkan array
38
penampil adalah satu berbanding enam. Nilai Least Significant Bit (LSB) data pada penampil dapat diisi dengan bebas karena tidak digunakan, namun untuk bit yang lain tidak boleh terjadi kesalahan dalam pengisian nilainya. Nilai-nilai tampilan dari sebuah karakter dan indeks dari dari daftar karakter digunakan program untuk pengisian data tampilan, sehingga karakter yang tertampil sesuai dengan karakter yang tersimpan pada data teks. Setelah pengisian semua data selesai dilakukan, program berlanjut ke fungsi penampilan, yaitu mencakup kendali untuk baris dan kendali kolom. Proses pengendalian untuk penampil dilakukan dengan metode scanning baris. Pengendalian baris lebih mudah dilakukan karena dapat dilakukan secara paralel, tujuh baris dapat dikendalikan secara bersamaan. Sedangkan pengendalian kolom lebih sulit dilakukan karena menggunakan teknik pengiriman data serial, dengan 64 buah kolom yang dikendalikan untuk masing-masing warna dasar RGB. Pengendalian baris mengikuti syarat bahwa dalam setiap kondisi hanya diperbolehkan satu baris saja yang dalam kondisi hidup, dan baris yang lain harus dalam kondisi mati. Proses ini dilakukan secara bergantian mulai dari baris satu hingga baris tujuh, kemudian diulangi kembali mulai dari baris satu dan seterusnya, dengan proses pengendalian yang diulang-ulang selama beberapa waktu lamanya. Karena masukan kendali baris adalah aktif low, maka untuk menghidupkan suatu baris, pin yang terhubung dengan baris tersebut harus bernilai logika nol, dan baris yang lain bernilai logika satu. Kendali untuk baris mengikuti syarat yang ditunjukkan pada Tabel 3.8.
Tabel 3.8. Hubungan nilai PORT A dan baris yang aktif. Nilai Biner PORT A(Kendali Baris) 10111111 11011111 11101111 11110111 11111011 11111101 11111110
Baris yang Aktif 1 2 3 4 5 6 7
Meskipun proses pengendalian dilakukan secara scanning, namun nampak bahwa ketujuh baris seolah-olah menyala secara bersamaan, hal ini dikarenakan frekuensi scanning terjadi sangat cepat, sehingga mata manusia tidak dapat mendeteksi
39
perubahan tersebut. Pada saat awal program dijalankan, ketujuh baris harus dalam kondisi mati, dan hanya diaktifkan saat akan dihidupkan saja. Proses pengisian data kolom dilakukan dengan melakukan perbandingan antara data penampil dengan suatu data menggunakan logika AND. Algoritma seleksi data kolom penampil ditunjukkan pada Kode 3.10, tujuan menggunakan perbandingan logika AND adalah untuk mengetahui nilai bit dari data yang akan dicek, karena nilai tiap bit data menunjukkan kondisi lampu yang sebenarnya dari baris dan kolom penampil yang bersesuaian. selection_coloumn_data(line) { case 1 : if((data_tampil[index] AND 80H) set_color(text(line)) else set_color(background(line)) case 2 : if((data_tampil[index] AND 40H) set_color(text(line)) else set_color(background(line)) case 3 : if((data_tampil[index] AND 20H) set_color(text(line)) else set_color(background(line)) case 4 : if((data_tampil[index] AND 10H) set_color(text(line)) else set_color(background(line)) case 5 : if((data_tampil[index] AND 08H) set_color(text(line)) else set_color(background(line)) case 6 : if((data_tampil[index] AND 04H) set_color(text(line)) else set_color(background(line)) case 7 : if((data_tampil[index] AND 02H) set_color(text(line)) else set_color(background(line)) }
== 80H)
== 40H)
== 20H)
== 10H)
== 08H)
== 04H)
== 02H)
Kode 3.10. Prosedur seleksi data kolom penampil.
Prosedur set_color(color) digunakan untuk pengaturan data warna dari kolom penampil. Nilai dari text(line) dan background(line) adalah suatu karakter yang merepresentasikan data warna. Saat prosedur set_color(color) dipanggil, maka program
40
akan menginisialisasi data warna dari teks maupun latar belakang yang bersesuaian. Algoritma dari prosedur set_color(color) ditunjukkan pada Kode 3.11.
set_color(color) { case ‘r’ : data_r case ‘g’ : data_r case ‘b’ : data_r case ‘c’ : data_r case ‘m’ : data_r case ‘y’ : data_r case ‘w’ : data_r
= = = = = = =
0, 1, 1, 1, 0, 0, 0,
data_g data_g data_g data_g data_g data_g data_g
= = = = = = =
1, 0, 1, 0, 1, 0, 1,
data_b data_b data_b data_b data_b data_b data_b
= = = = = = =
1 1 0 0 0 1 1
clock_r = 1, clock_g = 1, clock_b = 1 delay(1us) clock_r = 0, clock_g = 0, clock_b = 0 delay(1us) }
Kode 3.11. Prosedur pengisian data warna kolom penampil.
Sama seperti kendali baris, kendali kolom juga bersifat aktif low. Oleh sebab itu untuk menghidupkan suatu warna maka nilai data warna tersebut harus bernilai logika nol, dan data warna lain bernilai logika satu. Pengubahan nilai clock bertujuan untuk menggeser nilai data sejauh satu bit, yaitu pada saat terjadi transisi nilai clock dari logika nol ke satu. Pada program, pergeseran data warna untuk R, G, dan B dapat dianggap dilakukan secara bersama-sama, karena selisih waktu terjadinya sangat sedikit. Pengisian data untuk kolom dilakukan sebanyak 64 kali, yang berarti setiap kali berganti kendali baris program harus melakukan pengisian data untuk kolom sebanyak 64 kali, dengan teknik pengisian data yang digeser, hal ini harus selalu dilakukan karena nilai data-data kolom untuk tiap baris penampil tidaklah selalu sama. Beberapa nama variabel yang digunakan sebagai kendali kolom dan hubungannya pin yang ada pada mikrokontroler ditunjukkan pada Tabel 3.9.
41
Tabel 3.9. Hubungan nama variabel dengan pin kendali pada mikrokontroler. Nama Variabel clock_g strobe_g data_g output_enable_g clock_r strobe_r data_r output_enable_r clock_b strobe_b data_b output_enable_b
Pin Mikrokontroler PORTB.0 PORTB.1 PORTB.2 PORTB.3 PORTC.0 PORTC.1 PORTC.2 PORTC.3 PORTC.4 PORTC.5 PORTC.6 PORTC.7
Pin kendali output enable nilainya tidak diubah-ubah selama jalannya program, pin ini bernilai logika satu pada saat inisialisasi awal variabel penyimpan data. Sedangkan pin kendali strobe nilainya diubah-ubah saat berganti baris penampil. Saat pin strobe bernilai logika satu, maka data keluaran shift register nilainya sama dengan data yang ada pada buffer shift register. Sebaliknya saat pin strobe bernilai logika nol, perubahan data pada buffer shift register tidak akan berpengaruh terhadap keluaran shift register, atau dapat dikatakan bahwa keluaran shift register masih merupakan data lama. Proses yang terjadi sebenarnya adalah data kolom yang dikirimkan ke shift register tidak dikeluaran langsung oleh shift register, melainkan ditampung terlebih dahulu di buffer shift register, pin strobe hanya perlu diaktifkan pada saat data sudah siap untuk dikeluarkan. Pin strobe dinon-aktifkan hanya pada saat terjadi pengisian data ke buffer shift register. Teknik pengendalian dengan menggunakan scanning baris dilakukan dengan mengisi nilai semua data kolom terlebih dahulu, setelah itu memilih baris yang dihidupkan. Proses ini berlaku sama juga ketika akan menghidupkan baris yang lain. Pengendalian baris dan kolom ditentukan dari animasi yang akan ditampilkan, kombinasi pengaturan baris dan kolom yang berbeda-beda dapat menghasilkan tampilan animasi yang berbeda-beda pula. Animasi yang berbeda menggunakan algoritma penampilan yang berbeda pula. Algoritma untuk animasi indeks satu sampai empat pada Tabel 3.4 lebih mudah dibuat dibanding animasi indeks nol, karena variasi lebih banyak dilakukan pada pengaturan kendali baris. Sedangkan animasi pada indeks nol lebih banyak memvariasikan nilai data pada kolom, nilai data yang ditampilkan berubah
42
setiap kali teks pada tampilan bergeser. Prinsip pengendalian dengan menggunakan teknik scanning baris secara umum menggunakan algoritma yang ditunjukkan pada Kode 3.12. vertical_scanning() { i=0 Repeat(from i to 1000) { fill_colomn(line_1), strobe_all(on) PORTA = 10111111b, delay(100us) strobe_all(off) fill_colomn(line_2), strobe_all(on) PORTA = 11011111b, delay(100us) strobe_all(off) fill_colomn(line_3), strobe_all(on) PORTA = 11101111b, delay(100us) strobe_all(off) fill_colomn(line_4), strobe_all(on) PORTA = 11110111b, delay(100us) strobe_all(off) fill_colomn(line_5), strobe_all(on) PORTA = 11111011b, delay(100us) strobe_all(off) fill_colomn(line_6), strobe_all(on) PORTA = 11111101b, delay(100us) strobe_all(off) fill_colomn(line_7), strobe_all(on) PORTA = 11111110b, delay(100us) strobe_all(off) } PORTA = 11111111b }
Kode 3.12. Pengendalian dengan menggunakan teknik scanning baris.
Nilai PORT A yang ada di akhir prosedur vertical_scanning() digunakan untuk menonaktifkan semua baris sehingga tidak ada penampil tersisa yang masih dalam kondisi hidup. Arti dari strobe_all menunjukkan kondisi strobe untuk kendali tiap-tiap shift register masing-masing warna dasar.