Arduino due - millis
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Arduino due - millis
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
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
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š?
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š?
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Arduino due - millis
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)
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)
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Arduino due - millis
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.
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.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Arduino due - millis
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ě.
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Arduino due - millis
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
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
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Arduino due - millis
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
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ě.
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ě.
-
- Příspěvky: 1033
- Registrován: 06 zář 2017, 20:04
- Reputation: 0
- Bydliště: Brno
- Kontaktovat uživatele:
Re: Arduino due - millis
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.
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Arduino due - millis
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
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
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 4 hosti