Cwik klocka v1.0 - An Arduino binär klocka (14 / 15 steg)
Steg 14: Behandlar felaktighet
En av punkterna i detta projekt var att skapa en klocka som är korrekt och kan lita, men om du sätter Cwik klockan bredvid en mycket pålitlig klocka, du kan märka att det är långsamt/snabbt med några sekunder över en 24 timmarsperiod.Riktar sig till felet
Såvitt jag kan säga, finns det ingen plats i koden där millisekunder försvinner, så jag är benägen att tro att timing felaktigheter skall medelfel i crystal klockan. Min kunskap om hur crystal klockor är ytterst amatör, men jag kunde vara övertygad om att många faktorer spelar in i dess riktighet, som medföljande spänning, temperatur, tillverkningsprocessen, ålder av klocka, etc. Jag skulle också tro att om du bytt crystal klockan med en annan, skulle du se olika fungerar (en kan vara snabb, en kan vara långsam). Eftersom det finns så många variabler, det är meningslöst att försöka lösa felet innan den slutliga produkten monteras med sista komponenterna (därav varför det här steget är när du löder och monterar Cwik klockan).
Mätning av felet
Att compenstate för fel i programvara, måste vi förstå våra fel. Det sätt vi ska mäta fel är av just start Cwik klockan bredvid en extremt noggrann hänvisning klocka som visar sekunder (som en dator), och ser hur långt bort Cwik klockan är från hänvisningen klocka efter exakt 7 dagar.
Till exempel om tiden är för närvarande 8:05 am på måndag, gå in i time-läget, inställd Cwik klockan 8:06 am och vänta för din referens tar tid att ändra till 8:06 innan snärta växeln för att inaktivera läget för tid-inställning (eftersom vi återställa sekunder i klockläget inställningen). Lämna din klocka i 7 dagar, och när Cwik klockan når 8:06 am veckan efter, fånga din referens klocka och mäter skillnaden.
Jag rekommenderar en hel vecka eftersom ju längre tid ellapsed, desto mer exakt kan vi mäta fel. Sedan finns det en föraning att strömkällan kan vara ansvarig för några av felet. Om du driver enheten från en 9V DC strömkälla pluggas in i väggen, är power användning egenskaper relativt cyklisk med en period av en vecka. Du och dina grannar kan använda mindre/mer makt på helgerna jämfört med vardagar, men genom att fånga en hel vecka, vi hoppas att få ett genomsnittligt fel, inte en daglig fel som kan variera beroende på dag i veckan.
Fastställande av felet
Nu när vi har ett antal sekunder det faktiskt ellapsed (tid på referens klockan) och den tid som Cwik klockan trodde ellapsed, kan vi beräkna felet.
I vårt exempel ovan, om efter en vecka på Cwik klockan referens klocka är 08:06:52, det innebär att kör vi långsamt, med noggrannheten som följande:
noggrannhet = (sekunder CwikClock trodde ellapsed) / (sekunder som referens klockan trodde ellapsed)
noggrannhet = (7 dagar * 24 timme / dag * 60 minuter / timme * 60 sekunder / minut) / ((7 dag * 24 timme / dag * 60 minuter / timme * 60 sekunder / minut) + 52)
noggrannhet = 604800 sekunder/605852 sekunder
noggrannhet = 0.998263602
För att kompensera, ändra ONE_SECOND i koden till 1000 * riktigheten eller 998. Om du väljer att justera noggrannhet efter ännu en vecka, in ONE_SECOND till 998 * noggrannhet (inte den ursprungliga 1000 * noggrannhet, sedan mätningarna togs förutsatt att ONE_SECOND är 998ms från vår kristall klocka).