Minggu, 20 Desember 2009

HELP Pada Aplikasi Mikrokontroller

.
Baca : Keypad Matriks 4x4 dan LCD 16x2.

Jika anda kesulitan memahami suatu sistem (Hardware) yang berbasis mikrokontroller mengenai cara penggunaan alat, pengoperasian alat, input apa yang harus diberikan, tombol apa saja yang ditekan, dst maka anda akan mencari Manual Book atau buku petunjuknya kemudian membaca secara perlahan.
Bagaimana jika buku itu hilang atau rusak atau halaman tertentu hilang (dan hal ini bisa terjadi bahkan sering) alat tersebut sulit dipahami dan bisa saja jadi tidak berguna karena takut rusak dan sebagainya.

Membuat Help pada aplikasi mikrokontroller bisa dilakukan dan tentu saja tidak bisa dibandingkan dengan Help pada komputer yang lengkap dan mudah, tapi Help yang dibuat pada aplikasi mikrokontroller dapat dibuat sehingga mudah dipahami meski digunakan oleh orang awam sekalipun.

Sebelumnya, ada 2 cara (yang saya ketahui) pembuatan HELP agar cara penggunaan alat yang dibuat dapat dipergunakan oleh orang lain, yaitu :

1. Sequensial (berurutan)
Dengan cara ini maka penggunaan alat haruslah berdasarkan urutan tertentu, yaitu langkah 1 harus dilakukan sebelum langkah 2 dijalankan, langkah 2 harus dilakukan sebelum ke langkah 3, dst. Sehingga langkah 2 tidak mungkin terjadi jika langkah 1 belum dilakukan, dst.
Cara ini sangat efektif untuk kasus tertentu dan kadang cara ini HARUS untuk sistem tertentu.

2. Branching (Percabangan)
Cara ini lebih fleksibel dibanding cara 1, yaitu langkah berapapun bisa dilakukan tergantung keinginan User (pengguna). Karena fleksibilitasnya maka sangat efektif untuk suatu sistem kontroller yang berfungsi untuk mengendalikan banyak sistem lainnya

Hal yang menarik jika menguasai cara menggunakan atau menggabungkan coding Sequensial dan Branching adalah anda bisa merancang sistem yang multi fungsi hanya dengan menggunakan 4 buah Push Button saja sebagai inputannya tanpa memerlukan keypad matrix.
Silahkan berkreasi.

Saya akan membahas tips menambahkan Nama Pembuat, Judul alat, Help, Link Web Site, dst yang bisa diimplementasikan pada mikrokontroller menggunakan gabungan cara ke-1 dan cara ke-2 pada Coding berikut.

Coding ini akan saya bagi menjadi 3 bagian yaitu:
* Main Coding : Coding utama sistem (Cabang Utama).
* State Coding: Coding kondisi pergantian menu help.
* System Coding : Coding tampilan menu Help setiap sistem.

Main Coding
Program utama terdiri dari Inisalisasi mikrokontroller, tampilan pembuka, dan pernyataan switch-case. Tampak sederhana bukan, dan mudah dipahami. Dengan membuat banyak fungsi dan tinggal memanggil fungsi tersebut maka program anda akan menjadi lebih sederhana, mudah dipahami, mudah dikoreksi, mudah dikembangkan, dan lebih terstruktur.

Program ini adalah coding yang akan selalu digunakan baik sebelum memasuki Help suatu sistem maupun sesudah keluar dari Help suatu sistem sehingga disebut sebagai cabang utama. Pada Coding diatas sistem yang ditampilkan Help-nya antara lain : About, Main Help, Help LED, Help UART, Help motor Stepper, Help motor DC, dan Help Buzzer. Setiap sistem menggunakan case tersendiri yang saya beri nama : ABOUT_help, MAIN_help, LED_help, UART_help, STEPPER_help, MTRDC_help, dan BUZZER_help.

State Coding
Program ini terdiri dari : Scanning Keypad matrix 4x4 dan perubahan nilai memori help_mode yang menunjukkan State (kondisi) apa yang sedang diaktifkan. Karena menggunakan keypad matrix 4x4 maka bisa hingga 16 kemungkinan mode yang dapat dipergunakan (tentu saja bisa hingga 999 atau lebih).

Untuk percabangan atau pergantian state dan merupakan inti dari Posting Help pada aplikasi mikrokontroller terletak pada State Coding karena pada bagian inilah yang mengatur pergantian kondisi atau mode HELP pada sistem keseluruhan. Oleh sebab itu jika anda memahami pada State Coding ini akan sangat memungkinkan untuk dikembangkan untuk fungsi lain dan tidak hanya sebagai HELP saja.

Perhatikan pada fungsi SCAN_help(), fungsi ini selain sebagai scanning keypad juga sebagai delay atau tundaan. Diantara pergantian tampilan LCD harus ada delay tertentu agar tampilan LCD dapat terlihat oleh user akan tetapi harus ada pula scanning keypad terus-menerus untuk pergantian mode (state).
Jika menggunakan fungsi delay_ms(1500) akan kesulitan karena
  • keypad tidak akan bisa di scan selama 1500 ms.
  • mencari waktu (timing) yang tepat untuk penekanan keypad akan sulit bagi pengguna.
Oleh sebab itu scanning keypad terus menerus selama 30 kali dan delay antar scanning adalah 50 ms sehingga total delay yang disebabkan scanning keypad adalah 30x50 = 1500 ms.

Scanning keypad menggunakan looping 30 kali dan delay 50ms sehingga 1500 ms tetapi fungsi break akan menyebabkan keluar dari scannig keypad ketika user menekan keypad meskipun belum mencapai 1500 ms, hal inilah yang menyebabkan perubahan tampilah HELP dan perubahan mode (state) bisa kapan saja dan bersifat fleksibel tanpa perlu menunggu suatu event harus selesai.

Oiya saya hampir lupa, Biasanya cara lain yang digunakan untuk mendeteksi penekanan keypad yaitu menggunakan interupsi tetapi disini saya menggunakan cara scanning keypad sehingga keypad memang harus di scan terus menerus dan pada kasus ini tidaklah masalah. Silahkan mencoba dengan cara interupsi.

System Coding
Bagian ini adalah menampilkan Help-help setiap mode (state) yang diaktifkan. Tentu saja bisa digantikan dengan yang lain misalkan anda ingin menampilkan Help-nya sekaligus menjalankan sistem tersebut.

Bagian tersulit adalah "dimana dan kapan harus memanggil fungsi SCAN_help()" untuk setiap sistem karena setiap sistem berbeda-beda. Pemanggilan fungsi SCAN_help() haruslah tepat agar tidak terjadi kesalahan, oleh sebab itu pahami karakteristik sistem anda, kapan sistem "istirahat dan waktunya SCAN_help()".

Fungsi SEQUEN_help() belum saya cantumkan pada Main Coding maupun State Coding, Silahkan anda coba sisipkan beberapa coding sehingga SEQUEN_help() jadi berfungsi dan bandingkan...

Help ini memang belum rumit masih yang sederhana saja, tapi meskipun rumit asal dipahami konsepnya maka Help-nya bisa dibuat.
Cara saya menguji Coding ini yaitu orang baru (awam elektro/anak teknik arsitek) saya minta menyalakan alatnya dan mengoperasikannya tanpa saya bantu and it's work, dia bilang "Wah gampang dipahami nih." (untung IQ yang nyobain ga jongkok Xixixixixi......).

met mencoba ;)

Sabtu, 19 Desember 2009

IC Digital Project : Up/Down Counter

.
DataSheet IC 74HC192, IC 74HC193, dan IC 74LS47.

Perancangan alat ini, bisa menggunakan Mikrokontroller maupun IC digital.
Kali ini akan saya bahas Up Down Counter dgn menggunakan IC digital 74HC192 tampilan berupa Seven Segmen menggunakan IC 74LS47.

Coba bandingkan pada data sheet antara 74HC192 dgn 74HC193, yang saya buat dulu menggunakan IC 74HC193. Simulasi tampilan Seven segmen dengan data BCD silahkan lihat dilink ini (tampilan 0-9 sesuai dengan IC 74LS47).

Sebelum memulai sebaiknya baca dulu posting berikut:
* Display : 7-Segmen dan 16-Segmen
* IC Digital : 74LS47 BCD to 7-Segmen
* IC Digital : 74HC192 Up/Down Counter

7-Segmen yang digunakan adalah Single 7-Segmen Common Anode:







Schematic untuk Up/Down Counter :

Met Mencoba ;)

IC Digital : 74HC192 Up/Down Counter

.
DataSheet IC 74HC192 dan IC 74HC193.

Dengan menggunakan IC digital, dapat dirancang alat Up/Down Counter.
Up Down Counter yaitu Counter (pencacah) yang bisa menghitung naik (Count Up) dan menghitung turun (Count Down) aplikasinya antara lain :
- Jam Digital
- Stopwatch
- RPM counter
- Tachometer
- Product counter
- dll

Konfigurasi Pin IC 74HC192 sebagai berikut :
Pin Input :
CPd, CPu, MR, ^PL, D0-D3.
Pin Output:
Q0-Q3, ^TCu, ^TCd.






  • CPd (Count Down Clock Input) dan CPu (Count Up Clock Input) berfungsi sebagai input clock yg akan memicu (trigger) penghitungan Down atau Up, pemicuan akan terjadi jika pada pin ini terjadi perubahan logika LOW-to-HIGH atau PGT (Positif Going Transition), Baca Flip-Flop Lecture. Penggunaan CPd dan CPu tidak boleh bersamaan, jika CPd diberikan Clock maka CPu harus HIGH dan sebaliknya jika CPu diberikan Clock maka CPd harus HIGH. Pemberian Clock pada CPu dan CPd secara bersamaan menyebabkan kesalahan pada outputnya.
  • MR (Master Reset) Logika 1 pada pin MR dan input lainnya don't care kecuali input CPd menyebabkan output Q0-Q3 logika 0, dan ^TCu logika 1. Output ^TCd memiliki logika yang sama dengan input CPd.
  • ^PL (Paralel Load) berfungsi untuk memberikan nilai pada output Q0-Q3 dari input D0-D3 secara paralel, nilai ini dapat di set sebagai nilai awal sebelum di Counting Up/Down. Saat mode Count Down (CPu HIGH) jika ^PL logika 0 maka ^TCd akan berlogika 0 saat input D0-D3 logika 0 dan CPd logika 0. Saat mode Count Up (CPd HIGH) jika ^PL logika 0 maka ^TCu akan berlogika 0 saat input D0 dan D3 logika 1 dan CPu logika 0.
  • D0-D3 berfungsi sebagai data input paralel.
  • Q0-Q3 Flip flop output.
  • ^TCd (Borrow) dan ^TCu (Carry) berfungsi sebagai output indikator yang menunjukkan bahwa counting telah mencapai 0 (^TCd) atau telah mencapai 9 (^TCu). Terminal ini bisa digunakan sebagai pemicu pin MR atau ^PL untuk mereset counting atau digunakan oleh Flip-flop lainnya sebagai sumber Clock.
Asynchronous / asinkron pada input MR dan ^PL maksudnya adalah jika logika input MR ataupun ^PL berubah maka akan langsung mempengaruhi logika pin output tanpa menunggu sinyal Clock (sinyal peng-sinkron) dari Input CPd maupun CPu.

Contoh mode Parallel Load input :
Misal anda merancang alat Count Down dan nilai awal adalah 9 (BCD = 1001) maka :
  • Berikan nilai konstan/tetap yaitu D3 = 1, D2 = 0, D1 = 0, D0 = 1.
  • Saat ^PL berlogika 0 dan MR logika 1 maka Q0-Q3 = D0-D3.
  • Lalu ^PL berlogika 1 dan MR logika 1 kemudian berikan sinyal Clock pada CPd.
  • maka akan Count Down 9, 8, 7, 6, 5, 4, 3, 2, 1, 0.
  • Saat nilai 0 (BCD = 0000), terminal ^TCd berlogika 0.
Met Mencoba ;)

IC Digital : 74LS47 BCD to 7-Segmen Decoder

.
DataSheet IC 74LS47.

IC ini berfungsi untuk mengubah data BCD sehingga dapat ditampilkan ke 7-Segmen dan 7-Segmen yang digunakan untuk IC 74LS47 adalah 7-Segmen Common Anoda. BCD adalah data digital terdiri dari 4 digit dan nilai desimalnya antara 0-9 sedangkan nilai di atas 9 digunakan sebagai tanda atau indikator lainnya.







Konfigurasi Pin IC 74LS47 sebagai berikut :
Pin input yaitu :
A0-A3, ^RBI, ^BI, ^LT.
Pin Output :
^a-^g, ^RBO.

Pin yang membingunkan adalah pin ^BI/^RBO karena pada 1 pin tertulis Blank Input dan Riple Blank Output, dan agar tidak bingung harus di lihat juga tabel kebenaran penggunaan pin setiap IC.













  • A0-A3 input data BCD terdiri dari 4 digit.
  • ^a-^g adalah output ke 7-Segmen yang merupakan open kolektor sehingga memiliki arus cukup besar (24 mA) dan merupakan rendah aktif yaitu ON jika berlogika 0.
  • ^LT (Lamp Test) berfungsi untuk mengecek lampu/LED setiap segmen (segmen a-g), jika pin ^LT berlogika 0, ^BI berlogika 1, dan input lainnya don't care maka output ^a-^g berlogika 0 yaitu lampu segmen akan ON.
  • ^RBI (Riple Blank Input), Jika input ^RBI, A0-A3 , dan ^LT berlogika 0 maka output ^a-^g berlogika 1 yang berarti segmen OFF. Ketika menggunakan mode ini pin ^BI/^RBO digunakan sebagai indikator (output) yaitu pin ^RBO akan memiliki logika yang sama dengan ^RBI. Jika input ^RBI logika 0 maka output ^RBO logika 0 jika input ^RBI logika 1 maka output ^RBO logika 1.
  • ^BI (Blank Input) Jika pin ini berlogika 0, apapun logika pada input yang lain maka output ^a-^g akan berlogika 1. Dengan menggunakan pin ini misalkan menggunakan timer atau PWM, tampilan 7-Segmen akan berkedap-kedip (On-Off).
Dari gambar tersebut juga terlihat bahwa data BCD yang dapat ditampilkan yaitu angka 0-9 saja sedangkan data 10, 11, 12, 13, 14, dan 15 tidak dapat ditampilkan.
Anda harus mengubah data 10, 11, 12, 13, 14, dan 15 atau heksadesimal A, B, C, D, E, dan F ke data BCD 0-9 sebelum di tampilkan ke seven segmen dengan IC 74LS47.

Topik yang Populer