Stránka 1 z 2
Vyčítání dat z DS3232 (nebo DS1307) pořád dokola
Napsal: 25 úno 2016, 10:58
od jirka89
Zdravím Vás přátelé,
Mám jeden dotaz, na který jsem nikde nenašel odpověď, tak to zkusím zde.
Jsou obvody RTC (např. přímo DS3232) nějak limitované výpisem po I2C? Pro upřesnění, můžu se ho pořád dokola dotazovat na čas, datum,.... třeba v nekonečné smyčce, nebo bych se měl dotazovat jednou za sekundu?
Nebo se dotázat jednou při inicializaci a pak ho nechat být?
Napsal: 25 úno 2016, 12:13
od termit256
Muzes kolikrat chces. Jen zapis bude limitovan pokud je tam eeprom. Jestli je tam fram, muzes i zapisovat kolikrat chces (vicemene)
Napsal: 25 úno 2016, 12:14
od FHonza
Dotazovat se lze určitě pořád dokola (max. frekvence na I²C je 400kHz), jenom mě to přijde zbytečný. Jestli u DS3232 nebudeš používat alarm, tak si nastav na pinu INT/SQW výstup 1Hz, použij ho pro přerušení v MCU a v něm čti aktuální údaje.
Napsal: 25 úno 2016, 12:17
od jirka89
Přesně jak píšeš. Dotazovat na data se budu v přerušení od externího pinu, jednou za sekundu. Ale nebyl jsem si moc jistý.
Zápis do DS3232 bude jednou za čas. Takže nic velkýho.
Napsal: 25 úno 2016, 12:22
od FHonza
DS3232 má SRAM, počet zápisů není omezen. Adresy 14h–0FFh jsou volně k použití
Napsal: 25 úno 2016, 12:26
od jirka89
Stavím si easy hodiny zálohované DS3232. S tím, že k přesnému nastavení použiju buť DCF nebo ESP8266 v režimu NTP.
Ale to se ještě rozmyslím. Takže data v obvodu DS3232 se aktualizují jedině, pokud se budou lišit minuty nebo hodiny od dat získané z DCF nebo ESP.
Což bude podle mého odhadu jednou za uherský rok.
Napsal: 25 úno 2016, 16:01
od termit256
S presnosti bych si nelamal hlavu. Je tam TCXO, ja mam podobny obvod od maximu a ulitava to za rok o par sekund. Je tam registr do ktereho se da nahrat korekce rychlosti oscilatoru, tim se da pomerne pekne vychytat presnost. Nejprve jsem uvazoval ze to povesim na GPS, ale nakonec jsem se na to vyprdnul.
Napsal: 28 úno 2016, 11:25
od jirka89
A abych nezakládal nové téma, zkusím se zeptat tady. Hodiny už mám hotové. LCD displej jede jak má, ale chtěl jsem si přidat a vypínání displeje v nějakém časovém rozmezí.
A tento triviální problém se mi nedaří vyřešit.
Jde o to, že se mi nyní displej vypíná pouze od hodnot 00h do třeba 07h. Ale když zadám rozmezí 23h až 07, tak se nevypne. Je to proto, že mám blbě podmínku, ale nenapadá mě, jak ji upravit, aby to fungovalo. Třeba mi někdo tady napoví.
Kód: Vybrat vše
if ((setup == 1) && (hodiny >= vypni_displej) && (hodiny <= zapni_displej))
displej_off = 0; //vypnuto
else
displej_off = 1; //zapnuto
Napsal: 28 úno 2016, 11:40
od Atlan
Prevo tam mas & a nie alebo? Ak je cas vecsi alebo mensi vypni displej
Napsal: 28 úno 2016, 11:50
od jirka89
Ano, ale když dám "vypni_displej = 23",
tak podmínka hodiny>=vypni_displej už nebude splněná, protože nastavím třebo hodiny na 3 ranní.
Potom podmínka bude:
Kód: Vybrat vše
if ((1== 1) && (3>= 23) && (3 <= 6))
a displej bude svítit stále, protože druhá podmínka není splněna.[/code]
Napsal: 28 úno 2016, 12:24
od jirka89
ee. Displeji normálně kilnu napájení pomocí tranzistoru. Takže nejde ani o typ, protože displej tam nakonec bude úplně jiný a taky bych rád vypínal i jiné věci v časovém rozsahu, nejen displej.
Napsal: 28 úno 2016, 13:00
od Atlan
If (hod>vyphod)|(hod<zaphod) dispoff else dispon;
20>22. 3<6
Napsal: 28 úno 2016, 15:42
od jirka89
Tak jsem to zkusil ale nefunguje....
A ano, asi se na to špatně dívám. Takže kdybych to bral po časové ose, tak musím brát potom podmínky v rozmezí:
Jest tak, nebo je to opět jinak? [/list][/code]
Napsal: 28 úno 2016, 18:55
od mtajovsky
IMHO stačí jednoduchá podmínka:
Kód: Vybrat vše
if(dolni_mez < horni_mez) // meze nejsou pres pulnoc
{
if(cas > dolni_mez && cas < horni_mez) // jsme v rozmezi ?
{
vypni_displej();
}
else
{
zapni_displej();
}
}
else // meze jsou pres pulnoc
{
if(cas > dolni_mez || cas < horni_mez) // dolni mez - pulnoc nebo 0 - horni mez
{
vypni_displej();
}
else
{
zapni_displej();
}
}
Napsal: 01 bře 2016, 04:32
od AB1
Možná by stačilo
Kód: Vybrat vše
if (hodiny == vypni_displej)
displej_off = 0; //vypnuto
if (hodiny == zapni_displej)
displej_off = 1; //zapnuto