Vyčítání dat z DS3232 (nebo DS1307) pořád dokola
Moderátor: Moderátoři
Záleží jak často děláme to srovnáníV tom případě se ale změna projeví až při nejbližším srovnání času a hranice. Když budu mít například nastaveno
Může být třeba v každém běhu hlavní smyčky (test má jen 11 cyklů)
a změna se projeví okamžitě.
Edit:
Ovšem, nefunguje to pozpátku.
Když mám nastaveno zapnutí na 11 hodin a v 10 hodin změním zapnutí na 9 hodin, tak nijak nereaguje, zapne se až v příští 9. hodině.
Ještě k tomu čtení z RTC bych viděl dvě další možnosti a to: Poprvé po restartu inicializovat z RTC a pak od aktivovaného výstupu z RTC v přerušení přičítat jedničku do čítače sekund, z toho lze jednoduše pomocí funkce time.h konvertovat na datum a čas. A nebo pokud se zařízení občas vypíná(např.jednou denně nebo týdně), tak po inicializaci z RTC přičítat sekundy podle hodin mcu(pak můžeš RTC napájení přes výstup mcu nebo FET úplně odpojit). Ono se to může trochu rozejít, ale pokud se to občas vypíná, tak se to vždy inicializuje(dělám to tak u cyclocomputeru).
Uz na prvej stranke som dal podmienku ako to jenoducho urobit, nechapem co tu este tak komplikovane riesite.
hotova vec http://youtu.be/WePF-IR5ed8 uz by to malo ist
Kód: Vybrat vše
//inicializacia vyp=22; zap=6;
//podmienka
if ((hod>vyp)|(hod<zap)) lcd_string("Displej OFF"); else lcd_string("Displej ON ");
hotova vec http://youtu.be/WePF-IR5ed8 uz by to malo ist
Naposledy upravil(a) Atlan dne 03 bře 2016, 16:39, celkem upraveno 2 x.
Program klidně dám, dyť to není nic tajného: ![Wink ;)](./images/smilies/icon_wink.gif)
A konkrétní zobrazování na displeji mám zde:
A zbytek kódu je zde: http://paste.ofcode.org/W9raRfxu6gxD4MFX7NbVuT
Jenom jsem tam nedával inicializaci. Snad je to aspoň trošku přehledné.
![Wink ;)](./images/smilies/icon_wink.gif)
A konkrétní zobrazování na displeji mám zde:
Kód: Vybrat vše
ISR (TIMER1_OVF_vect){
TCNT1 = 65535 - 250; //pro preruseni kazdych 1ms => (1ms/4us = 250)
//zobr_cas(hours, minutes, seconds, tecka);
PORT_BLANK ^= (1 << BLANK);
if (double_click == 1) //rezim nastaveni
{
nastaveni_hodin(); //zavola se funkce, ktera ridi nastaveni hodin
}
if ((double_click == 0) && (displej_off == 1)) //normalni rezim zobrazeni a displej bude zapnut stale
{
zobrazeni_casu(); //funkce, ktera zobrazi cas
}
if ((double_click == 0) && (displej_off == 0)) //rezim, kdy bude displej vypnut
{
zobr_vlastni(20,20,20,20,20,20); // na vsech digitech nezobrazi nic
}
}
Jenom jsem tam nedával inicializaci. Snad je to aspoň trošku přehledné.
Na jakém vyplém zařízení? Řešíme tu obecnou věc, jak nastavovat zapnutí nebo vypnutí v daném denním intervalu. A pokud chci reakci na změnu nastavení co možná nejdříve, tak způsob, který navrhnul AB1 nevyhoví.Jeejda píše: Z logiky věci, když chci něco nastavovat na vyplým zařízení, tak ho musím nejdřív zapnout, že…
Co mám zkušenosti se zákazníky, tak s přístupem "když jste si to jednou nastavili, nemůžete to zpětně změnit" by mě brzo vyfakovali.
Zařízení se zhasnutým displejem není vypnuté zařízení. Klidně si dovedu představit tlačítko, kterým se displej rozsvítí je-li zhasnut (variantní funkce některého tlačítka při zhasnutém displeji) a umožní změnu nastavení. Ta by se pak projevila při nejbližší změně času, tedy třeba do 1 minuty od nastavení.
Ad posouvání času dozadu - tak tohle to bylo opravdu zbytečné. Cílem je možnost kdykoliv zadat nové nastavení a jeho uplatnění co nejrychleji, a konkrétní příklad jsem, myslím, jasně popsal. Nikoliv revokovat historii.
Ad posouvání času dozadu - tak tohle to bylo opravdu zbytečné. Cílem je možnost kdykoliv zadat nové nastavení a jeho uplatnění co nejrychleji, a konkrétní příklad jsem, myslím, jasně popsal. Nikoliv revokovat historii.