Jika Sobat sedang
berjalan, entah itu di jalan raya, pusat perdagangan atau gedung bahkan pada
angkutan taksi, sering kita jumpai sebuah papan peraga yang menampilkan tulisan
dan kebanyakan berupa teks berjalan. Dari ukuran yang kecil sampai yang besar,
seukuran papan reklame. Peraga yang dimaksud tidak lain dan tidak bukan adalah
bentuk dari sebuah LED matriks. Beberapa peraga tersebut kadang ada juga
memiliki beberapa warna sehingga mampu menampilkan karakter atau gambar yang
berwarna-warni.
Pada artikel ini,
penulis tidak bermaksud membuat peraga LED Matriks yang rumit tapi sekedar
mencoba membuat peraga sederhana yang dapat menampilkan karakter. Setidaknya,
kita bisa menampilkan beragam karakter sesuai yang diinginkan.
Di pasaran, dapat
dengan mudah kita peroleh beberapa jenis LED matriks dari ukuran yang kecil
hingga besar, dari satu warna dan biasanya merah sampai yang lebih dari satu
warna. Ada yang memiliki jumlah LED 5x7, 5x8 atau yang akan kita peragakan pada
tulisan ini adalah LED matriks 8x8. Berikut adalah sebuah contoh dari LED
matriks 8x8.
Seperti kita kita
ketahui, pena yang terdapat pada sebuah LED matriks adalah terdiri dari kolom
dan baris. Jadi pada sebuah papan LED matriks berukuran 8x8 berarti memiliki 8
kolom dan 8 baris sehingga total terdiri dari 64 LED. Jika digambarkan dengan
sebuah rangkaian maka sebuah LED matriks 8x8 dapat dilihat berikut ini.
Beberapa buah blok
LED matriks dapat kita gabungkan dengan cara berjejer baik menurut kolom, baris
atau kedua-duanya. Sebagai contoh 4 buah LED matriks 8x8 dapat kita perbesar
ukurannya dalam kolom dan baris menjadi 32x8, 16x16 atau 8x16.
Nah, melalui
artikel ini, penulis akan sedikit narsis karena akan menampilkan nama sendiri
dengan pola seperti berikut ini:
Untuk dapat
menampilkan tulisan di atas pada papan LED matriks setidaknya kita membutuhkan
7 buah LED matriks 8x8 sehingga mejadi 56x8. Jika dihitung dari gambaran di
atas maka jumlah titik kolomnya adalah 54 dot termasuk spasi antar karakter
tentunya, sementara tinggi karakter adalah 8 dot.
Secara logika,
untuk menampilkan tulisan di atas secara penuh maka dalam hitungan byte
disesuaikan menurut jumlah kolom atau 54 byte. Untuk menampilkan karakter “S”
saja setidaknya membutuhkan 5 byte, jika ditambah spasi antar huruf maka bisa
menjadi 6. Dimulai dari kolom pertama maka ke-5 byte data yang diperlukan
adalah 01000110, 01001001, 01001001, 01001001 dan 00110001 atau dalam
heksadesimal 56h, 59h, 59h, 59h dan 31h. Sementara karakter “i” terdiri dari
00000100 dan 01111101 atau 04h dan 7dh. Dan seterusnya untuk masing-masing
karakter.
Catatan:
Kadang pada keadaan
tertentu, lebar kolom dari semua karakter ada yang disama ratakan yaitu 5 kolom
tanpa kecuali. Tetapi tidak sedikit yang menampilkan karakter secara
proporsional, termasuk tulisan di atas dibuat secara proporsional.
Penulis tidak akan
menggunakan 7 buah LED matriks 8x8, pada artikel ini hanya akan menggunakan 4
buah saja yang dibentuk menjadi 32x8. Dengan demikian, tulisan tersebut di atas
tidak dapat ditampilkan keseluruhan secara bersamaan. Agar dapat dibaca maka
tulisan di atas akan dibuat berjalan dengan menggesernya ke kiri. Sebagai mikrokontrolernya
akan digunakan AT89C51 yang memiliki 4 gerbang masing-masing 8 bit.
Penulis akan
membagi ke-4 matriks menjadi 2 bagian dengan masing-masing terdiri dari 16
kolom untuk keperluan scanning. Dari sini maka setidaknya akan memerlukan 2
buah gerbang untuk menampilkan data yang digeser.
Sebelum semakin
jauh, mari kita lihat gambar rangkaiannya terlebih dahulu seperti tertuang di
bawah ini.
Pada gambar,
gerbang-gerbang dari mikrokontroler AT89C51 dikonfigurasikan dengan P0
dan P2 digunakan untuk menggerakkan setiap katoda LED matriks.
Gerbang P1 dan P3 akan digunakan untuk proses scanning
kolom dan masing-masing pinnya dihubungkan ke penggerak transistor. Penulis
menggunakan transistor PNP C9012 yang mudah didapat di pasaran.
Sekarang kita
tengok aplikasi pada mikrokontrolernya. Pada awal penulisan program, pertama
ditetapkan konfigurasi meliputi gerbang yang akan digunakan untuk menampilkan
data kolom yaitu P0 dan P2 dengan LEDGrup1 dan LEDGrup2.
Konfigurasi juga menetapkan penampung untuk tampilan yang terbagi menjadi 2
bagian yaitu BuffData1 dan BuffData2 yang masing-masing menempati alamat RAM
10H dan 20H dengan masing-masing sebanyak 16 byte.
$mod51
LEDGrup1 data p0
LEDGrup2 data p2
BuffData1 data 10h
BuffData2 data 20h
RegSTack data 30h
org 0
Pertama aplikasi dijalankan adalah menetapkan batas akhir dari
data tulisan yang akan ditampilkan. Karena kita juga akan menampilkan layar
kosong maka karakter tulisan yang berjumlah 56 byte perlu ditambahkan dengan 32
byte data blank. Kemudian kita mulai membaca data tampilan menggunakan register
DPTR.
App_Mulai:
mov sp,
#RegStack-1
mov r2,
#56+32
mov dptr,
#Tulisan
Selanjutnya kita akan memindahkan data karakter pada lokasi
“Tulisan” ke penampung “BuffData1”. Total karakter yang akan dipindahkan adalah
32 byte. Jika register DPTR berisi lokasi “Tulisan”. Jika diperhatikan pada
bagian terakhir aplikasi maka ke-32 byte pertama adalah data blank di mana
nilai informasi adalah 0. Pada program berikut dapat dilihat saat proses
pemindahan data, isi register DPTR diamankan dengan perintah PUSH dan POP
sehingga tidak mengubah nilainya.
Tampilan:
push dph
push dpl
mov r0,
#BuffData1
mov r3,
#32
djnz r2,
IsiBuffer
ajmp App_Mulai
IsiBuffer:
clr a
movc a,
@a+dptr
inc dptr
mov @r0,
a
inc r0
djnz r3,
IsiBuffer
pop dpl
pop dph
inc dptr
mov r4,
#64
Setelah proses pemindahan data selesai dan nilai DPTR juga
ditambahkan untuk tujuan penggeseran penampilan nantinya maka selanjutnya kita
akan menampilkan isi penampung ke peraga LED matriks seperti berikut ini.
Proses scan yang dilakukan adalah untuk menampilkan secara geser dari data
sebanyak 16 byte dari penampung menggunakan gerbang P1 dan P3.
Peragaan:
mov r0,
#BuffData1
mov r1,
#BuffData2
acall BacaData
mov p1,
#11111110b
acall BacaData
mov p1,
#11111101b
acall BacaData
mov p1,
#11111011b
acall BacaData
mov p1,
#11110111b
acall BacaData
mov p1,
#11101111b
acall BacaData
mov p1,
#11011111b
acall BacaData
mov p1,
#10111111b
acall BacaData
mov p1,
#01111111b
acall BacaData
mov p3,
#11111110b
acall BacaData
mov p3,
#11111101b
acall BacaData
mov p3,
#11111011b
acall BacaData
mov p3,
#11110111b
acall BacaData
mov p3,
#11101111b
acall BacaData
mov p3,
#11011111b
acall BacaData
mov p3,
#10111111b
acall BacaData
mov p3,
#01111111b
djnz r4,
Peragaan
ajmp Tampilan
Proses menampilkan isi penampung ke LED matriks di atas, diakhiri
dengan memeriksa isi register R4 yang digunakan untuk mengatur
kecepatan pergeseran tampilan karakter. Sobat bisa mengubah nilai tersebut
sesuai kecepatan yang diinginkan.
Berikut adalah subrutin yang diperlukan untuk menetapkan data
kolom dari penampung selama proses scanning. Lama dari data yang ditampilkan
adalah sesuai penundaan dengan register R7 sekitar 550 us. Dengan
total pergeseran 16 bit maka setidaknya total waktu kedipan dari masing-masing
LED adalah sekitar 9 ms atau 111 Hertz. Dari nilai tersebut maka dapat
diperkirakan secara kasar bahwa kecepatan pergeseran adalah 0,6 detik perbit.
BacaData:
mov r7,
#255
djnz r7,
$
mov p1,
#255
mov p3,
#255
mov a,
@r0
inc r0
mov LedGrup1,
a
mov a,
@r1
inc r1
mov LedGrup2,
a
ret
Pada bagian akhir dari aplikasi adalah data karakter yang
ditampilkan. Data dimulai dengan karakter kosong bernilai nol sebanyak 32 byte
sesuai lebar penampil LED matriks yang digunakan. Data sesungguhnya dimulai
pada baris ke-3 yang menampilkan tulisan nama penulis sebanyak 54 byte ditambah
2 byte kosong. Barisan data akhirnya ditutupkan dengan karakter kosong sebanyak
32 byte juga.
Tulisan:
db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0
db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0
Karakter nama penulis dimulai di sini.
db 01000110b, 01001001b, 01001001b,
01001001b, 00110001b, 0
db 00000100b, 01111101b, 0
db 10011000b, 10100100b, 10100100b,
10100100b, 01111100b, 0
db 00000100b, 01111101b, 0
db 00001000b, 00111110b, 01001000b,
01000000b, 0, 0, 0, 0
db 00111111b, 01000000b, 00111000b,
01000000b, 00111111b, 0
db 00000100b, 01111101b, 0
db 00110000b, 01001000b, 01001000b,
01111111b, 0
db 00111000b, 01000100b, 01000100b,
00111000b, 0
db 00110000b, 01001000b, 01001000b,
01111111b, 0
db 00111000b, 01000100b, 01000100b,
00111000b, 0, 0
Dan berakhir di sini setelah 56 byte.
db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0
db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0
end
Sobat bisa mengganti karakter tulisan di atas. Namun untuk
aplikasi di atas maka maksimal jumlah byte datanya tidak boleh melebihi 224
byte karena nilai register R2 maksimal 255 dikurangi dengan 32.
Nah, penampil LED matriks sederhana kita sudah selesai. Dari
dasar rangkaian dan aplikasi di atas dapat dikembangkan untuk jumlah penampil
yang lebih panjang, tetapi tentu harus mengubah gerbangnya dan tentu memerlukan
tambahan komponen. Jika ada kesempatan akan penulis sampaikan yang lebih besar
lagi.
Sudah ya, terima
kasih sudah membaca artikel ini. Semoga apa yang penulis sampaikan bermanfaat
dan bisa diterapkan oleh sobat semua.
Salam....
salam kenal mas sigit..
BalasHapussaya mau nanya apakah karakternya bisa ditambah nggak ? terus pake IC AT89S52 bisa kan ?
sebelumnya makasih.....
salam kenal mas....
BalasHapuskarakternya bisa di tambah nggak ?
dan kalau memakai IC at89s52 bisa kan ?
sebelumnya makasih....
Salam kenal Mas Mizuara,
BalasHapusJelas karakternya bisa banget ditambah. Bisa sampai 256 karakter sesuai standar ASCII juga boleh.
AT89C52 kayaknya bisa dipakai karena termasuk keluarga MCS51 kaaan....
Terima kasih
ASCII maksudnya apa tuh mas ?
Hapusprogram yang mana yang harus di ubah mas ?
makasih mas atas postingan dan penjelasannya, sangat bermanfaat ....
Hai Mas Mizuwara,
BalasHapusPada artikel di atas adalah peraga berjalan menggunakan LED matriks yang khusus untuk menuliskan nama saya. Total karakter yang ditampilkan (termasuk spasi) adalah 12 karakter dengan 56 byte. Batas akhir data karakter ditandai dengan nilai register R2 di mana ditulis 56+32. Mas Bro bisa membuat karakter lain sehingga diperoleh jumlah byte yang sesuai dan tinggal ditambahkan tapi ada pembatasan jumlahnya sesuai register tersebut yaitu 224 byte.
Untuk karakter ASCII adalah karakter yang dikodekan antara 0 sampai 255 bisa berisi karakter huruf, angka, simbol dan kontrol. Tapi mungkin bisa dipilih karakter yang sesuai yang akan ditampilkan.
Insya ALLAH nanti akan saya bahas dalam artikel lain yang lebih detil tentang menulis pada matriks dengan kode karakter yang lebih lengkap.
salam kenal mas..
BalasHapusklau pake Amega AVR dengan bhasa Basic(Bascom) ada gak mas?
bisa email romi3036@yahoo.com
Nah itu dia....
BalasHapusSaya sdh beli perangkat pemrogaman dengan AVR tapi sampai sekarang belum sempat belajarnya. Termasuk pemrograman dengan Bascom. Katanya sih lebih mudah dan pastinya begitu ketimbang asembli atau C.
Saya masih pakai asembli untuk source code. Mau sih belajar AVR dan lainnya jika ada waktu nanti.
Assalamualaikum,
BalasHapusMas sigit, bisa dijelaskan sedikit apa aja yang dibutuhkan buat merangkai LED Matrix 3x5...
Maklum mas, saya masih newbie..hehe
Untuk membuat LED matriks berukuran 3x5 dot setidaknya membutuhkan 8 gerbang mikrokontroler. Untuk efisiensi maka gerbang data menggunakan 5 bit dan gerbang scan 3 bit saja untuk menggerakkan transistor. Mikrokontroler bisa menggunakan AT89s2051.
BalasHapusJika Mas Hasan mau nanti saya buatkan artikelnya. Mas Hasan hanya perlu memberikan fungsi dan kegunaan dari rangkaian saja.