Arduino Seven Segment Display Tutorial dan Penjelasan


Tutorial Arduino Indonesia kali ini membahas mengenai bagaimana cara melakukan setting konfigurasi penampil seven segment.
Berikut ini adalah tutorial untuk belajar project dengan Arduino Uno bagi pemula dengan menggunakan seven segment display. Tutorial akan disusun secara bertahap mulai dari dasar hingga yang lebih rumit, semisal untuk project tugas akhir kuliah atau keperluan aplikasi lainnya. Adapun karena keterbatasan jumlah pin dalam board Arduino Uno, untuk menghemat resource, dapat digunakan IC 7447, decoder. Fungsi dari IC 7447 ialah sebagai decoder yang menerima input BCD 4 bit dari Arduino, dan menghasilkan output 8 bit untuk mengendalikan nyala dari seven segment display. Sehingga hanya dengan 4 pin saja (bila tanpa decoder membutuhkan 8 pin) pada Arduino Uno, sudah dapat mengendalikan nyala tampilan seven segment display. Berikut ini catatan untuk wiring diagram rangkaian.
  • Menyamakan konfigurasi pin yang digunakan antara wiring diagram dengan souce code
  • Untuk wiring diagram output Arduino sebagai input ke decoder IC 7447 ialah berturut-turut pin 0, pin 1, pin2, dan pin 3 masing-masing untuk input A, B, C, dan D
  • Perubahan konfigurasi wiring diagram harus disesuaikan juga dengan source code yang digunakan
  • Untuk wiring diagram dari decoder IC 7447 ke seven segment display dapat mengikuti gambar yang ada
  • Untuk decoder IC 7447, menghasilkan output active low, berkaitan dengan jenis seven segment display yang digunakan ialah common anode

Langkah Kerja
Langkah kerja untuk project Arduino sederhana ini ialah sebagai berikut ini.
  • Rangkai komponen yang dibutuhkan seperti pada petunjuk untuk wiring diagram dengan board Arduino
  • Sambungkan board Arduino dengan connector USB ke komputer
  • Buka Arduino IDE, dan tulis source code (sketch) program
  • Lakukan Verify untuk memastikan program telah ditulis dengan benar
  • Selanjutnya Upload program tersebut ke board Arduino
  • Lakukan percobaan dan amati hasilnya

Source Code
Untuk source code (sketch), dituliskan dan upload ke Arduino Uno dengan menggunakan Arduino IDE.

<img src="bcd_seven_segment.png" alt="bcd_seven_segment">


Berikut ini adalah source code (sketch) seven segment display sederhana tanpa menggunakan library.

/*
Program seven segment display
tanpa library

Loki Lang
*/

void setup()
{
  DDRD = 15; //B00001111
}

void loop()
{
  PORTD = 0; //B00000000
  delay(1000);
  PORTD = 1; //B00000001
  delay(1000);
  PORTD = 2; //B00000010
  delay(1000);
  PORTD = 3; //B00000011
  delay(1000);
  PORTD = 4; //B00000100
  delay(1000);
  PORTD = 5; //B00000101
  delay(1000);
  PORTD = 6; //B00000110
  delay(1000);
  PORTD = 7; //B00000111
  delay(1000);
  PORTD = 8; //B00001000
  delay(1000);
  PORTD = 9; //B00001001
  delay(1000);
}

Penjelasan program sebagai berikut.
  • DDRD (Data Direction Register D) digunakan untuk mendefinisikan PORTD apakah sebagai input atau output
  • Disini DDRD diberikan nilai 15 atau sama seperti B00001111, yang mana empat buah pin diberi nilai 1, artinya pin 0, pin 1, pin 2, dan pin 3 tersebut didefinisikan sebagai port output, sementara itu pin 4, pin 5, pin 6, dan pin 7 diberikan nilai 0, maka pin tersebut didefinisikan sebagai input
  • Hanya empat buah pin Arduino yang digunakan sebagai output, dikarenakan IC 7447 cukup menerima empat masukan data untuk mengatur nyala seven segment display
  • Untuk delay, digunakan untuk memberikan jeda eksekusi dari satu line ke line selanjutnya dalam program, selain itu juga agar hardware dapat menjalankan program dengan lebih stabil
  • Durasi delay dalam ms, dengan kata lain 1000 ms sama dengan 1 detik
Lama durasi dapat disesuaikan dengan mengubah nilai dalam delay(), semakin besar nilai yang diberikan maka akan semakin lama durasinya. Berikut ini adalah source code (sketch) seven segment display sederhana tanpa menggunakan library, tapi dengan menggunakan instruksi perulangan for.

/*
Program seven segment display
tanpa library dengan for()

Loki Lang
*/

void setup()
{
  DDRD = 15; //B00001111
}
void loop()
{
  for(int lang = 0; lang <=9; lang++)
  {
    PORTD = lang;
    delay(1000);
  }
}

Beberapa baris source code (sketch) sama seperti pada program yang pertama. Secara penulisan program tersebut lebih singkat dari yang pertama, dengan perulangan for, berikut penjelasannya.
  • Perulangan for dengan variable lang, didefinisikan mulai dari nilai 0 hingga 9, dengan perubahan increment 1 setiap tahapnya
  • Kemudian nilai variable lang, digunakan sebagai nilai data output PORTD sebagai input decoder BCD to seven segment, IC 7447
Adapun source code (sketch) cara lain dengan menggunakan library sebagai berikut.

/*
Program seven segment display
dengan menggunakan library

Loki Lang
*/

#include <SegDisplay.h>

#define A 0
#define B 1
#define C 2
#define D 3
#define Enable 4
SegNumbers lang(A, B, C, D, Enable);

void setup()
{
}

void loop()
{
  lang.off();
  delay(1000);
  lang.zero();
  delay(1000);
  lang.one();
  delay(1000);
  lang.two();
  delay(1000);
  lang.three();
  delay(1000);
  lang.four();
  delay(1000);
  lang.five();
  delay(1000);
  lang.six();
  delay(1000);
  lang.seven();
  delay(1000);
  lang.eight();
  delay(1000);
  lang.nine();
  delay(1000);
}

Berikut ini penjelasan source code (sketch) Arduino dengan menggunakan macro library seven segment display.
  • Penggunaan macro #include sebagai preprocessed directive untuk mencakup file header SegDisplay.h untuk library seven segment display
  • Penggunaan macro #define sebagai preprocessed directive untuk mendefinisikan konstanta A, B, C, D, Enable dengan nilai masing-masing integer, dari class SegNumbers
  • Pada saat proses compile dilakukan macro A, B, C, D, dan Enable, akan diganti oleh nilai (alamat pin Arduino) yang direpresentasikannya
Berikut ini adalah tabel kebenaran dari input BCD (output dari Arduino) ke output seven segment display, dengan IC 7447.

<img src="7447_truth_table.png" alt="7447_truth_table">


Dengan seven segment display common anode, active low, maka saat diberikan logika low justru akan menyala. Lihat juga mengenai tutorial dan penjelasan mengenai project Arduino Uno LED blinking, Arduino Uno LED animation, Arduino Uno komunikasi serial seven segment display, dan simulasi seven segment display Arduino di ISIS Proteus.

Bila ada sesuatu yang belum jelas dan ingin tahu lebih dalam seputar project Arduino, pemrograman, dan elektronika, bisa bertanya pada bagian comment atau melalui page Facebook berikut.