Real Time Clocks (RTCs) di Pewaktu Mikrokontroler
Artikel ini adalah yang ketiga dari seri timer mikrokontroler yang menjelaskan RTC di dalam mikrokontroler.
Artikel ini adalah yang ketiga dari seri timer mikrokontroler. Artikel pertama menjelaskan fitur utama dari sebagian besar jenis timer dan mencakup timer periodik, dan artikel kedua membahas timer MCU modulasi lebar pulsa.
Jam waktu nyata (RTC) adalah pengatur waktu yang didedikasikan untuk mempertahankan basis waktu satu detik. Selain itu, RTC sering digunakan untuk melacak waktu jam dan tanggal kalender baik dalam perangkat lunak maupun perangkat keras. Banyak fitur RTC sangat khusus dan diperlukan untuk menjaga akurasi tinggi dan pengoperasian yang sangat andal. Ada perangkat RTC di luar mikrokontroler yang berinteraksi dengan I
2
C atau bus SPI.
Artikel ini menjelaskan RTC di dalam mikrokontroler.
Ikhtisar Jam Waktu Nyata
Fungsi dasar jam real-time adalah untuk menghasilkan interval satu detik dan mempertahankan hitungan terus menerus.
Anda dapat melihat representasinya dalam diagram di bawah ini.
Gambar 1. Diagram pengaturan waktu ini menggambarkan fungsi dasar RTC
Juga ditampilkan adalah fungsi program, A, membaca penghitung detik dan menjadwalkan suatu peristiwa, B, untuk terjadi tiga detik di masa depan. Tindakan ini disebut alarm. Perhatikan penghitung detik berjalan terus menerus dan tidak berhenti dan mulai. Dua persyaratan utama RTC adalah akurasi dan operasi berkelanjutan.
Diagram berikutnya menunjukkan fitur perangkat keras umum dari RTC.
Gambar 2. Fitur perangkat keras jam waktu nyata
Sebuah RTC sering memiliki osilator internal sendiri dengan kristal eksternal dan pilihan untuk menggunakan referensi frekuensi eksternal. Semua sumber jam berjalan pada 32.768 Hz. Sumber jam eksternal memungkinkan penggunaan perangkat yang sangat akurat dan stabil seperti TCXO (osilator kristal terkompensasi suhu).
Sumber clock dipilih dengan multiplexer dan input ke prescaler yang membagi clock dengan faktor 32.768 (215) untuk menghasilkan clock satu detik.
RTC dasar memiliki penghitung detik yang biasanya 32 bit atau lebih. Beberapa RTC memiliki penghitung khusus untuk melacak waktu dan tanggal kalender.
RTC dasar tanpa penghitung waktu dan tanggal menggunakan perangkat lunak untuk tujuan ini. Pilihan umum adalah gelombang persegi 1 Hz dari pin output. Sebuah RTC akan memiliki beberapa kemungkinan kejadian untuk menghasilkan interupsi prosesor.
RTC sering kali memiliki pin daya khusus untuk memungkinkan pengoperasian saat mikrokontroler lainnya dimatikan. Pin daya ini biasanya terhubung ke baterai atau catu daya terpisah.
Akurasi RTC dan Kompensasi Frekuensi
Keakuratan RTC tergantung pada sumber clock 32.768 Hz. Dalam osilator kristal yang dirancang dengan baik, sumber kesalahan utama adalah kristal. TCXO eksternal dapat digunakan untuk pengaturan waktu yang sangat akurat, atau teknik kompensasi frekuensi khusus digunakan dengan kristal yang lebih murah dan osilator internal. Ada tiga sumber kesalahan utama dari sebuah kristal.
- Sirkuit awal dan toleransi kristal
- Pergeseran kristal dengan suhu
- Penuaan kristal
Grafik di bawah ini menunjukkan beberapa konsep yang terkait dengan akurasi RTC.
Gambar 3. Grafik yang menunjukkan kesalahan pengukuran menggunakan suhu yang digunakan atas izin Texas Instruments
Jejak biru tua pada grafik ini menunjukkan toleransi awal yang khas dan perubahan dengan suhu. Jejak merah muda hanya menunjukkan kesalahan suhu. Kunci untuk mengkompensasi suhu adalah kenyataan bahwa perilaku kristal diketahui dan diprediksi dengan persamaan kuadrat. Jika kesalahan awal diukur setelah papan sirkuit dibuat dan suhunya diketahui, kemungkinan untuk mengkompensasi sumber kesalahan terbesar.
Pita kuning adalah target yang wajar untuk akurasi setelah kompensasi yang hati-hati. Perlu diingat 1 ppm selama setahun adalah sekitar 30 detik. Penuaan kristal sulit untuk dikompensasi. Untungnya, penuaan biasanya hanya beberapa ppm per tahun.
Cara Mengubah Waktu RTC
Berikut adalah dua cara untuk mengubah waktu RTC sebagai bagian dari sistem untuk mengkompensasi kesalahan.
Diagram pertama (Gambar 4) menggambarkan jumlah siklus osilator yang dihitung oleh prescaler untuk setiap periode penghitung detik.
Dua detik pertama adalah 32.768 siklus biasa. Perangkat lunak menggunakan pembacaan suhu dan kesalahan awal untuk menentukan bahwa osilator berjalan sedikit cepat dan 32.768 siklus sebenarnya adalah periode 0,99990 detik. Untuk mengkompensasi kesalahan kecil ini, perangkat lunak memberi tahu RTC untuk mengubah modulus prescaler menjadi 32,781 untuk setiap detik keempat untuk menambah waktu.
Gambar 4. Representasi siklus osilator yang dihitung oleh prescaler
Teknik ini memiliki keuntungan dari perubahan kecil dalam periode dari detik ke detik. Namun, teknik ini membutuhkan prescaler yang dapat disesuaikan dan register tambahan untuk menampung penghitungan praskala khusus dan jumlah detik antara penerapan penghitungan khusus. Saya pikir ini cukup keren. Sedikit rumit tapi cukup keren.
Bagaimana jika RTC tidak memiliki prescaler khusus untuk mengatur waktu? Diagram ini menunjukkan metode lain.
Gambar 5. Situasi yang sama seperti yang ditunjukkan pada Gambar 4, tetapi tanpa prescaler
Dalam hal ini, angka di dalam kotak adalah penghitung detik. Hitungan yang ditampilkan adalah 100251 diikuti oleh 100252. Perangkat lunak terus menghitung penyesuaian dan melacak hitungan detik RTC. Ketika kesalahan terakumulasi tepat satu detik, perangkat lunak menambah atau mengurangi satu detik untuk menyesuaikan kesalahan yang terakumulasi.
Kerugian dari teknik ini adalah perubahan dari detik ke detik besar ketika penyesuaian dilakukan. Teknik ini memiliki keunggulan kompatibilitas dengan RTC apa pun.
Keamanan di RTC
Keamanan adalah persyaratan yang menarik. Ada aplikasi di mana waktu digunakan untuk menagih pelanggan karena menggunakan layanan atau menghabiskan sumber daya. Ada banyak praktik untuk mencegah atau mendeteksi peretasan RTC. Teknik berkisar dari deteksi intrusi untuk enklosur hingga fitur khusus dalam mikrokontroler.
RTC pada mikrokontroler yang saya gunakan saat ini memiliki register khusus untuk memungkinkan perangkat lunak mengunci register kritis secara permanen. Setelah dikunci, mereka tidak dapat diubah dan dilindungi dari peretasan atau kode di luar kendali. Mengubah waktu memerlukan reset lengkap mikrokontroler.
Waktu dan Tanggal
Beberapa RTC memiliki penghitung perangkat keras untuk mempertahankan waktu hari dan tanggal kalender. Ini membutuhkan penghitung untuk menit, jam, hari, bulan, tahun, dan pertimbangan untuk tahun kabisat. Waktu dan tanggal kalender juga dapat disimpan oleh perangkat lunak.
Contoh yang menonjol adalah fungsi di C Standard Library yang terlihat di file time.h. Untuk mikrokontroler, sistem ini dapat didasarkan pada pencacah detik dari RTC. Empat kecil, fungsi khusus harus ditulis untuk sepenuhnya mendukung perpustakaan time.h.
Satu fungsi yang menarik di sini disebut dengan fungsi time() di perpustakaan, yang mengembalikan waktu sebagai jumlah detik sejak titik awal yang disebut "epoch", biasanya 1 Januari 1970. Biasanya, fungsi kustom untuk membaca pengatur waktu perangkat keras bernama get_time() atau variasi serupa. Yang dilakukan get_time() adalah membaca penghitung detik dan mengembalikan nilainya. Perpustakaan melakukan sisanya untuk mengubah waktu ini dalam hitungan detik ke waktu hari dan tanggal saat ini.
Masalah dengan Penghitung Detik 32-Bit
Penghitung detik 32-bit berjalan untuk waktu yang lama tetapi tidak selamanya. Mungkin ada masalah serius karena rentang hitungan yang terbatas. Misalnya, waktu sistem berdasarkan penghitung 32-bit menggunakan pustaka standar C dan zaman 1 Januari 1970, bisa gagal pada Januari 2038 ketika penghitung bergulir setelah penghitungan maksimum. Masalah ini dikenal sebagai masalah Y2038.
Sebuah kegagalan terjadi selama misi luar angkasa NASA Deep Impact untuk mempelajari sebuah komet. Tujuan misi utama tercapai dan pesawat ruang angkasa melanjutkan untuk mempelajari objek lain. Namun, komunikasi tiba-tiba terputus pada tahun 2013. Berikut adalah komentar resmi NASA.
“Meskipun penyebab pasti kehilangan tidak diketahui, analisis telah mengungkap potensi masalah dengan penandaan waktu komputer yang dapat menyebabkan hilangnya kontrol untuk orientasi Deep Impact.”
- Rilis Berita NASA pada tahun 2013
Kemungkinan penyebab kegagalan adalah bahwa pengatur waktu 32-bit mempertahankan waktu dalam peningkatan 0,1 detik dan berguling menyebabkan "penghentian" misi.
Saran saya, ketika waktu dan tanggal dilibatkan, adalah menggunakan masa pakai yang lebih lama dari yang diharapkan dalam desain Anda.
Apa Selanjutnya
Artikel berikutnya mengakhiri seri dengan pengatur waktu Watchdog.