Jak udělat čas

Petr087

Jak udělat čas

Příspěvek od Petr087 »

Dobrý den,

Chtěl bych se zeptat jak mám napsat hodiny pomocí bytu aby šly po vteřině? Moc děkuji za radu. Prosím budte na mne hodný, zajímám se o Picaxe teprve 14 dní.
Jinak můj projekt je takový to:

REM Hodiny
REM 18.2.2015

cas: ;cyklus hodin
b0=b0+1 ;vteřiny
if b0=59 then let b1=b1+1 b0=0 endif ;minuty
if b1=59 then let b2=b2+1 b1=0 endif ;hodiny
if b2=23 then let b2=0 endif ;nulování
if pinb.3=1 then let b1=b1+1 endif ;plus 1minuta
if pinb.2=1 then let b2=b2+1 endif ;plus 1hodina
goto cas
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Jak udělat čas

Příspěvek od AlesH »

Ahoj.

PICAXE Basic má příkaz "pause", který čeká tolik milisekund, kolik je za ním uvedeno jako parametr. Takže principiálně stačí do smyčky zařadit příkaz "pause 1000".

Kód: Vybrat vše

cas:          ; cyklus hodin
  pause 1000  ; 1 sekunda cekani
  b0=b0+1     ; vteřiny
  ...
Mírným zkrácením "pause" (např, na "pause 999" se dá čas doladit na vyšší celkovou přesnost (protože příkazy mimo "pause" zřejmě pár ms také zaberou).

Ještě v těch počítacích podmínkách bych dal raději >59 a >23, protože s tím =59 a =23 to podle mne jednu sekundu, minutu a hodinu vynechává.
Petr087

Re: Jak udělat čas

Příspěvek od Petr087 »

Mockrát děkuji za radu.Ještě bych se zeptal zda se dá dopočítat jak dlouho budou trvat ostatní příkazy?
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Jak udělat čas

Příspěvek od AlesH »

Podle mých informací doba trvání příkazů moc přesně spočítat nejde. Alespoň já to neumím. Vetšinou mi stačí, když zhruba odhadnu, že každý řádek PICAXE programu trvá cca 1 ms (tisícinu sekundy) [při základní frekvenci procesoru]. Po programovém nastavení vyšší rychlosti procesoru pak samozřejmě program běží rychleji. Problém při "výpočtu" bývá i v tom, že v různých situacích program probíhá různé větve programu, takže doba "smyčky" není vždycky stejná. Osobně si myslím, že nejlepší je to prostě "doladit" podle skutečnosti. Něco odhadnout, pak změřit výsledek a podle něj pak případně upravit program (opět víceméně odhadem).
Petr087

Re: Jak udělat čas

Příspěvek od Petr087 »

Pane Alesi, vy jste taky samouk?
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Jak udělat čas

Příspěvek od AlesH »

Ano, jsem samouk. Ale už se hobby robotikou zabývám zhruba 5 let, takže pár zkušeností jsem nasbíral (i účastí na robotických soutěžích).
micer
Příspěvky: 180
Registrován: 12 čer 2014, 19:14

Re: Jak udělat čas

Příspěvek od micer »

AlesH píše:Podle mých informací doba trvání příkazů moc přesně spočítat nejde. ...
PICAXE nikdy nebude dělat přesný čas už proto, že jeho hodiny nejsou (až na některé vyšší typy - zde není uveden typ) řízené krystalem. Když se budeme snažit doladit čas co nejlépe, musí se skutečně zkoušet a dělat korekce, ani tak to nebude mít přesnost hodin.

Něco jde částečně ošetřit už v programu. Příklad jedné z možností - když napíšu

Kód: Vybrat vše

if b0>59 then let b1=b1+1 b0=0 endif	;minuty

tak někdy bude průchod rychlejší a někdy pomalejší podle rozhodnutí. Ale ono to jde napsat i takhle:

Kód: Vybrat vše

if b0>59 then let b1=b1+1 b0=0 else let b10=b10+1 b10=0 endif	;minuty
b10 se používá jen k tomu, aby se s ní prováděly stejné operace jako s tou proměnnou, která má reálný význam. Doba průchodu stále ještě nebude naprosto stejná a nezávislá na rozhodnutí, ale bude mnohem podobnější.
Petr087

Re: Jak udělat čas

Příspěvek od Petr087 »

Já bych to chtěl na řízení osvětlení na akvarko aby to přepínalo mezi nočním a denním svícením takže když mi to za měsíc udělá zpoždění třeba dvě minuty tak to vůbec nevadí. Teď tak brouzdám po internetu kvůli řešení jak zobrazit čas abych zabral co nejméně pinu. a našel jsem že by se dalo pomocí příkazu SEROUT posílat data na LCD. Je to možné? popřípadně jak moc je to náročné?
AlesH
Příspěvky: 323
Registrován: 25 úno 2013, 09:18

Re: Jak udělat čas

Příspěvek od AlesH »

Ano, vypisovat data na LCD pomocí "serout" jde, ale musíš si koupit LCD modul s vhodným sériovým rozhraním. Nejlevnější takové stojí zhruba 300 Kč. Osobně jsem ale nikdy takový modul neměl, takže konkrétní typ neznám.

Dosáhnout přesnost 2 minuty za měsíc nebude s PICAXE taková legrace, jak to vypadá, ale snad by se to mohlo podařit. Faktem ale je, že podobnou službu Ti udělají klasické "spínací hodiny", které se zapojují do zásuvky a dají se běžně koupit za méně než 200 Kč (i s vestavěným displejem).

Když ale píšeš, že to chceš na přepínání mezi denním a nočním svícením, tak mne napadá, že možná by bylo vhodnější použít nějaké "čidlo osvětlení" (fotoodpor nebo fototranzistor) a osvětlení ovládat ne podle času, ale podle toho jestli je venku opravdu světlo nebo tma.
micer
Příspěvky: 180
Registrován: 12 čer 2014, 19:14

Re: Jak udělat čas

Příspěvek od micer »

Zkus jakou dostaneš přesnost, ale nech si jeden vstupní pin volný. Bude to určitě přínosné pro další práci, dost se naučíš.

Orientačně: 2 minuty / měsíc = 120 s /měsíc = 4 s/den. To je chyba menší, než jakou dělají levné digitálky s krystalem, takže bych čelal spíš chybu 10x (nebo víc) větší. Nebo jinak - 4 s / den = 4 / (24*3600) = 4,6 e-5 ... to je chyba krystalového oscilátoru bez kompenzace a nastavení (výrobní tolerance krystalu). PICAXE má hodiny o jeden až dva řády méně přesné.

Proč jeden pin volný. Hodí se třeba ke snímání světla venku a řízení podle denních cyklů slunce. Dá se na něj použít modul vykuchaný z hodinek (dělá pulzy přesně po 1 s) a synchronizovat hodiny na tyto pulzy. Dá se na něj přivést kmitočet sítě (dnes už je mnohem přesnější než kdysi a je z dlouhodobého hlediska jemně upravovaný, aby byl přesně 50 Hz) a odvodit čas od toho (nebo ho předem vydělit 10 nebo 100, aby se to snadněji zpracovávalo). Dá se na něj připojit modul reálného času a číst si sériově předávaný přesný čas i s datem. Prostě se hodí, když (až) ti nebude vyhovovat vlastní přesnost PICAXE.

Sériový displej např. zde: http://www.snailshop.cz/97-seriove-rozhrani , doporučuji hned ten první
Odpovědět