Arduino due - millis

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Arduino due - millis

Příspěvek od kiRRow » 24 říj 2021, 18:50

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á.

Elkez
Příspěvky: 51
Registrován: 03 úno 2021, 07:14
Reputation: 0

Re: Arduino due - millis

Příspěvek od Elkez » 24 říj 2021, 19:06

Č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.

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: Arduino due - millis

Příspěvek od peterple » 24 říj 2021, 19:07

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.

Elkez
Příspěvky: 51
Registrován: 03 úno 2021, 07:14
Reputation: 0

Re: Arduino due - millis

Příspěvek od Elkez » 24 říj 2021, 19:11

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.

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: Arduino due - millis

Příspěvek od peterple » 24 říj 2021, 19:14

a ten sleduje niekto vysokorýchlostnou kamerou?

Elkez
Příspěvky: 51
Registrován: 03 úno 2021, 07:14
Reputation: 0

Re: Arduino due - millis

Příspěvek od Elkez » 24 říj 2021, 19:27

ne

Elkez
Příspěvky: 51
Registrován: 03 úno 2021, 07:14
Reputation: 0

Re: Arduino due - millis

Příspěvek od Elkez » 24 říj 2021, 19:29

Teoreticky by stačilo zobrazovat desetiny sec. a konečný čas zobrazit i se setinami.
To však neřeší původní problém.

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: Arduino due - millis

Příspěvek od peterple » 24 říj 2021, 19:34

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.

Elkez
Příspěvky: 51
Registrován: 03 úno 2021, 07:14
Reputation: 0

Re: Arduino due - millis

Příspěvek od Elkez » 24 říj 2021, 22:04

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.

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: Arduino due - millis

Příspěvek od peterple » 24 říj 2021, 23:08

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

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 17 hostů