pontos óra a PC-n

Fórumok

Van két gép az egyik egy RPI5 a másik egy asztali PC. Az RPI5 eredei állapotban kb. kettő, a PC kb. négy másodpercet késett naponta. Mindkettőhöz van DVB tuner. A DVB adásnak része a pontos idő is. A programom veszi az adást, kiszámolja az időeltérést, és ha a felhasználó kéri, akkor egy kattintásra pontosítja az órát a sudo date ... majd a sudo hwclock ... parancsokkal. Ettől a gépeknek kalibrálniuk kell az órájukat, és ezután nagyon pontos órám kell legyen. Az RPI5-ön ez így is van.

DE !!!

Az asztali gép is nagyon pontos, amíg ki nem kapcsolom. Ha rövid időre kapcsolom ki, akkor pontos idővel indul, vagyis a pontos idő a hwclock paranccsal kiíródott a hardware órába. Ha sokáig áll kikapcsolva, akkor viszont a napi kb 4 sec késésnek megfelelően indul újra.

 

Mi a szöszért nem kalibrálódik a PC hardware órája?

Hozzászólások

Mitől kalibrálódna? Ha szarul jár, akkor a beállítás után is szarul fog járni. Nem atomórák ezek.

Szerkesztve: 2025. 10. 06., h – 11:20

A PC-ben van egy kvarckristály alapú RTC, ez nagyjából olyan felépítésű, mint egy olcsó "kvarcóra". A legtöbb felhasználásra ez pont elég, ezért nem nagy pontosságra lettek ezek tervezve, ennyit tudnak. Nem drágán kalibrált a kvarc, illetve nincs benne hőmérséklet kompenzáció. Ezekkel a technikákkal lehet a kvarcóra pontosságát növelni.

Az eltérést valóban lehetne kalibrálni, szerintem léteznek RTC chipek, amikbe lehet kalibrációs értéket írni, de az OS nem hiszem, hogy kezeli. Amikor utánállítod az órát, akkor csak a pillanatnyi eltérést írja be az oprendszer, kalibrációs értéket nem. Azért sincs nagyon értelme kalibrálni, mert a hőmérsékleten múlik az óra sebessége, ha nincs hőmérséklet-kompenzáció, akkor mit se ér a kalibrálás. Bekapcsolt gépnél kalibrálnád, aztán kikapcsolva leesik a hőmérséklet és megváltozik az óra sebessége.

Mit akarsz elérni az órák szinkronizálásával?

A DVB tuner általi szinkronizálás nagyon menő, sose gondoltam volna rá. A tipikus megvalósítás manapság, az a hálózati NTP alapú óraszinkronizálás, ez sok Linuxon alapbeállításként működik, vagy könnyen beállítható. Ha van hálózat, akkor onnan leolvassa az időt és a saját óráját ennek utánaállítja a gép. Nem is tudom mikor foglalkoztam explicit órabeállítással utoljára, mégis együtt jár a telefonom és az összes számítógépem is. Én ezt használnám, ha nem lenne különleges igényem, ami ennél is nagyobb pontosságot vár el.

Lazán kapcsolódik: a múltkor láttam egy szintén ötletes dolgot, amire én sem gondoltam volna soha. DCF77 órákhoz házi adó, mobilapp alapon:

https://play.google.com/store/apps/details?id=jp.houryo.dcf77emulator

Az ötlet annyi, hogy a 77.5kHz-s jelet kiküldi audioként. Persze megszólalni nem tud, de a DAC és a környékén levő elektronika sugározni fogja, így ha az órát közel rakod a telefon megfelelő pontjához, nagy eséllyel működni fog a dolog.

Idézet a man hwclock-ból:

      hwclock is an administration tool for the time clocks. It can: display the Hardware Clock time; set
      the Hardware Clock to a specified time; set the Hardware Clock from the System Clock; set the System
      Clock from the Hardware Clock; compensate for Hardware Clock drift; correct the System Clock
      timescale; set the kernel’s timezone, NTP timescale, and epoch (Alpha only); and predict future
      Hardware Clock values based on its drift rate.

 

Az RPI5 esetén működik.

" nincs benne hőmérséklet kompenzáció"  A szobában közel állandó hőmérséklet van.

"Mit akarsz elérni az órák szinkronizálásával?" Érdekelt a dolog és szeretném tisztességesen megoldani. Ha nem úgy működik, ahogy kéne, akkor megpróbálok utánajárni.

Nagy Gábor   https://sign-el-soft.hu

A hwclock csak szoftveresen tud tenni valamit, a hw az olyan, amilyen:

The Adjust Function
      The Hardware Clock is usually not very accurate. However, much of its inaccuracy is completely predictable - it gains or loses the same amount of time every day. This is called systematic drift. hwclock's --adjust function lets you apply
      systematic drift corrections to the Hardware Clock.

      It works like this: hwclock keeps a file, /etc/adjtime, that keeps some historical information. This is called the adjtime file.

      Suppose you start with no adjtime file. You issue a hwclock --set command to set the Hardware Clock to the true current time. hwclock creates the adjtime file and records in it the current time as the last time the clock was calibrated. Five
      days later, the clock has gained 10 seconds, so you issue a hwclock --set --update-drift command to set it back 10 seconds. hwclock updates the adjtime file to show the current time as the last time the clock was calibrated, and records 2
      seconds per day as the systematic drift rate. 24 hours go by, and then you issue a hwclock --adjust command. hwclock consults the adjtime file and sees that the clock gains 2 seconds per day when left alone and that it has been left alone for
      exactly one day. So it subtracts 2 seconds from the Hardware Clock. It then records the current time as the last time the clock was adjusted. Another 24 hours go by and you issue another hwclock --adjust. hwclock does the same thing: subtracts 2
      seconds and updates the adjtime file with the current time as the last time the clock was adjusted.

      When you use the --update-drift option with --set or --systohc, the systematic drift rate is (re)calculated by comparing the fully drift corrected current Hardware Clock time with the new set time, from that it derives the 24 hour drift rate
      based on the last calibrated timestamp from the adjtime file. This updated drift factor is then saved in /etc/adjtime.

      A small amount of error creeps in when the Hardware Clock is set, so --adjust refrains from making any adjustment that is less than 1 second. Later on, when you request an adjustment again, the accumulated drift will be more than 1 second and
      --adjust will make the adjustment including any fractional amount.

      hwclock --hctosys also uses the adjtime file data to compensate the value read from the Hardware Clock before using it to set the System Clock. It does not share the 1 second limitation of --adjust, and will correct sub-second drift values
      immediately. It does not change the Hardware Clock time nor the adjtime file. This may eliminate the need to use --adjust, unless something else on the system needs the Hardware Clock to be compensated.

 

Igen, lehet úgy is csinálni, amire a man hwclock utal: az RTC-t nem piszkálva hagyni úgy ahogy van, és a rendszer indításakor kiszámolni, hogy eltelt 2 nap, akkor kb 8 másodpercet kell kompenzálni.

A hőmérséklet a szobában állandó, de nem a gépházban! Ott amikor bekapcsolod a gépet emelkedik a hőmérésklet, az tuti. Az is lehetséges, hogy az RTC-nek van egy nem kiszámítható driftje is a hőmérsékletin felül. Ez is lehet simán a 4 másodperc nagyságrendben. Ugye ezek a konkrét alkatrészek adatlapjai alapján volnának elérhető adatok, meg ismerni kellene persze az áramkört is. És mivel senkit nem érdekel ez manapság, ezért egy konzumer cuccban ez mind ismeretlen specifikáció szerint működik.

Szerintem ezen a szinten mindannyiunk tapasztalati tudását túlszárnyaltad, és nem fogsz konkrét tapasztalaton alapuló választ kapni (majd valaki jön és kijavít, ha mégis). Szerintem élesben mindenki NTP-t használ. Esetleg lehet még GPS alapú órát is használni, ha valakinek nagyon pontos óra kell Internet hálózattól offline megvalósítva.

A helyedben - ha tényleg nem akarod feladni - megnézném ezeknek az eszközöknek meg a Kernelnek a forrását, hogy mit és miért csinál. Az a baj, hogy a tesztelés rendkívül időigényes, minden próbálkozás egy teljes napot igényel, vagy legalább annyi időt, amin már mérhető elmászás van. Ráadásul nem tudhatod, hogy a szerencsén múlt-e az eredmény? Ki kellene loggolni a nyers értékeket, hozzájuk kellene rendelni a "valódi" pontos időt, stb. Komoly munka egy ilyen alrendszert debuggolni. Talán QEMU-ban lehetne gyorsabban haladni, ha ott van kapcsoló arra, hogy az órát eltekergesd a host órához képest. Azzal lehetne pikk-pakk szimulálni újraindítást 1 nappal később elmászott órával. Csak ott meg nem lehetsz biztos benne, hogy ugyanaz a driver van alatta...

Szerintem ezen a szinten mindannyiunk tapasztalati tudását túlszárnyaltad, és nem fogsz konkrét tapasztalaton alapuló választ kapni (majd valaki jön és kijavít, ha mégis). Szerintem élesben mindenki NTP-t használ. Esetleg lehet még GPS alapú órát is használni, ha valakinek nagyon pontos óra kell Internet hálózattól offline megvalósítva.

De jellemzően az is csak mint egy stratum 0 hw source lesz az ntpben szerintem :) 

Linuxba (lehet winbe is passZ), vagy külön szoftveres óra. Értelemszerűen amig az OS nem fut, csak a HW-es óra megy, ezért tapasztalod, hogy amíg fut, addig pontos, offline allapotba meg elmegy az óra.

De miértnem NTP daemont futtatsz erre, ami folymatosan szinkronban tartja (és nem ugrással, ahogy te csinalod, hanem gyorsítással, lassitással).

Szerkesztve: 2025. 10. 06., h – 11:49

Gondolom nem áramtalanitod kikapcsoláskor a pc-t, mert akkor azt mondanám, hogy lemerülőben van a cr2032-es eleme, ami ilyenkor táplálja az alaplapi RTC-t.

Amúgy miért nem használsz (s)ntp szervert, mint a világ 99,9999%-a?

Sokkal pontosabb lesz az óra, mint tv adásból dekódolva. És bootolás után már egyből pontos is lesz, hiába szaródik el kikapcsolt állapotban.

Amúgy a GPS-es Mikrotik routerek is tudnak NTP szervert és GPS időszinkront. Ami gond, hogy újonnan drága, valamint az LtAP mini beépített GPS antennája egy akkora fosch, hogy tiszta időben se fog semmit, kell neki külső, erősítős GPS antenna, ami még 3000 JMF. Igazából a DVB-T alapú időszinkron ehhez képest nem is olyan rossz, csak ez meg viszonylag egyben van.

Színes vászon, színes vászon, fúj!

Kérem a Fiátot..

Ja, vagy akármelyik régi, elfekvőben lévő gép, és venni hozzá egy 5 dolláros VK172 vagy hasonló USB GPS vevőt, azzal bármilyen unixlike rendszeren lehet stratum1-es NTP szervert csinálni, Linux, BSD-k, stb.. Nanosec-re lesz pontos.

A PC-kbe épített kvarckristályok nem a legpontosabbak, mindenképpen elmászik az idő, nagyon gyorsan.

Windows 95/98: 32 bit extension and a graphical shell for a 16 bit patch to an 8 bit operating system originally coded for a 4 bit microprocessor, written by a 2 bit company that can't stand 1 bit of competition.”

Ez az implementáció beírja az időjelet az RTC-be, a PPS jellel szinkronizálva, de onnan ki is kell olvasni a kijelzéshez, ami némi késést okoz. Amúgy nem tudom, hogy működik a GPS, de a rádióhullámok terjedési sebessége 300000 km/s, más szóval 300 m/us. Vagyis ha felmegyek a Gellérthegyre, akkor 1 us-mal kevesebbet fog mutatni a GPS órám, vagy hogy van ez?

A GPS ennél érdekesebb, így lehet elképzelni: Minden szatellit sugározza a saját pozícióját és a pontos idő szinkronját. A vevő megkapja a szinkront több szatellitről, ezek nyilván kicsit el fognak térni amiatt, hogy mindegyiktől más távolságban van.

A mért különbségek térbeli távolságra lefordítva forgási hiperboloidokat definiálnak. Azon pontok mértani helye a síkon, amiknek a távolságának különbsége két megadott ponttól mérve egy állandó, hiperbola. Mivel nem síkban vagyunk, hanem térben, ezért lesz hiperboloid, azaz a hiperbola körbeforgatva a két pont (szatellit) közötti tengely körül. Két ilyen hiperboloid metszete egy térbeli görbe lesz, három metszete viszont már egy konkrét pont, ezért kell több szatellitet egyszerre venni ahhoz, hogy tér-koordináta lehessen belőle. (3 vagy 4 kell elméletileg, jó kérdés?)

És ha belegondolsz amikor megvan a térkoordináta, akkor az időszinkron is abszolúttá válik: tudjuk melyik mennyivel tolódott el a jel terjedési sebessége miatt.

Tehát GPS pozíciótól függetlenül teljesen pontos időszinkront ad. Ha felviszed a Kékesre ugyanannyi lesz rajta, mint a Gyálarét lúdvári részén.

Nem fog, mert tudja a pontos távolságot. Ugye pont abból jön ki, hogy hol vagy, hogy "négyszögel". (A negyedik az idő). Már nem emlékszem a matekra, de ha jól rémlik egy normális vevő tud ilyen 100 ns - 1 us pontosságot adni kifelé, belül meg 10ns körül van. (Abból adódik a 30cm hiba, amit mondani szoktak)

Szerkesztve: 2025. 10. 06., h – 16:00

A DVB adásnak része a pontos idő is.

Honnan tudod te azt, hogy a DVB által sugárzott idő pontos? Egyáltalán nincs erre semmilyen garancia. Az egy dolog, hogy van a DVB-ben időjel, de ennek a jelnek a pontosságáról nem tudhatsz semmit.