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 » 14 říj 2016, 07:23

No s tím modulem jsem experimentoval před dvěma roky a to ještě tento tutoriál napsaný nebyl. Fakt je že jsem měl nějaké cizojazyčné stránky, kde jsem textu moc nerozuměl a kod co tam měly nefungoval. Potom modul putoval do šuplíku a já využil běh času vnitřní hodiny arduina. Prozatím mi to fungovalo jakž takž tím myslím že 1-4 min za den se daly skousnout. Přemýšlel jsem o tom že bych udělal nějakou kompenzaci ale zatím jsem se k tomu nedostal. No a ted jsem modul opět vyhrabal ale právě ke zkušenostem z před dvou let k němu nejsem příliš optimistický a proto jsem se tě ptal zda s tím máš zkušenosti a zda to opravdu chodí.

jova
Příspěvky: 210
Registrován: 16 pro 2013, 11:40

Re: Hodiny a časování

Příspěvek od jova » 14 říj 2016, 07:49

Já ti moc nepomůžu, tyhle obvody používám ve spojení s PICAXE a fungují perfektně. Už jsem postavil s čipem DS3231 několik hodin a tam je odchylka v řádu sekund za měsíc.

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

Re: Hodiny a časování

Příspěvek od daton » 14 říj 2016, 08:27

Tedy doporučuješ raději koupit ds3231 ?

jova
Příspěvky: 210
Registrován: 16 pro 2013, 11:40

Re: Hodiny a časování

Příspěvek od jova » 14 říj 2016, 08:44

Takhle se to říct nedá. Oba obvody pracují stejně a pokud to rozchodíš s tím svým, není problém ho časem vyměnit za DS3231. Pro mě je důležitý rozdíl mezi těmito obvody v tom, že verze DS3231 má zabudovanou teplotní kompenzaci a pro hodiny na věž kdy pracují prakticky ve venkovním prostředí jsem ani jinou volbu neměl.
Mimochodem, kdyby jsi chtěl, právě jsem těch obvodů DS3231 koupil 10, jeden kus za cca 21kč. Není problém, abych ti jeden za tu cenu + poštovný poslal.

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 » 14 říj 2016, 10:15

Jak jsem psal, používám ty obvody na různých místech, nejčastěji je zálohuji nějakým kondenzátorem a fungují všechny hodně podobně, až bych řekl že stejně.
Liší se spotřebou kterou mají když jsou bez napájení, liší se způsobem jak se připojuje "backup battery" a liší se jakou mají kompenzaci pro okolní děje (teplota, vlhkost,...)
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 » 14 říj 2016, 11:41

A ještě dotaz, ted se to vztahuje k arduinu, v článku jsem se dočetl, že se zadá čas do programu a ten se nahraje a následně musí přehrát bez tohoto řádku který tam ten čas vkládá

Kód: Vybrat vše

Wire.write(0); // set DS3231 register pointer to 00h
Trochu o tom přemýšlím a řekl bych že to musí dělat docela problém když se potom z nějakého důvodu ten modul zastaví (např baterka) tak se musí znovu programovat že?
Já jsem právě chtěl udělat na arduinu ze dvou digi pinů tlačítka, jedno na min a druhé no hod něco jako bývá na hodinách v autě. Tam by to ale byl problém protože čas tedy generuje přímo ten obvod. Jak tento problem řešíte at už u picaxe nebo arduina?

jova
Příspěvky: 210
Registrován: 16 pro 2013, 11:40

Re: Hodiny a časování

Příspěvek od jova » 14 říj 2016, 12:46

Ta baterka je tam jen z důvodu, aby vše zálohovala když je obvod bez napájení, jinak by se vybíjet neměla.
Do toho obvodu můžeš nahrávat nebo z něho číst data která potřebuješ. Takže pokud potřebuješ např. změnit jen tu jednu minutu, dáš odkaz na tlačítko po jehož stisknutí se provede přičtení +1 minuta k reálné minutě (to je ta kterou jsi si právě načetl) a provedeš zápis té upravené minuty. Tím se ti další minuta načte už změněná.
Trochu jsem to probíral zde: viewtopic.php?f=14&t=327

Pak je tam ještě problém s tím, že ten obvod komunikuje v BCD soustavě a je to třeba převádět na desítkovou. To jsem probíral zde: viewtopic.php?f=14&t=421


Takhle nějak to vypadalo v cvičném programu. Funkce je ale bez záruky, narychlo jsem jen něco vytáhl z PC a ani už nevím zda je to jako celek funkční.
setfreq m4
symbol baud=N4800
pullup %0001110000000000 ;zapne rezistory na C2,C3,C4 kvůli tlačítkům

serout C.1, baud, (254,1) ;maže LCD
let b10=0

symbol seconds = b0
symbol mins = b1
symbol hour = b2
symbol day = b3
symbol date = b4
symbol month = b5
symbol year = b6
symbol control = b7

;jednorázové naprogramování času, datumu.. provede se pouze jednou při prvním zapojení obvodu RTC

;i2cslave %11010000, i2cslow, i2cbyte
;let day = $3 ; den v týdnu
;let year = $16 ; rok
;let month = $3 ; měsíc
;let date = $3 ; den
;let hour = $10 ; hodiny
;let mins = $49 ; minuty
;let seconds = $0 ; sekundy

;writei2c 14, ($0) ' DS3231 turn on $0 1hz pin3, turn off $4
;writei2c 0,(seconds,mins,hour,day,date,month,year,control)


;----- načtení času -----
start:
gosub lcd
if pinc.3=0 then start ;ošetření tlačítek
if pinc.4=0 then start ;ošetření tlačítek

cas:
if pinc.3=0 then minplus ;tlačítko co minutu přidá
if pinc.4=0 then minminus ;tlačítko co minutu ubere

i2cslave %11010000, i2cslow, i2cbyte ;načtení času z RTC
readi2c 0,(seconds,mins,hour,day,date,month,year)
gosub lcd
goto cas

; přepočet z BCB na desítky
lcd:
let b20=b0 ;přepočet sekundy
let b20=b20/16*10
let b0 = b0//16+b20
let b21=b1 ;přepočet minuty
let b21=b21/16*10
let b1 = b1//16+b21
let b22=b2 ;přepočet hodiny
let b22=b22/16*10
let b2 = b2//16+b22
let b23=b3 ;přepočet dny v týdnu
let b23=b23/16*10
let b3 = b3//16+b23
let b24=b4 ;přepočet dny
let b24=b24/16*10
let b4 = b4//16+b24
let b25=b5 ;přepočet měsíce
let b25=b25/16*10
let b5 = b5//16+b25
let b26=b6 ;přepočet rok
let b26=b26/16*10
let b6 = b6//16+b26

; výpis času na LCD
if b4<10 then serout C.1, baud, (254,128) serout C.1, baud, ("0",#b4,".")endif
if b4>9 then serout C.1, baud, (254,128) serout C.1, baud, (#b4,".")endif
if b5<10 then serout C.1, baud, (254,131) serout C.1, baud, ("0",#b5,".")endif
if b5>9 then serout C.1, baud, (254,131) serout C.1, baud, (#b5,".")endif
serout C.1, baud, (254,134) serout C.1, baud, ("20",#b6)

serout c.1, baud, (254,139) ;den v týdnu
if b3 = 0 then serout c.1, baud, ("Po")endif
if b3 = 1 then serout c.1, baud, ("Ut")endif
if b3 = 2 then serout c.1, baud, ("St")endif
if b3 = 3 then serout c.1, baud, ("Ct")endif
if b3 = 4 then serout c.1, baud, ("Pa")endif
if b3 = 5 then serout c.1, baud, ("So")endif
if b3 = 6 then serout c.1, baud, ("Ne")endif

serout c.1, baud, (254,142)
if b21<10 then serout C.1, baud, (254,142) serout C.1, baud, ("0",#b1,":")endif
if b21>9 then serout C.1, baud, (254,142) serout C.1, baud, (#b1,":")endif

if b2<10 then serout C.1, baud, (254,148) serout C.1, baud, ("0",#b2,":")endif
if b2>9 then serout C.1, baud, (254,148) serout C.1, baud, (#b2,":")endif
if b1<10 then serout C.1, baud, (254,151) serout C.1, baud, ("0",#b1,":")endif
if b1>9 then serout C.1, baud, (254,151) serout C.1, baud, (#b1,":")endif
if b0<10 then serout C.1, baud, (254,154) serout C.1, baud, ("0",#b0)endif
if b0>9 then serout C.1, baud, (254,154) serout C.1, baud, (#b0)endif
return

;------nastavení hodin-----
minplus:
let b1=b1+1
if b1=60 then:b1=0:b2=b2+1 end if ;překročení hodiny
if b2=24 then : b2=0 end if ;překročení půlnoci
gosub lcd
goto zapiscasu

minminus:
let b1=b1-1
if b1<0 then:b1=0:b2=b2-1 end if ;překročení O hodin
if b2<0 then : b2=23 end if ;překročení půlnoci
gosub lcd
goto zapiscasu

zapiscasu:
if b1>14 then : b1=b1+12 endif
gosub lcd
if pinc.3=0 then zapiscasu
if pinc.4=0 then zapiscasu

gosub lcd
i2cslave %11010000, i2cslow, i2cbyte
let seconds = $59
let mins = b1
let hour = b2
writei2c 14, ($0) ' DS3231 turn on $0 1hz pin3, turn off $4
writei2c 0,(seconds,mins,hour)

goto start

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 » 14 říj 2016, 13:34

daton píše:Trochu o tom přemýšlím a řekl bych že to musí dělat docela problém když se potom z nějakého důvodu ten modul zastaví (např baterka) tak se musí znovu programovat že?
Ty obvody v nějakém konkrétním bitu píšou, jestli mají správný čas a nebo jim došla baterka a je potřeba je nastavit.
daton píše:Já jsem právě chtěl udělat na arduinu ze dvou digi pinů tlačítka, jedno na min a druhé no hod něco jako bývá na hodinách v autě. Tam by to ale byl problém protože čas tedy generuje přímo ten obvod. Jak tento problem řešíte at už u picaxe nebo arduina?
Problém řešíme různě, podle toho, jaký zdroj času si můžeš dovolit. Například TENTO projekt má tolik tlačítek, že si můžeš posouvat hodiny dopředu a dozadu jak se ti líbí.
Ty zase máš k dispozici internet, tak jestli nestojí za úvahu ho naučit RFC5905, nebo alespoň RFC958 na stahování NTP času z netu.
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 » 14 říj 2016, 15:13

Re Jova Teda moc hezky napsaný kod ... to se pozná pečlivý přístup, to já bych se měl asi stydět. Super s picaxema si taky hraji tak to zkusím nevíš náhodou na co to bylo psané na jaký čip? 08m2 to určitě nebyl tam by si chyběly nožičky.

Re Fulda jo tak internet tam určitě je přes W5100 sheild ale problém je že ač mi to zde už naznačovaly ostatní zatím jsem nepochopil princip přijmu ´těch formátů. Má to nějakou knihovnu nebo jak se to láme z toho modulu do arduina? Napsat něco na web server umím ale přečíst si něco z netu zatím neumím máš nějaký vyzkoušený návod či postup jak to co nejjednodušeji udělat? Zkoušel jsi to už?

jova
Příspěvky: 210
Registrován: 16 pro 2013, 11:40

Re: Hodiny a časování

Příspěvek od jova » 14 říj 2016, 15:33

Tohle je jen ukázka programu z nějaké ranné fáze vývoje. Je to tuším psané na čip 20M2. Bohužel řada M2 neumí převádět ten BCD kód a tak jsem už dávno přešel na řadu X2. Tam pak využívám příkaz „bcdtobin a bintobcd“ a nemusí se to tak složitě matematicky převádět.

Odpovědět

Kdo je online

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