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…

Saya menghubungkan seven segment ini ke Arduino Nano andalan. Di gambar pertama adalah tampilannya dengan kode test yang saya buat secara sederhana. Saya sengaja tidak menggunakan library yang tersedia utk seven segment karena saya ingin mempelajari 7-segment ini secara detail.

Sayangnya 7-segment saya bukan didesain spesifik untuk tampilan jam karena tidak memiliki LED titik-dua di tengah. Namun di code saya tambahkan blink di LED titik (koma utk desimal) digit ke 2. Maksudnya adalah supaya jika 7-segment ini saya gunakan untuk display jam, blink ini bisa mensimulasikan detik.

Di bawah ini adalah source code-nya. Asyik deh belajar 7-segment. Sedikit lagi melangkah ke dot matrix. Tentu perlu belajar cascade shift register, terutama jika untuk ngoprek beberapa panel 8×8 sekaligus. Ayo belajar bareng…

/*
Emanuel Setio Dewo, setio.dewo@gmail.com
02 Nov 2012
Bermain dengan 7-segment
*/

int jeda = 1000;
long sblm = 0;
boolean titik = true;
int ttk = 0;
int counter = 0;

// Digit control
byte pin_digit[] = {
  0, 1, 2, 3
};

// Segment
byte pin_segment[] = {
  4, 5, 6, 7, 8, 9, 10, 11
};

byte angka[] = {
  1, 1, 1, 1, 1, 1, 0, 0, // 0
  0, 1, 1, 0, 0, 0, 0, 0, // 1
  1, 1, 0, 1, 1, 0, 1, 0, // 2
  1, 1, 1, 1, 0, 0, 1, 0, // 3
  0, 1, 1, 0, 0, 1, 1, 0, // 4
  1, 0, 1, 1, 0, 1, 1, 0, // 5
  1, 0, 1, 1, 1, 1, 1, 0, // 6
  1, 1, 1, 0, 0, 0, 0, 0, // 7
  1, 1, 1, 1, 1, 1, 1, 0, // 8
  1, 1, 1, 1, 0, 1, 1, 0, // 9
  1, 1, 1, 1, 1, 0, 1, 0, // a
  0, 0, 1, 1, 1, 1, 1, 0, // b
  0, 0, 0, 1, 1, 0, 1, 0, // c
  0, 1, 1, 1, 1, 0, 1, 0, // d
  1, 1, 0, 1, 1, 1, 1, 0, // e
  1, 0, 0, 0, 1, 1, 1, 0, // f
  
};

void setup() {
  for (int i=0; i<=12; i++) pinMode(i, OUTPUT);
  test_7();
  // set all digit off
  for (int i=0; i<=4; i++) {
    digitalWrite(pin_digit[i], LOW);
    hapus();
  }
}

void test_7() {
  for (int j = 0; j < 4; j++) {
    for (int i = 0; i < 16; i++) {
      tulis(j, i);
      delay(50);
    }
  }
}

void loop() {
  if (millis() - sblm > jeda) {
    sblm = millis();
    counter++;
  }
  if (counter > 9999) counter = 0;
  tuliskan(counter);
}

void tuliskan(int a) {
  int sisa = a;
  int t;
  for (int i=3; i>=0; i--) {
    t = sisa % 10;
    sisa = sisa / 10;
    tulis (i, t);
  }
}

void tulis(int d, int a) {
  hapus();
  digitalWrite(pin_digit[d], HIGH);
  // nyalakan
  int idx = a * 8;
  for (int i=0; i<8; i++) {
    if (angka[idx+i] == 1) digitalWrite(pin_segment[i], LOW);
    else digitalWrite(pin_segment[i], HIGH);
  }
  if (ttk != counter) {
    ttk = counter;
    if (titik == true) titik = false;
    else titik = true;
  }
  if (d == 1) {
    if (titik) {
      digitalWrite(pin_segment[7], HIGH);
    }
    else {
      digitalWrite(pin_segment[7], LOW);
    }
  }
  delayMicroseconds(100);
  //delay(1);
}

void hapus() {
  for (int i=0; i<4; i++) digitalWrite(pin_digit[i], LOW);
  for (int i=0; i<8; i++) digitalWrite(pin_segment[i], HIGH);
}
Iklan

7 pemikiran pada “Bermain Dengan Seven Segment

  1. syalom saudaraku aku mau nanya, di postingan ada tertulis anda memesan pembuatan pcb kalau boleh tahu di mana tempat pembuatanya. atau tempat utk memesan pcb, klu lihat seperti yg ada di postingan seperti nya bagus. saya juga sedang belajar pemrograman mikrokontroler jadi pingin juga memesan pembuatan pcb.selama ini saya coba bikin sendiri tapi kurang rapi.Trims

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.