Mikä on
oikea aika? Sen kysymyksen kuulee usein. Ei sitä kukaan kutenkaan
tiedä! Edes sitä, mikä on aika, tietää tuskin kukaan. Ajan
määritelmän meistä luonnollisesti tietää melkein jokainen.
Tarkimpia ovat parhaat atomikellot, mutta heittoa on hiukan
niissäkin. Meille ihmisille riittää arjessa hyvin väljempikin
tarkkuus. Ainoastaan seisova kello näyttää oikeaa aikaa; ja sekin
vain kaksi kertaa vuorokaudessa (paitsi tuo oikealla ylhäällä
oleva, jos se seisoisi, näyttäisi neljä kertaa oikeaa aikaa, koska
siinä on kaksi tuntiviisaria). Nuo minunkin kuvassa olevat kellot
näyttävät ihan omaa aikaansa.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXE5Ps2x41TbyWKQKFAtTVBWcX4znI3_lKGQ4kPAWqraMDxbkmVYwUJE1USBH5Ey6j_cwVpRMBnqwUML_7v-CHi9C73WIjRs_sZKLgzEhgUAu0KO2p-pDhPlrCsrWDjsDEZdpt9PDNfMjS/s320/Kellot_1p.jpg)
Ilman
korjausta tämä kello (Arduino yksilöiden kideoskillaattorit
varmaankin vaikuttavat ajan mittaukseen) jätätti hiukan
vertailuarvolla const long CoL_EroSekunti = 999;. Tuo
on vakio, mutta muutettaessa uuden ajan hetken muuttujaa
(Ulo_UusiMilliSek),
lyhentämällä sitä, voidaan käynti trimmata kohdalleen.
Olen
toteuttanut sen siten, että sekuntien ollessa 30, vähennetään
muuttujasta tietty osa, jolloin seuraava vertailu aikaistuu. Se pitää
voida tehdä vain kerran, joten apuna on pitomuuttuja (boolean
Kep_Korjaus = false;), mikä saa
arvon true, kun
korjaus on tehty, ja tässä minun tapauksessani vapautan sen kahden
(2) sekunnin kuluttua uuteen korjaukseen minuutin kuluttua. Oikean
vähennysarvon hain interpoloimalla: Ulo_UusiMilliSek –
0; jätätti luonnollisesti
edelleen, Ulo_UusiMilliSek – 100;
edisti, Ulo_UusiMilliSek – 50;
jätätti ja -75 edisti enää noin 1s per 10h. Vähensin tuosta
arvosta vielä kaksi millisekuntia (=73) ja jäin seuraamaan kellon
käyntiä.
Kuten
alussa viittasin ”oikeaan aikaan”, konkretisoitui ongelma
tässäkin. Mihin verrata? Jos lähdetään siitä, että radion
aikamerkki on tarkin (= pitkän piippauksen alkuhetki), niin kännykän
kello on pari sekuntia jäljessä, tämän tietokoneen (automaattinen
päivitys) vielä pari llisää ja television tekstisivujen kello
vielä enemmän.
Jos
näillä korjauksilla pääsee noin 1sekunnin heittoon viikossa, niin
se lienee riittävä käytännön tarkoituksiin. Se on myös helppo
synkata radion aikamerkin kanssa. Tällä tarkkuudella
todennäköisesti esim. lämpötilan muutokset alkavat jo vaikuttaa
tarkkuuteen. Jos pitää päästä vielä parempaan, oikea ratkaisu
lienee hankkia GPS – laite liitettäväksi Arduinoon.
Ohjelmasta
tässä vain muutama oleellinen muutoskohta:
const long CoL_EroSekunti = 999;
boolean
Kep_Korjaus = false;
//Ajan
hallintasekvenssi
switch
(Seq_Aika){
case
1:
…................
if(Int_Sekunti
== 30 && Kep_Korjaus == false){
Kep_Korjaus
= true;
Ulo_UusiMilliSek = Ulo_UusiMilliSek -
73;
if(Int_Sekunti
== 32){Kep_Korjaus = false;}
…................
case
3:
if(Int_Tunti
> 23){
Int_Tunti
= 0;
Seq_Aika
= 0;
}
break;
Ei kommentteja:
Lähetä kommentti