Jumat, 21 Maret 2014

Multiplexing 4 digit 7-Segment dengan Shift Registers dan 7-Segment Decoder

Oke, sekarang saya ingin membuat tugas mata kuliah Interaksi Manusia Komputer. Saya ingin menggabungkan Arduino, Keypad dan 4 buah 7-segment. Tapi setelah saya hitung-hitung, pin yang terdapat pada Arduino Uno hanya ada 14 pin digital dan 6 pin analog, sedangkan saya membutuhkan 20 pin; 8 pin untuk keypad dan 12 pin untuk 7-segment. Wah saya pikir, masa semua pin Arduino saya dipakai, jadi nanti kalo kurang gimana... Oleh karena itu saya mencoba mencari cara agar saya tidak menggunakan pin terlalu banyak.

Nah saya menemukan satu solusi yang belum pernah saya coba, yaitu menggunakan multiplexer untuk mengendalikan 7-segment. Saya langsung googling dan mencoba untuk membuat daftar apa saja yang dibutuhkan, nah saya menemukan beberapa kemungkinan komponen yang dibutuhkan untuk melakukan multiplexing, sebagai berikut.

NB : daftar yang saya buat hanya komponen yang saya tidak miliki, sisanya sama dengan postingan Arduino dan 7-segment.

Kemungkinan-1:
  1. 74HC595 x1
  2.  CD4511
Kermungkinan-2:
  1. TPIC6x596 x4 
Kemungkinan-3:
  1. HCC/ HCF 4026B/4033B x4
Kemungkinan-4:
  1. SN74LS47N x1
  2. 74HC238 x1
Setelah membuat daftar, saya langsung menuju Anam, toko elektronik yang sering saya kunjungi untuk membeli komponen buat ngoprek. Nah, saya langsung tanya ke penjualnya dan ternyata mereka mempunyai 74HC595 dan CD4511 (kemungkinan-1), saya langsung membeli kedua komponen tersebut. Tiba-tiba datang inspirasi entah darimana, saya ingin mencoba menggunakan speaker kecil, langsung saja saya juga membeli speaker kecil. Komponen yang baru saya beli dapat dilihat pada gambar 1.
Gambar 1 - belanjaan saya dari toko Anam

Ketika sampai di kosan, saya langsung buka website tempat tadi saya melihat kemungkinan-1. Nah dari website itu saya mendapatkan gambar diagram seperti pada gambar 2.
Gambar 2 - diagram untuk rangkaian dengan menggunakan komponen pada kemungkinan-1 (sumber)

Tanpa menunggu lama, saya langsung membuat rangkaian  seperti pada skema tersebut. Dalam membuat rangkaian, saya juga melihat datasheet 74HC595 dan CD4511. Ternyata 74HC595 itu adalah 8-bit shift registers dan CD4511 itu adalah BCD-to-7 segment Decoder.

Alat dan komponen yang saya gunakan adalah:
  1. Arduino Uno R3 x1
  2. kabel USB untuk power Arduino
  3. Breadboard x2
  4. 74HC595 x1
  5. CD4511 x1
  6. Common anode 7-segment x4
  7. Transistor npn x11
  8. Resistor 1k ohm x11
  9. kabel (untuk jumper) secukupnya

Rangkaian yang saya buat dapat dilihat pada gambar 3.
Gambar 3 - rangkaian yang sudah saya buat

Oke, rangkaian sudah ada, kemudian saya coba melihat kode program nya


Wah kok aneh, ekstensinya .pde, kalo tidak salah ini kan ekstensi untuk processing. Namun setelah saya lihat-lihat, sepertinya ini kode Arduino, saya langsung copas dan unggah ke Arduino, kemudian saya jalankan, dan hasilnya seperti pada video berikut.


Karena saya penasaran apasih gunanya 74HC595 dan CD411 tadi, maka saya googling dan menemukan jawabannya. 74HC595 atau 8-bit shift register berfungsi untuk menerima 8-bit input serial dan kemudian mengkonversikannya menjadi output parallel, sedangkan CD4511 adalah BCD-to-7 segment decoder yang berfungsi untuk mengubah kode biner (binary coded decimal) menjadi data tampilan untuk menampilkan 7-segment.

Jadi bisa disimpulkan, data yang keluar dari pin digital Arduino, masuk ke 74HC595, kemudian oleh 74HC595 di proses digit mana dan segment mana yang ingin dinyalakan pada 7-segment, perintah untuk menyalakan 7-segment dikirim dari 74HC595 ke CD4511 yang berfungsi sebagai decoder dan mengatur nyala/ matinya segment pada 7-segment.

Setelah memahami apa yang terjadi pada rangkaiannya, saya ingin coba memahami apa yang terjadi pada kode programnya. Setelah saya baca-baca saya tidak mengerti kode programnya, ada fungsi yang saya tidak tahu artinya, yaitu fungsi shiftOut(), saya langsung membaca dokumentasi arduino dan memahami bahwa shiftOut() berfungsi untuk mengirimkan data 1 byte(8bit) secara sekuensial (dikirimnya 1bit 1bit) dengan urutan MSB atau LSB terlebih dahulu. Syntaxnya secara lengkap adalah shiftOut(dataPin, clockPin, bitOrder, value).

Oke, saya rasa saya sudah cukup mengerti, sekarang saya mau mencoba menampilkan angka 1234 di rangkaian saya.
Gambar 5 - angka 1234 pada rangkaian 7-segment 

Kode program yang saya gunakan adalah

Saya mengganti short dengan int_8t karena short di Arduino berukuran 16 bit, sedangkan yang sebenarnya dibutuhkan hanya 8bit. Terdapat fungsi shift left (<<) yang berfungsi untuk menggeser sebanyak 4 digit ke kiri. Penambahan integer dengan nilai 1/ 2/ 4/ 8 untuk mengatur digit mana yang akan dinyalakan.

Contoh: Saya ingin menyalakan 1 buah 7-segment di paling kanan dengan angka 3, maka data yang akan saya kirimkan adalah (8<<4) + 1. Angka 8 integer = 00001000, setelah dilakukan operasi shift left menjadi 1000000, kemudian ditambah (00000001) maka menjadi 10000001. Data ini yang dikirimkan secara sekuensial dengan MSB(Most Significant Bit) atau bit paling kiri terlebih dahulu. Dapat dilihat bahwa 4 bit paling kiri akan diteruskan ke CD4511 dan 4 bit paling kanan menentukan digit mana yang akan dinyalan oleh 7HC595.

Akhirnya saya bisa menyalakan 4 digit 7-segment hanya dengan menggunakan 3 buah pin Arduino. Saya rasa postingan saya kali ini cukup sampai disini, pada postingan selanjutnya saya akan mencoba speaker kecil yang baru saya beli. Selamat mencoba!

1 komentar:

  1. kl saya mau tambah sensor counter up, button up, button down, button reset source codenya gmn ya? untuk button up nya bila ditekan sekian detik bisa geser ke satuan, puluhan, ratusan, ribuan sehingga bisa untuk merubah nilai setiap 7 segment begitu juga button down nya...terimakasih sebelumnya

    BalasHapus