Stránka 1 z 5

Arduino due - millis

Napsal: 14 kvě 2019, 19:04
od djnyci
Ahoj,
neví někdo jak přesné jsou hodiny na desce DUE?
Vím že u ostatních desek se nedá na tuto hodnotu spolehnout v případě že potřebuji přesný čas v řádů ms. Na desce DUE je jiný procesor proto je otázkou zda potřebuji stále externí RTC?

Děkuju

Re: Arduino due - millis

Napsal: 14 kvě 2019, 22:01
od KarelBrno
Mám pocit, že čas podle millis() je přesný tak, jak je přesný krystal na desce, protože ten řídí takt procesoru a z něj se to pak počítá. Nevím co DUE, ale asi to bude stejně.
Takže pokud potřebuješ měřit krátké intervaly, tak millis() by měl být relativně přesný. Čím delší ale je časový úsek, tím to bude horší.
K čemu přesně to potřebuješ?

Re: Arduino due - millis

Napsal: 15 kvě 2019, 06:38
od pavel1tu
Dotaz je špatně napsaný, nebo špatně popisuješ CO potřebuješ.

Zjednodušeně - "milis" využívá vnitřní čítač, kde je čas v ms od zapnutí pod napájení. Stačí si přečíst manuál, ale myslím, že je ovlivňovaný "uspáváním" arduina.
Takže "milis" lze použít na nějaké interní časování - proveď jednou za (řádově sekundy třeba), měření doby v ms/s atd., čas tu lze nastavit a arduino si jej bude pamatovat, ale pouze do prvního restartu.
Pokud chci dlouhodobě přesný čas (řečeno H:M:S a třeba i datum), je výhodnější RTC.

Za mne - ani jedno dlouhodobě (den, týden, měsíc) není schopno mít čas přesný na ms.

Toto lze řešit připojením arduina na internet a pravidelnou synchronizaci některým z protokolů přesného času. Opět jsou protokoly pro přesný a přesnější čas, záleží jak moc přesný ten čas potřebuješ - to najdeš na Wiki (toto používám v práci každý den, tak mohu časem více rozvést)

Re: Arduino due - millis

Napsal: 15 kvě 2019, 08:56
od pavel1tu
Já mám synchronizaci času z internetu jednou za 24h
podle tohoto článku jsem vycházel.

Nešlo mi o přesnost na ms, ale aby se centrála alarmu
(která je stejně propojená do domácí sítě - do VLANu - a ven - jen povolené porty NTP, HTTPS pro přenos dat na vzdálený server + VPN pro vzdálené ovládání z mobilu)
nemusel vůbec seřizovat čas.

Re: Arduino due - millis

Napsal: 15 kvě 2019, 10:03
od djnyci
Jde mi o přesné měření intervalu do cca 5 minut a potřebuji mít přesnost do 50ms. O tom jak funguje millis v klasickém arduinu vím, ale due má úplně jinou architekturu procesoru proto si nejsem jist jestli to funguje úplně stejně.

Re: Arduino due - millis

Napsal: 15 kvě 2019, 11:26
od pavel1tu
Co si přečíst manuál k DUE ?!
Vnitřní čítače jsou VŽDY závislé na frekvenci procesoru !
- DUE má ty vnitřní čítače 3
- přesnost je daná přesností krystalu, kde u "oficiálních" je 2%, když to přepočteš na milisekundy od frekvence procesoru - chyba celkem malá, nejmenší čas co lze změřit je myslím 25ns ?
- DUE má mimo milis() i micros() myslím, ale byl tam (kdysi) nějaký BUG
- nezabýval jsem se s tím ale co lze vyčíst z manuálu (co mám stažený) nejpřesnější by měl být nějaký "master" čítač, který je řízený frekvencí procesoru (MCK / 2) - ale nikdy jsem to netestoval.



PS: u DUE poror - nejde používat třeba proměnná "time" - přenesl jsem program z UNO a pak zjistil že DUE to má jako nějakou vnitřní proměnnou.
PS2: ještě jsem napsal známému - kdysi jsem (jen po drátové a mechanické stránce) s ním řešil počítadlo okruhů a měření času u závodní dráhy na autíčka - porovnával tam UNO a moje DUE - ale už nevím co zjistil - je to skoro 2 roky

Re: Arduino due - millis

Napsal: 15 kvě 2019, 12:47
od KarelBrno
djnyci: pokud potřebuješ na 5min úseku mít přesnost do 50ms, tak na samotné millis() zapomeň, to takhle přesné nebude. Potřebuješ RTC a např. přes interrupt si počítat jeho sekundové (nebo menší) tiky + připočíst millis() mezi tiky.

Re: Arduino due - millis

Napsal: 15 kvě 2019, 13:11
od djnyci
Děkuju za odpověď to je to co jsem potřeboval vědět.
pavel1tu : Škoda že nemáš to měření.
KarelBrno : Přesně takhle jsem to měl doteď dokud jsem používal UNO a MEGA

Aktuálně to zkouším porovnávat proti DS3231 a uvidíme o kolik se časy rozjedou. zatím to na 8 hodinách přes noc sedí na 1s přesně. Teď jsme to zkusil dát do ledničky a uvidíme o kolik se to rozjede při jiné teplotě.

Re: Arduino due - millis

Napsal: 15 kvě 2019, 15:04
od jankop
pavel1tu píše:
15 kvě 2019, 11:26
- přesnost je daná přesností krystalu, kde u "oficiálních" je 2%, když to přepočteš na milisekundy od frekvence procesoru - chyba celkem malá,
S tím bych příliš nesouhlasil, ty nejobyčejnější SMD krystaly mají běžně přesnost 0,0050%. Tj. 5minut=300s 300s*0,000050=0,015s=15ms.
Tak takty procesoru se za pět minut nejspíš neodchýlí od správného času o více než 15ms. Samotné časovače chybu nevnášejí. Neznám detaily jádra Arduina, ale jsem přesvědčený, že není zásadní problém dosáhnout požadované přesnosti 0,017% i ve Wiringu. Možná bude potřeba udělat nějakou kompenzaci na odezvy přerušení, ale konstanty by to nejspíš vyřešily.
Použití RTC obvodu, který má k dispozici na výstupu jen sekundy, toho zas tolik neřeší. Ale neznám konečnou aplikaci.
Zkusím dnes něco otestovat, ale nebude to na DUE.

Re: Arduino due - millis

Napsal: 16 kvě 2019, 10:13
od pavel1tu
Jsem to špatně napsal.
ty 2% jsou z jednoho fora, kde vypočítaly nějakou max. chybu na čítače když jsou řízeny taktem procesoru, ta chyba je tak velká, protože se tam ještě obsluhují přerušení a další věci jak jsem tak napůl pochopil.
Ten čítač jak jsem pochopil obsluhuje knihovna, která obstarává i přerušení a další věci, proto se uvádí ta chyba 2% nebo někde i 5s za 1h.

U DUE to jde ovlivnit i nějakým nastavením jakou prioritu má čítač a jakou obsluha přerušení.

RTC je k ničemu - co jsem měl moduly - jedou jen na jednotky s ? )nebo to je knihovnou co je obsluhuje)

Ideál je připojit to k netu a synchronizovat to po NTC.

Jsem ochoten pokud mi dotyčný nahodí jakým způsobem chce čas startovat a stopnout to sestrojit a změřit v laboratoři - jsem schopen měřit s přesností na jednotky ms při časech do 10min - teoreticky na to příští týden vyšetřím 2 dny
Asi bych uvítal i pomoc ostatních s kodem jak obsloužit více čítačů - ať je porovnáme který je jak přesný + jak to ovlivňuje nastavení SysTick