Translate

Penampilan LED 7 Segmen dengan MCS-51



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