Minggu, 31 Juli 2016

Jam digital

Jam Digital dengan P16F84A Last Updated on Friday, 01 June 2012 10:29 Written by sabda hartono Thursday, 10 May 2012 09:10 Page 1 of 4 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! Jam Digital dengan P16F84A - Mari Kita Mulai Last Updated on Friday, 01 June 2012 10:29 Written by sabda hartono Thursday, 10 May 2012 09:10 Page 2 of 4 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 bahasa assembly 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 . Jam Digital dengan P16F84A - Bagaimana Cara Kerjanya Last Updated on Friday, 01 June 2012 10:29 Written by sabda hartono Thursday, 10 May 2012 09:10 Article Index Jam Digital dengan P16F84A Mari Kita Mulai Bagaimana Cara Kerjanya Konstruksi All Pages Page 3 of 4 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!! Jam Digital dengan P16F84A - Konstruksi Last Updated on Friday, 01 June 2012 10:29 Written by sabda hartono Thursday, 10 May 2012 09:10 Page 4 of 4 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!! Bila anda ingin paket lengkap komponen jam digital (termasuk MCU yang telah diprogram dan PCB, tidak termasuk kabel dan catu daya), anda dapat memesan kepada saya. Harganya Rp 120 ribu saja (belum termasuk ongkos kirim). Hubungi saya, kontak sms HP: 0229 919 313 28. Silahkan kirim pertanyaan, komentar, koreksi atau apa saja pada form di bawah. Terima kasih! http://gemar-elektronika.com/hastakarya/jam-digital.html?start=3

Tidak ada komentar:

Posting Komentar