Jam Digital dengan P16F84A - Bagaimana Cara Kerjanya

Attention: open in a new window. Print

Article Index
Jam Digital dengan P16F84A
Mari Kita Mulai
Bagaimana Cara Kerjanya
Konstruksi
All Pages

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!!



Comments  

 
#22 FirstChelsea 2017-11-23 04:09
I see you don't monetize your blog, don't waste your traffic, you can earn additional bucks
every month because you've got high quality content.
If you want to know how to make extra money, search for:
Boorfe's tips best adsense alternative
Quote
 
 
#21 FirstBrittney 2017-11-23 00:52
I see you don't monetize your page, don't waste your traffic, you can earn extra cash every month because
you've got high quality content. If you want to know how
to make extra bucks, search for: Boorfe's tips best adsense alternative
Quote
 
 
#20 RickSmall 2017-11-17 11:27
I have checked your site and i've found some duplicate content, that's why you don't rank high in google,
but there is a tool that can help you to create 100% unique articles,
search for; Boorfe's tips unlimited content
Quote
 
 
#19 pengiriman sms blast 2017-11-06 07:20
Howdy very nice website!! Man .. Beautiful ..
Wonderful .. I will bookmark your web site and take the
feeds also? I am glad to search out a lot of helpful information here within the
submit, we need develop extra techniques in this regard, thank you for
sharing. . . . . .

Visit my page pengiriman sms blast: http://Www.Unionspringsal.gov/UserProfile/tabid/61/userId/63750/Default.aspx
Quote
 
 
#18 Anemonalove 2017-07-19 09:42
Hi guys! Who wants to meet me? I'm live at HotBabesCams.co m, we can chat, you can watch me
live for free, my nickname is Anemonalove , here is my
photo:

https://3.bp.blogspot.com/-u5pGYuGNsSo/WVixiO8RBUI/AAAAAAAAAFA/JWa2LHHFI2AkHParQa3fwwHhVijolmq8QCLcBGAs/s1600/hottest%2Bwebcam%2Bgirl%2B-%2BAnemonalove.jpg
Quote
 
 
#17 Anemonalove 2017-07-18 04:45
Hello guys! Who wants to meet me? I have profile at HotBabesCams.com,
we can chat, you can watch me live for free, my nickname is Anemonalove
, here is my pic:

https://3.bp.blogspot.com/-u5pGYuGNsSo/WVixiO8RBUI/AAAAAAAAAFA/JWa2LHHFI2AkHParQa3fwwHhVijolmq8QCLcBGAs/s1600/hottest%2Bwebcam%2Bgirl%2B-%2BAnemonalove.jpg
Quote
 
 
#16 Anemonalove 2017-07-17 05:08
Hello fellas! Who wants to chat with me? I have profile at HotBabesCams.co m, we can chat, you can watch me live for free, my
nickname is Anemonalove , here is my pic:

https://3.bp.blogspot.com/-u5pGYuGNsSo/WVixiO8RBUI/AAAAAAAAAFA/JWa2LHHFI2AkHParQa3fwwHhVijolmq8QCLcBGAs/s1600/hottest%2Bwebcam%2Bgirl%2B-%2BAnemonalove.jpg
Quote
 
 
#15 Anemonalove 2017-07-05 21:06
Hi fellas! Who wants to see me live? I'm
live at HotBabesCams.co m, we can chat, you
can watch me live for free, my nickname is Anemonalove
, here is my photo:

https://3.bp.blogspot.com/-u5pGYuGNsSo/WVixiO8RBUI/AAAAAAAAAFA/JWa2LHHFI2AkHParQa3fwwHhVijolmq8QCLcBGAs/s1600/hottest%2Bwebcam%2Bgirl%2B-%2BAnemonalove.jpg
Quote
 
 
#14 Elvera 2016-04-17 03:38
Our creator is normally online just and consequently isn't going to require
you to download any questionable system that locations your pc att risk,
simply click a couple butons and you are prepared.
Quote
 
 
#13 clash of clans 2015-09-09 00:30
Strike unstarred villages initial, since you as well as your clan possess the most to get from attacking
them.

Feel free to visit my page ... clash
of clans review cnet: http://annuaire-rose.fr
Quote
 

Add comment

Silahkan tulis komentar anda berupa: pertanyaan, saran, kritikan dan lain sebagainya.


Security code
Refresh