Kalibrasi Jam Digital

Attention: open in a new window. Print

Mengapa jam murah Kurang akurat?

Kalau kita beli jam ber-merk buatan jepang seperti CASIO atau SEIKO dapat dipastikan kita mendapat barang yang bagus. Tentu saja kita mesti menebus dengan harga yang mahal. Jam Quarzt yang baik kesalahannya kurang dari 1 menit dalam satu tahun! Sekarang ini banyak penjual jam murah-meriah di kota Bandung. Mereka kebanyakan pedangang kaki-lima. Murahnya tak masuk akal, kita bisa beli jam merk CASIO hanya Rp 25 ribu saja. Jangan bergembira dulu, ini cuma replika (baca barang palsu). Kalau kita lebih mencermati ternyata bukan merk CASIO yang mereka jual. melainkan merk CASIQ. Bukan O (Oscar) tapi Q (Quebec). Tampak luarnya amat mirip dengan aslinya. Kalau anda memakai jam ini, sepintas orang tidak akan tahu kalau anda memakai jam replika.

Keakuratan jam murah tersebut jelek. Dalam satu bulan bisa salah sampai 2 menit. Namaya juga jam murah.Untuk diketahui jam murah ataupun mahal sama-sama menggunakan getaran Quartz sebagai penentu waktu. Seharusnya keduanya sama akuratnya, tetapi nyatanya tidak. Saya kurang periksa mengapa demikan. Tapi kalau saya boleh menduga jam murah tidak dikalibrasi, makanya kurang akurat. Sedangkan jam yang mahal dikalibrasi dengan baik sebelum dilepas kepasaran.

Sesungguhnya getaran Quartz itu sangat stabil. Lalu apa yang membuat jam dengan Quartz tidak akurat? Jawabannya adalah frekwensi dari getaran Quartz belum tentu tepat seperti yang direncanakan. Frekwensi getaran Quartz standar untuk digunakan pada jam adalah: 32768 Hz. Sedangkan jam digital kita menggunakan kristal Quartz 4 Mhz (4 juta getaran/detik). Misalnya kita menggunakan Quartz dengan frekwensi terlalu cepat 4.0001 Mhz, maka jam kita menjadi terlalu cepat. Sebaliknya bila menggunakan Quartz dengan frekwensi yang terlalu rendah misalnya 3.9999 Mhz maka jam kita menjadi terlalu lambat.

Masalah seperti ini sebenarna mudah diatasi dengan memgubah programnya (firm-ware). Itulah kelebihan jam digital yang mengunakan Microcontroller. Program pada jam digital kita dirancang untuk kristal 4Mhz. Kalau programnya kita ubah sehingga sesuai dengan frekwensi Quartz yang kita gunakan, maka kita akan mendapatkan jam yang akurat!

Kalibrasi jam digital buatan sendiri

Ingat jam digital buatan kita sendri? Kalau anda belum pernah membuatnya, anda dapat membaca disini:

  1. Jam digital1
  2. Jam digital2

Jam digital yang kita buat tersebut tidak dikalibrasi, tapi keakuratannya sudah cukup memuaskan untuk kebanyakan orang. Orang tertentu keberatan dengan jam yang tidak terlalu akurat. Pastinya tidak memadai untuk digunakan di Stasiun kereta api, Bandara atau untuk alat navigasi. Karena itu saya mengajak pembaca untuk mengkalibrasi jam buatan sendiri tersebut. Siapa tahu jam buatan kita keakuratannya bisa disejajarkan dengan jam merek terkenal bahkan lebih. Akan sangat membanggakan kalau kita bisa membuat jam sendiri yang akurat. Kalau kita akan menjual jam buatan kita kepada orang lain, tentu ini akan membuat pembeli puas. Karena itu mari kita mulai.

Tentukan dahulu kesalahan jam kita

Sebelum kita mengkalibrasi jam kita perlulah terlebih dahulu kita mengetahui kesalahan jam kita. Kesalahan Jam bisa terlalu lambat atau terlalu cepat. Amatilah selama 10 hari atau 30 hari. Untuk mengukur kesalahan jam gunakanlah jam standar sebagai acuan. Sebagai jam standar anda boleh menggunakan situs internet www.time.is. Hebatnya situs ini bagus pula dilihat oleh smartphone. Menurut pengakuan mereka, jam pada situs tersebut telah disesuaikan dengan jam atom.

Bukalah situs internet www.time.is kemudian bandingkan bacaan jam pada situs tersebut dengan jam digital kita. Untuk anda ketahui pada jam digital, nol detik terjadi ketika angka menit bergulir. Misalnya jam 10:00:00 terjadi ketika angka jam bergulir dari 09:59 ke 10:00. Hitunglah offset jam yang akan di kalibrasi dengan jam standar. Offset haruslah dihitung ketika angka menit jam digital bergulir.


Contoh1: Tepat ketika jam terkalibrasi bergulir menjadi 10:00 jam standar menunjukkan pukul 10:00:23 berakah offsetnya?
jawab:
offset = jam terkalibrasi - jam standar = 10:00:00 - 10:00:23 = minus 23 detik

Contoh2: Tepat ketika jam terkalibrasi bergulir menjadi 10:00 jam standar menunjukkan pukul 09:59:11 berpakah offsetnya?
jawab:
offset = jam terkalibrasi - jam standar = 10:00 - 09:59:11 = plus 49 detik

Tanda plus artinya jam terkalibrasi mendahului sedangkan tanda minus artinya jam terkalibrasi tertinggal.

Setelah beberapa hari misalnya 10 hari atau 30 hari hitung kembali offsetnya. Sekarang kesalahan jam kita dapat kita hitung.

Contoh : offset jam terkalibrasi sekarang plus 21 detik sedangkan 10 hari yang lalu offsetnya minus 5 detik. Hitung kesalahan jam
Jawab:
Kesalahan jam = Offset sekarang - Offset 10 hari yang lalu = 21 - -(5) = plus 26 detik. Jadi kesalahan jam 26detik setiap 10 hari. Atau 2,6detik/hari.

Kalibrasi Pada Firm-ware

Pada kalibrasi yang akan kita lakukan, kita tidak akan mengutak-atik rangkaian kristalnya (Misalnya dengan memasang kapasitor trimer). Kita hanya akan sedikit mengubah Firm-ware atau programnya saja. Oke mari kita buka program bahasa C. Program tersebut di download disini: jam digital sederhana atau Jam digital dengan kedipan LED. Untuk dapat memahami pembahasan ini anda harus mengerti bahasa C. Dalam hal ini saya mengangpap anda programer C. . Pada program tersebut yang menentukan lamanya hitungan satu menit adalah konstanta menit. Perhatikan pada bagian deklarasi konstanta tersebut :

 
const long int menit = 60 000 000; // banyaknya siklus mesin dalam 1 menit (xtal 4 MHz)

Lamanya waktu untuk setiap hitungan 1 menit akan terdefinisi dari konstantan menit yang besarnya 60 juta. Karena itu bila jam terjadi kesalahan jam, maka kontanta menit ini kita kalibrasi sehingga jam menjadi tepat.

Contoh1 berapa bilangan menit yang seharusnya bila terjadi kesalahan jam lebih lambat 17 detik lebih lama dalam 10 hari (minus 17 detik/10 hari)
Jawab:
Waktu yang sebenarnya = 10x24x3600 + 17 = 864017 detik
Waktu yang diharapkan = 10x24x3600 = 864000 detik

Jadi konstanta menit yang benar adalah :

menit =(waktu diharapkan/waktu sebenarnya)*60 000 000
menit = (864000/864017)*60 000 000 = 59 998 819, 467 atau dibulatkan
menit = 59 998 819

Frekwensi sebenarnya dari kristal adalah
4*(864000/864017) = 3.99992Mhz

Jadi sekarang edit bagian deklarasi konstanta menit pada code program bahasa C agar sesuai dengan kristal Quartz yang kita gunakan (yang terlalu lambat itu)

 
const long int menit = 59 998 819; // banyaknya siklus mesin dalam 1 menit (xtal 4 MHz)

Contoh2 : berapa bilangan menit yang seharusnya bila terjadi kesalahan jam lebih cepat 5 detik dalam 10 hari (plus 5 detik/10 hari)
jawab:
Waktu yang sebenarnya 10x24x3600 - 5 = 863995 detik
Waktu yang diharapkan 10x24x3600 = 864000 detik

Jadi konstantan menit yang benar adalah:

menit = (waktu diharapkan/waktu sebenarnya)*60 000 000
menit = (864 000/863 995)*60 000 000 = 60 000 347, 224 atau dibulatkan
menit = 60 000 347

Frekwensi sebenarnya dari dari krista adalah:
l 4*(864 000/863 995) = 4.00002MHz

Oh ya, kita membuat dua macam jam. Jam yang pertama tanpa kedipan LED. Sedangkan jam versi kedua dengan kedipan LED. Pada jam versi kedua konstanta yang menentukan lamanya hitungan bukan untuk 1 menit melainkan 1/2 detik saja. Konstanta yang berguna untuk menentukan lamanya kedipan LED tersebut bernama: half_sec. Besarnya half_sec cuma 500 ribu. Perhatikan penggalan kode bahasa C dibawah ini

 
const long int half_sec = 500 000; //banyaknya siklus mesin dalam setengah detik (xtal 4MHz)

Pada kasus ini kita perlu mengkalibarasi besarnya half_sec tersebut. Caranya sama seperti contoh diatas. Cobalah hitung sendiri, hasilnya akan seperti dibawah ini:

  • Kalau jam lebih lambat 17 detik/10 hari: half_sec = 599 990
  • Kalau jam lebih cepat 5 detik/10 hari: half_sec = 500 003

Setelah anda berhasil mengedit harga konstanta menit atau konstanta half_sec pekerjaan kalibrasi selesai. Selanjutnya anda kompilasi program bahasa C tersebut dan download hasil kompilasi ke dalam MCU. Sekarang jam menjadi lebih akurat. Selamat bekerja semoga berhasil!!!

Teknik yang Lebih Baik

Jangan dulu menutup halaman ini! Pembahasan belum selesai. Sebenarnya konstanta yang kita gunakan tidak amat presisi karena adanya pembulatan. Misalnya menit = 60 000 347. Harga yang lebih tepat adalah 60 000 247, 224. Okelah 0.224 boleh kita abaikan terhadap 60 000 347. Akan tetapi pada kasus half_sec, harga pecahannya tidak dapat diabaikan begitu saja terhadap 500 000 an.

Cara yang lebih baik konstata menit atau half sec kita kalikan dengan suatu angka. Supaya lamanya hitungan tidak ikut bertambah, konstata timer_ovr yaitu bilangan yang menentukan lamanya timer over flow kita kalikan juga. Agar memudahkan kita akan mengalikan dengan bilangan pangkat 10. untuk jelasnya lihat code C dibawah ini :

 
const long int half_sec = 500000; //banyaknya siklus dalam setengah detik (xtal 4Mhz)
const long int timer_ovr = 0x00010000; //banyaknya siklus timer

Ubah dahulu konstata timer_ovr dalam bilangan hexadecimal (dalam bahasa C bilangan hexadecimal diawali dengan 0x) kedalam bilangangan decimal agar memudahkan kita:

 
const long int half_sec = 500000; //banyaknya siklus dalam setengah detik (xtal 4Mhz)
const long int timer_ovr = 65536; //banyaknya siklus timer

sekarang kita skalakan kedua konstata tersebut sebanyak seribu kali

 
const long int  half_sec = 500 000 000
const long int timer_ovr = 65 536 000

Sekarang kita tinggal mengkalibrasi half_sec tanpa takut terhadap kesalahan pembulatan!!!

Kalau begitu mari kita skalakan ke-dua konstantan tersebut dengan bilangan yang besar, misalnya sejuta. Maksudnya agar presisi banget. Ups salah! Banyaknya bilangan positif yang dapat ditampung dalam long int (long integer) adalah 2 147 483 647 = 0x7FFF FFFF. Jangan melebihi bilangan maksimum yang dapat ditampung, akan terjadi kesalahan perhitungan. Dalam kasus konstanta menit kita masih boleh menskalakan 100 kali agar lebih presisi.

Saya ingin mengingatkan: hendaknya kita mewaspadai jangan sampai kita mengisi bilangan yang besarnya melebihi bilangan yang dapat ditampung oleh konstanta atau variabel. Hal tersebut akan menggakibatkan kesalahan tanpa permisi. Rentang bilangan yang dapat ditampung tergantung dari type-nya. Misalnya bilangan yang dapat ditampung pada type integer -32 768 sampai 32 767 .Pada type long integer, bilangan yang dapat ditampung -2 147 483 648 sampai 2 147 483 647. Pada type char bilangan yang dapat ditampung 0 sampai 255 dan seterusnya.

Selain dengan bahasa C, jam digital kita diprogram juga dengan bahasa Assembly. Bagaimana kita dapat melakukan kalibrasi dengan bahasa Assembly? OK! Agar tulisan ini tidak terlalu panjang kita bahas lain waktu.

Cukup sekian pembahasan yang membahas buka-bukaan "rahasia perusahaan" bagaimana mengkalibrasi jam secara Firm-ware. Kalau ada sesuatu yang kurang jelas silahkan tulis pertanyaan anda pada form komentar. Semoga bermanfaat!

Comments  

 
#5 sudarsono 2015-11-08 09:50
gan mau tanya kalau code pemrograman pake bahasa bascom caranya bagaiman untuk kalibrasi supaya jam bisa jadi akurat, terima kasih atas bantuanya
Quote
 
 
#4 Khalid 2015-09-12 01:09
Pagi om,

Mau nanya kalau jam digital angkanya kan terbentuk dari strip (-) ya. Nah klo ada strip yng tidak tampil itu kenapa ya om?

Contoh:

--
|
--
|

Contoh diatas sebenernya angka 5, tapi strip bawahnya gak tampil.
Quote
 
 
#3 ARIF 2014-12-31 02:30
pah Harto kalo mau di tambahin tanggal bisa gak...????
Quote
 
 
#2 webmaster 2013-05-28 05:54
Quoting andi:
Pak bisa gak ic yang dipakai attiny 2313
soalnya cari pic ditempat saya gak ada yang jual


Pastinya bisa banget, cuma maaf aku ngak familiar dengan attiny 2313. Yang jelas kalau anda ingin meng-copy program bahasa C disini. Anda harus ubah bagian input , output (dan lainnya) agar sesuai untuk attiny
Quote
 
 
#1 andi 2013-05-20 05:05
Pak bisa gak ic yang dipakai attiny 2313
soalnya cari pic ditempat saya gak ada yang jual
Quote
 

Add comment

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


Security code
Refresh