Min första Arduino - test av DS3231

Berätta om dina pågående projekt.
Användarvisningsbild
rvl
Inlägg: 5720
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Min första Arduino - test av DS3231

Inlägg av rvl »

Åkte till Kjell och köpte en Kjell Academy klon av Arduino Uno R3 samt en RTC breakoutmodul med DS3231. Den senare var det ont om i Stockholmsbutikerna, men jag lyckades reservera en, med bara ett absolut minimum av signalerna anslutna. Den hade dock batteri(?) till skillnad från modulen som jag hade föredragit.

Använd pollande testkod hittills (får själv försöka löda in mig på 32kHz och/eller fyrkantsvågpinnen, om jag vill åt dem):

Kod: Markera allt

// Include the libraries
#include <RtcDS3231.h>
//Open the Library Manager and search for "Rtc by Makuna" and install

#include <Wire.h> 

// Create new RTC module
RtcDS3231<TwoWire> Rtc(Wire);

// Create variables for time
byte hours;
byte minutes;
byte seconds;
byte old;
byte oldM;
uint16_t year;
byte month;
byte day;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Rtc.Begin();
  
  // Update RTC module time to compilation time
  RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);
  compiled += 7;  //transfer time
  //Already set, comment this out:
  //Rtc.SetDateTime(compiled);
  //set 2019-03-03 ~15 EET
  
  old = 0;
  oldM = 0;
}

void loop() {
  // put your main code here, to run repeatedly:
  delay(10);
  updateTime();
  if(minutes != oldM){
    printDate();
  }
  else if(seconds != old){
    printTime();
  }
}

void updateTime() {
   RtcDateTime now = Rtc.GetDateTime();
   hours = now.Hour();
   minutes = now.Minute();
   seconds = now.Second();
   year = now.Year();
   month = now.Month();
   day = now.Day();
}

#define countof(a) (sizeof(a) / sizeof(a[0]))

void printTime(){
    char timestring[9];
    snprintf_P(timestring, 
            countof(timestring),
            PSTR("%02u:%02u:%02u"),
            hours,
            minutes,
            seconds );
    Serial.println(timestring);
    old = seconds;
}

void printDate(){
    oldM = minutes;
    char datestring[12];
    snprintf_P(datestring, 
            countof(datestring),
            PSTR("%04u-%02u-%02u "),
            year,
            month,
            day );
    Serial.print(datestring);
    printTemperature();
    printTime();
}

void printTemperature(){
    RtcTemperature temp = Rtc.GetTemperature();
    Serial.print(temp.AsFloatDegC());
    Serial.println("°C");
}
På datorn (vars klocka jag inte litar på alltför mycket, men som regelbundet synkas från nätet) prövade jag att sätta tidsstämplar med python:

Kod: Markera allt

import serial
import time
import datetime

ser = serial.Serial(
    port='COM18',\
    baudrate=115200,\
    parity=serial.PARITY_NONE,\
    stopbits=serial.STOPBITS_ONE,\
    bytesize=serial.EIGHTBITS,\
        timeout=0)

print("connected to: " + ser.portstr)

size = 10
while (size > 0):
    line = ser.readline()
    if(line!=""):
	    timestamp = str(time.time())
	    print timestamp + ": " + line
	    size -= 1

ser.close()
Resultaten ser hyfsade ut tillsvidare. Får ta till bättre metoder eller vänta längre, för att kunna uttala mig hur klockan ligger i frekvens.

Inledande "mätning":

Kod: Markera allt

connected to: COM18
1551640907.06: 2019-03-03 26.50┬║C

1551640907.06: 21:21:46
1551640907.06:

1551640907.18: 21:21:47

1551640908.19: 21:21:48

1551640909.18: 21:21:4
1551640909.19: 9

1551640910.18: 21:21:50

1551640911.19: 21:21:51

1551640912.19: 21:21:52
...och nästan fem timmar senare:

Kod: Markera allt

connected to: COM18
1551658807.0: 2019-03-04 26.25┬░C

1551658807.0: 02:20:06

1551658807.23: 02:20:07

1551658808.22: 02:20:08

1551658809.23: 02:20:09

1551658810.23: 0
1551658810.23: 2:20:10

1551658811.23: 02:20:11

1551658812.22: 02:20:12

1551658813.23: 02:20:13
Som väl blir ca 2 ppm, men vilken del av det datorn står för låter jag tillsvidare vara osagt.

Projekt? ...tja vi får se hur det utvecklar sig, om jag deltar i Kjells tävling. Ligger här i "öppen tråd" oavsett.
Användarvisningsbild
rvl
Inlägg: 5720
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Min första Arduino - test av DS3231

Inlägg av rvl »

Så har klockan gått ett dygn. 0.19 s på 24 h => +2.2 ppm eller ~70 s / år.
Specen säger +/- 2 ppm mellan 0°C och 40°C, så det "duger" om man avrundar. Fortfarande påstår jag inte att den här datorns klocka är rätt, men nu tog jag med den inbyggda GPS:n som dock inte hade fix, men trackade ett par satelliter litet tidigare och hade haft fix när jag öppnade fönstret ännu tidigare.

Dagens officiella sampel:

Kod: Markera allt

connected to: COM6
1551727204.76: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1551727205.76: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1551727206.76: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1551727207.77: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1551727208.77: $GPGSA,A,1,,,,,,,,,,,,,,,*1E

connected to: COM18
1551727213.95: 2019-03-04 26.00┬░C

1551727213.95: 21:20:13

1551727214.37: 21:20:14

1551727215.38: 21:20:15

1551727216.37: 21:20:16

1551727217.37: 21:20:17
1551727217.37:

1551727218.38: 21:20:
1551727218.38: 18

1551727219.38: 21:20:19

connected to: COM6
1551727224.77: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1551727225.77: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1551727226.77: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1551727227.77: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1551727228.77: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
Användarvisningsbild
rvl
Inlägg: 5720
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Min första Arduino - test av DS3231

Inlägg av rvl »

Senaste bud: +3 ppm jämfört med gårdagens mätning: 1000000 * ((.70-.37)-(.82-.77))/(25.33*3600)
Blir snart dags att använda bättre referens, än den här datorn, men tillsvidare har jag varit lat.
DS3231_1.jpg
Modulen i närbild.

Dagens data:
connected to: COM6
1551818559874: 204239.8
1551818560827: $GPGSA,A,3,07,13,27,30,,,,,,,,,326.0,178.1,273.0*3F
1551818561827: $GPGSA,A,3,07,13,27,30,,,,,,,,,666.6,666.6,666.6*31
1551818562825: $GPGSA,A,3,07,13,27,30,,,,,,,,,338.2,184.8,283.2*35
1551818563826: $GPGSA,A,3,07,13,27,30,,,,,,,,,666.6,666.6,666.6*31
1551818564826: $GPGSA,A,3,13,27,30,,,,,,,,,,666.6,666.6,666.6*36

connected to: COM18
1551818577520: 2019-
1551818577524: 03-05 22.75┬░C
1551818577525: 22:42:56
1551818577700: 22:42:57
1551818578696: 22:42:58
1551818578700:
1551818579703: 22:42:
1551818579707: 59
1551818580703: 2019-03-05 23.00┬░C
1551818580704: 22:43:00

connected to: COM6
1551818587847: 204307.8
1551818588824: $GPGSA,A,3,07,13,27,30,,,,,,,,,614.4,336.9,513.8*36
1551818589828: $GPGSA,A,3,07,13,27,30,,,,,,,,,639.4,350.6,534.7*3C
1551818590824: $GPGSA,A,3,07,13,27,30,,,,,,,,,655.0,359.2,547.7*3B
1551818591824: $GPGSA,A,3,07,13,27,30,,,,,,,,,685.8,376.2,573.5*36
1551818592824: $GPGSA,A,3,07,13,27,30,,,,,,,,,709.6,389.3,593.3*34
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
rvl
Inlägg: 5720
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Min första Arduino - test av DS3231

Inlägg av rvl »

Insåg att förtecknet blev fel, minus ska det va när modulen går för långsamt, eftersom datorns tidsstämplar ökar jämfört med modulens sekundomslag.

Dagens rådata:
connected to: COM6
1551908686833: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1551908686878: 214446.8
1551908687832: $GPGSA,A,3,08,13,15,,,,,,,,,,666.6,666.6,666.6*3C
1551908688832: $GPGSA,A,3,08,13,15,,,,,,,,,,666.6,666.6,666.6*3C
1551908689830: $GPGSA,A,3,08,15,,,,,,,,,,,666.6,666.6,666.6*3E
1551908690837: $GPGSA,A,3,08,15,,,,,,,,,,,666.6,666.6,666.6*3E
1551908691830: $GPGSA,A,3,08,15,,,,,,,,,,,666.6,666.6,666.6*3E
1551908692830: $GPGSA,A,3,08,15,30,,,,,,,,,,666.6,666.6,666.6*3D
1551908693837: $GPGSA,A,3,08,15,30,,,,,,,,,,666.6,666.6,666.6*3D
1551908694831: $GPGSA,A,3,08,15,30,,,,,,,,,,666.6,666.6,666.6*3D
1551908695831: $GPGSA,A,3,08,15,30,,,,,,,,,,666.6,666.6,666.6*3D

connected to: COM18
1551908707614: 2019-03-06 24.75┬░C
1551908707617:
1551908707618: 23:45:06
1551908707970: 23:45:07
1551908708965: 23:45:08
1551908709973: 23:45:09
1551908709976:
1551908710972: 23:45:10
1551908711967: 23:45:11
1551908712975: 23:45:12

connected to: COM6
1551908719882: 214519.8
1551908720838: $GPGSA,A,3,08,15,,,,,,,,,,,666.6,666.6,666.6*3E
1551908721833: $GPGSA,A,3,08,15,,,,,,,,,,,666.6,666.6,666.6*3E
1551908723833: $GPGSA,A,3,08,15,,,,,,,,,,,666.6,666.6,666.6*3E
1551908725837: $GPGSA,A,3,08,15,27,30,,,,,,,,,365.7,221.7,290.8*3A
1551908727834: $GPGSA,A,3,08,13,15,27,30,,,,,,,,16.8,9.8,13.6*30
1551908729832: $GPGSA,A,3,08,13,15,27,30,,,,,,,,16.8,9.9,13.6*31
1551908731832: $GPGSA,A,3,08,13,15,30,,,,,,,,,16.8,9.9,13.6*34
1551908732834: $GPGSA,A,3,08,13,15,30,,,,,,,,,666.6,666.6,666.6*3F
1551908733833: $GPGSA,A,3,08,15,30,,,,,,,,,,666.6,666.6,666.6*3D
1551908734835: $GPGSA,A,3,08,15,30,,,,,,,,,,666.6,666.6,666.6*3D


Tar en till i samma inlägg, så blir det inte så mycket spammande.
connected to: COM6
1551969614886: 144014.8
1551969615832: $GPGSA,A,3,03,14,19,22,32,,,,,,,,12.9,7.0,10.8*39
1551969616827: $GPGSA,A,3,03,14,19,22,32,,,,,,,,12.9,7.0,10.8*39
1551969617832: $GPGSA,A,3,03,14,19,22,32,,,,,,,,12.9,7.0,10.8*39
1551969618832: $GPGSA,A,3,03,14,19,22,32,,,,,,,,12.9,7.0,10.8*39
1551969619832: $GPGSA,A,3,03,14,19,22,32,,,,,,,,12.9,7.0,10.8*39
1551969620828: $GPGSA,A,3,03,14,19,22,32,,,,,,,,12.9,7.0,10.8*39
1551969621833: $GPGSA,A,3,03,14,19,32,,,,,,,,,12.9,7.0,10.8*39
1551969622833: $GPGSA,A,3,03,14,19,32,,,,,,,,,14.1,7.3,12.1*3F
1551969623832: $GPGSA,A,3,03,14,19,32,,,,,,,,,14.1,7.3,12.1*3F
1551969624828: $GPGSA,A,3,03,14,19,32,,,,,,,,,14.1,7.3,12.1*3F

connected to: COM18
1551969628996: 2019-03-07 25.50┬░C
1551969628997: 16:40:27
1551969629139: 16:40:28
1551969630147: 16:40:29
1551969631147: 16:40:30
1551969632142: 16:40:31
1551969633138: 16:40:32
1551969634145: 16:40:33
1551969635145: 16:40:34
1551969636140: 16:40:35

connected to: COM6
1551969639858: 144039.8
1551969640829: $GPGSA,A,3,03,12,14,19,22,24,32,,,,,,2.5,1.3,2.1*3E
1551969641829: $GPGSA,A,3,03,12,14,19,22,24,32,,,,,,2.6,1.3,2.3*3F
1551969642829: $GPGSA,A,3,03,12,14,19,24,32,,,,,,,2.6,1.3,2.3*3F
1551969643830: $GPGSA,A,3,03,12,14,19,24,32,,,,,,,2.6,1.3,2.3*3F
1551969644838: $GPGSA,A,3,03,12,14,19,24,32,,,,,,,2.6,1.3,2.3*3F
1551969645830: $GPGSA,A,3,03,12,14,19,24,29,32,,,,,,1.8,1.0,1.5*3F
1551969646829: $GPGSA,A,3,03,12,14,19,24,29,32,,,,,,1.9,1.1,1.5*3F
1551969647834: $GPGSA,A,3,03,12,19,24,29,32,,,,,,,1.9,1.1,1.5*3A
1551969648828: $GPGSA,A,3,03,12,19,24,29,32,,,,,,,1.9,1.1,1.5*3A
1551969649828: $GPGSA,A,3,03,12,19,24,29,32,,,,,,,1.9,1.1,1.5*3A


Enligt data där GPS är med, så ser datorklockan tillräckligt tillförlitlig ut för hundradelar, förutsatt att internetsladden är kopplad, annars sticker den i väg minst ett par sekunder över en natt. Mer upplösnig än så är inte meningsfull just nu när Arduinon samplar klockam med ca 100 Hz.

RTC frekvensfel uträknat från hela tidsperioden med data: -2.89 ppm ( 1000000*(0.18-1.13)/(1551969632-1551640909) )
Börjar bli dags att snegla på kretsens Aging Offset register, som ska kunna kalibrera i steg motsvarande 0.1 ppm, men jag är rädd att det kan kosta större fel, om temperaturen blir långt från de ca 25°C där jag ligger nu. Ett annat sätt är att köra korrigeringar i mjukvara, men hur som helst speccade +/-2ppm borde jag ha fått kunna vänta mig.
Användarvisningsbild
rvl
Inlägg: 5720
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Min första Arduino - test av DS3231

Inlägg av rvl »

Då ska vi se om klockan börjar gasa på litet mer än nödvändigt, när jag satte Ageing Offset till -32.

Utgångsläge, med nya inställningen:
connected to: COM6
1551999144898: 225224.8
1551999145848: $GPGSA,A,3,08,15,27,28,32,,,,,,,,3.5,2.0,2.9*3F
1551999146849: $GPGSA,A,3,08,15,27,28,32,,,,,,,,3.5,2.0,2.9*3F
1551999147849: $GPGSA,A,3,08,15,27,32,,,,,,,,,3.5,2.0,2.9*35
1551999148849: $GPGSA,A,3,08,15,27,32,,,,,,,,,11.1,6.5,9.0*01
1551999149849: $GPGSA,A,3,08,15,27,32,,,,,,,,,666.6,666.6,666.6*3A
1551999150847: $GPGSA,A,3,15,27,28,32,,,,,,,,,4.0,2.1,3.4*38
1551999151848: $GPGSA,A,3,15,27,28,32,,,,,,,,,4.0,2.1,3.4*38
1551999152843: $GPGSA,A,3,15,27,28,32,,,,,,,,,4.0,2.1,3.4*38
1551999153843: $GPGSA,A,3,15,27,28,32,,,,,,,,,4.0,2.1,3.4*38
1551999154844: $GPGSA,A,3,15,27,28,32,,,,,,,,,4.0,2.1,3.4*38

connected to: COM18
1551999161750: 2019-03-08 26.25┬░
1551999161753: C
1551999161754: 00:52:40
1551999161755: The Aging Offset is set as: -32
1551999162241: 00:52:41
1551999163236: 00:52:42
1551999164232: 00:52:43
1551999165231: 00:52:44
1551999166239: 00:52:45
1551999167234: 00:52:46

connected to: COM6
1551999171900: 225251.8
1551999172848: $GPGSA,A,3,15,20,27,32,,,,,,,,,3.3,2.3,2.3*30
1551999173847: $GPGSA,A,3,15,20,27,32,,,,,,,,,3.3,2.3,2.3*30
1551999174846: $GPGSA,A,3,15,20,27,32,,,,,,,,,3.3,2.3,2.3*30
1551999175847: $GPGSA,A,3,15,20,27,32,,,,,,,,,3.3,2.3,2.3*30
1551999176847: $GPGSA,A,3,15,20,27,32,,,,,,,,,3.3,2.3,2.3*30
1551999177847: $GPGSA,A,3,15,27,32,,,,,,,,,,666.6,666.6,666.6*32
1551999178848: $GPGSA,A,3,15,27,32,,,,,,,,,,666.6,666.6,666.6*32
1551999179847: $GPGSA,A,3,15,27,32,,,,,,,,,,666.6,666.6,666.6*32
1551999180845: $GPGSA,A,3,15,27,32,,,,,,,,,,666.6,666.6,666.6*32
1551999181847: $GPGSA,A,3,27,32,,,,,,,,,,,666.6,666.6,666.6*36


Följande dag:
connected to: COM6
1552041866399: 104426.3
1552041867380: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552041868379: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552041869387: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552041870379: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552041871397: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552041872378: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552041873381: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552041874379: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552041875378: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552041876380: $GPGSA,A,1,,,,,,,,,,,,,,,*1E

connected to: COM18
1552041885063: 2019-03-08 25.50┬░C
1552041885063: 12:44:43
1552041885064: The Aging Off
1552041885066: set is set as: -32
1552041885242: 12:44:44
1552041886237: 12:44:45
1552041887232: 12:44:46
1552041888240: 12:44:4
1552041888244: 7
1552041889239: 12:44:48

connected to: COM6
1552041892396: 104451.3
1552041893385: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552041894378: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552041895379: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552041896379: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552041897378: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552041898377: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552041899377: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552041900376: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552041901377: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552041902377: $GPGSA,A,1,,,,,,,,,,,,,,,*1E


Då ska vi tro att den nu ligger på +0.72 ppm ( 1000 * ((1231 - (846.9-800)) - (1232 - (378.55-300))) / (1552041887 - 1551999165) )

...Nytt bud: +0.76 ppm ( 1000 * ((1231 - (846.9-800)) - (1143 - (324.11-300))) / (1552084807.143 - 1551999165) )
Från:
connected to: COM6
1552084786369: 223946.3
1552084787321: $GPGSA,A,3,11,20,27,32,,,,,,,,,2.7,1.5,2.2*35
1552084788326: $GPGSA,A,3,11,20,27,32,,,,,,,,,2.7,1.5,2.2*35
1552084789324: $GPGSA,A,3,11,20,27,32,,,,,,,,,2.7,1.5,2.2*35
1552084790323: $GPGSA,A,3,11,20,27,32,,,,,,,,,666.6,666.6,666.6*34
1552084791323: $GPGSA,A,3,11,20,27,32,,,,,,,,,666.6,666.6,666.6*34
1552084792322: $GPGSA,A,3,11,20,32,,,,,,,,,,666.6,666.6,666.6*31
1552084793323: $GPGSA,A,3,20,32,,,,,,,,,,,666.6,666.6,666.6*31
1552084794324: $GPGSA,A,3,20,32,,,,,,,,,,,666.6,666.6,666.6*31
1552084795322: $GPGSA,A,3,11,20,32,,,,,,,,,,666.6,666.6,666.6*31
1552084796326: $GPGSA,A,3,11,20,32,,,,,,,,,,666.6,666.6,666.6*31

connected to: COM18
1552084801827: 2019-03-09 24.75┬░C
1552084801828: 00:40:00
1552084801829: The Aging Offs
1552084801831: et is set as: -32
1552084802150: 00:40:01
1552084803145: 00:40:02
1552084804145: 00:40:03
1552084805152: 00:40:04
1552084806148: 00:40:05
1552084807143: 00:40:06
1552084808151: 00:40:07
1552084809151: 00:40:08
1552084810146: 00:40:09
1552084811154: 00:40:10
1552084812149: 00:40:11
1552084813149: 00:40:12
1552084814144: 00:40:13
1552084815152: 00:40:14
1552084816147: 00:40:15
1552084817146: 00:40:16

connected to: COM6
1552084821349: 224021.3
1552084822323: $GPGSA,A,3,08,11,15,28,32,,,,,,,,2.5,1.2,2.2*31
1552084823324: $GPGSA,A,3,08,11,15,28,32,,,,,,,,3.1,2.0,2.3*34
1552084824324: $GPGSA,A,3,08,11,15,28,32,,,,,,,,666.6,666.6,666.6*35
1552084825324: $GPGSA,A,3,08,11,28,32,,,,,,,,,666.6,666.6,666.6*31
1552084826329: $GPGSA,A,3,28,32,,,,,,,,,,,666.6,666.6,666.6*39
1552084827329: $GPGSA,A,3,28,32,,,,,,,,,,,666.6,666.6,666.6*39
1552084828323: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552084829323: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552084830326: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552084831348: $GPGSA,A,3,27,32,,,,,,,,,,,666.6,666.6,666.6*36
Användarvisningsbild
rvl
Inlägg: 5720
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Min första Arduino - test av DS3231

Inlägg av rvl »

Med den här takten (+ 0.84 ppm*) tar det ca två veckor att nå ikapp rätt tid.
*) 1000 * ((1231 - (846.9-800)) - (1140 - (371.899-300))) / (1552137554.140 - 1551999165.231)

connected to: COM6
1552137535404: 131855.3
1552137536373: $GPGSA,A,3,12,15,17,25,32,,,,,,,,2.8,1.3,2.4*3B
1552137537373: $GPGSA,A,3,12,15,17,32,,,,,,,,,2.8,1.3,2.4*3C
1552137538372: $GPGSA,A,3,12,15,17,32,,,,,,,,,2.8,1.3,2.4*3C
1552137539373: $GPGSA,A,3,12,15,17,32,,,,,,,,,666.6,666.6,666.6*32
1552137540372: $GPGSA,A,3,12,15,17,24,32,,,,,,,,2.5,1.5,2.0*35
1552137541373: $GPGSA,A,3,15,17,24,32,,,,,,,,,666.6,666.6,666.6*37
1552137542369: $GPGSA,A,3,15,24,32,,,,,,,,,,666.6,666.6,666.6*31
1552137543368: $GPGSA,A,3,15,24,32,,,,,,,,,,666.6,666.6,666.6*31
1552137544373: $GPGSA,A,3,15,24,32,,,,,,,,,,666.6,666.6,666.6*31
1552137545373: $GPGSA,A,3,15,24,32,,,,,,,,,,666.6,666.6,666.6*31

connected to: COM18
1552137551138: 2019-03-09 22.00┬░C
1552137551139: 15:19:09
1552137551140: The Aging Offset is set
1552137551141: as: -32
1552137551149: 15:19:10
1552137552145: 15:19:11
1552137552149:
1552137553144: 15:19:12
1552137554140: 15:19:13
1552137555147: 15:19:14
1552137556142: 15:19:
1552137556146: 15
1552137557142: 15:19:16
1552137558150: 15:19:17
1552137559145: 15:19:18
1552137560140: 15:19:1
1552137560144: 9
1552137561148: 15:1
1552137561152: 9:20
1552137562147: 15:19:21

connected to: COM6
1552137565384: 131924.3
1552137566366: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552137567388: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552137568366: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552137569368: $GPGSA,A,3,15,17,,,,,,,,,,,666.6,666.6,666.6*30
1552137570366: $GPGSA,A,3,15,17,,,,,,,,,,,666.6,666.6,666.6*30
1552137571366: $GPGSA,A,3,15,17,,,,,,,,,,,666.6,666.6,666.6*30
1552137572369: $GPGSA,A,3,15,17,,,,,,,,,,,666.6,666.6,666.6*30
1552137573365: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552137574365: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
1552137575368: $GPGSA,A,1,,,,,,,,,,,,,,,*1E
Datorn har varit utan nät ett tag och är här på väg att mjukt söka sig till "nättid". Därav interpolation mellan GPS offseten före och efter samplet från RTC-modulen. För GPS tidstämplarna tar jag medelvärde (utan eventuella outliers, där datorn kanske varit upptagen med nåt annat). För samplen från RTCn tar jag helt enkelt den minsta offseten jag hittar. Den är ofta en hundradels sekund mindre än den största. Det stämmer bra överens med att den inte samplas oftare än så. Med den minsta offseten har Arduinon råkat sampla precis strax efter att sekunden stegat fram. Motsvarande maximalt lång offset blir det när föregående sampling sker strax före omslag och Arduinon tar 10 ms kaffepaus innan den gör nästa försök.

Kanske snart dags att löda en tråd från DS3231:s SQW-utgång, som alltså inte finns på break out kontakten på den modul jag nu har.
Användarvisningsbild
rvl
Inlägg: 5720
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Min första Arduino - test av DS3231

Inlägg av rvl »

Nu ha ja en löödi bygel ti SQW. (SV: Nu har jag lött en bygel till SQW.)
bygel.jpg
Det fanns en NC i break out kontakten, som nu blev ~INT/SQW.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
rvl
Inlägg: 5720
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Min första Arduino - test av DS3231

Inlägg av rvl »

Gick över till en linuxmaskin, nu när jag fått igång interrupt från RTCn på Arduinon. Arduinos serial monitor har tidsstämplar i ms, men jag kör på med pythonscriptet, som jag nu modifierat till python 3.

Kod: Markera allt

import serial
import time
import datetime
    
ser = serial.Serial(
    port='/dev/ttyACM4',\
    baudrate=230400,\
    parity=serial.PARITY_NONE,\
    stopbits=serial.STOPBITS_ONE,\
    bytesize=serial.EIGHTBITS,\
        timeout=0)
    
print("connected to: " + ser.portstr)
    
size = 100
while (size > 0):
    line = ser.readline().decode('utf-8')
    if(line!=""):
        timestamp = str(time.time())
        print(timestamp + ": " + line, end ="")
        size -= 1
    
ser.close()
Arduinokoden ser för tillfället ut såhär:

Kod: Markera allt

// Include the libraries
#include <RtcDS3231.h>
//Open the Library Manager and search for "Rtc by Makuna" and install
 
#include <Wire.h>
 
// Create new RTC module
RtcDS3231<TwoWire> Rtc(Wire);
 
const byte OFFSET = -32;
const uint8_t INT_SECOND_TICK_PIN = 2; //2 or 3 on Uno. (Must have pin change interrupt.)

// Create variables for time
byte hours;
byte minutes;
byte seconds;
byte old;
byte oldM;
uint16_t year;
byte month;
byte day;

volatile int32_t _rtcTotalSecondsSince2000 = 0;
volatile boolean _newSecond = false;

void secondInterupt() {
  _rtcTotalSecondsSince2000++;
  _newSecond = true;
  digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
}

void setup() {
  // put your setup code here, to run once:
  //Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(230400);
  //Serial.begin(2000000);
  Rtc.Begin();

  // Set up 1Hz square wave
  //Rtc.writeSqwPinMode(DS3231_SquareWave1Hz);
  Rtc.SetSquareWavePin(DS3231SquareWavePin_ModeClock);
  Rtc.SetSquareWavePinClockFrequency(DS3231SquareWaveClock_1Hz);

  // Attach the interrupt and use the internal pull up
  attachInterrupt(digitalPinToInterrupt(INT_SECOND_TICK_PIN), secondInterupt, FALLING);
  digitalWrite(INT_SECOND_TICK_PIN, HIGH);
 
  // Update RTC module time to compilation time
  RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);
  //compiled += 7;  //transfer time W7
  compiled += 9;  //transfer time U18
  //Already set, comment this out:
  //Rtc.SetDateTime(compiled);
  //re set 2019-03-10 ~11 EET
  //set 2019-03-03 ~15 EET

  //Trying out Ageing Offset
  //Rtc.SetAgingOffset(OFFSET);
  //Set as -32 on 2019-03-08 00:20 EET
 
  old = 0;
  oldM = 0;
}
 
void loop() {
  // put your main code here, to run repeatedly:
  /*
  delay(10);
  updateTime();
  if(minutes != oldM){
    printDate();
  }
  else if(seconds != old){
    printTime();
  }
  */
  if(_newSecond) {
    Serial.println("*");
    _newSecond = false;
    //delay(100);

    if(_rtcTotalSecondsSince2000 < 1000) {  
      //_rtcTotalSecondsSince2000 = Rtc.now().secondstime();
      _rtcTotalSecondsSince2000 = Rtc.GetDateTime();
      //.GetDateTime()
    }
    
    // Display the  time 
    /*     
    int32_t dayTotalSecondsNow = _rtcTotalSecondsSince2000;
    uint8_t hour = dayTotalSecondsNow / 3600 % 24;
    uint8_t minute = dayTotalSecondsNow / 60 % 60;
    uint8_t second = dayTotalSecondsNow % 60;

    Serial.print(hour);
    Serial.print(":");
    Serial.print(minute);
    Serial.print(":");
    Serial.println(second);
    */
    updateTime(_rtcTotalSecondsSince2000);
    printTime();
  }
}
 
void updateTime(RtcDateTime now) {
   //RtcDateTime now = Rtc.GetDateTime();
   hours = now.Hour();
   minutes = now.Minute();
   seconds = now.Second();
   year = now.Year();
   month = now.Month();
   day = now.Day();
}
 
#define countof(a) (sizeof(a) / sizeof(a[0]))
 
void printTime(){
    char timestring[9];
    snprintf_P(timestring,
            countof(timestring),
            PSTR("%02u:%02u:%02u"),
            hours,
            minutes,
            seconds );
    Serial.println(timestring);
    //old = seconds;
}
 
void printDate(){
    oldM = minutes;
    char datestring[12];
    snprintf_P(datestring,
            countof(datestring),
            PSTR("%04u-%02u-%02u "),
            year,
            month,
            day );
    Serial.print(datestring);
    printTemperature();
    printTime();
    printAgingOffset();
}
 
void printTemperature(){
    RtcTemperature temp = Rtc.GetTemperature();
    Serial.print(temp.AsFloatDegC());
    Serial.println("°C");
}

void printAgingOffset(){
  int8_t ao = Rtc.GetAgingOffset();
  Serial.print("The Ageing Offset is set as: ");
  Serial.println(0+ao);
}
Nån gång under/efter lödarbetet hade klockan nollats, så jag har fått ställa den i tid igen. Ageing Offset inställninged höll sig kvar på innställda -32 och där är den än, så klockan går litet för fort. Men hur mycket? ...det får tiden utvisa! :mrgreen: :mrgreen: :mrgreen:

Testdata i ny tappning, med en viss regelbunden osäkerhet på ett par ms, som kanske kan skyllas på Arduinofirmwaren eller datorns OS(?)

Kod: Markera allt

rvl@EB56:~/kod/py/egi$ ntptime
ntp_gettime() returns code 0 (OK)
  time e02fedae.66dedaec  Sun, Mar 10 2019 22:10:22.401, (.401838604),
  maximum error 264720 us, estimated error 425 us, TAI offset 37
ntp_adjtime() returns code 0 (OK)
  modes 0x0 (),
  offset 577.661 us, frequency 22.766 ppm, interval 1 s,
  maximum error 264720 us, estimated error 425 us,
  status 0x2001 (PLL,NANO),
  time constant 10, precision 0.001 us, tolerance 500 ppm,
rvl@EB56:~/kod/py/egi$ python3 sertest.py 
connected to: /dev/ttyACM4
1552248627.853289: *
1552248627.85345: 22:10:28
1552248628.8528016: *
1552248628.8529553: 22:10:29
1552248629.8522816: *
1552248629.8524394: 22:10:30
1552248630.8516521: *
1552248630.851781: 22:10:31
1552248631.8511636: *
1552248631.8512971: 22:10:32
1552248632.8506377: *
1552248632.850785: 22:10:33
1552248633.850095: *
1552248633.8502288: 22:10:341552248633.854115: 
1552248634.8495314: *
1552248634.8537061: 22:10:35
1552248635.853119: *
1552248635.853247: 22:10:36
1552248636.8525844: *
1552248636.8527138: 22:10:37
1552248637.8520672: *
1552248637.8521938: 22:10:38
1552248638.851573: *
1552248638.8517141: 22:10:39
1552248639.851043: *
1552248639.8511899: 22:10:40
1552248640.8505352: *
1552248640.8506837: 22:10:41
1552248641.8499706: *
1552248641.8500912: 22:10:1552248641.8540194: 42
1552248642.849398: *
1552248642.8535764: 22:10:43
1552248643.8530092: *
1552248643.8531356: 22:10:44
1552248644.8525133: *
1552248644.8526568: 22:10:45
1552248645.8519795: *
1552248645.8521237: 22:10:46
1552248646.8514516: *
1552248646.8515935: 22:10:47
1552248647.8509202: *
1552248647.8510642: 22:10:48
1552248648.850401: *
1552248648.8505435: 22:10:49
1552248649.8498106: *
1552248649.8498867: 22:1552248649.8539279: 10:50
1552248650.8534071: *
1552248650.853528: 22:10:51
1552248651.8529136: *
1552248651.853062: 22:10:52
1552248652.852369: *
1552248652.8524969: 22:10:53
1552248653.851837: *
1552248653.851965: 22:10:54
1552248654.8513167: *
1552248654.851445: 22:10:55
1552248655.8507917: *
1552248655.8509183: 22:10:56
1552248656.8502772: *
1552248656.850421: 22:10:57
1552248657.8497026: *
1552248657.8497627: 21552248657.8538618: 2:10:58
1552248658.8533037: *
1552248658.8534431: 22:10:59
1552248659.8527749: *
1552248659.8529022: 22:11:00
1552248660.852247: *
1552248660.8523746: 22:11:01
1552248661.8517342: *
1552248661.8518617: 22:11:02
1552248662.8511906: *
1552248662.8513184: 22:11:03
1552248663.8506732: *
1552248663.8508003: 22:11:04
1552248664.850169: *
1552248664.8503141: 22:11:05
1552248665.8495774: *
1552248665.853764: 22:11:06
1552248666.8532388: *
1552248666.8533676: 22:11:07
1552248667.8526905: *
1552248667.8528352: 22:11:08
1552248668.8522263: *
1552248668.85237: 22:11:09
1552248669.8516252: *
1552248669.8517663: 22:11:10
1552248670.8511865: *
1552248670.8513358: 22:11:11
1552248671.8505766: *
1552248671.8507183: 22:11:12
1552248672.8500473: *
1552248672.8501844: 22:11:131552248672.8541803: 
1552248673.849458: *
1552248673.8536575: 22:11:14
rvl@EB56:~/kod/py/egi$ ntptime
ntp_gettime() returns code 0 (OK)
  time e02fede4.3052f7f4  Sun, Mar 10 2019 22:11:16.188, (.188766842),
  maximum error 291720 us, estimated error 425 us, TAI offset 37
ntp_adjtime() returns code 0 (OK)
  modes 0x0 (),
  offset 570.095 us, frequency 22.766 ppm, interval 1 s,
  maximum error 291720 us, estimated error 425 us,
  status 0x2001 (PLL,NANO),
  time constant 10, precision 0.001 us, tolerance 500 ppm,
851.429 ± 2.0 ms (Min: 849.398 Max: 853.4071) låg asteriskradernas tiddstämplar på där, utan hänsyn till datorn tidsoffset som var 578..570 µs enligt ntptime.
Användarvisningsbild
rvl
Inlägg: 5720
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Min första Arduino - test av DS3231

Inlägg av rvl »

Som sagt regelbunden:
regelbunden.png
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
rvl
Inlägg: 5720
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Min första Arduino - test av DS3231

Inlägg av rvl »

En klocka ska väl ha en "display" också! Kanske såhär?
Användarvisningsbild
rvl
Inlägg: 5720
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Min första Arduino - test av DS3231

Inlägg av rvl »

Nu blev det + 1.2475 ppm (849398 - 737067.7)/(1552338686.7370677 - 1552248642.849398) utan att orka beakta datorns offset, som åtminstone idag var obetylig jämfört med sågtandsavvikelsen, där jag valde minsta värde.

Ska skruva upp Ageing Offsetten tillbaka mot noll nu och se hur det går.

Utdrag ur kvällens data:
rvl@EB56:~/kod/py/egi$ ntptime
ntp_gettime() returns code 0 (OK)
time e0314d2b.f6f6a50c Mon, Mar 11 2019 23:10:03.964, (.964701972),
maximum error 169433 us, estimated error 452 us, TAI offset 37
ntp_adjtime() returns code 0 (OK)
modes 0x0 (),
offset 95.070 us, frequency 22.727 ppm, interval 1 s,
maximum error 169433 us, estimated error 452 us,
status 0x2001 (PLL,NANO),
time constant 7, precision 0.001 us, tolerance 500 ppm,

...
1552338678.737196: *
1552338678.7413683: 23:11:19
1552338679.7408328: *
1552338679.7409573: 23:11:20
1552338680.740308: *
1552338680.7404335: 23:11:21
1552338681.7397819: *
1552338681.7399077: 23:11:22
1552338682.7392573: *
1552338682.7393832: 23:11:23
1552338683.7387326: *
1552338683.7388577: 23:11:24
1552338684.7382228: *
1552338684.7383628: 23:11:25
1552338685.7376604: *
1552338685.7377274: 231552338685.7417574: :11:26
1552338686.7370677: *1552338686.7412124:
1552338686.7413354: 23:11:27
1552338687.740713: *
1552338687.7408383: 23:11:28
1552338688.7402194: *
1552338688.7403593: 23:11:29
1552338689.7396657: *
...
rvl@EB56:~/kod/py/egi$ ntptime
ntp_gettime() returns code 0 (OK)
time e0314d9d.74343b70 Mon, Mar 11 2019 23:11:57.453, (.453922738),
maximum error 226433 us, estimated error 452 us, TAI offset 37
ntp_adjtime() returns code 0 (OK)
modes 0x0 (),
offset 76.076 us, frequency 22.727 ppm, interval 1 s,
maximum error 226433 us, estimated error 452 us,
status 0x2001 (PLL,NANO),
time constant 7, precision 0.001 us, tolerance 500 ppm,
Användarvisningsbild
rvl
Inlägg: 5720
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Min första Arduino - test av DS3231

Inlägg av rvl »

Ageing 0ffset nu innställd till -21, som torde vara optimalt för min modul och temperatur. Efter ca 11 h med den inställningen har mina tidsstämplar vandrat en dryg millisekund. Motsvarar - 0.0266 ppm, eller dvs -27 ppb (utrikiska biljoner), som blir rätt nära en sekund per år, OM modulen och temperaturen är stabila.

En hel del osäkerhet i att mäta absoluta submillisekunder, med min nuvarande setup, så mätintervallet är fortfarande för kort för att ens definitivt uttala sig om frekvensfelets förtecken (de första timmarna verkade det gå åt andra hållet).
Zhorts
Inlägg: 217
Blev medlem: 15 augusti 2011, 14:42:03

Re: Min första Arduino - test av DS3231

Inlägg av Zhorts »

Roligt och spännande - tid är statistik. :)

Nästa steg är väl då nu att lägga till en super-exakt temperatursensor och dynamiskt korrigera offset baserat på uppmätt temperatur?
Användarvisningsbild
rvl
Inlägg: 5720
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Min första Arduino - test av DS3231

Inlägg av rvl »

Ser man på. Första avbrottet i min monolog. 8) Kul. Nja, olika temperaturer börjar jag inte med än, även om modulen har sin egen temperatursensor. Inte kanske "precicions-sådan", men med bra termisk koppling till där temperaturen är av intresse. Och egentligen gör modulen redan allt det där, men inte ens med utlovad noggrannhet - inte min modul i alla fall - för att inte ens tala om de noggrannheter jag nu har med akttuell temperatur.

Har automatiserat mitt kalibreringshjälpscript:

Kod: Markera allt

import serial
import time
import datetime
import subprocess
import sys
    
def getOffset():
    output = subprocess.check_output('ntptime|grep \ \ offset', shell=True)
    print(output.decode("utf-8"))
    output = output.split(b' ')
    offs = (output[3].decode("utf-8"))
    pntp = float((output[6].decode("utf-8")))
    toff = float(offs)/1000000.0
    return(toff,pntp)

SAMPLETRIES = 100
SLEEPTIME = 30

t0 = time.time()
o0,p0 = getOffset()

time.sleep(SLEEPTIME)

t1 = time.time()
o1,p1 = getOffset()

ser = serial.Serial(
    port='/dev/ttyACM0',\
    baudrate=230400,\
    parity=serial.PARITY_NONE,\
    stopbits=serial.STOPBITS_ONE,\
    bytesize=serial.EIGHTBITS,\
        timeout=0)
    
print("connected to: " + ser.portstr)
    
size = SAMPLETRIES
timestamps = []
tsf = []
while (size > 0):
    line = ser.readline().decode('utf-8')
    if(line!=""):
        ts = time.time()
        print(ts, ": " + line, end ="")
        if '*' in line:
            size -= 1
            timestamps.append(ts)
            tsf.append(ts%1)
    
ser.close()

t2 = time.time()
o2,p2 = getOffset()

time.sleep(SLEEPTIME)

t3 = time.time()
o3,p3 = getOffset()

raw = timestamps[tsf.index(min(tsf))]
print('raw:')
print(raw)
'''
print(t0,t1,t2,t3)
print(o0,o1,o2,o3)
print(p0,p1,p2,p3)
'''
if(p1==p2):
    print('interpolating')
    tsample = raw + o1 + (raw-t1)/(t2-t1)*(o2-o1)

elif(p2==p3):
    print('extrapolating')
    tsample = raw + o2 + (raw-t2)/(t3-t2)*(o3-o2)

elif(p1==p2):
    print('extrapolating2')
    tsample = raw + o0 + (raw-t0)/(t1-t0)*(o1-o0)

else:
    print('else')
    tsample = raw + (o0+o1+o2+o3)/4
print(tsample)


def s2ppm(t1, t2):
    ppm = 1000000. * (t1%1-t2%1) / (t2-t1)
    return ppm

if len(sys.argv)>1:
    for i in range(1,len(sys.argv)):
        ts_ref = float(sys.argv[i])
        print(s2ppm(ts_ref,tsample), 'ppm (',datetime.datetime.fromtimestamp(ts_ref).strftime('%Y-%m-%d %H:%M:%S'),')')
Koden har kända brister, då jag t.ex. ännu inte behövt bekymra mig om att sampel kan komma på både före och efter helsekund.

Exempeloutput, med Ageing Offset -21:

Kod: Markera allt

...
1552578699.7788537 : 17:51:40
1552578700.7781558 : *
1552578700.7782788 : 17:51:41
1552578701.7776508 : *
1552578701.7777889 : 17:51:42
1552578702.776998 : *
1552578702.7770765 : 17:1552578702.7811046 : 51:43
1552578703.7764342 : *1552578703.780635 : 
1552578703.7807496 : 17:51:44
1552578704.780148 : *
1552578704.7802725 : 17:51:45
1552578705.7796392 : *
1552578705.7797625 : 17:51:46
1552578706.7790623 : *
1552578706.779179 : 17:51:47
1552578707.778521 : *
1552578707.7786384 : 17:51:48
1552578708.7779927 : *
1552578708.7781105 : 17:51:49
1552578709.7774553 : *
1552578709.777609 : 17:51:50
1552578710.7768772 : *
1552578710.7810528 : 17:51:51
1552578711.7804687 : *
1552578711.7805789 : 17:51:52
1552578712.7799757 : *
  offset -421.499 us, frequency 22.819 ppm, interval 1 s,

  offset -418.422 us, frequency 22.819 ppm, interval 1 s,

raw:
1552578703.7764342
interpolating
1552578703.7760117
-0.028885766492609936 ppm ( 2019-03-13 11:25:58 )
-0.028539486322882897 ppm ( 2019-03-13 22:12:08 )
-0.06085233286533193 ppm ( 2019-03-14 11:03:16 )
0.5452317252919902 ppm ( 2019-03-14 17:22:47 )
Sista referensen där helt tydligt alldeles för nära, med onogrannhetem i datorns ntp-synkronisering med yttervärden. Kanske jag borde sätta upp en egen stratum-1 NTP-server med GPS-referens. ...eller kanske hellre köra bare metal med PPS signal från GPS:n istället för omvägar via datorer.
Användarvisningsbild
rvl
Inlägg: 5720
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: Min första Arduino - test av DS3231

Inlägg av rvl »

Nu håller jag på att ställa tiden rätt genom att köra med minsta tillgängliga frekvens. Det borde ta ca tre timmar att "flytta tiden" de 0,2 s som den var var före sin tid.

Såhär går det med Ageing Offset 127:

Kod: Markera allt

...
1552635419.8061888 : *
1552635419.8062787 : 09:371552635419.8106258 : :00
1552635419.8108048 : 2019-03-15 25.50°C
1552635419.8110638 : The Ageing Offset is set as: 127
1552635420.809746 :  *
1552635420.8098664 : 09:37:01
1552635421.8092697 : *
  offset -990.674 us, frequency 22.939 ppm, interval 1 s,

  offset -989.949 us, frequency 22.939 ppm, interval 1 s,

raw:
1552635405.805307 @ 2019-03-15 09:36:45
interpolating
1552635405.8043125
-17.42905691448558 ppm ( 2019-03-15 09:15:17 )
-17.479793609010446 ppm ( 2019-03-15 09:18:33 )
-17.39436081826314 ppm ( 2019-03-15 09:20:41 )
-17.783793090615617 ppm ( 2019-03-15 09:23:04 )
-17.911971635993904 ppm ( 2019-03-15 09:26:20 )
-17.669247372215736 ppm ( 2019-03-15 09:27:20 )
-17.633169374185233 ppm ( 2019-03-15 09:29:13 )
-17.780928539936834 ppm ( 2019-03-15 09:30:36 )
Skriv svar