Say It with Light! (Revision 1)

Ini adalah catatan saya dalam mendesain “Say It with Light!”. Setelah mempertimbangkan beberapa hal untuk memenuhi prinsip murah, meriah dan mudah, maka saya pun me-redesain rangkaian dengan menggunakan ATmega8 dari Atmel. Saya sangat berterima kasih kepada Atmel yang telah mengirimkan sample dari beberapa microcontrollernya.

Tampilan prototype "Say it with Light!" revisi 1
Tampilan prototype “Say it with Light!” revisi 1

Menggunakan chip ATmega8 justru mempermudah saya dalam mendesain “Say It with Light!” karena ATmega8 telah menyediakan 20 pin bebas setelah dikurangi beberapa pin yang digunakan untuk kebutuhan internal Arduino. Sedangkan “Say It with Light!” cuma butuh 17 pin I/O dengan perincian 16 pin untuk pengaturan display dot matrix dan 1 pin untuk tombol pengubah tampilan.

Cukup menggunakan 1 chip
Cukup menggunakan 1 chip

Ke-16 pin ini dibutuhkan untuk mengendalikan display dot matrix secara langsung. Pendekatan ini memang tidak efisien karena sebenarnya kita cukup menggunakan 3 pin pengendali jika menggunakan 2 buah Shift Register seperti ketika mendesain dengan ATtiny85. Kelemahan lain adalah ketika memprogramnya karena butuh pengelolaan pin yang lebih banyak.

Rangkaian rev 1 lengkap dengan komponen pasif pendukung
Rangkaian rev 1 lengkap dengan komponen pasif pendukung

Di balik ketidakefisienan ini, teknik pengendalian langsung justru punya kelebihan, yaitu proses penampilan jadi lebih cepat karena tidak perlu diproses chip external. Tampilan jadi tampak lebih terang dan stabil. Bebas flicker walau pun saya tambah perintah delayMicroseconds. Pada code ATtiny85 saya tidak menambahkan delay tapi tampilan tetap flicker.

Dengan ATmega8 lebih stabil
Dengan ATmega8 lebih stabil

Saya mendesain ATmega8 untuk bekerja dengan clock external memanfaatkan crystal 16 MHz. Kecepatan proses jadi lebih cepat 16× (atau lebih?) dari pada desain dgn ATtiny85. Sebenarnya ATtiny85 bisa bekerja sampai 20 MHz tapi itu sama saja memboroskan pin I/O-nya untuk dipakai dengan crystal external. Jadi desain tempo hari cuma mengandalkan clock internal ATtiny85 yang cuma 1 MHz.

Dari segi memori ternyata antara ATmega8 dan ATtiny85 sama-sama punya 8 KB ISP (in-system self-programmable flash program memory). Wow, ATtiny85 memang hebat ya? Jadi dalam hal kapasitas program sejajar. Hanya saja ada kelemahan dalam pemrograman ATtiny85 terutama jika kita menggunakan IDE Arduino, yaitu karena ATtiny85 tidak bisa mengakomodasi array 2 dimensi. Jadi penyimpanan text yang akan ditampilkan disimpan dalam array linear. Sedangkan jika menggunakan ATmega8 hal ini tidak masalah (tentu setelah burning bootloader Arduino).

Dalam pemrograman “Say It with Light!” Rev 1 (dgn ATmega8) ini saya menambahkan beberapa pesan yang bisa ditampilkan, misalnya icon smile, animasi panah (ceritanya untuk nembak hati), Y/N (untuk menjawab), dan beberapa icon lain yang sedang saya coba apakah bisa ditampilkan dengan baik atau tidak. Saat ini code ukurannya cuma 2,5 KB dari sekitar 7,2 KB yg tersedia. Berarti masih punya ruang untuk pesan-pesan lain yang ingin ditampilkan.

Saat ini saya sedang mendesain PCB untuk membuat permanen prototype “Say It with Light!” revisi 1. Kali ini desain PCB tidak terpaku dengan sambungan urut karena tidak menggunakan Shift Register tapi langsung dari pin ATmega8. Ini berarti desain PCB bisa diatur sambungan antara ATmega8 dengan pin display dot matrix berdasarkan kedekatan pin. Jadi bisa didesain jalur yang terdekat dan terbaik. Sisanya tinggal mapping di code. Hasilnya desain saya kali ini tidak ada jumper-nya. Horeee…

Sementara ini dulu catatan desain prototype “Say It with Light!” revisi 1. Jika ada masukan, silakan dituangkan dalam box komentar di bawah.

Salam ngoprek

Iklan

Say It with Light!

Bagi para ABG (*ABG tua?*) yang sedang kasmaran sudah selayaknya membangun proyek elektronika yang saya beri nama “Say it with Light!” ini. Karena dengan “Say it with light!” Anda bisa memperlihatkan isi hati Anda kepada pacar. Dijamin si dia bakal bilang “WOW” dan koprol (*gubrak*). Kalau pun tidak, coba disuruh push up atau lari keliling lapangan sepak bola 5×. (Ups… kok jadi ngelantur gini ya?)

Sirkuit di breadboard
Sirkuit di breadboard

Baiklah, kita kembali ke proyek sederhana ini. “Say it with light!” adalah sebuah piranti sederhana yang dapat menampilkan pesan yang berjalan dari kanan ke kiri. Bahasa kerennya scroll text atau running text. Rangkaian ini dibangun dengan pertimbangan murah, meriah dan mudah. Sehingga para ABG kasmaran yang baru belajar elektronika dapat membangunnya sendiri dengan biaya yang tidak mahal.

ATTiny85 sebagai otaknya
ATTiny85 sebagai otaknya

Saya sengaja memilih MCU Atmel ATTiny85 yang mungil dan murah. Walau pun cuma punya kaki 8, MCU ini sangat baik & handal. Saya sudah beberapa kali menggunakannya dalam proyek sederhana (lihat: Digital Temperature with ATtiny85 and LM35 dan Ngepot 85 (Pot Elektronik)).

Kalau saya memilih ATtiny85 karena dalam proyek ini saya cuma butuh penampilan pesan di dot matrix dan sebuah tombol untuk men-switch tampilan. Dan lagi harganya termasuk murah. Cocok kan?

Dua buah shift register 74HC595 untuk mengendalikan display dot matrix
Dua buah shift register 74HC595 untuk mengendalikan display dot matrix

Untuk mengendalikan display dot matrix, saya menggunakan 2 buah shift register 74HC595 yang digunakan untuk scanning column dan pengiriman data row. Dengan 2 buah shift register dirangkai cascade, saya cuma butuh 3 pin ATtiny85 untuk mengendalikan display dot matrix.

Sebuah pin dari ATtiny85 saya gunakan untuk tombol pengganti tampilan sehingga total kebutuhan pin cuma 4. Dari 5 pin yang tersedia di ATtiny85 tersisa 1 pin. Sementara ini saya belum ada ide pemanfaatan 1 sisa pin ini. Mungkin kelak bisa dimanfaatkan untuk suara. Tuh kan, cukup menggunakan ATtiny85 untuk proyek ini.

Show your heart
Show your heart

Catatan pribadi

Oke, proyek dot matrix sudah bertebaran dan semuanya bagus-bagus, bahkan berwarna-warni. Tapi hampir semua proyek dot matrix mahal. Di sinilah keunggulan dari desain “Say it with Light!” ini. Desain ini murah meriah dan mudah dibangun. Cocok untuk pemula elektronika (seperti saya ini). Dan karena ATtiny85 termasuk hemat energi, dia bisa ditenagai baterai sehingga bisa didesain portable.

Karena semua pemilihan komponen dan desainnya ekonomis, tentu ada kelemahannya. Yang paling tampak adalah kecepatan dari ATtiny85 ini yang termasuk lambat. Dengan clock internal, dia cuma memiliki kecepatan 1 MHz. Akibatnya penampilan di display dot matrix nampak flicker. Penggunaan Atmega8 dengan external crystal 16 MHz dapat mengatasi masalah flicker ini. Tapi sayangnya bakal banyak pin yang tidak terpakai.

Namun kelemahan ini justru bisa menjadi kekuatan karena tampilan flicker malah dapat mengundang perhatian si dia. “Wow ada blink-blink.”

Mendesain Display Dot Matrix

Ini adalah sebuah perjuangan bagi saya saat ada seseorang yang minta didesainkan display dot matrix. Tidak seperti LCD display dan 7-segment, display dot matrix ini ruwet karena kita harus mengendalikan 64 LED (8×8) untuk 1 panel. Padahal yang diminta 10 panel. (*garuk-garuk kepala*)

Sebenarnya ada modul dot matrix 32×8 atau 40×8 yang sudah jadi yang menggunakan komunikasi serial dengan microcontroller, tapi saya belum menemukan yang jual di sini. Kalau pun mau beli dari luar pasti butuh waktu lama untuk pengiriman, padahal saya sudah gregetan. Alhasil saya pun berusaha mendesainnya sendiri dengan bekal 5 buah panel dot matrix untuk membentuk panel 40×8.

2 panel telah bekerja
2 panel telah bekerja

Berbekal pengetahuan yang pas-pasan, saya mencoba mendesain sendiri dengan mengacu datasheet. Saya mengandalkan shift register 74HC595 untuk men-drive row dan kolom panel dot matrix. Pengkabelan sangat ruwet. Persediaan kabel saya habis saat menghubungkan 3 panel dot matrix. Sudah tidak bisa lagi mengkabelkan 2 panel yang tersisa.

3 buah panel telah bekerja dan kabel pun habis
3 buah panel telah bekerja dan kabel pun habis

Saya pun mencoba mengoptimalkan software untuk menampilkan test scanning, blink test, text statis, scroll text (kanan ke kiri) dan karakter custom. Semuanya berhasil setelah ngoprek 3 malam. Semua kesulitan berhasil diatasi. Hanya saja, saya tahu banyaknya kekurangan dari desain saya ini, hiks…

Berikut ini adalah kekurangan desain saya:

  1. Column Scanning
  2. Saya menggunakan column scanning yang bagi saya mudah. Teknik ini akan bagus jika panjang panel sedikit. Begitu panel ditambah supaya display lebih panjang, maka column scanning menjadi lambat dibanding row scanning. Jika panel dot matrix 40×8, maka column scanning harus men-scan sebanyak 40 kali. Sedangkan row scanning cuma 8 kali.

    Kelemahan row scanning adalah dalam merekonstruksi pesan yang akan ditampilkan karena harus ada operasi array atau bitwise yang lebih rumit. Jadi harus lebih jeli di pemrograman. Terus terang pemilihan teknik column atau row scanning itu sangat sulit. Mau gampang tapi lambat atau sulit tapi cepat? Nah loh…

  3. Shift Register untuk scanning
  4. Ini kesalahan saya tepatnya, karena saya menggunakan teknis scanning menggunakan shift register. Mestinya saya cukup menggunakan Johnson Counter, misalnya dengan CD4017. Penggunaan shift register ini menjadikan desain tidak efisien, baik secara hardware mau pun software.

    Terus terang saya ribet banget saat membuat scanner dengan shift register, apalagi ketika menghubungkan 3 chip 74HC595 secara cascade. Anehnya chip ke-3 yang di-cascade jadi berubah pin clock dan latch, jadi harus disilang. Chip ke-3 ini sudah saya ganti dengan stok yg lain tapi tetap harus disilang. Aneh…

  5. Sourcing atau Sinking Current
  6. Ini menyalahi prinsip desain elektronika yang baik, karena saya tidak memperhitungkan arus yang harus diberikan atau dibenam oleh shift register. Dengan penyalaan 8 buah LED sekali siklus tentu sudah cukup besar arus yang harus dialirkan atau dibenam. Tetapi ketika saya abaikan, ternyata sirkuit masih berjalan dengan baik. Hanya saja saya tahu bahwa ini bukan desain yang baik.

    Terbukti nyala LED menjadi lebih redup saat 3 panel terhubung. Berarti saya harus memperhitungkan sourcing current. Syukurlah IC tidak jebol. Atau mungkin belum? Hehehe…

Menggunakan font 5x7 yg hemat
Menggunakan font 5×7 yg hemat

Baiklah, saya akan perbaiki desainnya. Kalau pun di foto nampak bekerja dengan baik, itu masih banyak kelemahannya. Rupanya saya harus belajar banyak banget. Dan tentu saja harus beli beberapa komponen tambahan, termasuk kabeeeel…

Belajar Display Dot Matrix

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.

Skema 1088BX
Skema 1088BX

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.

Bentuk panah. Mestinya menyala merah menyala. Di foto nampak putih.
Bentuk panah. Mestinya menyala merah menyala. Di foto nampak putih.

Baca selebihnya »

Bermain Dengan Seven Segment

Kabel mana yg harus dipotong?
Kabel mana yg harus dipotong?

Sambil menunggu kedatangan modul radio pesanan yang belum juga tiba, saya pun mengisi waktu untuk mempelajari display 7-segment. Mempelajari 7-segment ini sekaligus jalur untuk mempelajari dot matrix yang lebih kompleks pin-nya. (*mestinya saya belajarnya sejak jaman kuliah elektro dulu ya? Hiks…*)

Prinsip kerja 7-segment sama dengan dot matrix karena basisnya sama, yaitu LED. Hanya saja 7-segment sudah memiliki susunan LED yang spesifik. Sedangkan dot matrix LED-nya disusun dalam bentuk matrix 5×7 atau pun 8×8. Display dot matrix lebih fleksibel karena dengan penyalaan LED secara spesifik bisa membentuk tampilan terpola, termasuk angka, huruf mau pun pola-pola sederhana.

Seperti biasa, yang dilakukan pertama kali adalah mempelajari datasheet. Kita harus mencari datasheet yang sesuai dengan kode komponen yang kita punya. Karena walau pun sama-sama seven segment, tapi bisa jadi konfigurasinya beda, demikian pula susunan pin-nya.

Seven segment yang saya beli memiliki tampilan 4 digit dan berkode 5461BH, dari sinilah perburuan datasheet dilakukan. Syukurlah ketemu, bisa didownload di: TOF-5461BH-B.pdf.

5461BH (diambil dari datasheet)
5461BH (diambil dari datasheet)

Nampak bahwa segment dikodekan dengan A, B, C, D, E, F, G, DP (titik). Sedangkan di bawah ini adalah gambar skematik-nya. Tampak bahwa segment segment saya ini punya 12 pin dan termasuk common anode.

Skema seven segment
Skema seven segment

Sebelum melakukan pengkabelan, saya mengetest pin-pin dulu sekalian mengecek apakah sesuai dengan datasheet atau tidak. Ternyata sesuai datasheet, hore…

Baca selebihnya »