Hodiny a časování

Odpovědět
daton
Příspěvky: 331
Registrován: 16 bře 2013, 16:12

Re: Hodiny a časování

Příspěvek od daton » 12 říj 2016, 07:20

Tak ta konstrukce z mého minulého příspěvku by asi taky nefungovala ale co tato:

Kód: Vybrat vše

doba = millis() ;   
    if ((doba - pocatek) >= 1000) {
      pocatek = millis();
      sec = sec +1;}
      if (doba >= 64535) {delay(1001); pocatek = millis();}
      if ( sec>59) {
        sec = 0;[/[code]

zde se kritická sekunda před přetečením prostě pozastaví a nastaví se hodnoty se kterými to umí počítat. No není to moc hezké ale když tam bude unsigned long tak za 52 dni jedna sekunda není moc. Ale stále to obcházíme a neřeší to otázku z prvního příspěvku pročk vykuchaný kod hodin od p.Černého  s podmínkou  ((doba % 1000) == 0) chodí a ten další se s touto podmínkou zpomaluje. Mlže za to neodladěnost kodu či jeho jiné poskládání předpokládám že to je hodně o jeho optimalizaci ale oba kody jsou zhruba stejně dlouhé a hledají skoro to samé.

Uživatelský avatar
fulda
Příspěvky: 399
Registrován: 04 led 2016, 17:18

Re: Hodiny a časování

Příspěvek od fulda » 12 říj 2016, 09:41

daton píše:Tak ta konstrukce z mého minulého příspěvku by asi taky nefungovala ale co tato:
...
Jak už tu zaznělo, těch řešení je k dispozici asi miliarda.
Já mám rád ta, která se vejdou do jedné podmínky, takže bez optimalizace to může být třeba takto:

Kód: Vybrat vše

void setup() {
   tik = millis() + 1000;  // další tik bude za vteřinu, lze použít i bez toho +1000, pak bude okamžitě
}

void loop() {
  ms=millis();
  if ((tik>=1000) && (tik <= ms)) || ((tik<1000) && (ms<2000) &&  (tik <= ms)) {
      // číslo 2000 je jakékoli číslo větší než 1000 a menší než (maxint-1000), zahrnuje jistou rezervu pro zdržení kódu.
    tik += 1000; // další tik bude za vteřinu od předchozího
    // tady se dělá co je potřeba
  }
Mimochodem - k čemu je to celé určené? řešit přesný čas tímto způsobem je dobré, ale bohužel celkem nepoužitelné pro realizaci reálného času. Dovedu si to představit například pro nějaká periodická měření/logování nebo tak něco.
Nějaké poznámky o práci s reálným časem na arduinu jsem napsal do článku, který ještě nikde nevyšel, ale třeba na něj jednou přijde řeč, on je totiž celkem dlouhý a celkem nudný.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.

daton
Příspěvky: 331
Registrován: 16 bře 2013, 16:12

Re: Hodiny a časování

Příspěvek od daton » 12 říj 2016, 14:36

No nejsem přítel čtení dlouhých a nudných článků ale na tento se těším můžeš mi ho zaslat? Mimochodem ta tvoje podmínka musím na to ještě kouknout abych to pochopil.
Jde o měření času alespoň trochu reálného u jednoho arduina co funguje jako webový server, současně jako řízení procesu v reálném čase a ještě výstupu na LCD.

Uživatelský avatar
fulda
Příspěvky: 399
Registrován: 04 led 2016, 17:18

OT Re: Hodiny a časování

Příspěvek od fulda » 12 říj 2016, 20:39

daton píše:No nejsem přítel čtení dlouhých a nudných článků ale na tento se těším můžeš mi ho zaslat?
Bohužel, právě je na revizi u vydavatele - už se dlouho neozval, tak při čtení asi usnul.
Až bude známo kdy kde a jak vyjde, dám echo
daton píše:Jde o měření času alespoň trochu reálného u jednoho arduina co funguje jako webový server, současně jako řízení procesu v reálném čase a ještě výstupu na LCD.
Tak to jsi si vzal dost velké sousto.
To bych ti skoro doporučil si hodiny buď použít úplně externí z nějakého RTC obvodu a nebo si udělat zdroj vteřinových impulzů, připojit ho na vstup pro přerušení, a hodiny počítat podle vteřinového přerušení.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.

daton
Příspěvky: 331
Registrován: 16 bře 2013, 16:12

Re: Hodiny a časování

Příspěvek od daton » 12 říj 2016, 21:47

Jo mám doma ten modul z činy co by ty hodiny měl umět ale zatím se mi ho nepodařilo připojit tak aby to chodilo. Tak jsem se vrátil k tomuto méně přesnému ale integrovanému řešení, avšak mohl bych ho zkusit oprášit.
Máš nějaké zkušenosti s těmi moduly? Mám tiny rtc I2C , je na něm baterka a dva čipy jinak se to popsat nedá. No ale ted mě napadá že vlastně I2C budu potřebovat na displej.... no nějak se mi u toho arduina nedostává pinů a to už plánuji megu...

daton
Příspěvky: 331
Registrován: 16 bře 2013, 16:12

Re: Hodiny a časování

Příspěvek od daton » 13 říj 2016, 07:10

K tvému příkladu, obávám se že by také nefungoval.
Pokud jsem si to správně vysvětlil tak přičtení 1000 se provede když
- tik bude větší a roven 1000 a zároveň menší než okamžitá hodnota ms nebo
-když tik bude menší než 1000 a zároveň ms bude menší než 2000 a zároveň tik bude roven a menší než ms

taak že mi z toho vyplívá že až to přeteče tak tik bude bude větší než ms protože to se vynuluje a proces se zastaví, příklad tik bude 65500 a ms už bude dávno 300 atd tak to nepojede. Tedy opravte mne jestli si to vysvětluji špatně ale myslím že je to tak. Bohužel ;)

Uživatelský avatar
fulda
Příspěvky: 399
Registrován: 04 led 2016, 17:18

Re: Hodiny a časování

Příspěvek od fulda » 13 říj 2016, 09:22

Jdeš v sobotu do doupěte? Že bych zařadil krátkou nesourodou přednášku na téma hodiny?? Mám nějaké hezké in natura předměty (fotky dole) :)

K tomu RTC - podle tvého popisu je na něm o jeden čip víc, než bych čekal :)
Z mého pohledu jsou všechny stejné. Dokážeš přečíst označení těch čipů? Nebo něco jako návod nebo popis od prodejce?

I2C má tu přednost, že je možné na ní plácat zařízení paralelně, pokud mají různé adresy a to asi bude splněno.

A k mojemu příkladu - tik je vždy ten, kdo je "napřed", jeho hodnota je větší, než hodnota ms, až když ho ms doběhne, tak se tikne.
Podmínkou je ošetřeno pouze to, že pokud je tik menší než 1000, tak to znamená, že došlo k přetečení a je nutno vyloučit ze hry všechna ms, která jsou větší než maxint-1000, protože ta jsou ještě z dobíhajícího času "před" přetečením.

Obrázek Obrázek
Za pravopisné chyby v této zprávě může moje učitelka češtiny.

daton
Příspěvky: 331
Registrován: 16 bře 2013, 16:12

Re: Hodiny a časování

Příspěvek od daton » 13 říj 2016, 21:07

Ahoj no jestli můžeš tak to nech na listopad to se snad zůčastním ted mi to zcela určitě nevyjde budu mít službu v práci.
Na tom modulu mám dva čipy jeden je pamět 24c32 a druhý je DS1307Z . Co myslíš šlo by to připojit tak aby to chodilo?
S tím kodem máš pravdu trochu jsem si to přemodeloval a tak mi to nevycházelo ale ted je to jasné.


Uživatelský avatar
fulda
Příspěvky: 399
Registrován: 04 led 2016, 17:18

Re: Hodiny a časování

Příspěvek od fulda » 13 říj 2016, 22:17

Nevím, jestli rozumím otázce, ale zkoušel jsi google?
nebo stackexchange?
Za pravopisné chyby v této zprávě může moje učitelka češtiny.

Odpovědět

Kdo je online

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