Időmérés - Mennyi is az idő?

A pontos idő a legtöbb alkalmazásnál kulcskérdés. Ez a viszonyítási alap, ennek segítségével lehet az események egymásutániságának sorrendjét és viszonyát meghatározni.



A legtöbb esetben kétféle problémakörrel szembesülünk:
  • a nullpont kijelölése,
  • a nullpont óta eltelt időszelet "finomsága".

Nem minden esetben van szükség azonos megoldásokra, sőt nem is minden esetben elvárás mindkét feladat megvalósítása...



Dali: Az elfolyó idő

Nullpont

"A másodperc hivatalos (SI) meghatározása a következő:

A másodperc a cézium 133 atom alapállapotában a két hiperfinom szint közötti átmenetnek megfelelő sugárzás 9 192 631 770 periódusa.

Az 1967 előtti meghatározás a következő volt:

A másodperc a tropikus év 1900 január 0 földi idő szerinti 12 órakor mért 1/31  556 925,9747-ad része." (Wikipedia)


Az időmérések esetén két féle feladattal találkozhatunk:

  • szükséges az abszolút nulla időpont meghatározása (illetve az azóta eltelt idő),
  • startpontra van csak szükség és viszonyítási pontként tekinthetünk rá.

A második eset egyszerű: a bekapcsolás és a rendszerprogram indulását kinevezhetjük egy önkényes viszonyítási alapnak.

Az első esetben is egy önkényes ponthoz viszonyítunk - ez európai mértékrend esetén Jézus születése.

DCF77

A nullpont meghatározása/megadása valamely abszolút(nak tekintett) viszonyítási alaphoz képest lehetséges. A feladat határozza meg, hogy mennyire szükséges megközelíteni az abszolút időpontot. Saját atomóra - melyet tekinthetünk etalonnak - nem rentábilis, pláne berendezésenként. Azonban számos atomóra jele, ideje kívülről, földi halandó számára is elérhető!

A legegyszerű(bbnek) tűnik a Frankfurt melletti rádióhullámon sugárzó időjelző. Ez ún. DCF77 vevővel fogható és a protokollját ismerve a pontos idő meghatározható. Egyetlen hátránya a távolság, így csak jó vételi viszonyok közt lehet jelet fogadni.



DCF77 vételkörzet

A telepítési helyünket és a jel forrását ismerve - a pontos időt korrigálnunk kell a terjedési sebességgel és (precíz mérés esetén) a jelfeldolgozás sebességével. Így, ha van vett jelünk, akkor pontos időnk is van. Ám ha nincsen....

Network Time

A internetnek, mint kommunikációs hálózatnak köszönhetően az atomórák könnyen elérhetővé váltak. A protokoll az NTP névre hallgat és a Network Time Protokol rövidítése. Az adatátvitel a legkisebb késleltetésű UDP csomagokat használja. Természetesen a küldés pillanatának idejét kapjuk meg, melyet a megtételhez szükséges úttal korrigálni kell még.

Ez a megoldás - természetesen - csak internetre kikötött, ethernetes alkalmazás esetén jöhet szóba... Ám ha ez sincsen...

GSM

Már számos mobilkommunikációs alkalmazás érhető el. Az eszközökben az elengedhetetlen GSM modem a szolgáltató által biztosított időadatokat elérhetővé tette - így egy közelítő pontosságú idő elérhető a rendszerünkben. Itt is fennáll a problémakör, hogy csak a pontos idő miatt kissé drága a GSM illesztés...

GPS

Ha helymeghatározó eszközünk van, akkor ennek illesztése is gyerekjáték a mikrokontrolleres környezetbe. A rendszer a működéséből fakadóan, szintén pontos időt ad. A GPS vétele nem biztosítható épületen belül, föld alatt, árnyékolt környezetben... Ám ez sem ad mindig megbízható működést...

Eddigi lehetőségeink:

Jelforrás Korlát Ár
Cézium atomóra Nehezen elérhető magas
DCF77

Frankfurttól való távolság

relatív olcsó
Network Time (NTP) Internetkapcsolat közepes
GSM Mobilhálózat lefedettség közepes
GPS Rálátás a műholdra közepes

Kézimódszer / RTC

Az eddigi megoldások valahol mindig elvéreztek:

  • külső szolgáltatótól függ az adat elérhetősége,
  • drága eszközök kellenek a megvalósításhoz,
  • nem érhető el az adat folyamatosan.

Így valamilyen eszköz, ami belül megoldja a folyamatosan rendelkezésre álló pontos időt, számunkra az az ideális. Ezek az ún. Valós Idejű Órachipek (Real Time Clock - RTC, újabban Real Time Clock/Calendar - RTCC). Segítségükkel a pontos idő rendelkezésre áll, mivel helyben keletkezik. (Az AVR-ek szoftveresen kialakított belső órája nem jó számunkra, mivel minden bekapcsolás után be kell állítani a pontos időt rajta.)

Az RTC-k alapelve igen egyszerű: ha van egy stabil frekvenciájú órajelforrásunk, akkor annak jelsorozatát számoljuk meg. Gyakorlatilag egy feltupírozott számlálóIC:). Így csak a rezgés/négyszögjelforrás pontossága adja meg az óra megbízhatóságát. Nyers esetben, amikor semmiféle beállítást, finomhangolást nem végzünk, akkor a rezgésforrásnak használt kvarcok 10..100 ppm pontosságúak. Ezzel napi szinten 2-5 mp eltérést okozhatunk a pontos világidőhöz képest - a legrosszabb csillagegyüttállást feltételezve. Ennek kiküszöbölésére időnként az abszolút időt adó eszközökhöz fordulhatunk szinkronizálásra. Utánállítva az órát, már használható kronoszkópunk keletkezett...

Finomság, felbontás

Az órák pontossága mellett a visszakapott idő finomsága is fontos kérdés. A gyakorlatban másodperceket tudjuk az előzőekben ismertetett módszerekkel megkapni, ennél finomabb időalapot csak járulékos mérőeszközökkel állíthatunk elő (pl. msec vagy usec). Az RTC chipekből a kínálat végtelenségig tart - természetesen a beszerezhetőség és az ár dominál a legtöbb esetben... Az ár itthon legtöbbet nyomja a latban*... (*Lat, Latinum : Ferengi nagyértékű fizetőeszköz.)

Az órachipeknek a processzorral is kommunikálniuk kell. Erre a standard kommunikációs módok alkalmasak: mint az 1-wire busz, az IIC és az SPI. A tapasztalat szerint az IIC chipek használata a legegyszerűbb.

A sok gyártó  létezik a piacon - azonban chipjeik még véletlenül sem csereszabatosak sem a belső felépítését tekintve, sem a tokozásukat. A chipváltáskor mindenképpen a processzorban futó kódot frissíteni és átírni kell - így a tervezésnél érdemes már megnézni a lehetőségeket. A külső kialakításban a DIP8 tok, SOIC-8 tok a gyakori. Esetenként még az MLF, TSSOP tokozás is előfordul - ezek azonban nehezen kezelhetőek. Kivételes esetben a fő kivezetések egyezése esetén a chipek azonban fizikailag cserélhetőek (maximum a funkcionalitás miatt kell a szoftvert frissíteni a központi processzorban).

Kiegészító funkciók

Az óraIC-k a pontos idő mérésen kívül még számos szolgáltatással rendelkeznek - ezek közül néhány (felsorolásszerűen):

  • pontos időalap (1 sec),
  • ébresztés,
  • külső elem illetve akkumulátor lehetősége,
  • belső töltőáramkör,
  • külső illetve belső kalibrálhatóság,
  • 32000 és/vagy 32768 Hz kvarc támogatása,
  • téli/nyári óraátállítás
  • stb.

A táblázatban néhány gyakoribb chip (IIC):

Típus Gyártó Tokozás
MCP79410 Microchip SOIC8/DIP8
PCF85x3T Philips SOIC8 / DIP8 / TSSOP8
DS1307 Maxim-Dallas SOIC8 / DIP8
DS3231 Maxim-Dallas SOIC16
RS5C372 Ricoh TSSOP8
M41T62 STmicroelectronics LCC8 / QFN16

Az órachipek csereszabatossága számos esetben felmerült már. A táblázatban a SOIC8/DIP8 tokozású RTC-k átfedése a jelentős. Az áramköri megvalósítás során csak nehézkesen biztosítható a csereszabatosság (így inkább nem érdemes erre építeni). A címzés, az áramköri felépítés és a kezelés is problémákat vet fel. Az órachipek kezelésének mintaprogramjai a kapcsolódó fórumban található, mivel újabb és újabb chipek és funkciók jelennek meg - melyek mintái így naprakészen elérhetőek.

Precíziós időmérő

A precíz időmérők pontossága jobb, mint a RTC chipeké. Ez alapesetben 1 sec-nél pontosabb időt jelent. De, hogy hol van erre szükség? Az esetek jelentős részében csak a relatív idő az, ami fontos számunkra. Vagy röviden: két esemény közti idő. Például egy futóverseny, rajt-cél ideje.

Ha valamely rejtélyes okból abszolút időben van szükségünk másodpercnél pontosabb időre, akkor erre a GPS a legalkalmasabb eszköz. Itt a műholdak egyedi sugárzott jelsorozatát, az ebbe kódolt időt kell megismernünk. A SIRFStar III chipek esetén ehhez a SIRFBinary kommunikációs protokollt használva juthatunk el...

De nem mindenütt van GPS jel és nem is kell mindenütt az abszolút idő.

Erre a feladatra (is) a mikrokontrollerek alkalmazása célszerű. Itt minden rendelkezésre áll a precíz megvalósításhoz:

  • nagysebességű számláló,
  • precíz órajelforrás.

A kvarcok hangolás nélkül átlagosan 30 ppm pontosak - 10 perc mérésekor néhány századmásodperc az eltérés már. A precíz mérés azonban az órák helyett immár a mikrokontrollerek sajátja - így a Timer kerül legközelebb a billentyűzetbe...

 

Téli-nyári/nyári-téli óraállítás (Daylight Saving Time-DST)

A nyári időszámítás széles körben elfogadott rendszer, melyben a helyi időt 1 órával előre állítják az adott időzóna idejéhez képest. Az elnevezés onnan ered, hogy ez az időszámítás nagyrészt a nyári időszakra esik. Jelölése: általában az addig használt időzóna utáni „ST” betűkkel történik, például Európában a téli CET helyett nyáron CEST van érvényben (az „ST” eredete: „summer time”, vagyis „nyári idő”).



Téli-Nyári óraállítások (Kék: jelenleg van, Narancs: volt, megszűnt, Piros: nem is volt)

A mesterséges világítás helyettesítésére (és ezzel az üzemanyag háborús célokra való megtakarítására) elsőként Németország alkalmazta a nyári időszámítást, amit 1916. április 30-án 23:00-kor vezettek be. Ezt akkor, az első világháború alatt gyorsan átvette Nagy-Britannia, az Egyesült Államok (az USA hivatalosan csak 1918-ban vezette be) és sok más ország, de a háború végével az országok visszaálltak a normál időszámításra. A második világháború kitöréséig nem is merült fel a használata. Akkor ismét a háborús erőforrásokkal való spórolás miatt vezették be.

A második világháború alatt az órákat néhány ország folyamatosan 1 órával előre állította (például az USA-ban 1942. február 9. és 1945. szeptember 30. között, ezt „War Time”-nak nevezték). Nagy-Britannia „dupla nyári időszámítás”-t használt, nyáron 2 órával előre állítva az órákat, télen pedig 1 órával. Nagy-Britanniában ekkor ismerték fel a nyári időszámítás üzemanyag-megtakarításra vonatkozó hatását.

Magyarországon 1954-57-ben még a munkanapok esti csúcsterhelésekor jelentkező kapacitási nehézségek enyhítésének reményében alkalmazták. 1958 és 1979 között a nyári időszámítás használata szünetelt, 1980-ban újra bevezették villamosenergia-megtakarítási céllal.

2011-ben Oroszország megszüntette az óraátállítást. Az új moszkvai idő az addigi nyári idő (UTC+3) lett. Fehéroroszország és Ukrajna ugyanígy járt el.

Gyakorlat

Az órák használatára a gyakorlatban számos lehetőségünk kínálkozik: leprogramozhatjuk natívan/utasításonként, vagy használhatunk kész függvény/eljáráskönyvtárat.

De mi s a célunk, mit kell tudnia egy órafunkciónak a programunkban? A válasz nem is olyan egyszerű:

  • Kezelje a beállítását, fix időpont vagy valamihez szinkronizált legyen,
  • A belső óra a külsőórával szinkronizáljon,
  • Legyen külön ismert az óra-perc-másodperc mellett az UNIX idő, vagy relatív idő,
  • Kezelje a pontosság kérdését és a szinkronizálás periódikusan megtörténjen,
  • Legyen ébresztő mely napi/órás beállítást ismerjen és tudja a szundi módot,
  • Kezelje a speciális funkciókat: INT, négyszögjel, belső hőmérő,
  • Hibatűrő és kis erőforrás igényű legyen,
  • Ismerje a téli-nyári átállást
  • Ha az egyik órafunkió nem érhető el, az alternatív is működjön (pl. RTC vs. GSM).

 

Ezen követelményeket leprogramozni nem is olyan egyszerű. Szerencsére részben vagy egészben ezt már mások megtették:

  • Belső óra: datetime eljáráskönyvtár,
  • Óra adatforrások kezelése: RTCLib, RTCLib2 könyvtárak,
  • Ébresztő funkció: TimeAlarm könyvtár,
  • Téli/nyári óraállítás: TimeZone eljárás.
  • Bascom-AVR alatt a chipkezelés és az órarutin a rendszer része.

A minták, alkalmazások a letöltések közt már elérhetők!

 

Felhasznált források:

Kapcsolódó oldalak:

Fórum:

 

File: 

TavIR-Facebook