Stránka 3 z 5

Re: Arduino due - millis

Napsal: 24 říj 2021, 18:50
od kiRRow
Elkez píše:
24 říj 2021, 16:26
32768/100 = 327,68.
Potíž je v tom, že všechny frekvence, které lze dostat z modulu, nejsou dělitelné 100 beze zbytku.
Nepřesnost daná zbytkem degraduje přesnost modulu.
Čas chceš však zobrazovat průběžně, takže velmi přesně ho měříš dle oscilátoru RTC, a občas +- pár ms ho vyplivneš na displej (nebo někam jinam). Aspoň tak jsem to pochopil já.

Re: Arduino due - millis

Napsal: 24 říj 2021, 19:06
od Elkez
Čas potřebuji zobrazovat každých 10 ms po dobu asi 3 min.
Takže k tomu potřebuji přesné 10ms impulsy, které sčítám do registru a ten pak po 10 ms zobrazuji.
Projevuje se tam však ta zmiňovaná nepřesnost.

Re: Arduino due - millis

Napsal: 24 říj 2021, 19:07
od peterple
Načasovať 10ms sa dá aj 32kHz kryštálom, tak aby sa tá chyba nekumulovala. Ale ak to chceš naozaj presne tak použi kryštál procesora. Si myslím že už obyčajná millis bude presnejšia ako ten 32kHz kryštál. Samozrejme za predpokladu že to má kryštál a nie rezonátor.
Ako sa dá popasovať s nepresnoťou delenia je ukázané priamo v implementácii funkcie millis()
Celkom dobrý popis tu https://www.best-microcontroller-projec ... illis.html
úplne najpresnejšie sa to dá urobiť ale čítačom T1 (16 bit) a presným nastavením frekvencie kryštála na 16Mhz. Potom sa nastaví mód s autoreload vlasnoťou a to tak aby prerušenie prišlo presne každú 1ms

Inak dosť pochybujem že potrebuješ čas zobrazovať každých 10ms. Skôr potrebuješ merať čas s rozlíšením na 10ms. Pravdepodobne vyrábaš stopky (napr. pre hasičov). Na takýto účel millis nie je vhodný. Treba si to napočítať po svojom.

Re: Arduino due - millis

Napsal: 24 říj 2021, 19:11
od Elkez
Inak dosť pochybujem že potrebuješ čas zobrazovať každých 10ms.
Potřebuji. Ke stopkám je externí displej, kde se zobrazuje průběžný čas.

Re: Arduino due - millis

Napsal: 24 říj 2021, 19:14
od peterple
a ten sleduje niekto vysokorýchlostnou kamerou?

Re: Arduino due - millis

Napsal: 24 říj 2021, 19:27
od Elkez
ne

Re: Arduino due - millis

Napsal: 24 říj 2021, 19:29
od Elkez
Teoreticky by stačilo zobrazovat desetiny sec. a konečný čas zobrazit i se setinami.
To však neřeší původní problém.

Re: Arduino due - millis

Napsal: 24 říj 2021, 19:34
od peterple
Zobrazovať môžeš kludne aj so stotinami len to budeš posielať ako stihneš. Aj prenos na displej niečo trvá. Akú tam máš baudovú rýchlosť?

Dva spôsoby riešenia som ti navrhol. Lepšie je to s interným kryštálom a 16b čítačom.
Keď som kedysi dávno staval hodiny (nie jedny) tak som dosiahol presnosť 1sek/mesiac s interným kryštálom.

Re: Arduino due - millis

Napsal: 24 říj 2021, 22:04
od Elkez
Všude se dozvídám, jak přesný je RTC s DS3231, proto jsem se na něj zaměřil, ale je problém dostat z něj 10 ms.
Složitému dopočítávání jsem se chtěl vyhnout, proto zjišťuji, zda s tímto modulem má někdo lepší zkušenosti.
Millis jsem zkoušel jako první, ale přesnost byla nevyhovující.
Používám DUE s krystalem.

Re: Arduino due - millis

Napsal: 24 říj 2021, 23:08
od peterple
Millis je nepresný prečo? Čím testuješ presnosť? Aká je f oscilátora? Bežné kryštály arduina sa udávajú ako 16.000Mhz. Potom to už môže byť hocičo.
DS3231 nemám odskúšaný. V tej dobe keď som robil hodiny bol DS1302. S ním to utekalo za mesiac aj niekoľko minút. Preto som čas počítal na základe interného osc a každú minútu ukladal do RTC len pre prípad výpadku. MCU ale bežalo s presným časovým kryštálom ktorý má f udávanú na 1Hz. Okrem toho som ju dolaďoval kapacitným trimrom. Neverím že 32kHz kryštál bude presnejší a stabilnejší ako 16MHz.
Internet je plný blbostí, treba filtrovať. Pre niekoho je presné 2sekundy denne. Pre niekoho je to málo.
Ak to chceš mať super presné daj si tam TCXO 10Mhz a môžeš merať pomaly na mikrosekundy