Penggunaan penampil
LED 7 segmen masih menjadi pilihan saat ini terutama untuk perangkat yang
menampilkan informasi berbentuk angka-angka meskipun ada beberapa huruf bisa
ditampilkan. Kesederhanaan dalam rancangan dan aplikasi menjadikan komponen
penampil LED ini masih senantiasa digunakan.
Sebuah penampil LED
7 segmen memiliki 7 buah LED terdiri dari A, B, C, D, E, F dan G yang digunakan
untuk menampilkan angka-angka dan beberapa huruf yang memungkinkan. Namun
kebanyakan juga dilengkapi dengan sebuah LED yang berbentuk DOT sehingga total
LED mencapai 8 buah. LED DOT ini umumnya dimanfaatkan untuk penunjukkan koma
pada deretan angka baik berbentuk pecahan atau ribuan.
Konfigurasi dasar
dari sebuah LED 7 segmen dapat Sobat lihat pada gambar di bawah ini.
Dari konfigurasi LED
7 segmen – di atas, maka untuk menampilkan angka dapat ditentukan menurut tabel
berikut ini di mana tanda O menunjukkan LED menyala dan – menunjukkan LED padam
sementara X bisa keduanya:
ANGKA
|
POSISI LED
|
||||||
G
|
F
|
E
|
D
|
C
|
B
|
A
|
|
0
|
–
|
O
|
O
|
O
|
O
|
O
|
O
|
1
|
–
|
–
|
–
|
–
|
O
|
O
|
–
|
2
|
O
|
–
|
O
|
O
|
–
|
O
|
O
|
3
|
O
|
–
|
–
|
O
|
O
|
O
|
O
|
4
|
O
|
O
|
–
|
–
|
O
|
O
|
–
|
5
|
O
|
O
|
–
|
O
|
O
|
–
|
O
|
6
|
O
|
O
|
O
|
O
|
O
|
–
|
O
|
7
|
–
|
X
|
–
|
–
|
O
|
O
|
O
|
8
|
O
|
O
|
O
|
O
|
O
|
O
|
O
|
9
|
O
|
O
|
–
|
O
|
O
|
O
|
O
|
Selain tabel angka
yang dapat ditampilkan oleh penampil LED 7 segmen menurut format data BCD
(binary coded decimal), kadang beberapa huruf perlu untuk ditampilkan. Semisal
adalah saat kita memerlukan tampilan yang menunjukkan bilangan heksadesimal.
Berikut tabel tambahan untuk karakter heksadesimal yang digunakan.
HURUF
|
POSISI LED
|
||||||
G
|
F
|
E
|
D
|
C
|
B
|
A
|
|
A
|
O
|
O
|
O
|
–
|
O
|
O
|
O
|
b
|
O
|
O
|
O
|
O
|
O
|
–
|
–
|
C
|
–
|
O
|
O
|
O
|
–
|
–
|
O
|
d
|
O
|
–
|
O
|
O
|
O
|
O
|
–
|
E
|
O
|
O
|
O
|
O
|
–
|
–
|
O
|
F
|
O
|
O
|
O
|
–
|
–
|
–
|
O
|
Karakter lain
adalah memungkinkan untuk ditampilkan menurut keinginan Sobat sebagai perancang
tentunya. Beberapa contoh huruf
yang pernah penulis coba sebagai informasi saja antara lain: G, H, J, K, L, o,
P, S (sama dengan angka 5), t, U dan Y.
Dulu sekali ketika
penulis baru kali pertama memanfaatkan penampil 7 segmen ini menggunakan serpih
berbasis TTL (transistor-transistor logic) SN74LS47 atau SN74LS48 yaitu “BCD to
7 Segmen Decoder” atau CMOS 4558. Dan saat ingin menampilkan dalam format heksa
maka menggunakan jenis CMOS 5068.
Sekarang dengan
semakin mudahnya memperoleh sebuah mikrokontroler maka untuk aplikasi dengan
penampil LED 7 segmen cukup menggunakan program yang dapat diproses untuk
tampilan sesuai yang dikehendaki.
Rangkaian dasar
yang menggambarkan sebuah LED 7 Segmen digerakkan oleh sebuah mikrokontroler
dapat Sobat lihat di bawah ini. Gerbang mikrokontroler yang berjumlah 8 bit
akan digunakan menggerakkan LED. Untuk Pin dari LED a, b, c, d, e, f dan g
hanya membutuhkan 7 bit saja yaitu D6 – D0. Sementara jika diinginkan gerbang
D7 bisa saja untuk pin DOT dari LED 7 segmen, jadi sifatnya optional saja menurut
kebutuhan dari rangkaian dan implementasinya. Bergantung pada jenis dan
spesifikasi LED 7 segmen. Penulis menggunakan jenis Common Anoda.
Namun sebuah
rangkaian elektronik yang kita buat terkadang memerlukan penampilan lebih dari
1 digit, bisa 2 atau lebih. Sebagai contoh jika Sobat membuat sebuah penampil
LED 7 segmen untuk jam di mana setidaknya memerlukan sampai 4 digit untuk
menunjukkan waktu jam dan menit atau 6 digit jika menghendaki peragaan detik.
Contoh lainnya yang
mungkin lebih spektakuler adalah ketika Sobat mungkin sedang mampir di sebuah
bank dan melihat tampilan kurs mata uang asing. Sobat tentu melihat ada begitu
banyak digit LED 7 segmen yang harus ditampilkan. Katakan untuk sebuah mata
uang membutuhkan setidaknya 5 digit karena kadang nilai kurs bisa berkisar
belasan ribu. Kemudian jika untuk menampilkan 10 kurs mata uang saja, maka
diperlukan setidaknya 50 digit. Bagaimana jika 20? Sobat hanya perlu mengalikan
saja, hasilnya adalah 100 digit.
Jelas, untuk
menampilkan sejumlah digit penampil LED 7 segmen kita tidak disarankan untuk
menggunakan mikrokontroler sesuai jumlah tersebut.
Nah, berikut akan
kita simak rangkaian elektronik tentang bagaimana sebuah mikrokontroler
menampilkan setidaknya 8 digit LED 7 segmen.
Ada 2 teknik
rangkaian dan pemrograman pada mikrokontroler yang sering penulis gunakan untuk
aplikasi berpenampilan LED 7 segmen. Setiap rangkaian memiliki keluwesannya
masing-masing sesuai dengan kebutuhan.
Berikut adalah contoh
rangkaian penampil LED 7 segmen menggunakan SN74LS373 dan SN74LS138.
Pada rangkaian
penampil LED 7 segment di atas, penulis menggunakan komponen 74LS373 atau
sejenis yaitu “8 bit 3-state D-latches” untuk menampung data tampilan sekaligus
penggerak LED. Penggunaan 74LS373 sebagai kemudi (driver) LED tentu sangat
efektif pada aplikasi di mana digit yang harus ditampilkan dalam jumlah banyak.
Untuk pengalamatan, sebuah 74LS138 setidaknya dapat menyediakan hingga 8 digit.
Di bawah ini adalah
contoh rutin aplikasi yang bisa dijalankan sesuai rangkaian di atas pada keluarga MCS-51 dengan jenis mikrokontroler AT89C51 atau
AT89S51. Setidaknya ada 4 baris konfigurasi awal yang diperlukan
yaitu BufferData untuk menampung data, LED_Data dan LED_Digit untuk konfigurasi
gerbang yang digunakan serta Pulsa_LE untuk latch enable.
BufferData data 09h
LED_Data data p0
LED_Digit data p1
Pulsa_LE bit p1.7
Selanjutnya untuk memindahkan data LED 7 segmen yang ada pada
BufferData digunakan program berikut. Sebanyak 8 byte akan dipindahkan sesuai
jumlah yang ditentukan oleh register R7 dan alokasi digit dari setiap data
ditentukan oleh isi akumulator.
LED_Display:
mov r0,
#BufferData
mov r7,
#8
clr a
Pada rutin LED_Pindah berikut, LED_Digit atau Port 1 akan diisi dengan
nilai
akumulator yang sekaligus mereset Pulsa_LE menjadi 0. Kemudian LED_Data atau
Port 0 diisi dengan BufferData. Sebuah pulsa tepi naik akan memindahkan isi
BufferData pada keluaran LS373 sesuai dengan lokasi yang ditunjuk oleh LS138. Nilai nible
LSB akumulator 0000 akan merepresentasikan digit pertama dan seterusnya sampai
0111 untuk digit terakhir atau ke 8.
LED_Pindah:
mov LED_Digit,
a
mov LED_Data,
@r0
inc r0
inc a
setb Pulsa_LE
djnz r7,
LED_Pindah
clr Pulsa_LE
Berkaitan dengan
aktifitas program, maka pada contoh di atas, sebuah mikrokontroler harus
meluangkan waktu untuk memproses instruksi menampilkan ke-8 LED 7 segmen selama
60 siklus mesin atau sekitar 65 us dengan kristal 11,0592 MHz.
Jika sobat menggunakan mikrokontroler jenis AT89C2051 tentu harus ada
sedikit modifikasi yaitu LED_Data menggunakan gerbang P1 dan LED_Digit
menggunakan gerbang P3 sementara Pulsa_LE juga harus diubah menggunakan P3.7.
Nah pada baris program CLR A di atas harus diganti dengan MOV A, #00110000B.
Kenapa? Karena sisa gerbang P3.4 dan P3.5 bisa dimanfaatkan untuk tujuan lain.
Aku rasa mudah bukan?
Bagaimana jika ingin memanfaatkan gerbang serial P3.0 dan P3.1? Pada
implementasi lain nanti Insya Allah akan aku bahas.
Teknik seperti di
atas adalah perluasan dari penggunaan sistem paralel I/O yang tentu bisa juga
menggunakan serpih PPI (programmable paralel interface) seperti 82C55 atau
penggunaan “Remote 8-bit I/O Expander” seperti PCF8574. Tentu untuk aplikasi
program yang dibuat tidak sesederhana di atas.
Contoh rangkaian penampil
LED 7 segmen dengan teknik “scanning” diperlihatkan di bawah ini:
Pada saat membuat aplikasi tampilan yang berkaitan dengan teknik
scanning, kadang muncul sebuah pertanyaan. Berapa kecepatan rotasi scanning
yang diperlukan?
Tentu Sobat masih ingat berapa frekuensi listrik di rumah kita (di
Indonesia) yaitu 50 Hz. Jika sobat perhatikan spesifikasi televisi juga akan dijumpai
istilah “Field Frequency” di mana untuk format di Indonesia adalah 50 Hz untuk
PAL.
Nah nilai tersebut di atas akan kita adopsi untuk rangkaian penampil LED
7 segmen yang dibuat. Singkat cerita, kita langsung saja menuju contoh program
berikut ini:
BufferData data 09h
LED_Data data p0
LED_Digit data p1
Pada konfigurasi di atas, kita masih menggunakan register penampung data
BufferData dan 2 buah gerbang yang sama yaitu LED_Digit dan LED_Data.
Pada rutin berikut ini, kita masih akan menampilkan isi BufferData pada
LED 7 segmen sejumlah byte sesuai isi register R7. Sementara lokasi digit
ditetapkan menggunakan akumulator.
LED_Display:
mov r0,
#BufferData
mov r7,
#8
mov a, #255
clr c
Setelah penetapan register yang akan digunakan selesai maka kita sudah
bisa menjalankan rutin scanning berikut bernama LED_Scan. Setelah mengisi gerbang
LED_Data dengan isi lokasi BufferData yang ditentukan oleh register R0,
selanjutnya kita akan menggeser akumulator ke kiri termasuk bit Carry sehingga
nilai bit Carry akan digeser ke ACC.0 yaitu rendah untuk kemudian hasil
penggeseran akumulator ini akan diisikan ke gerbang LED_Digit.
LED_Scan:
mov LED_Data,
@r0
inc r0
rlc a
mov LED_Digit,
a
acall Delay2u5s
mov LED_Digit,
#255
djnz r7,
LED_Scan
ajmp LED_Display
Subrutin Delay2u5s digunakan untuk memberikan tundaan selama 2500 us.
Seperti kita ketahui bahwa periode yang diinginkan adalah 20 ms untuk
mendapatkan frekuensi 50 Hz. Karena jumlah digit adalah 8 maka kita perlu
membagi perioda dengan 8 pula sehingga menghasilkan 2,5 ms atau 2500 us.
Sementara proses rutin LED_Scan di atas sampai dengan perintah DJNZ
menghabiskan 9 siklus (sekitar 9,8 us). Jika rutin delay di bawah diproses maka
akan memberikan tundaan sekitar 2493 us dari 2298 siklus mesin dengan kristal
11,0592 MHz.
Delay2u5s:
mov r5, #5
Del: mov r6, #228
djnz r6, $
djnz r5, Del
ret
Dari kedua teknik di atas, silahkan Sobat pilih untuk mengimplementasikannya
pada rangkaian yang akan dibuat. Sobat akan menjumpai perbandingan antara efisiensi berkaitan dengan
penggunaan komponen dan kinerja dari mikrokontroler.
Sebagai tambahan saja, pada contoh kedua di atas di mana program penampil
LED 7 segmen menggunakan teknik scanning, sebagai pilihan maka program bisa dijalankan dengan subrutin
interupsi timer dari mikrokontroler. Tentu dengan memodifikasi contoh dasar
aplikasi di atas.
Udah ya, makasih
udah baca postingan aku. Semoga bisa bermanfaat, sukur-sukur bisa diterapkan
oleh sobat semua.
Salam....
Tidak ada komentar:
Posting Komentar