Saya belum menggunakan RTC jadi saya tidak sepenuhnya yakin tentang cara "normal" untuk membaca jam waktu nyata. Ada beberapa pendekatan berbeda yang saya pikirkan tetapi berharap untuk beberapa saran tentang itu.
Inilah beberapa cara yang saya pikirkan tentang membaca dan menggunakan waktu sejauh ini:
- Dapatkan tanggal dan waktu di power up dan hemat ke RAM, dan kemudian melalui penggunaan penghentian waktu kenaikan nilai RAM setiap detik dll. Kode kemudian akan menggunakan nilai-nilai dalam RAM setiap kali perlu mengetahui tanggal / waktu.
- Melalui penggunaan penghentian waktu, permintaan RTC setiap detik dan salin tanggal dan waktu yang diterima ke RAM. Sekali lagi, kode kemudian akan menggunakan nilai-nilai dalam RAM setiap kali perlu mengetahui tanggal / waktu.
- Setiap kali saya perlu mencari tahu waktu, minta RTC dan gunakan jawabannya secara langsung.
Mana yang akan menjadi pendekatan terbaik?
microcontroller
rtc
pengguna9993
sumber
sumber
Jawaban:
Saya akan menggunakan opsi keempat.
Kebanyakan chip RTC memiliki opsi untuk menghasilkan pulsa 1 detik. Anda harus menghubungkan pulsa itu ke input yang diaktifkan interupsi pada MCU Anda.
Pengaturan itu memberi Anda keakuratan pada RTC kedua tanpa overhead untuk secara aktif membaca RTC.
sumber
3 dan 2 lebih layak.
Pendekatan ketiga adalah apa yang saya gunakan dalam banyak kasus. Manfaatnya adalah saya tidak perlu khawatir tentang mirroring RTC di RAM. Kelemahan potensial adalah bahwa menginterogasi RTC melalui bus serial menyebabkan penundaan. Jika Anda menulis data satu detik sekali, penundaan ini mungkin tidak masalah.
Pendekatan ke-2 juga bagus. Mempertahankan jam cermin dapat menyebabkan kesalahan ketepatan waktu, jika perangkat beroperasi untuk waktu yang lama. Jam cermin bisa terpisah, RTC. Jika Anda membaca RTC secara teratur, maka arus tidak akan menumpuk.
Namun, saya akan menyarankan agar tidak melakukan komunikasi serial dalam interrupt service routine (ISR) itu sendiri. Atur bendera di ISR dan lakukan komunikasi serial di main ().
ps Dalam semua kasus, saya menggunakan DS1307.
sumber
Beberapa RTC (mis. MC68HC68T1 [yang diakui hampir tidak ada yang harus menggunakan lagi]) akan menjeda penghitungan internal mereka ketika dibaca dari sehingga memberikan respon yang konsisten. Mereka harus dibaca dari sesering mungkin untuk meminimalkan gangguan. Baca darinya sekali dan kemudian gunakan penghenti waktu untuk memperbarui nilai waktu yang tersimpan dalam RAM MCU.
sumber
Saya akan berasumsi bahwa RTC adalah chip yang terpisah dengan kristal sendiri, atau modul yang terintegrasi dengan mikrokontroler Anda yang lagi-lagi memiliki sumber waktu yang terpisah (seperti kristal 32 kHz) daripada jam utama. Dan sumber waktu untuk RTC lebih akurat daripada yang untuk mikrokontroler.
Untuk menentukan seberapa sering Anda perlu membaca RTC, Anda perlu mencari tahu apa kesalahan maksimum jam utama Anda. Misalnya, jika kristal utama ditentukan pada 20 ppm, itu sama dengan 0,002%. Jadi jam hanya berdasarkan sumber jam utama bisa melayang 0,00002 * 3600 * 24 = 1,728 detik sehari.
Jadi, jika Anda membaca RTC hanya dua kali sehari, dan di antaranya menambah waktu satu detik sekali menggunakan penghenti waktu, Anda tidak akan pernah mati lebih dari satu detik - tidak pernah lebih dari satu detik dibandingkan dengan RTC.
Jika, seperti yang saya duga sebelumnya, RTC Anda adalah chip yang terpisah dengan kristal sendiri, atau modul yang terintegrasi dengan mikrokontroler Anda, itu tidak berarti itu benar. RTC juga bisa memiliki kesalahan. Misalnya, jika menggunakan kristal 32 kHz dengan toleransi 5 ppm (yang hanya sedikit lebih mahal dari yang 10 ppm), itu bisa dimatikan dengan 0,43 detik per hari - atau 13 detik per bulan.
Untuk menyiasatinya, Anda perlu menyetel RTC, tempat Anda menulis faktor koreksi kembali ke register. Melakukannya akan memungkinkan Anda untuk mendapatkan kesalahan praktis ke nol. Tetapi tentu saja Anda harus memiliki sumber jam eksternal ketiga untuk digunakan sebagai referensi saat melakukan penyetelan. Referensi sangat akurat di AS adalah 60 baris Hz AC, yang dijamin untuk menjadi persis 60 * 60 * 60 * 24 (5.184.000) siklus dalam waktu 24 jam antara midnights berturut-turut. Agar ini berguna, Anda harus meluangkan waktu selama 24 jam penuh, karena 60 Hz dapat melayang di antara tengah malam.
Referensi waktu yang sangat baik lainnya akan menggunakan GPS (akurasi 10 ns), jika seseorang sudah memiliki perangkat keras GPS dalam proyek mereka.
Jika bukan kali RTC Anda berasal dari sumber eksternal, seperti waktu jaringan seluler (AT + CCLK? Panggilan), atau server waktu jaringan menggunakan NTP, maka Anda dapat menggunakan nilai RTC sebagaimana adanya karena tidak akan ada apa-apa untuk "tune" .
sumber