Komponente, ki jih potrebujemo v tem projektu:
Hardveskekomponente
- Espressif Wemos D1 Mini
- Ura realnega časa (RTC)
- Arduino UNO
Softverska oprema
- Arduino IDE
Zgodba
V lasti imam veliko čipov DS1307, so zelo poceni in jih rad uporabljam v različnih enostavnih projektih, ki potrebujejo datum in / ali čas. Nisem pa si mogel predstavljati, da je natančnost tega RTC lahko tako slaba. Seveda je mogoče uporabiti še en čip, vendar ne želim obnoviti svoje stare strojne opreme za projekte.
Če je že natančnost slaba, je pa k sreči konstantna: nekaj sekund na dan (to lahko traja nekaj minut po nekaj mesecih). Ker DS1307 vsebuje zgolj 56 bajtov NVRAM-a (podatki se hranijo, dokler baterija ostane na svojem mestu), je ideja tega projekta to, da izmerimo premik in da v NVRAM zabeležiti vrednost premika in referenčni datum.
Ta vsebina je samo za naročnike
Kako deluje
1. Uporabili bomo prvij 9 bajtov NVRAM-a v DS1307:
– “cell0” in “cell1” sta dva bajta, ki določata stanje DS1307:
“cell0= 1 & cell1 = 1” pomeni, da je operacija drsenja DS1307 končana
- “cell0= 0 in cel1 = 0” izvaja se operacija drsenja DS1307 – traja 24 ur
- Katera koli druga vrednost: operacija drsenja se ne izvaja
- “cell8” shrani vrednost drsenja, ki je bila definirana v 24 urah; to je številka izražena v sekundah
- “cell2 to cell7” obdrži vrednost datuma/časa zadnje operacije drsenja. Te podatki definirajo število dni, pri katerih je potrebno uporabiti vrednost drsenja (ki je izračunana znotraj enega dne): DoberČas = PrebraniČas – (ŠteviloDni x drsenje)
2. Uporabili bomo datum/čas referenco, s katero bomo primerjali RTC in definirali drsenje
To datum/čas referenco lahko dobite bodisi iz NTP – enostavno ga je dobiti z ESP8266MPU – bodisi iz GPS modula.
3. Ko je DS1307 vklopljen, so na voljo 3 možnosti:
- DS1307 še nikoli ni bil preizkušen. Če je operacija potrjena, se označeni datum / čas (= trenutni datum / čas + 24 ur) shrani v RAM, “cell0” in “cell1” sta nastavljeni na “0”.
- DS1307 je na preizkusu, dokler sta “cell0” in “cell1” nastavljeni na “0”. Vsako minuto se število sekund RTC primerja z NTP-ji, ki določajo premik. Predvidevali bomo, da premik ne bo presegel območja od -30s / + 30s. Takoj, ko bo dosežen označeni datum / čas (torej 24 ur kasneje), naj bi DS1307 preverili in vrednost premika se shrani v “cell8”, »cell0« in »cell1« sta nastavljeni na ‘1’.
- DS1307 je že preizkušen in pripravljen za uporabo. Najprej se predlaga časovna prilagoditev, nato pa ponovitev testa za nadaljnjih 24 ur.
Med preskusom se ščit ne napaja. Referenčni datum / čas se pridobi pri vsakem vklopu. Če se naslednji vklop izvede pozneje od zahtevanega preskusa v času 24 ur, se vrednost premika popravi tako, da odraža trajanje 24 ur.
Opomba:Na voljo sta dva programa:
- Koda za wemos mini, da zazna in nastavi premik katerega koli DS1307.
- Koda za Arduino Uno, ki prikazuje, kako uporabljati DS1307, ko je bila preverjena njegova vrednost premika.
Program je na voljo na strani projekta navedeni na koncu tega članka.
Avtor: philippedc, Hackster.io
2020_291_44