Vyčítání dat z DS3232 (nebo DS1307) pořád dokola

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
jirka89
Příspěvky: 271
Registrován: 24 úno 2006, 01:00
Bydliště: Zlín

Vyčítání dat z DS3232 (nebo DS1307) pořád dokola

#1 Příspěvek 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?

termit256
Příspěvky: 10071
Registrován: 06 pro 2007, 01:00

#2 Příspěvek od termit256 »

Muzes kolikrat chces. Jen zapis bude limitovan pokud je tam eeprom. Jestli je tam fram, muzes i zapisovat kolikrat chces (vicemene)

Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 01:00
Bydliště: Praha

#3 Příspěvek 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.

Uživatelský avatar
jirka89
Příspěvky: 271
Registrován: 24 úno 2006, 01:00
Bydliště: Zlín

#4 Příspěvek 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.

Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 01:00
Bydliště: Praha

#5 Příspěvek od FHonza »

DS3232 má SRAM, počet zápisů není omezen. Adresy 14h–0FFh jsou volně k použití

Uživatelský avatar
jirka89
Příspěvky: 271
Registrován: 24 úno 2006, 01:00
Bydliště: Zlín

#6 Příspěvek 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.

termit256
Příspěvky: 10071
Registrován: 06 pro 2007, 01:00

#7 Příspěvek 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.

Uživatelský avatar
jirka89
Příspěvky: 271
Registrován: 24 úno 2006, 01:00
Bydliště: Zlín

#8 Příspěvek 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. :D

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í. :-D

Kód: Vybrat vše

if ((setup == 1) && (hodiny >= vypni_displej) && (hodiny <= zapni_displej))
				displej_off = 0;	//vypnuto
			else
				displej_off = 1;	//zapnuto

Uživatelský avatar
Atlan
Příspěvky: 4499
Registrován: 10 kvě 2004, 02:00
Bydliště: Košice

#9 Příspěvek od Atlan »

Prevo tam mas & a nie alebo? Ak je cas vecsi alebo mensi vypni displej

Uživatelský avatar
jirka89
Příspěvky: 271
Registrován: 24 úno 2006, 01:00
Bydliště: Zlín

#10 Příspěvek 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]

Uživatelský avatar
jirka89
Příspěvky: 271
Registrován: 24 úno 2006, 01:00
Bydliště: Zlín

#11 Příspěvek 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.

Uživatelský avatar
Atlan
Příspěvky: 4499
Registrován: 10 kvě 2004, 02:00
Bydliště: Košice

#12 Příspěvek od Atlan »

If (hod>vyphod)|(hod<zaphod) dispoff else dispon;
20>22. 3<6

Uživatelský avatar
jirka89
Příspěvky: 271
Registrován: 24 úno 2006, 01:00
Bydliště: Zlín

#13 Příspěvek 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í:
  • 00h až 12h
    12h až 23h
Jest tak, nebo je to opět jinak? [/list][/code]

Uživatelský avatar
mtajovsky
Příspěvky: 3694
Registrován: 19 zář 2007, 02:00
Bydliště: Praha

#14 Příspěvek 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();
    }
}

Uživatelský avatar
AB1
Příspěvky: 312
Registrován: 23 lis 2009, 01:00

#15 Příspěvek 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

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“