Pomoc s výpočtem u hodin

Odpovědět
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Pomoc s výpočtem u hodin

Příspěvek od jova »

Zdravím,
snažím se naprogramovat pohon hodin a stále to není podle představ. Zdroj času je brán z obvodu RTC proměnné - hodiny b2, minuty b1.
Vlastní hodiny jsou poháněné krokovým motorem, a pro hodiny je tam pomocná proměnná b16, pro minuty b15
Je to zatím vymyšleno takto:
Pokud je rovnost proměnných b2 a b16 současně s b1 a b15, motor stojí.
Pokud se zvětší o 1 proměnná b1 (na RTC je o 1 minutu více), otočí se motor o 1 minutu, připočte se k b15 +1, opět se to tím srovná a motor se zastaví.
Pokud se vypne proud a hodiny se zastaví, uloží se proměnné b16 a b15. V okamžiku kdy se proud obnoví se porovná, zda jsou proměnné z RTC větší nebo menší než uložené proměnné b16, b15 a motor začne krokovat vpřed nebo vzad tak, aby se to opět srovnalo. Až potud je to vše v pořádku.
S čím bych ale potřeboval pomoct, je přechod přes 12tku. Protože pokud se hodiny zastaví např v 11:00 a zapnou v 1:00 , stačilo by aby odkrokovali 2 hodiny vpřed a ne těch 10 hodin vzad jak mi to dělají doposud. Nezkoušel jste už někdo něco takového, nebo nevíte co s tím? Nějak s tím nemohu hnout.
Vladimir66
Příspěvky: 385
Registrován: 02 dub 2014, 15:30

Re: Pomoc s výpočtem u hodin

Příspěvek od Vladimir66 »

ahoj,
zkusil bych pricist k tem aktualnim hodinam jeste plus 12. takze pak porovnas dva vysledky a budes otacet smerem, kde je vysledek mensi nez sest.
v tvem pripade 13-11=2 cili o dve hodiny vpred. 1-11 = -10 , to je 10 hodin vzad, (vice nez 6) takze pouzijes prvni korekci.
neco v tomto duchu. pokud jsem pochopil tvuj dotaz.
-V66
Vladimir66
Příspěvky: 385
Registrován: 02 dub 2014, 15:30

Re: Pomoc s výpočtem u hodin

Příspěvek od Vladimir66 »

ono vlastne staci jen porovnat tvuj vysledek s hodnotou 6. pokud je tedy vysledek korekce 10hodin (coz je vice nez sest), tak odecti cislo 12 - 10 = 2 a o tolik dorovnej DOPREDU. pokud je vysledek pro korekci 6 a mene, tak dorovnas DOZADU.
nemusis delat dva vypocty, staci porovnani.
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: Pomoc s výpočtem u hodin

Příspěvek od jova »

Takhle nějak jsem to už dneska taky zkoušel, ale moc se nedaří právě při přechodu té 12té.
Ono i tomu normálnímu kroku jsem musel předřadit tyhle dva řádky aby to správně počítalo přes půlnoc a poledne.

Kód: Vybrat vše

if b2=0 and b16=11  then dopocitej	;přechod přes půlnoc
if b2=12 and b16=11  then dopocitej	;přechod přes poledne
Ten krok mám zatím takto:

Kód: Vybrat vše

if b17<b16 then : b29=b16-b17 : goto odpocitej end if
if b17>b16 then: b29=b17-b16 : goto dopocitej end if

if b1<b15 then : b29=b15-b1 : goto odpocitej end if
if b1>b15 then: b29=b1-b15 : goto dopocitej end if
*b29 je pomocná proměnná která se ukládá při výpadku proudu
daton
Příspěvky: 664
Registrován: 16 bře 2013, 16:12

Re: Pomoc s výpočtem u hodin

Příspěvek od daton »

Myslim že varianta s dopočitavanim 12 je lepší a testovani velikosti do 22 vcetne.
daton
Příspěvky: 664
Registrován: 16 bře 2013, 16:12

Re: Pomoc s výpočtem u hodin

Příspěvek od daton »

Jo a přřičítani 12použít vždy když při normalnim součtu vyjde zaporna jodnota ale to je uz jasne :D
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: Pomoc s výpočtem u hodin

Příspěvek od jova »

Tak jsem se po ránu zamyslel a dal to dohromady zhruba následovně:

Kód: Vybrat vše

RTC - čas
ciferník - cif

if čas > cif then  x = čas - cif 
if x > 6 then cif krok vpřed 
if x < 5 then cif krok vzad 

if čas < cif then  y =  cif - čas
if y > 6 then cif krok vzad 
if y < 5 then cif krok vpřed
Ještě jsou tam k tomu samozřejmě ty přechody přes poledne a půlnoc, ale zdá se že to bude funkční. Všem dík.
Uživatelský avatar
jrt
Příspěvky: 1921
Registrován: 17 úno 2013, 17:13

Re: Pomoc s výpočtem u hodin

Příspěvek od jrt »

Tak se nezapomeň pochlubit hotovým a odladěným fragmentem programu, třeba tím někomu ušetříš práci, případně ho inspiruješ.
jrt
jova
Příspěvky: 361
Registrován: 16 pro 2013, 11:40

Re: Pomoc s výpočtem u hodin

Příspěvek od jova »

Hotový kousek programu asi nikomu nic neřekne:

Kód: Vybrat vše

hodiny:
let b17=hour
if b17>11 then : b17=b17-12 end if
if hour=0 and b16=11  then dopocitej	;přechod přes půlnoc
if hour=12 and b16=11  then dopocitej	;přechod přes poledne
if b17=b16 and mins=b15 then return end if	;při shodnosti času konec
if b16>b17 then : b18=b16-b17 : goto vice end if
if b16<b17 then : b19=b17-b16 : goto mene end if
if mins<b15 then  goto odpocitej 
if mins>b15 then  goto dopocitej 
return
vice:
if b18>6 then goto dopocitej 
if b18<5 then goto odpocitej 
mene:
if b19<6 then goto dopocitej 
if b19>5 then goto odpocitej 
Podle mě je výhodnější ten předešlý obecný tvar. Tady jsou už symboly a proměnná b17 která převádí 24hodinový cyklus na 12tihodinový.
Odpovědět