Arduino vaqtini saqlash qanchalik to'g'ri?

Men 16 soat davomida va 8 soat davomida yorug'likni o'chirish uchun arduinoimdan foydalanishni xohlayman. Umumiy kodni bilaman, faqat kechikishlar va o'rni qalqon kodini ham ishlatish kerak. Buning qanchalik aniq bo'lishini bilmoqchiman? (Ikkalasiga ham kirishim mumkin bo'lgani uchun uno va leonardoga imzo qo'ydim)

1
Arduino kechiktirish (), albatta, timekeeping uchun mo'ljallanmagan. yagona da o'rtacha vaqt davomida foydalanishi mumkin, ammo u soatning aniqligini yaxshiroq tushunishi mumkin, lekin undan uzoq vaqtga qo'shimcha qilish uchun takroriy tarzda dan foydalaning. boshlang'ich/oxiri xato va granülerlik to'planadi. Buning o'rniga, butun foiz oralig'ida o'tgan vaqt tuxumlarining umumiy soniga qaraydigan biror narsani ishlatishingiz kerak.
qo'shib qo'ydi muallif rossp, manba

7 javoblar

Arduino ning bir nechta varianti va "klonlari" mavjud va ularning har biri turli komponentlardan foydalanishi mumkin. Siz nazarda tutgan vaqtingizda, bu holatda "millis ()" deb o'ylayman, asosiy soatdan (odatda 16Mzz) olingan taymer uzilishidan saqlanadi.

Idishdagi asosiy soat seramika rezonator tomonidan ishlab chiqilishi mumkin, bu juda aniq emas: taxminan 0,5% -1% xatolik. Bundan tashqari, yaxshi kuvars kristalli% 0.001 qadar aniqlik bilan bo'lishi mumkin. Chastotali manbaadagi bu o'zgarishlar vaqt o'tishi bilan bir oz siqib chiqadi ... Sizning soatingiz vaqti-vaqti bilan tuzatilishi kerak.

Another factor that affects accuracy, including for RTCs using a 32.768KHz crystal, is the temperature. Here an Application Note on this: http://www.st.com/content/ccc/resource/technical/document/application_note/55/e2/3d/2a/87/ab/4d/e1/CD00232494.pdf/files/CD00232494.pdf/jcr:content/translations/en.CD00232494.pdf

Sizning arizangiz juda ko'p aniqlik talab qila olmaydi va siz ketma-ketlikdagi har bir soniyani har bir soniyada bosib chiqarish uchun eskizni yozishingiz mumkin ... bir soatdan, bir kundan keyin ishlashga ruxsat eting va siz qanchalik qaytib ketayotganingizni tekshiring. Shundan keyin siz bir oydan keyin qancha pul sarflashingiz mumkinligini taxmin qilish oson bo'ladi.

1
qo'shib qo'ydi
Ha, siz haqsiz, millisizlarni oshirib yuborish uchun katta xarajatlar to'planib qolmaydi.
qo'shib qo'ydi muallif Paolo Bergantino, manba
" millis() " ni oshirish uchun sizning dasturiy ta'minotingizning kam xarajati uchun hali ham ba'zi yo'qotishlar mavjud. Yo'q, yo'q. millis() haydash apparat taymerlari dasturiy ta'minotni timer0_millis increments esa hisoblashni to'xtatmaydi. Juda ko'p noto'g'ri narsa qilmaguningizcha, masalan, 1 milodiydan ortiq uzilishlarni blokirovkalash kabi, siz kristalli/resonatorning bitta shishasini yo'qotmaysiz.
qo'shib qo'ydi muallif Sprogz, manba

Tushuntirishlar bilan, Arduino, bu kristalli soat/rezonator bo'lgani kabi aniqdir.

Ushbu soat Uno uchun taxminan 16mzzda ishlaydi.

Arduinoning ichki vaqti - bu kristalning titraganligini necha marta sanash.

READ THIS! - these next two paragraph are apparently incorrect. See Nick Gammon's comment below.

Ushbu kristall taxminan shunga o'xshash: https://www.sparkfun.com/products/536 - bu SparkFun-dan to'g'ri, 50 ppm-ga to'g'ri keladi - bu millionga teng qism. Shunday qilib, agar sizning Arduino sizning EXACT kristaliga ega bo'lsa, u milliondan 50 qismini yo'qotishi yoki yutishi mumkin - bir million soniyada, u erda 999,950 va 1,000,050 sekund orasida hisoblash mumkin. Bu siz kuniga 4,3 soniya yoki oyiga 2 minutdan ko'proq daromad olishingiz yoki yo'qotish degan ma'noni anglatadi.   Agar taxtangizdagi kristalni topsangiz, Google kodini (ehtimol 16.000N kabi, Sparkfun uchun) o'xshaydi, bu sizga ushbu chipning aniqligini aniq aytib berish kerak. Ma'lumotlar sahifasini topsangiz, aniqlik, ayniqsa, haroratni aniq aytishingiz kerak, chunki harorat yuqoriroq va pastga tushib, xato ham o'zgaradi.

Shuningdek, Arduino soatining o'zgaruvchan xotirasida ekanligini unutmang - agar Arduino-ni zabt etsangiz va uni qayta zaryad qilsangiz, bu soat qancha vaqt ekanini bilmasangiz, soatni qayta o'rnatib qo'yishingiz kerak. kompyuteringizda, tarmoqda yoki loyihangizda tugmalar/displey orqali.

Sizning ehtiyojingizga qarab turli xil variantlar mavjud: bu sizning ishingizda LAN yoki WIFI ma'lumotlarini olishingiz mumkin, yoki loyihangizda mavjud bo'lsa yoki siz RTC modulidan foydalanishingiz mumkin - buni to'g'ri vaqtga o'rnatishingiz kerak bir marta, keyin bundan keyin eslayman.

Shu bilan bir qatorda, siz nurga qaram bo'lgan qarshilik (aka fotorezistor) dan foydalanishingiz mumkin va qorong'u bo'lganda avtomatik ravishda tetiklanadi. Bu boshqa sabablarga ko'ra qorong'ulashib qolishi mumkin, masalan. bo'ron bo'lib, u afzallik yoki bo'lmasligi mumkin.

1
qo'shib qo'ydi
@dannyf - faqatgina bitta xatboshini "noto'g'ri" deb belgilash uchun tahrirlangan xabar, balki butun xabarni emas. Men parcha raqamini aniqlay olmadim, shuning uchun qanchalik aniq ekanligini aytolmayman.
qo'shib qo'ydi muallif Anarchofascist, manba
Hm, agar USB uchun to'g'ri kristal mavjud bo'lsa, unda chiqishni AtMega328P ga surish uchun dizayn ma'nosiga ega bo'lmaydimi? Men AtMega328P ni soatbozdan bilaman, 16U2 da bir soat ham bor deb o'ylayman. AtMega328P, albatta, bir soat bor ....
qo'shib qo'ydi muallif Anarchofascist, manba
Bu muammo bo'ladimi? Signal kechiktirmasligi mumkin emas - ikkita chip sinxronlashtirilmaydi va hech narsa ular (aslida alohida soatlar ishlamaydi) deb hisoblamaydi. Soat chastotasi birinchi chip tomonidan ishlab chiqariladi, shuning uchun kuchli signal aniq bo'lishi kerak deb o'ylayman - albatta, bir necha smdan 16 millimetrga teng muammo bo'lmasligi kerakmi? Bundan tashqari, pinni qutqarish (kristall ikkita pinni talab qiladi).
qo'shib qo'ydi muallif Anarchofascist, manba
Uno kristal emas, balki Atmega328P ga ulangan rezonator ga ega. Kengashda ko'rgan kristal Atmega16U2 (USB interfeysi) ga ulanadi, chunki u aniqroq vaqtni talab qiladi. Rezonator, odatda, kristall kabi aniq emas.
qo'shib qo'ydi muallif Nick Gammon, manba
To'g'ri. Ikkita chip ham juda yaqin. Nima uchun buni bilmayman. Ehtimol, ular sodir bo'lgan vaqtga kelib, juda kech bo'ldi, chunki boshqa kengashda izlar yugurdi.
qo'shib qo'ydi muallif Nick Gammon, manba
Qiziqarli savol. Buni amalga oshirish orqali bir yoki ikki barobar tejab qolishlari mumkin edi. Agar yuqori chastotali signallarni boshqaruv kengashining bir chetidan boshqasiga o'tishdan iborat bo'lsa, faqatgina bitta sabab bo'lishi kerak.
qo'shib qo'ydi muallif Nick Gammon, manba
> Quyidagi ma'lumot noto'g'ri ... Men sizning noto'g'ri deganingizdan amin emasman. Yaxshi kodlash, arduinolarning uzoq muddatli aniqligi yoki boshqa har qanday mcu bilan bu erda siz asosan to'g'ri, deb hisoblayman, bu faqat osilatorning vazifasidir. osilatorning kristal, yoki txco, yoki ichki osilator va h.k. bo'lishi haqiqatni o'zgartirmaydi.
qo'shib qo'ydi muallif dannyf, manba

Juda emas.

Vaqtning ushbu turi uchun siz haqiqiy vaqtni aniqlash (RTC) modulidan foydalanyapsiz.

1
qo'shib qo'ydi
U qanchalik uzoq vaqt davom etishi uchun harakat qiladi. Arduino Uno-da osilator (keramika) juda kambag'al. USB-ni haydash kerakligi tufayli Leonardoda yaxshiroqdir, lekin butun kechikish ()/millis() ishi eng yaxshi emas.
qo'shib qo'ydi muallif Majenko, manba
Bu RTC dan foydalanishdan ko'ra ancha murakkab va qimmatga o'xshaydi.
qo'shib qo'ydi muallif Majenko, manba
Siz o'ylashingiz mumkin, lekin menda barcha materiallar va eski ipod bor :)
qo'shib qo'ydi muallif user23282, manba
Yaxshi, men telefonni va boshqa qalqonni ishlatib, u bilan suhbatlashishim va vaqtni olishim mumkin. Katta rahmat :)
qo'shib qo'ydi muallif user23282, manba
Necha vaqtdan so'ng bo'lishim mumkin? Bu juda aniq bo'lishi shart emas
qo'shib qo'ydi muallif user23282, manba

2013 yil avgust oyida men harorat va namlik sensori ni yaratdim. U RTC chipidan foydalanadi. (DS1307) siz eBayda $ 1 ga sotib olishingiz mumkin bo'lsa kamroq bo'lsa. Batareyani zaxiralash (lityum xujayrasi) mavjud.

Men soatni qayta tiklashni eslay olmayman. Keling, taxminan 3 yil o'tgach, 11 daqiqagacha sekin harakat qilmoqda. Bu bog 'chiroqlarini yoqish va o'chirish kabi narsalar uchun maqbul xato bo'ladi. Hatto haroratni olish uchun o'qishga kirishda bir necha daqiqa o'tishi ehtimolga bog'liq emas.

Ichki soatingizdan foydalanib, ehtimol bu to'g'ri bo'lmasligi mumkin, lekin bu holda yaxshi bo'lishi mumkin. Men xatolar kümülatif bo'lmasligi uchun Chris Strattonning taklifi va kodini ta'qib qilishingizni tavsiya qilaman. Masalan, agar siz bir soat kechiktirsangiz va keyin biror narsa qilsangiz, keyingi "kechikish" vaqtiga "biror narsa qilish" qo'shilmasligiga ishonch hosil qiling.

Agar siz aniq aniqlikni talab qilsangiz (siz kabi ko'rinmasa), keyinchalik GPS-modulni ulab, sun'iy yo'ldoshdan aniq vaqtni so'rashga imkon beradi, bu xatoni past darajada kamaytirishi mumkin. Biroq, bu GPS modullari arzon emas.


Ichki soatlar bilan ishlashga harakat qilsangiz, nimani o'ylab ko'rish kerak: agar kuch tugashi bilan nima sodir bo'ladi? Keyin chiroqlarni yoqish va o'chirish vaqtini yo'qotadi. Bir soat chipi (odatda) batareyaning zaxirasiga ega va kuch qaytgach, "vaqtni biladi".

1
qo'shib qo'ydi
Agar siz eBayga borib, RTCni xarid qilsangiz, qo'shimcha pulni sarflang va DS1307 o'rniga DS3231 ni oling. Bu esa, issiqlik bilan ta'minlaydigan osilatatorga ega, bu ham yaxshi aniqlikka olib keladi. Yiliga 2 daqiqa yopiq, maksimal. Menga 2 yil davomida ishlayapman va bu hali hammasi to'g'ri (ya'ni 60 soniyadan kamroq vaqt) to'g'ri.
qo'shib qo'ydi muallif Al., manba
Juda yaxshi maslahat kabi ko'rinadi. :)
qo'shib qo'ydi muallif Nick Gammon, manba

O'ylaymanki, RTC modullari va real vaqtda soat chiplari bir xil "xato" bor, deb o'ylayman, bu max. Maks uchun tez oldinga siljish. Oyiga 6 soniya. Bunga o'xshash narsalar, men bir yil yoki undan oldin o'qiganman, qachonki eshiklarni qulflash mexanizmi bilan shug'ullanadigan bo'lsam.

Lekin ilova uchun. 8 soat ichida, RTC modulining o'zi etarli emas, deyman. Tasavvur qilamanki, sekundlar muhim emas.

1
qo'shib qo'ydi

Bu har doim ham tanlovdir ... Men odatda Internetni Arduinolarni Internetga bog'layapman, shuning uchun men soatni NTP-serverlardan har kuni bir marta yoki soatni to'g'ri yoki aniqroq ushlab turish uchun UDP dan foydalaning.

Buning afzalligi shundaki, agar kuch yo'qolsa ham, Arduino-dan so'rab olish vaqtini olishni so'rash nisbatan oson. Keyin u har doim biladi va har doim o'z vaqtida bo'ladi.

Fave kodini baham ko'rishdan xursandman, lekin men UDP kutubxonasidagi misollarni topib, uni o'z ehtiyojlarimga moslashtirdim.

1
qo'shib qo'ydi

Buning qanchalik aniqligini bilmoqchiman?

aniqlik kodlash va apparatning vazifasidir. yaxshi kodlash bilan siz uni apparatingiz qobiliyatiga ega bo'lgani kabi aniqroq qilishingiz mumkin.

TCO-919 yuqori aniqlikdagi osilator (19.2 MGts) bilan tajribasiz muhitda tajriba o'tkazdim, bir oydan keyin hech qanday mazmunli vaqt sarflamayapti.

Demak, siz aniqlikni istasangiz, yaxshi osilator bilan boring.

Agar siz faqat to'g'ri o'lchov (1%?) haqida g'amxo'rlik qilsangiz ichki oscillator qiladi.

0
qo'shib qo'ydi