Cara Membuat Lampu Lalu Lintas Dengan Visual Basic 6.0 | Membuat Jam Digital Sederhana Menggunakan Microcontroller P16F84a | Komputer Termurah Sedunia

Cara Membuat Lampu Lalu Lintas Dengan Visual Basic 6.0

Okeh, kali ini admin akan mencoba memberikan sedikit tentang bagaimana Cara Membuat Lampu Lalu Lintas Dengan Visual Basic 6.0, program kali ini masih bersifat sederhana karena hanya menggunakan beberapa komponen saja. Langsung saja untuk menuturkan langkah demi langkah proses pembuatan program sederhana ini. Mari ikuti langkah – langkah berikut ini :

  • Saya berharap sobat sudah menginstall software Visual Basic 6.0 pada PC / Laptop sobat, jika memang belum menginstall software VB-nya, sobat dapat download dulu softwarenya pada menu Free Download – Pilih Software – Setelah itu baru lah sobat install softwarenya.  
  • Untuk langkah pertama marilah buka program VB sobat yang sudah terinstall, kemudian akan muncul kotak dialog maka pilihlah “Standard EXE” lalu Open. Seperti pada gambar berikut :
 (NIHIL) 

  • Setelah sobat pilih open maka akan muncul tampilan utama lembar kerja visual basic 6.0. Seperti pada gambar berikut:
  • Nah seperti itulah tampilan awal mula dari membuat sebuah program, kita dapat merancang program yang ingin kita buat di lembar kerja itu. Okeh tidak usah terlalu berlama-lama untuk penjelasannya, mari langsung saja kita buat lampu lalu lintas untuk menggantikan lampu lalu lintas yang sudah rusak pada jalanan ibukota…hehe  
  • Pertama-tama kita ambil komponen “Frame” yang berada di sebelah kiri sobat atau yang dinamakan dengan “ToolBox”. Lihat contoh pada gambar berikut ini :
  • Sudah ??? Jika sudah, sekarang sobat atur lebar dan tingginya form1 sesuai dengan keinginan sobat, karena kita ingin membuat desain tampilannya. Sebagai contoh lihat gambar berikut :
  • Oia sobat bisa hapus tulisan “Frame 1” pada komponen frame tersebut, yaitu dengan cara : klik dulu komponen Frame-nya kemudian sobat beralih lah ke sebelah kanan sobat, disana terdapat menu “Properties” lalu carilah nama “Caption” dan hapuslah tulisan “Frame1”. Seperti pada gambar berikut :
  • Setelah sobat mengatur lebar dan tingginnya form, langkah selanjutnya adalah mari kita ambil kembali komponen yang berada pada toolbox yaitu komponen “Shape”. Seperti gambar berikut :
  
  • Kemudian sobat letakkan komponen “Shape” tersebut di dalam kotak “Frame”. Seperti pada gambar berikut :

  • Loh koq kotak ??? Ya tenang aja, itu dapat kita ganti menjadi bentuk apapun, mari sekarang kita ganti dengan bentuk lingkaran. Sobat klik dulu bentuk kotak-nya kemudian kita beralih ke “Properties”, oia perlu sobat ketahui bahwa pada menu properties ini lah kita dapat mensetting setiap komponen yang kita gunakan apapun komponennya, sobat bisa coba otak-atik pada menu propertiesnya untuk komponen lainnya. Okeh sekarang kita lanjut ke materi, pada menu properties sobat cari yang namanya “Shape” dan rubah menjadi “3 – Circle”. Seperti pada gambar berikut :
  • Lalu lihat hasil pada bentuk kotak sebelumnya, maka akan berubah bentuk menjadi sebuah lingkaran, lalu sobat ganti bentuk kotak lainnya sehingga semuanya menjadi bentuk lingkaran dengan cara yang sama. Lihat hasilnya pada gambar berikut :

  • Selesai sudah kita membuat sebuah lampu, tenang perjalanan kita masih panjang. Sekarang coba kita tambahkan tiang penyangga agar lampu itu dapat berdiri kokoh di jalanan…hehehe. Begini caranya :
  • Sobat ambil kembali komponen “Shape” yang berada di menu Toolbox dan buatlah sebuah tiang panjang lalu letakkan pas dibawah lampu tersebut. Sebagai contoh lihat pada gambar berikut :

  • Nah seperti itulah gambaran dalam pembuatan lampu lalu lintas, sekarang tinggal kita membuat bagaimana agar lampu lalu lintas tersebut dapat berfungsi layaknya lampu lalu lintas yang berada di jalanan… Lanjutttt....
  • Sekarang mari kita beri warna pada lampunya, sobat klik bentuk lingkaran yang paling atas kemudian sobat beralih ke “Properties”, kemudian sobat cari yang namanya “BackStyle” lalu rubah menjadi “1 - Opaque”. Nah sekarang kita beri lingkaran tersebut warna merah yaitu dengan cara : sobat cari yang namanya “BackColor” dan “BorderColor” rubahlah menjadi warna merah. “BackColor” menandakan sebagai warna untuk background dan “BorderColor”menandakan sebagai pinggiran dari lingkaran tersebut. Sudahkah ??? Jika sudah maka lingkaran tersebut menjadi warna merah semua, betul tidak ???. Hasilnya seperti pada gambar berikut : 
  • Langkah berikutnya sobat rubah lingkaran yang lainnya sesuai dengan warna pada lampu lalu lintas. Seperti pada gambar berikut :
  • Oia satu lagi, agar terlihat seperti layaknya lampu lalu lintas yang berada di pinggir jalan kita beri warna pada “Frame” dan “Tiangnya”, caranya gini : klik pada framenya kemudian beralih ke properties cari yang namanya “BackColor” lalu rubah warnanya menjadi warna hitam begitu juga dengan tiangnya rubah menjadi warna hitam dengan cara seperti merubah lingkaran. Seperti pada gambar berikut :

  • Sekarang saatnya kita memberikan sedikit script / coding pada lampu lalu lintas itu, agar dapat digunakan sebagai lampu lalu lintas di pinggir jalan. Hehehe
  • Sobat ambil komponen “Timer” pada Toolbox cukup 3 timer aja. Gunanya timer adalah sebagai waktu yang nantinya kita gunakan untuk menentukan setiap berapa detik setiap lampu itu akan nyala. Lihat pada gambar berikut :
  • Lalu sobat klik 2x pada “Timer1”, maka sobat akan di bawa ke jendela coding / biasa disebut lembar kerja koding, seperti pada gambar berikut :
  • Nah !!! disana sudah ada tulisan : 
            Private Sub Timer1_Timer() 

End Sub
  • Itu artinya kita harus memberikan sebuah perintah terhadap “Timer1”. Untuk perintah di Timer1 berikan script / coding yang berwarna merah dibawah ini :   
           Private Sub Timer1_Timer() 
Shape3.Visible = False
Shape1.Visible = True
Timer2.Enabled = True
Timer1.Enabled = False
End Sub
  • Kemudian sobat kembali ke lembar kerja VB-nya dengan cara klik icon yang tertera pada gambar dibawah ini :
  • Kemudian lakukan klik 2x kembali pada “Timer2”, dan berikan script / coding seperti dibawah ini :
Private Sub Timer2_Timer()
Shape1.Visible = False
Shape2.Visible = True
Timer3.Enabled = True
Timer2.Enabled = False
End Sub
  • Dan untuk script / coding pada “Timer3” seperti dibawah ini :
Private Sub Timer3_Timer()
Shape2.Visible = False
Shape3.Visible = True
Timer1.Enabled = True
Timer3.Enabled = False
End Sub

  • Sudah deh jadi lampu lalu lintasnya. Eitttsss tapi kita lupa memberikan waktu setiap berapa detik lampu itu akan menyala. Okeh saya berikan ketentuan waktunya, untuk Lampu Warna Merahsaya berikan waktu untuk nyala selama “8 Detik”. Untuk “Lampu Warna Orange” saya berikan waktu nyala selama “2 detik”, dan untuk “Lampu Warna Hijau” saya berikan waktu nyala selama “6 Detik”, itu hanya ketentuan dari admin aja, sobat bisa rubah sesuai kemauan sobat. Mau tau caranya ???
  • Mari ikuti langkah-langkahnya. 
  • Sobat klik pada “Timer1” kemudian beralih ke “Properties”, nah disana terdapat nama“Interval”, Betul Tidak  ???. Lihat pada gambar :
  • Disana tertulis Interve bernilai “0”, maka sobat ganti Interval pada Timer1 dengan nilai “6000”,itu artinya Timer1 akan memberikan waktu nyala terhadap lampu hijau sebanyak “6 Detik”, Why ??? karena pada script / codingnya “Timer1” diaktifkan oleh “Timer3”.  Itu artinya bahwa sebenarnya Lampu Warna Hijau di aktifkan oleh “Timer1”, Loh koq begitu ??? Kenapa ga Timer3 aja untuk lampu hijau ??? Tips dari admin bahwa membuat sebuah program itu memerlukan sebuah LOGIKA yang cukup kuat agar menghasilkan kualitas program yang sangat baik. Setiap manusia memiliki logika yang berbeda-beda dan sesuai dengan apa yang di anggapnya mudah. Okeh sudah paham tips dari admin, sekarang kita lanjut ke materi. Kemudian Interval padaTimer2 berikan nilai “8000”, artinya Lampu Warna Merah akan menyala selama “8 Detik”, dan kemudian untuk Interval pada Timer3 berikan nilai “2000”, artinya untuk Lampu warna kuning akan menyala selama “2 Detik”. Selesai untuk tahap pemberian waktunya, sekarang sobat cek kembali pada Timer1, Timer2, dan Timer3 pada “Properties-nya” disana terdapat nama“Enabled”, sobat ganti untuk “Timer1 Menjadi True”, “Timer2 Menjadi False” dan “Timer3 Menjadi False”, Agar Lebih Jelas lihat ketentuannya seperti pada gambar berikut :
  • Sekarang lampu lalu lintas benar2 sudah jadi dan siap kita pasang di pinggir jalan, Loh Koq Bisa ??? Iya Bisa, Bisa Stress Mikirin untuk keluarinnya… hehehe
  • Sobat sobat jalankan programnya dengan menekan tombol “F5” atau sobat klik tombol play yang berada di atas, Lihat hasilnya bagus bukan, hehehe… 
  • Sobat bisa kembangkan sendiri sehingga hasilnya seperti pada gambar berikut ini :
 

Membuat Jam Digital Sederhana Menggunakan Microcontroller  P16F84a
Pada kesempatan ini saya akan mengajak anda membuat jam digital dengan menggunakan microcontroller. Kita akan menggunakan Microcontroller keluarga PIC buatan Microchip yang merupakan salah satu Microcontroller yang paling populer di dunia. Dalam hal ini kita akan menggunakan Microcontroller type P16f84a.
Komputer Termurah Sedunia
Saya senang menyebut Microcontroler sebagai komputer termurah sedunia. Bayangkan dengan uang puluhan ribu,  anda sudah bisa membeli Microcontroller (baca komputer). Tidak perlu uang jutaan rupiah untuk bisa membeli sebuah "komputer" dalam wujud Microcontroller (MCU)!!
Kalau kita ingin peralatan yang cerdas, maka peralatan itu perlu dikendalikan oleh komputer. Contohnya mesin cuci otomatis. Kita tinggal memasukkan sabun, dan pakaian kotor, sesudah itu kita dapat mengerjakan pekerjaan lain, sambil membiarkan mesin cuci mengatur dirinya sendiri. Hasilnya pakaian yang sudah bersih dan kering tanpa campur tangan kita. Mengendalikan mesin cuci sebenarnya tidaklah rumit-rumit. Jadi kita tidak perlu komputer yang berkemampuan tinggi. Dalam hal ini komputer "kemampuan rendah" atau MCU sudah memadai. MCU ini merupakan chip tunggal, tetapi sudah berwujud "komputer yang lengkap". Karena itu saya senang menyebut MCU sebagai komputer termurah sedunia.
Dengan adanya MCU kita bisa membuat alat yang cerdas dengan harga murah. Ini sangat menyenangkan bagi para penggemar elektronika. Kita tidak perlu mengeluarkan uang terlalu banyak untuk mencobanya. MCU dapat kita program untuk mengendalikan apa saja mulai dari hal yang remeh sampai yang canggih: Timer untuk merebus telur, Pengisi baterai otomatis, Penala gitar, sampai robot. Pendeknya dengan microcontroller kita bisa membuat apa saja termasuk asal jangan membuat peluru kendali.
Sebagai perkenalan saya mengajak anda membuat jam digital. Saya tidak membuat proyek "hello world" semacam lampu kelap-kelip sebagai perkenalan. Menurut saya lampu kelap-kelip kurang menarik. Lagi pula lampu kelap-kelip sebenarnya bisa diwujudkan dengan dua buah transistor saja, dibanding harus diwujudkan dengan MCU yang terdiri dari puluhan-ribu transistor!


Mari kita mulai
Sebagaimana halnya komputer, maka agar MCU dapat berjalan sebagaimana mestinya harus diprogram terlebih dahulu. Salah satu bahasa pemprograman yang dapat anda gunakan adalah bahasa : Assembly. Kita tidak harus membeli software untuk menulis program dalam bahasa assembly. Software dapat diperoleh secara gratis yakni : MPLAB IDE. Ini adalah program yang dikeluarkan oleh pembuat PIC (Microchip) sendiri . Program ini sangat baik dan gratis! Memprogram dengan bahasa Assembly adalah pekerjaan yang cukup rumit, tetapi dibuat menyenangkan dengan MPLAB IDE. Itulah kehebatan MPLAB IDE. Seharusnya anda membayar mahal untuk program yang sangat baik seperti ini! Saya memiliki MPLAB IDE versi 8.84. Jadi tidak ada alasan untuk tidak memilikinya. silahkan down load versi terbaru disini : www.microchip.com
Membuat program dengan bahasa Assembly umumnya tidak disukai karena cukup rumit. Sebagai penggantinya kita dapat memprogram dengan bahasa tingkat tinggi (high-level language) yang jauh lebih mudah dimengerti seperti: C, Pascal atau BASIC. MPLAB IDE juga menyertakan compiler C. Sayangnya versi gratisnya tidak dioptimasi (jalannya program MCU bakal lebih lambat) Sedangkan untuk versi profesionalnya harus bayar!!
Ada pihak ketiga yang menyediakan compiler untuk C, Pascal atau BASIC, salah satu yang sangat baik adalah buatan Mikroelektronika, silahkan lihat di www.mikroe.com. Versi gratisnya, tidak bisa menghasilkan code lebih besar dari 2K (2 ribu baris program). Tetapi ini sudah memadai untuk pemula dengan proyek-proyek sederhana seperti jam digital. Perlu anda ketahui MCU P16F84a hanya mempunyai memori program 1K. Jadi keterbatasan versi gratis tidak berpengaruh untuk MCU yang akan kita gunakan. Pembatasan menjadi berarti untuk MCU yang mempunyai memori program 4k atau lebih. (ada MCU dengan program 512k!). Versi berbayarnya sekitar Rp 2 jutaan. Silahkan down load Compiler yang anda inginkan pada situs di atas. Coba dulu versi gratisnya (versi demo), kalau anda cocok, boleh upgrade menjadi berbayar! Saya punya semuanya! Compiler C, Pascal maupun BASIC buatan Mikroelektronika. Semuanya versi demo alias gratis :-).
Mana yang lebih baik dipilih? C, Pascal atau BASIC ?? Terserah anda! Anda boleh memilih yang paling populer: Bahasa C. Bila anda fans berat Pascal (atau Delphi), pilihlah Pascal. Kalau anda menguasai BASIC, pilihlah! Bila anda tidak menguasai semuanya....? Jangan panik, banyak buku-buku yang membahas mengenai bahasa-bahasa pemrograman tersebut.
Sekalipun lebih mudah digunakan dibanding assembly, bahasa tingkat tinggi mempunyai kelemahan. Code yang dihasilkan biasanya lebih banyak, tentu saja jalannya program menjadi lebih lambat. Jadi, sebaiknya anda mahir menggunakan bahasaassembly juga.
Compiler nantinya akan menghasilkan bahasa mesin (dalam bentuk file berformat hex) yang harus dimasukkan ke dalam MCU. Diperlukan adanya program dan rangkaian elektronika khusus untuk memindahkan file berformat hex di komputer kita ke dalam MCU. MPLAB IDE telah menyediakan program untuk maksud tersebut. Tapi saya tidak suka karena rangkaiannya harus beli (baca: mahal). Saya menggunakan program WINPIC yang rangkaian elektronikanya (down loader) bisa dirakit sendiri (skema disertakan dalam program). Rangkaian elektronika dihubungkan dengan komputer melalui Serial Port, Pararel Port atau USB. Berminat dengan dengan WINPIC? silahkan download: http://www.qsl.net/dl4yhf/winpicpr.html
Sebagai ringkasan dari apa yang telah kita bahas, sebelum memulai proyek dengan MCU anda harus mempunyai:
1.    Compiler untuk assembly, C, Pascal atau BASIC sebagai software untuk memprogram.
2.    Rangkaian elektronika (down loader) beserta program yang bersesuaian untuk memindahkan program yang ada pada komputer kita, ke dalam MCU.
Ingat keperluan di atas bukan untuk proyek jam digital saja, tapi berguna juga untuk proyek-proyek MCU jenis PIC lainnya kelak. Oh ya, hampir lupa! Kita perlu juga data sheet dari MCU P16F84a ini .


Bagaimana Cara Kerjanya
Cara kerja ditinjau dari rangkaian:
Skema rangkaian, clik gambar untuk memperbesar
Jam digital ini menggunakan LED 7-segment common anode (jangan sampai tertukar dengan common catode). Ada 4 buah 7-segment, masing-masing menunjukkan satuan menit, puluhan menit, satuan jam dan puluhan jam. Keempat 7-segment tadi dinyalakan dengan metoda multiplex. Dinyalakan bergantian setiap 5ms (0.005 detik). Setiap saat hanya ada 1 buah 7-segment yang menyala, segment lainya padam. Berturut-turut dinyalakan 7-segment untuk satuan menit, puluhan menit, satuan jam dan puluhan jam, demikian seterusnya. Mata kita tidak dapat mengikuti pergantian yang demikian cepat sehingga seolah-olah semua 7-segment menyala bersamaan. Metoda Multiplex digunakan karena, MCU ini mempunyai jumlah port yang terbatas.
Transistor, Q1, Q2, Q2 dan Q4 bertugas untuk menyalakan (memadamkan) 7-Segment. Transistor menghantar ketika basis transistor tersebut dibuat rendah melalui R8, R9, R10 dan R11. Transistor yang menghantar (menyumbat) membuat 7-segment menyala (padam).
Jam ini juga menyediakan battery cadangan sehingga bila sewaktu-waktu aliran listrik terputus, jam ini tetap berjalan. Bila battery cadangan tidak terpasang dan aliran listrik terputus, maka jam ini harus dicocokkan kembali, tentu hal ini merepotkan. Untuk menghemat battery, 7-segment dibuat padam ketika battery cadangan aktif. Battery cadangannya adalah adalah "Coin" (type Lithium CR2023) 3 Volt, agar cukup kecil dipasang di PCB.
Rangkaian battery cadangan adalah dioda D1, D2 dan D3 dan C1. Dioda D2 untuk mencegah arus catu masuk kedalam battery. Dioda D1 berguna untuk mencegah aliran listrik dari battery masuk ke dalam 7-segment. D3 berguna untuk kompensasi kehilangan tegangan akibat D1 dan D2. C1 berguna agar tegangan tidak jatuh secara tiba tiba (akan mengacaukan kerja MCU), ketika battery cadangan aktif. Dengan adanya C1, tegangan akan turun secara berangsur-angsur.
Perhatikan D1 dan D2 bukan dioda silikon biasa, melainkan dioda Schottky type 1N 5817. Sekalipun dioda ini sedikit lebih mahal, tapi jangan diganti dengan dioda silicon biasa semacam 1N4001. Alasannya adalah tegangan minimum agar MCU P16F84a dapat bekerja adalah 2Volt. Tegangan baterai 3V dikurangi dengan kehilangan tegangan pada dioda silicon 0.6 Volt menjadi 2.4 Volt. Memang tegangan 2.4 Volt ini sudah cukup untuk MCU, namun ketahuilah tegangan battery semakin lama semakin turun ketika digunakan. Battery menjadi tidak berfungsi ketika tegangan sudah terlampau rendah. Kehilangan tegangan dioda Schottky hanya 0.4 Volt. Umur pakai battery akan lebih lama kalau kita menggunakan dioda Schottky.
Kalau dioda Schottky susah didapatkan di kota anda, boleh diganti dioda 1N4001 dan gunakan battery dengan tegangan lebih tinggi. Boleh gunakan 3 buah battery seng-karbon yang dipasang seri, tegangan total 3x1.5 Volt = 4.5 Volt. Hanya saja, battery ini harus dipasang di luar PCB. Pada prinsipnya tegangan battery harus lebih kecil dari tegangan catu 5 Volt, dengan demikian battery tidak aktif ketika tegangan catu bekerja.
Jam digital ini dilengkapi pula dengan saklar tekan s1 dan s2 masing-masing berguna untuk mencocokkan menit dan untuk mencocokkan jam.
Cara kerja ditinjau dari program :
Dalam menjelaskan program untuk jam digital ini, saya akan mengangap anda adalah programmer C. Karena itu, saya hanya memberi sedikit catatan tentang program C tersebut.
Bagian yang paling penting dari program ini adalah bagaimana membuat bilangan menit bertambah setiap satu menit terlampaui. Hal ini terselenggara dengan mekanisme interupsi yang terjadi setiap kali pencacah (counter) timer over flow. Timer ini tertanam di dalam MCU. Timer over flow setiap 0x10000 = 65536 siklus mesin. Ketika terjadi interupsi (timer over flow) fungsi interrupt dipanggil (baris 068). Variabel num menyimpan banyaknya siklus dalam satu menit. Besarnya num selalu dikurangi dengan banyaknya siklus overflow (baris 069). Satu menit terlampaui bila variabel num telah habis (menjadi negatif). Ketika itu terjadi bilangan menit ditambahkan (baris 071 - 073)
Haruslah dihitung banyaknya siklus mesin untuk 1 menit. Hitung dulu perioda siklus mesin. Periode siklus mesin adalah 4 kali periode clock. Karena dalam hal ini saya menggunakan xtal 4Mhz maka :
siklus mesin = 4 x perioda clock
siklus mesin = 4 x 1/4Mhz
siklus mesin = 1µS.
Jadi 1menit = 60 S = 60 juta µS = 60 juta siklus mesin. Karena itu saya mendefinisikan konstanta menit sebagai 60 juta (baris 011). Kalau anda menggunakan frekuensi kristal yang berlainan misalnya 8Mhz maka menurut perhitungan di atas 1 siklus mesin adalah 0.5µS. Jadi 1 menit adalah 120 juta siklus (dengan x'tal 8Mhz). Karena itu bila anda menggunakan xtal 8Mhz anda harus mengubah menit menjadi 120 juta (baris 011), karena bila tidak maka jam anda akan ngawur.
Bagian program lain yang perlu dicatat adalah bagaimana menterjemahkan pola-pola 7-segment menjadi angka-angka. Hal ini dimungkinkan dengan menyimpan pola tersebut pada Array yang bernama LED (baris 019).
Sebelum MCU digunakan, terlebih dahulu register tertentu haruslah diset agar berjalan sebagaimana kita kehendaki. Register ini kita sebut Special Function Register (FSR). Saya tidak perlu menjelaskan panjang lebar, silahkan lihat lembar data 16f84a. Baris 080 - 081 untuk memilih port mana yang digunakan untuk output (7-segment dan basis transistor) dan port mana yang digunakan sebagai input (tombol tekan). Baris 086-087 untuk mengaktifkan timer dan memampukan interrupt timer.
Baris 094 untuk memeriksa apakah tombol menit ditekan (polling). Bila ditekan, bilangan menit akan ditambahkan. Sedang baris 096 untuk memeriksa tombol jam. Bila ditekan bilangan jam akan ditambahkan. Sebelum polling, program akan memanggil fungsi display sebanyak 25 kali dalam loop for (baris 091). Fungsi display untuk mengatur multiplex. Karena sebuah 7-segment dinyalakan selama 5 ms dan ada 4 buah 7-segment, maka waktu yang diperlukan untuk memanggil display sebanyak 25 kali adalah = 25x4x5ms = 500ms = setengah detik. Jadi bila anda menekan tombol, bilangan (menit atau jam) akan ditambahkan setiap setengah detik sekali.
Selanjutnya silahkan periksa bagian lain dari Program dengan bahasa C ini. Anda sebagai programer C tentu dapat memahaminya dengan baik.
001  /* Program jam digital untuk MCU p16f84a
002  Digital clock program for p16f84a MCU
003  oleh : Hartono , www.gemar-elektronika.com
004  April 2012
005  Compiler Micro C for PIC
006  by Mikroelektronika, www.mikroe.com
007  please don't delete this comment
008  jangan hapus komemtar ini */
009 
010 long int num;
011 const long int menit = 60000000; //banyaknya siklus dalam 1 menit (xtal 4Mhz)
012 const long int timer_ovr = 0x00010000; //banyaknya siklus timer
013 char cacah;
014 char h0 = 0; //satuan jam
015 char h1 = 0; //puluhan jam
016 char m0 = 0; //satuan menit
017 char m1 = 0; //puluhan menit
018 char over_flow;
019 const char led[10] = {0x08, 0x3e, 0x11, 0x14, 0x26, 0x44, 0x40, 0x1e, 0x00, 0x04};
020
021 //rutin untuk menunda waktu sebesar 5ms
022 void tunda(void){
023    Delay_ms(5);
024 }
025
026  //rutin untuk menambah menit
027 void inc_minute(void){
028   m0++ ; over_flow = 0;
029   if (m0 == 10){
030     m0 = 0;
031     m1++ ;
032     if (m1 == 6)
033       {m1 = 0; over_flow = 1;}
034   }
035 }
036
037  //rutin untuk menambah jam
038  void inc_hour(void){
039    h0++ ;
040    if (h0==10){h0 = 0; h1++ ;}
041    if (h0==4 && h1 == 2){h0 = 0; h1 = 0;}
042  }
043
044  //rutin untuk multiplex 7 segment
045  void display(void){
046    PORTA = 0b11111111;
047    PORTB = led[m0];
048    PORTA = 0b11111110;
049    tunda();
050 
051    PORTA = 0b11111111;
052    PORTB = led[m1];
053    PORTA = 0b11111101;
054    tunda();
055 
056    PORTA = 0b11111111;
057    PORTB = led[h0];
058    PORTA = 0b11111011;
059    tunda();
060
061    PORTA = 0b11111111;
062    PORTB = led[h1];
063    PORTA = 0b11110111;
064    tunda();
065  }
066
067  // rutin layanan interrupt
068   void interrupt(void){
069     INTCON.T0IF = 0;
069     num -= timer_ovr;
070     if (num < 0){
071       num += menit;
072       inc_minute();
073       if (over_flow) inc_hour();
074     }
075  }
076
077  /* -----------ini adalah program utama---------------------- */
078  void main(void) {
079    //mengatur arah data pada port
080    TRISB = 0b10000000;
081    TRISA = 0b10000;
082    //mengatur timer0
083    OPTION_REG = 0b11010111;
084 
085    //memampukan interrupt timer
086    INTCON.GIE = 1;
087    INTCON.T0IE = 1;
088 
089    num = menit;
090    while (1){
091      for (cacah = 0; cacah < 25; cacah++){
092         display();
093      }

094      if (PORTB.RB7 == 0)  //periksa apakah tombol menit ditekan
095        {inc_minute(); num = menit;}
096      if (PORTA.RA4 == 0) //periksa apalah tombol jam ditekan
097        {inc_hour(); num = menit;}
098    }
099 }
Saya juga membuat program serupa dengan bahasa Pascal dan Assembly. Saya telah mendokumentasikan program jam digital ini dalam bahasa C, Pascal, Assembly dan hex file (dikompilasi dari assembly) silahkan down-load.
Saya sengaja membuat percobaan dengan membandingkan hasil kompilasi dengan compiler buatan Mikroelektronika. Ternyata dengan bahasa Assembly menghasilkan 154 baris program, bahasa C menghasilkan 328 baris dan bahasa Pascal menghasilkan 331 baris. Terbukti bahasa Assembly jauh lebih efisien!!


Konstruksi
Terlebih dahulu siapkan chip MCU P16F84a yang telah diprogram. Caranya kompilasi program dalam bahasa C atau Pascal atau Assembly dengan compiller yang besesuaian dengan bahasa yang anda pilih. Silahkan down-load disini.
Hasil kompilasi berupa file bahasa mesin dengan format hex. Kalau anda tidak mau repot, saya juga sudah melampirkan file hex yang dikompilasi dari bahasa Assembly (langsung dapat digunakan).

Download file berformat hex kedalam P16F84a MCU. Misalnya dengan program Winpic. Pilih confiq: part=P16F84A, Oscillator=XT(crystal), Code Protection =off, Power-up timer=enabled, Watchdog enable=disabled.
Untuk memudahkan komponen elektronika dirangkai dalam sebuah PCB. Pasanglah Holder untuk battery "Coin". Dan juga jangan lupa untuk memasang soket IC 18 Pin untuk MCU. Pemasangan soket IC dimaksudkan agar MCU mudah dilepas dan diprogram ulang apabila ada kesalahan atau anda ingin mengubah program. Untuk diketahui, kata pabriknya, MCU ini dapat diprogram sampai ribuan kali!!
Tata letak PCB dapat anda lihat pada gambar berikut ini :
PCB Jam digital dengan P16F84A MCU, click gambar untuk memperbesar
Daftar Belanja (semua resistor 0.25 watt)
Resistor
R1-R7 (7 buah)
330 Ohm
R8-R11 (4 buah)
4k7 Ohm
R12-R14 (3 buah)
10k Ohm
Capasitor
C1
100uF, 16Volt elektrolit
C2
100nF Ceramic
C3-C4 (2buah)
33pF Ceramic
LED display
7 Segment (4 buah)
Common Anoda
Dioda
D1 - D2 (2buah)
Schottky 1N5817
D3
1N4001
Transistor
Q1-Q4 (4buah)
BC 557 atau PNP lainnya
MCU
Microcontroller
P16F84a
Lain - Lain
X'tal
4 Mhz
Socket IC
18 pin DIL
Battery Holder
CR 2023
Battery
CR 2023 Lithium 3 Volt
s1- s2 (dua buah)
Push Button (saklar tekan)
DC plug jantan + betina
untuk koneksi dengan catu daya
Kabel Kaku untuk jumper
secukupnya
kabel untuk catu daya
secukupnya
Komponen harus dipasang sependek mungkin. Saya tidak memasangkan kapasitor elektrolit C1 dalam posisi "berdiri" melainkan dalam posisi tidur, agar tidak terlalu tinggi. Dengan memasang komponen sependek mungkin nantinya akan memudahkan PCB dipasang pada panel tanpa "terganjal" oleh komponen. Perhatikan pula ada 4 buah jumper pada PCB.
Sebaiknya jam digital ini dipasang dalam box atau lukisan agar indah dipandang. Selanjutnya jam digital ini perlu Catu Daya dengan tegangan 5 Volt stabil. Bila anda belum mempunyai catu daya, maka anda dapat merakitnya sendiri! Artikel tentang catu daya yang distabilkan akan segera menyusul. Selamat bekerja. Semoga sukses!!
Intinya : Ketekunan dan kedisplinan agar usaha kita bisa lancar 




Pengunjung