Setelah sebelumnya belajar 7-segments tibalah saatnya saya belajar display dot-matrix. Kali ini lebih kompleks dari pada 7-segments karena kita harus mengatur 64 LED (utk 1 panel ukuran 8×8). Pengaturan ke-64 LED ini dilakukan di ke-16 pin-nya.
Seperti biasa, kita harus mencari datasheet-nya. Dot matrix yang saya punya kodenya 1088BS. Setelah googling nemu file datasheet dengan judul ULM-1088AXBX.pdf (sayangnya saya tidak catat URL-nya). Di dalamnya ada spesifikasi beberapa tipe dot matrix dari seri 1088. Termasuk di antaranya 1088BS.

Dari datasheet, 1088BS adalah dot matrix dengan LED tipe HIGH RED yang terbuat dari GaAsP atau GaP (*ini singkatan dari unsur kimia. Saya sih sudah lupa, hehehe*). Dan konfigurasinya common anode.
Saya pun mengetest pin & nyala LED, apakah sesuai dengan datasheet? Dan ternyata cocok, horeee… Pengecekan ini mesti dilakukan karena dot matrix saya tidak diketahui produsennya. Cuma ada tulisan China & kode 1088BS. Beda dengan datasheet yang saya peroleh yang lebih detail informasi produsen, tipe dan seri.
Pengetesan berlangsung dengan baik. Tibalah saatnya wiring (pengkabelan) di breadboard. Seperti halnya saat wiring di 7-segments, saya menambahkan resistor 1K Ohm untuk membatasi arus ke dot matrix. Saya masih mengandalkan Arduino Nano andalan untuk pembelajaran ini.
Untuk pengetesan, saya membuat program sederhana untuk scanning LED. Dan tentu saja mencoba membuat sebuah pola, yaitu panah. Pembuatan pola masih sederhana saja dengan kode 0 dan 1 di posisi LED yang dimaksud.
Berikut foto dari proses belajar dot-matrix. Sayang di foto nyala LED-nya tidak nyata. Mestinya LED menyala merah terang. Mungkin saya yang belum bisa memotret ya? Hehehe… Ini persis dengan foto 7-segment kemarin yang juga tidak nampak warna merahnya. Padahal tertangkap di mata merah terang.

Rencananya saya akan belajar merangkaikan beberapa dot matrix dengan shift register. Kebetulan saya punya beberapa chip 74HC595. Chip shift register ini sering saya pakai untuk mengendalikan display LCD di beberapa proyek sebelumnya. Hanya saja untuk proyek dot-matrix ini bakal dibutuhkan lebih banyak 74HC595 untuk data dan cascading untuk scanning.
Untuk sementara ini kayaknya saya cuma mengandalkan arus output dari Arduino. Jika ternyata hasilnya tidak bagus, mungkin perlu chip darlington/johnson. Atau kalau mau ribet bisa merangkainya dengan transistor. Kebetulan saya punya transistor NPN BC547 dan BC548.
Selain kompleksitas dari rangkaiannya itu sendiri, kesulitan lain yang tidak kalah menantang adalah di pemrogramannya. Karena kita harus mengendalikan lebih banyak LED dan bentuk-bentuk yang bisa ditampilkan bisa lebih variatif dengan animasi seperti scroll, flip, blink, dll. Sangat menantang!
Oh iya, di bawah ini adalah code sederhana saya untuk mengetest dot-matrix. Seperti dalam 7-segment sebelumnya, konfigurasi pin mungkin berbeda dengan yang lain.
/* Emanuel Setio Dewo, setio.dewo@gmail.com 04 November 2012 Test dot matrix */ byte rw[] = { 1, 2, 7, 0, 3, 6, 4, 5 }; byte cl[] = { 8, 9, 10, 11, 12, 13, 14, 15 }; byte panah[] = { 0,0,0,0,1,0,0,0, 0,0,0,1,1,1,0,0, 0,0,1,0,1,0,1,0, 0,0,0,0,1,0,0,0, 0,0,0,0,1,0,0,0, 0,0,0,1,0,1,0,0, 0,0,1,0,0,0,1,0, 0,0,0,0,0,0,0,0 }; int idx = 0; void setup() { for (int i=0; i<=16; i++) { pinMode(i, OUTPUT); } matikan(); } void loop() { //scanning1(); //scanning2(); //scanning3(); //blinks(); bikin_panah(); //while(1); } void scanning1() { for (int c = 0; c < 8; c++) { digitalWrite(cl[c], LOW); for (int r = 0; r < 8; r++) { digitalWrite(rw[r], HIGH); delay(20); digitalWrite(rw[r], LOW); } digitalWrite(cl[c], HIGH); } for (int c=7; c>=0; c--) { digitalWrite(cl[c], LOW); for (int r=7; r>=0; r--) { digitalWrite(rw[r], HIGH); delay(20); digitalWrite(rw[r], LOW); } digitalWrite(cl[c], HIGH); } } void scanning2() { matikan(); for (int i=0; i<8; i++) digitalWrite(cl[i], LOW); for (int i=0; i<8; i++) { digitalWrite(rw[i], HIGH); delay(50); digitalWrite(rw[i], LOW); } for (int i=7; i>=0; i--) { digitalWrite(rw[i], HIGH); delay(50); digitalWrite(rw[i], LOW); } } void scanning3() { matikan(); for (int i=0; i<8; i++) digitalWrite(rw[i], HIGH); for (int i=0; i<8; i++) { digitalWrite(cl[i], LOW); delay(50); digitalWrite(cl[i], HIGH); } for (int i=7; i>=0; i--) { digitalWrite(cl[i], LOW); delay(50); digitalWrite(cl[i], HIGH); } matikan(); } void blinks() { for (int i=0; i<10; i++) { nyalakan(); delay(100); matikan(); delay(100); } } void bikin_panah() { for (int c=0; c<8; c++) { digitalWrite(cl[c], LOW); for (int i=0; i<8; i++) { if (panah[idx] == 0) digitalWrite(rw[i], LOW); else { digitalWrite(rw[i], HIGH); delayMicroseconds(250); } matikan_baris(); idx++; if (idx >=64) idx = 0; } digitalWrite(cl[c], HIGH); } } void matikan_baris() { for (int i=0; i<8; i++) { digitalWrite(rw[i], LOW); } } void matikan() { for (int i = 0; i<8; i++) { digitalWrite(rw[i], LOW); digitalWrite(cl[i], HIGH); } } void nyalakan() { for (int i=0; i<8; i++) { digitalWrite(rw[i], HIGH); digitalWrite(cl[i], LOW); } }
mantep gan…
tp ade yang pke bhsa assembly gk gan,,,???
lengkap sma tutor nya,,,
lw ade mhon inbox ny gan,,,
di tunggu,,,
Wah saya ga menguasai bahas assembly
GImana kalo programnya bikin text statis, misal “WELCOME”. Apa shift registernya ditambah sesuai banyaknya dot matrik (8×8) untuk bagian kolomnya? Mohon dibalas ,Please
Iya, harus tambah shift register
gan..klo daerah bekasi ada gak ya kursus dot matrix,pingin bangeeet niiih….trm ksh
Coba hubungi http://www.famosastudio.com
mas bisa minta schematic atau proteus nya gak mas,,
buat tugas kuliah ni,
hehehe..