Saya telah melihat puluhan chip clock real-time yang berbeda di pasaran, serta sejumlah prosesor dengan modul clock real-time bertenaga terpisah secara terpisah.
Hampir semuanya tidak hanya menyimpan waktu sebagai tahun-bulan-hari-jam-menit-detik, tetapi bahkan masing-masing bidang disimpan dalam BCD daripada format biner.
Apakah ada alasan yang mendasari hal ini?
Apakah ada aplikasi mikroprosesor yang melakukan sesuatu yang lebih canggih daripada hanya menampilkan jam di mana format BCD lebih berguna daripada biner, atau di mana format tahun-bulan-hari-jam-menit-detik akan lebih berguna daripada hitungan lurus 47-bit perubahan status osilator?
Dari apa yang saya tahu, tampaknya pembuat RTCC menambahkan banyak sirkuit ekstra untuk membuat chip mereka kurang berguna; satu-satunya alasan saya dapat mencari modul RTCC dalam prosesor untuk berperilaku seperti itu adalah bahwa vendor prosesor menggunakan beberapa implementasi BCD yang sudah ada daripada memproduksi sendiri.
Jawaban:
Apakah semua RTC menggunakan pengkodean BCD?
RTC dari Philips / NXP (keduanya mandiri dan terintegrasi ke dalam chip ARM7 atau Cortex-M3) tidak menggunakan pengkodean BCD.
Apa yang salah dengan BCD RTC?
Jika dibandingkan dengan penghitung datar, satu-satunya operasi yang lebih sulit dengan jam BCD terpisah adalah perhitungan perbedaan waktu (menambahkan detik atau menghitung waktu yang berlalu). Perbandingan waktu seperti: "adalah waktu saat ini lebih besar dari waktu alarm yang ditetapkan oleh pengguna" sama mudahnya.
Apa yang baik tentang BCD (dan umumnya split-field) RTC?
Memisahkan bidang benar-benar baik ketika Anda merawat tanggal kalender. Kalender manusia memiliki hal-hal lucu seperti berbulan-bulan panjang yang berbeda dan di atas tahun kabisat itu. Coba lakukan itu dalam satu penghitung (Anda bisa mendapatkan poin bonus karena menggunakan hampir tidak ada daya). Oh dan coba mendukung hari-hari minggu (cukup berguna di semua jenis perangkat yang diperuntukkan bagi manusia: mulai dari jam alarm hingga pengontrol pemanas) dengan ini.
Pendekatan BCD memiliki satu fitur tambahan: Anda mendapat interupsi "setiap detik" atau "setiap sepuluh detik" secara gratis, tanpa harus melakukan perhitungan pada waktu atau tanggal.
Untuk catatan tahun kabisat perhitungan sedikit tidak aktif di NXP RTC karena hanya peduli untuk yang dapat dibagi dengan 4 aturan dan tidak memeriksa pembagian dengan 100 dan 400. Jika disimpan di penghitung tahun di BCD ini akan menjadi sepele dan kemungkinan besar dilakukan dengan benar.
Ringkasan
Jika Anda ingin jam monoton maka gunakan satu. Anda dapat membeli PIC atau AVR dengan "penghitung RTC" (yang hanya penghitung asinkron dengan osilator 32kHz otonom). Hanya perlu diingat bahwa hanya menampilkan tanggal akan sulit. :)
Ketika Anda perlu menampilkan waktu dan tanggal dan mengatur alarm berdasarkan input pengguna dari waktu dan tanggal kemudian gunakan RTC. Dan ingatlah bahwa ketika pengguna mengubah waktu dan tanggal saat ini, interupsi berbasis RTC Anda mungkin tidak akurat.
sumber
Saat menggunakan jam pada akhirnya, Anda cenderung lebih tertarik pada menit dan puluhan detik (untuk menampilkannya) daripada total total detik, menit, dan sebagainya. Jika Anda tidak tertarik pada peluang digit yang terpisah adalah Anda tidak peduli dengan nilai menit atau detik yang terpisah, dan Anda mungkin juga menggunakan penghitung biner panjang seperti yang Anda sarankan.
Lebih mudah untuk mengkonversi dari BCD ke biner dalam perangkat lunak daripada sebaliknya. Dan karena penghitung BCD tidak memerlukan real estat ekstra lebih dari penghitung biner, masuk akal untuk memilih untuk BCD.
sumber
Saya menduga beberapa alasan:
Historis - mereka telah melakukannya dengan cara ini selama beberapa waktu sekarang. Jika Anda ingin bagian baru Anda menggantikan beberapa bagian lain, maka ia harus bekerja kurang lebih sama. Jadi, Anda tetap menggunakan BCD.
Aplikasi - jika seseorang menggunakan RTC dari mikro kecil (sesuatu dalam kisaran 8 bit, seperti PIC low-end), maka berurusan dengan sejumlah besar (seperti penghitung 47 bit Anda) adalah rasa sakit yang besar di leher. JAUH lebih mudah untuk berurusan dengan angka BCD, karena Anda tidak harus bekerja untuk memecahkan masalah.
Tidak terlalu sulit - Melakukan penghitung BCD tidak terlalu sulit, dan pada kenyataannya saya pikir tidak banyak gerbang daripada melakukan biner.
Orang dapat membayangkan sebuah sistem di mana Anda mendapatkan penghitung jam, menit, dll yang terpisah dalam biner alih-alih BCD (sehingga menghindari masalah 'mogok nomor 47 bit'), tetapi itu tidak jauh lebih mudah, dan Anda akan melakukan beberapa konversi saat menampilkan hal itu.
sumber
Saya setuju dengan Michael Kohne bahwa ada banyak momentum sejarah.
MCU awal juga memiliki lebih sedikit ruang untuk kode dan data (pikirkan 128 BYTES RAM, misalnya). Karena informasi waktu sering digunakan untuk keperluan antarmuka manusia, lebih masuk akal untuk menyimpan data yang paling dekat dengan format yang digunakan untuk menampilkan / input dari manusia.
Beberapa MCU yang lebih baru dengan lebih banyak kode dan ruang data kadang-kadang mengimplementasikan perangkat keras penghitung waktu nyata - perangkat ini sering menyimpan jumlah biner 32 kHz.
sumber
Jika ada yang tertarik, saya hanya melihat seri 32F ST dan sepertinya seri 32L yang lebih baru menggunakan BCD RTC, 32F menggunakan counter 32-bit lurus dengan prescalar yang dapat dikonfigurasi dan menyediakan input baterai terpisah untuk itu (hore! ). Saya lebih suka memiliki penghitung lurus yang lebih panjang tanpa prescalar yang dapat dikonfigurasi (sehingga saya bisa mendapatkan akurasi 1 / 256sec tetapi tetap waktu selama bertahun-tahun tanpa harus khawatir tentang pembungkus) tetapi jika saya harus mengatur prescale untuk 1 / 64sec timer dapat berjalan dua tahun tanpa meluap. Tidak ideal, tetapi tidak terlalu buruk. Sedikit tidak estetis bahwa jika seseorang menghidupkan mesin setelah mati terlalu lama (2,1+ tahun), waktu / tanggal akan tidak terdeteksi mundur 2,1 tahun, tetapi bukan masalah besar (konter memiliki bendera melimpah, tetapi di banyak kasus yang tidak akan sangat membantu. Jika mesin dihidupkan selama dua tahun sebelum dimatikan, dan dinyalakan tiga bulan kemudian, penghitung waktu akan diperkirakan meluap; pertanyaannya adalah apakah sudah dua kali meluap, dan saya tidak tahu ada bendera untuk itu.
sumber
Pepatah tampaknya melakukan apa yang Anda inginkan dengan DS1372U . Dibutuhkan kurang dari 1μA, biaya 1,7 USD dan tersedia (!) Di DigiKey dan Mouser. Satu-satunya masalah adalah tampaknya tidak menawarkan alarm dengan lebih dari 1 detik presisi dan tingkat jam keluaran terendah adalah $ \ sekitar $ 4kHz.
sumber