Translate

Membuat Peraga Sederhana Dengan LED Matriks



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....

9 komentar:

  1. salam kenal mas sigit..
    saya mau nanya apakah karakternya bisa ditambah nggak ? terus pake IC AT89S52 bisa kan ?

    sebelumnya makasih.....

    BalasHapus
  2. salam kenal mas....
    karakternya bisa di tambah nggak ?
    dan kalau memakai IC at89s52 bisa kan ?

    sebelumnya makasih....

    BalasHapus
  3. Salam kenal Mas Mizuara,

    Jelas karakternya bisa banget ditambah. Bisa sampai 256 karakter sesuai standar ASCII juga boleh.

    AT89C52 kayaknya bisa dipakai karena termasuk keluarga MCS51 kaaan....

    Terima kasih

    BalasHapus
    Balasan
    1. ASCII maksudnya apa tuh mas ?
      program yang mana yang harus di ubah mas ?
      makasih mas atas postingan dan penjelasannya, sangat bermanfaat ....

      Hapus
  4. Hai Mas Mizuwara,

    Pada 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.

    BalasHapus
  5. salam kenal mas..
    klau pake Amega AVR dengan bhasa Basic(Bascom) ada gak mas?

    bisa email romi3036@yahoo.com

    BalasHapus
  6. Nah itu dia....

    Saya 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.

    BalasHapus
  7. Assalamualaikum,
    Mas sigit, bisa dijelaskan sedikit apa aja yang dibutuhkan buat merangkai LED Matrix 3x5...
    Maklum mas, saya masih newbie..hehe

    BalasHapus
  8. 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.

    Jika Mas Hasan mau nanti saya buatkan artikelnya. Mas Hasan hanya perlu memberikan fungsi dan kegunaan dari rangkaian saja.

    BalasHapus