Jam Digital2

Attention: open in a new window. Print

Buat Jam Digital p16f84a dengan LED Kedip

Dengan Satu Tombol Saja!!

Dibandingkan jam digital pada umumnya, proyek jam digital kita yang terdahulu ada "kekurangan" yaitu tidak ada LED berkedip yang menunjukkan detik yang telah berlalu. Kekurangan ini bukannya tidak saya sadari tetapi terpaksa dilakukan karena semua pin (kaki Microcontroller) telah habis digunakan. Tidak ada lagi pin tersisa untuk mengemudikan LED berkedip.

Kali ini kita akan memperbaiki proyek jam kita yang pertama dengan menambahkan LED berkedip. Seperti sudah saya kemukakan, masalahnya adalah: sudah tidak ada lagi pin yang tersisa. Saya mengusulkan sebuah solusi, alih-alih mengunakan dua tombol untuk mencocokkan jam, saya akan mengunakan satu tombol saja! Pin yang sebelumnya digunakan untuk tombol kedua sekarang dapat digunakan untuk mengemudikan LED berkedip.

Mencocokkan jam dengan dua tombol sangatlah mudah, satu tombol untuk menyesuaikankan menit dan tombol lainnya untuk menyesuaikan jam. Bagaimana cara mencocokkan jam hanya dengan satu tombol?? Sedikit membingungkan memang. Namun demikan anda tidak akan mengalami kesulitan bila sudah tahu caranya.

Ada dua cara menekan tombol :

  1. Tekan sebentar (digunakan untuk mengubah mode operasi)
  2. Tekan lama (digunakan untuk menyesuaikan jam atau menit)

Ada tiga buah mode yaitu 0, 1, 2. Bila tombol ditekan sebentar, maka maka status mode akan beralih secara siklus. Misalnya sekarang mode = 0, tekanlah tombol sebentar maka beralih menjadi mode = 1. Tekan sebentar, mode = 2, tekan sebentar, kembali ke awal, mode = 0 dan seterusnya.

Jam digital beroperasi tergantung dari status modenya:

  1. Mode = 0; mode normal, jam digital beroperasi sebagaimana mestinya
  2. Mode = 1; mode mencocokkan jam, ditandai dengan berkedipnya angka jam
  3. Mode = 2; mode mencocokkan menit, ditandai dengan berkedipnya angka menit

Cara menggunakan tombol cukup mudah. Ubah mode (tekan tombol sebentar kemudian lepaskan) hingga angka jam berkedip. Tekan lama tombol, baru dilepas setelah angka jam telah sesuai. Dengan cara yang sama, lakukan pencocokan untuk menit. Setelah menit dan jam sesuai, ubah menjadi mode normal. Tidak sulit bukan?

Cara kerja dan Konstruksi

Jam digital ini merupakan modifikasi dari proyek jam digital sebelumya, rangkainya dan tata letaknya 90% masih sama dengan proyek sebelumnya. Cara kerjanyapun sama, karena itu saya tidak perlu menjelaskannya lagi. Silahkan merujuk ke proyek yang lalu.

Terlebih dahulu siapkan chip MCU P16F84a yang telah diprogram. Caranya kompilasi program dalam bahasa C atau Assembly dengan compiler yang besesuaian dengan bahasa yang anda pilih. Silahkan down-load disini program bahasa C dan Assembly yang dimaksud.

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).

Kemudian Down load file berformat hex dari hasil kompilasi kedalam P16F84a MCU. Misalnya dengan program Winpic. Pilih confiq: part=P16F84A, Oscillator=XT(crystal), Code Protection=off, Power-up timer=enabled, Watchdog enable=disabled.

Rangkaian Jam Digital, click gambar untuk memperbesar

PCB jam digital, click untuk memperbesar

Daftar Belanja (semua resistor 0.25 watt)
Resistor
R1-R7 (7 buah) 330 Ohm
R8-R11 (4 buah) 4k7 Ohm
R12, R14 (2 buah) 10k Ohm
R13 680 Ohm
Capasitor
C1 100uF, 16Volt elektrolit
C2 100nF Ceramic
C3-C4 (2buah) 33pF Ceramic
C3-C4 (2buah) 33pF Ceramic
LED display
7 Segment (4 buah) Common Anoda
LED1, LED2 (2 buah) LED merah
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 Push Button (saklar tekan)
DC plug jantan + betina untuk koneksi dengan catu daya
Kabel Kaku untuk jumper secukupnya
kabel untuk catu daya secukupnya

Bila anda ingin paket lengkap komponen jam digital (termasuk MCU yang telah diprogram dan PCB, tidak termasuk kabel dan catu daya) dapat memesan pada saya. Harganya Rp 110 ribu saja belum termasuk ongkos kirim. Hubungi saya, kontak sms HP: 0229 919 313 28.

Sebelum mengakhiri artikel ini saya akan membahas sedikit tip dan trik pemprograman yang berkaitan dengan proyek kita. Kalau anda orang yang tertarik dengan pemprograman silahkan teruskan membaca!

Teknik Pemprograman

Memecah program dalam function

Dalam pemrograman (terutama untuk program yang sangat panjang) seharusnya program utama dibagi-bagi menjadi blok-blok program yang mempunyai tugas tertentu. Blok program ini disebut dengan berbagai istilah: function (bahasa C), procedure (bahasa pascal) atau sub program (bahasa BASIC). Kalaupun program anda tidak terlalu panjang (seperti program jam digital kita), ada baiknya untuk membiasakan diri cara tersebut. Keuntungan menggunakan cara ini, jalannya program menjadi lebih mudah dipahami. Lebih mudah dalam mencari kesalahan. Lagi pula function - function tadi dapat kita dokumentasikan dalam suatu pustaka (library) sehingga bila suatu kali kita (atau orang lain) memerlukannya ia tak perlu menulis ulang. Nantinya program utama bertugas mengatur kerja dari function-function .

Contoh misalnya program utama jam digital kita dapat ditulis misalnya dalam bahasa C

  void main(void){
    init();
	
	while (1){
       display();
       polling();
    }
  }

flow_chart
flow chart program utama

Dengan cara seperti ini cara kerja program jam digital kita dapat lebih mudah dipahami. Diawali dengan function init() yaitu function yang berfungsi untuk setting awal. Kemudian diikuti loop kekal (endless loop). Memanggil fungsi display() untuk mengatur penampilan 7-segment, diikuti dengan pemanggilan fungsi polling() untuk mendeteksi penekanan tombol. Pemanggilan display() dan polling() terus menerus diulangi tanpa akhir (setidaknya sampai catu daya terputus). Begitulah cara kerja jam digital kita.

Selanjutnya kita harus menulis beberapa function yang diperlukan. Supaya tulisan menjadi tidak terlalu panjang saya hanya akan membahas penulisan function polling.

Tugas polling adalah mendeteksi apakah tombol ditekan sebentar atau lama.Variabel count mencatat berapa lama tombol ditekan. Bila anda terus-menerus menekan tombol maka harga variable count akan terus ditambahkan tiap kali function polling dipanggil. Jadi besarnya bilangan pada variabel count berbanding lurus dengan lamanya tombol ditekan. Bila tombol dilepas count direset kembali menjadi nol. Dalam hal ini, tombol ditekan sebentar bila count < 4. Function koreksi akan dipanggil ketika tombol ditekan dalam waktu yang lama. Sedangkan function ubah mode akan dipangil bila tombol ditekan sebentar kemudian dilepas. Banyak para programer menganjurkan, sebaiknya kita menggambar dahulu diagram alir (flow-chart) dari program sebelum memterjemahkan menjadi code program.

flow_chart
Flow-Chart untuk function polling

Implementasi bahasa C dari flow-chart diatas seperti berikut:

void polling(void){
    if (PORTA.RA4 == 0){ //cek tombol ditekan
       if (count < 4){
          count++;
       }
       else {
          koreksi();
       }
    }
    else { //bila tombol dilepas
       if ((count < 4) && (count != 0)){
          ubah_mode();
       }
       count = 0;
 }

Function - function lain ditulis dengan prosedur yang sama. Tentu tak perlu saya bahas semuanya. Lagi pula sangat membosankan bagi pembaca. Demikianlah sedikit trik dan tip dari saya tentang cara menulis program komputer. Program jam digital lengkap Silahkan down-load disini. Saya menulis program versi bahaca C dan versi bahasa assembly juga disertakan hasil compilasi file berformat hex (diturunkan dari bahasa assembly).

Anda diperbolehkan kirim pertanyaan, komentar, koreksi atau apa saja pada form dibawah. terima kasih!

Comments  

 
#1 Anemonalove 2017-07-19 21:03
Hello guys! 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 photo:

https://3.bp.blogspot.com/-u5pGYuGNsSo/WVixiO8RBUI/AAAAAAAAAFA/JWa2LHHFI2AkHParQa3fwwHhVijolmq8QCLcBGAs/s1600/hottest%2Bwebcam%2Bgirl%2B-%2BAnemonalove.jpg
Quote
 

Add comment

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


Security code
Refresh