12. Pembelajaran cara menampilkan Tujuh Segmen atau seven segment

12. Pembelajaran cara menampilkan Tujuh Segmen atau seven segment

Materi:

Pembelajaran pada Bab ini menjelaskan komponen penampil tujuh- segment dan cara memprogramnya. Bahasan mencakup pemakaian 1 digit hingga 4 digit.

12.1 Pengenalan Penampil Tujuh Segmen

Penampil tujuh segmen biasa digunakan untuk menampilkan digit dengan jumlah digit antara 1 dengan 4. Bentuknya dapat dilihat di Gambar 12.1.

Gambar 12.1 Penampil tujuh segmen

Penampil tujuh segmen dibedakan menjadi dua macam: 1) common anode dan 2) common cathode. Kalau dilihat dari Sisi rangkaian, perbedaannya diperlihatkan di Gambar 12.2. Tampak bahwa:

  • semua anoda dalam keadaan terhubung untuk common anode, dan
  • Description semua katoda dalam keadaan terhubung untuk common cathode

Informasi tentang Pengujian Jenis Penampil Tujuh Segmen

mengetahui jenis penampil tujuh-segmen yang Anda miliki berjenis common anode atau common cathode, Anda bisa melakukan percobaan seperti berikut.

  • Hubungkan sebuah resistor 220Q dengan kawat ke pin 5V di Arduino Uno.
  • Hubungkan ujung lain resistor ke pin 8 milik penampil tujph-segmen.
  • siapkan satu kabel lagi dan tancapkan ke pin GND milik Arduino Uno dan ujung lain ke pin 4 penampil tujuh-segmen (lihat gambar berikut).

  • Hubungkan Arduino Uno ke port komputer.
  • Jika penampil tujuh-segmen berjenis common anode, segmen C akan menyala seperti berikut:

Jika segmen yang menyala tidak seperti itu, jenis penampil tujuh-segmen berbeda dengan digunakan penulis.

Jika tidak ada segmen yang menyala, lakukan percobaan berikut.

  • Tukarkan kabel yang terhubung•ke pin 4 dan pin 8 di penampil tUjUh-segmen.Jika ada yang menyala, penampil tujuh-segmen berjenis common cathode.
  • Untuk memeriksa hubungan setiap segmen dan pin di penampil tujuh-segmen, cabut kabel yang terhubung ke pin 4 milik penampil tujuh-segmen. Kemudian, tancapkan bergantian ke pin 10, 9, 7, 6, 1, 2, dan 5. Catat hubungan antara segmen berlabel A, dengan nomor pin masing-masing. Jangan mencolokkan ujung kabel ke pin 3.

12.2 Menampilkan Digit o hingga 9

Untuk mencoba proyek ini, diperlukan satu penampil tujuh-segmen dan tujuh resistor 2200. Rangkaiannya terlihat di Gambar 12.3. Contoh penyusunan rangkaian diperlihatkan di Gambar 12.4.

Description

Sebelum menuliskan sketch untuk menampilkan bilangan 0 hingga 9, perlu diperhatikan terlebih dahulu susunan setiap angka di dałam penampil tujuh-segmen. Tabel 12.1 mencantumkan sepuluh angka dan susunan bit untuk setiap segmen. Angka 1 menyatakan segmen menyala dan 0 tidak menyala. Untuk merujuk label A, B, C, dan seterusnya, silakan lihat Gambar 12.2.

Description

Catatan

Selain masalah common anode atau common cathode, hal lain yang perlu diperhatikan adalah pelabelan A, B, C dan kaitan dengan nomor pin di penampil tujuh segmen arena ada kemungkinan komponen yang Anda beli tidak sama dengan yang tertera di Gambar 12.2. Oleh karena iÅ‚u, catat hubungan antara label A, B, C dan nomor pin dengan menguji penampil tujuh-segmen dengan cara yang telah dibahas di tajuk “Informasi tentang Pengujian Jenis Penampil Tujuh Segmen” (Subbab 12.1).

Pengujian rangkaian yang melibatkan penampil tujuh-segmen dilakukan dengan menggunakan Sketch berikut : Sketch: digit

// ——————————————–

// Contoh untuk menampilkan angka 0 s/d 9

// di penampil tujuh segmen

// Khusus untuk common anode

// ——————————————–

const byte ANGKA[10]=

{

B11111100, // 0

B01100000, // 1

B11011010, // 2

B11110010, // 3

B01100110, // 4

B10110110, // 5

B10111110, // 6

B11100000, // 7

B11111110, // 8

B11110110, // 9

};

const int PIN[8] = { 9, 8, 7, 6, 5, 4, 3, 2};

void setup()

{

// Inisialisasi pin

for (int j = 0; j < 8; j++)

pinMode(PIN[j], OUTPUT);

}

void loop()

{

// Tampilkan 0 s/d 9

for (int j = 0; j < 10;j++)

{

tampilkanAngka(j);

delay(2000);

}

void tampilkanAngka(int angka)

// Abaikan kalau angka tidak antara 0 dan 9

if ((angka < 0) || (angka >9))

return;

byte dataSegmen= ANGKA[angka] ;

for (int j = 0; j < 8; j++)

{

int bit=bitRead(dataSegmen,j);

if (bit ==HIGH)

digitalWrite(PIN[j],LOW);

else

digitalWrite (PIN[j],HIGH);

}

}

Contoh hasil pengujian sketch digit di perlihatkan di Gambar 12.5

Gambar 12.5 Contoh hasil pengujian rangkaian yang melibatkan penampil tujuh-segmen

Pada sketch digit, penyusun angka di penampil tujuh-segmen didefinisikan di konstanta ANGKA, yang berupa array seperti berikut:

const byte ANGKA[10]=

{

B11111100, // 0

B01100000, // 1

B11011010, // 2

B11110010, // 3

B01100110, // 4

B10110110, // 5

B10111110, // 6

B11100000, // 7

B11111110, // 8

B11110110, // 9

};

Angka seperti B11110010 menyatakan konstanta biner, yang secara berturut-turut menyatakan nilai pada segmen A, B, C, D, E, F, G, dan DP. Sebagai contoh, angka tersebut akan menyusun tampilan seperti terlihat di Gambar 12.6.

Gambar 12.6 Bilangan penyusun angka di penampil tujuh-segmen

Pernyataan berikut mendefinisikan konstanta bernama PIN yang menyatakan pin-pin yang digunakan di sketch:

const int PIN[8] = { 9, 8, 7, 6, 5, 4, 3, 2};

Dengan membuat array seperti itu, inisialisasi mode pin dapat ditulis sederhana seperti berikut:

for (int j = 0; j < 8; j++)

pinMode(PIN[j], OUTPUT);

Penampilan angka 0 hingga 9 ditangani di loop ( ) . Kodenya:

// Tampilkan 0 s/d 9

for (int j = 0; j < 10;j++)

{

tampilkanAngka(j);

delay(2000);

}

Fungsi tampiIkanAngka ( ) -lah yang menangani penampilan angka di penampil tujuh-segmen

Di fungsi tampi1kanAngka ( ) , pernyataan berikut akan menolak angka yang kurang dari 0 atau lebih dari 9

if ((angka < 0) || (angka >9))

return;

pernyataan berikut digunakan untuk memperoleh data penyusun angka yang akan ditampilkan di penampil tujuh-segmen:

byte dataSegmen= ANGKA[angka] ;

selanjutnya, pemrosesan terhadap angka yang ada di variabel dataSegmen untuk diterjemahkan ke angka di penampil tujuh-segmen ditangani oleh:

for (int j = 0; j < 8; j++)

{

int bit=bitRead(dataSegmen,j);

if (bit ==HIGH)

digitalWrite(PIN[j],LOW);

else

digitalWrite (PIN[j],HIGH);

}

Pada pernyataan pengulangan di atas,

int bit=bitRead(dataSegmen,j);

Catatan

Untuk penampil tujuh- segment berjenis common cathone, penanganan yang sebaliknya perlu dilakukan. Di penampil tujuh-segmen berjenis common cathode, segmen menyala kalau diberi tegangan HIGH dan mati kalau diberi tegangan LOW

digunakan untuk memperoleh nilai bit pada bit ke-j. Nilai yang didapat tentu saja berupa 0 (LOW) atau 1 (HIGH). Selanjutnya, nilai HIGH akan diterjemahkan dengan mematikan segmen dan nilai LOW untuk menghidupkan segmen. Hal penting yang perlu diperhatikan, mengingat penampil tujuh-segmen yan digunakan bersifat common anode, segmen menyala justru kalau pin diberi nilai LOW dan mati kalau diber nilai HIGH.

12.3 Menyajikan Informasi di Empat Penampil Tujuh-Segmen

Description Kadang kala, diperlukan untuk menggunakan penampil tujuh-segmen lebih dari satu. Untuk keperluan seperti itu, suatu penanganan khusus diperlukan. Pertama-tama, rangkaian seperti terlihat di Gambar 12.7 perlu disusun. Tampak, diperlukan empat penampil tujuh-segmen. Susunan paralel pada penampil tUjUh-segmen di gambar menyatakan bahwa pin yang sama di semua penampil tujuh-segmen saling dihubungkan.

Kedua, unduhlah pustaka eksternal bernama TimerOne. Pustaka ini dapat diunduh di www.arduino.cc/pIayground/code/Timer1. File terunduh berupa TimerOne—v9. zip• Setelah file tersebut terunduh, lakukan langkah-langkah seperti berikut.

  1. Dekompresi sehingga hasilnya diletakkan di subfolder TimerOne.
  2. Pindahkan subfolder TimerOne ke C : \ Program Files (x86) \Arduino\libraries (dengan asumsi, program Arduino terinstal di C: \ Program Files (x86) \Arduin0)•
  3. Tutuplah Arduino IDE jika dalam keadaan sedang dibuka.
  4. Panggil kembali Arduino IDE supaya pustaka yang baru saja Anda tambahkan dikenali.

Selanjutnya, Anda bisa menguji rangkaian yang telah disusun dengan menggunakan Sketch berikut:

: Sketch: empatdigit

// ——————————————–

// Contoh untuk menguji empat penampil7 segmen

// dengan bilangan dibangkitkan secara acak

// ——————————————–

#include <TimerOne.h>

const byte PIN_SEGMEN[] = { 2, 3, 4, 5, 6, 7, 8, 9};

const byte PIN_KONTROL[] = {14, 15, 16, 17};

const byte ANGKA[10][8]=

/{

// A B C D E F G DP

{ 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

};

int digit[] = {0, 0, 0, 0};

boolean tandaPecahan= false;

void setup()

{

for (byte indeks = 0; indeks <8; indeks++)

{

pinMode(PIN_SEGMEN[indeks],OUTPUT);

digitalWrite(PIN_SEGMEN[indeks],HIGH);

}

for (byte indeks = 0; indeks <4; indeks++)

{

pinMode(PIN_KONTROL[indeks], OUTPUT);

digitalWrite(PIN KONTROL[indeks],LOW);

}

// Atur timer

Timer1.initialize(10000);

// Pasang fungsi yang akan dijalankan

Timerl.attachInterrupt(segarkanSegmen);

// Pasang tanda pecahan

tampilPecahan(true);

}

void loop()

{

digit[0] = rand0m(0, 10);

digit[1] = rand0m(0, 10);

digit[2] = rand0m(0, 10);

digit[3] =rand0m(0, 10);

boolean pecahan = rand0m(0, 2);

// Atur tanda pecahan

tampilPecahan(pecahan);

delay(1000);

}

void segarkanSegmen()

{

for (byte i=0; i <4; i++)

tampilkanSegmen(i, digit[i]);

}

void tampilkanSegmen(byte idSegmen, byte bilangan)

{

// Matikan kontrol selain idSegmen dan

for (byte indeks = 0; indeks < 4; indeks++)

digitalWrite(PIN KONTROL[indeks], LOW);

// Hidupkan pinKontrol idsegmen

digitalWrite(PIN_KONTROL[idSegmen],HIGH);

// Matikan semua segmen

for (byte indeks = 0; indeks <8; indeks++)

digitalWrite(PIN_SEGMEN[indeks], HIGH);

// Aktifkan segmen sesuai dengan bilangan

for (byte indeks = 0; indeks < 7; indeks++)

if (ANGKA[bilangan][indeks]==1)

digitalWrite(PIN_SEGMEN[indeks], LOW);

// Hidupkan DP khusus untuk idSegmen=1

//kalau tandaPecahan bernilai true

if (idSegmen==1)

if (tandaPecahan ==true)

digitalWrite(PIN_SEGMEN[7], LOW);

else

digitalWrite(PIN_SEGMEN[7], HIGH);

//Tunda sebentar

delay(100);

}

void tampilPecahan(boolean status)

{

tandapecahan=status;

}

Pada sketch empatdigit, data yang menyusun segmen-segmen di penampil tujuh segmen disimpan dalam bentuk array berdimensi dua. Jadi, implementasinya berbeda dengan sketch digit, yang menggunakan array berdimensi satu.

Array global bernama digit digunakan untuk mencatat empat angka yang akan ditampilkan. Pada keadaan awal, semua elemen diisi dengan 0. Hal ini dideklarasikan melalui:

int digit[] = {0, 0, 0, 0};

Adapun variabel global bernama tandaPecahan digunakan untuk mencatat perlu tidaknya tanda pecahan ditampilkan. Jika nilainya false, tanda pecahan tidak ditampilkan. Sebaliknya, jika nilainya true, tanda pecahan ditampilkan. Jadi, variabel inilah yang mengontrol segmen DP.

Untuk mempermudah dalam melakukan penyetelan pin-pin yang dilibatkan di rangkaian, dua array untuk digunakan untuk mencatat pin-pin tersebut. Dalam hal ini,

  • konstanta array PIN_SEGMEN mencatat pin-pin yang dihubungkan ke segmen di penampil tujuhsegmen;
  • konstanta array PIN_KONTROL mencatat pin-pin yang dihubungkan ke pengontrol untuk masingmasing penampil tujuh-segmen.

Fungsi setup ( ) , semua segmen dimatikan dengan melalui:

for (byte indeks = 0; indeks <8; indeks++)

{

pinMode(PIN_SEGMEN[indeks],OUTPUT);

digitalWrite(PIN_SEGMEN[indeks],HIGH);

}

Perhatikan bahwa semua pin yang berhubungan dengan segmen di penampil tujuh-segmen diberi nilai HIGH untuk mematikan segmen masing-masing. Hal ini berlaku untuk jenis common anode.

Kode berikut digunakan untuk membuat semua penampil-segmen tidak dapat diakses:

for (byte indeks = 0 ; indeks <4; indeks++)

{

pinMode (PIN KONTROL[indeks] , OUTPUT) ; digitalWrite (PIN KONTROL[indeks] , LOW) ;

}

Hal itu dilakukan dengan memberikan nilai LOW pada pin-pin kontrol.

Pernyataan berikut digunakan untuk membuat timer menjalankan suatu fungsi tiap 10.000 mikrodetik (1/100 detik):

Timerl.initialize (10000) ;

Penggunaan timer inilah yang memerlukan pustaka TimerOne. Adapun fungsi yang dijalankan oleh timer

dinyatakan di:

Timerl.attachInterrupt (segarkanSegmen) ;

Dalam ini, fungsi yang akan diproses adalah segarkanSegmen ( ) . Fungsi inilah yang menyegarkan tampilan di penampil tujuh-segmen per 1/100 detik.

Perlu diketahui, sketch melibatkan fungsi bernama tampi1kanPecahan ( ) . Fungsi ini dapat digunakan untuk menentukan perlu tidaknya tanda pecahan ditampilkan. Pengaturan dapat dilakukan dengan memberikan nilai true atau false di argumennya.

Penentuan segmen yang mengandung pecahan diatur di fungsi tampilkansegmen ( ) . Dalarn hal ini , hanya segmen dengan ID = 1 (tujuh-segmen kedua dari kiri) yang ada kemungkinan diberi tanda pecahan Kode yang mengaturnya adalah:

if (idSegmen==1)

if (tandaPecahan ==true)

digitalWrite(PIN_SEGMEN[7], LOW);

else

digitalWrite(PIN_SEGMEN[7], HIGH);

Perhatikan bahwa variabel tandaPecahan berperan mengatur hidup tidaknya segmen DP di tujuh_segmen kedua dari kiri.

Gambar 12.8 memperlihatkan contoh hasil pengujian rangkaian yang melibatkan empat penampil tujuh- segment.

Gambar 12.8 Contoh penyajian empat angka di penampil tujuh-segmen

12.4 Penampil Tujuh-Segmen Empat Digit

Description Untuk menyederhanakan pengabelan, jika Anda menggunakan empat penampil tujuh-segmen, gunakanlah yang tersusun dalam satu kesatuan seperti yang diperlihatkan di Gambar 12.9. Komponen ini memiliki 12 pin. yang unan kabel untuk menangani rangkaian yang digunakan oleh sketch empatdigit diperlihatkan contoh penyus0. pada komponen tersebut, pin 12 mengontrol digit terkiri, pin 9 mengontrol digit kedua, pin . Gambar 12.1 mengontrol digit ketiga, dan pin 6 mengontrol digit keempat.

Gambar 12.10 Contoh penyusunan tujuh-segmen yang mengandung empat digit

 

Tinggalkan Komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.