Založen: Oct 30, 2010 Příspěvky: 6694 Bydliště: Praha
Zaslal: út únor 02 2021, 9:59 Předmět:
Zrovna toto závisí na programovacím jazyku naprosto minimálně. Zápisem do příslušných registrů nakonfiguruješ a spustíš timer a jeho příslušné přerušení, po odčasování si v přerušení nahodíš příznak a ten budeš testovat v hlavní smyčce. Pak existují takové ty způsoby, jako nechat procesor viset v nějakém cyklu, to je ale z principu blokující a tudíž nevhodná programátorská praktika. _________________ Krátce před tím, než se to rozbilo, tak to ještě fungovalo...
Založen: Dec 12, 2005 Příspěvky: 2305 Bydliště: SR, Poprad
Zaslal: út únor 02 2021, 11:38 Předmět:
mas niekolko moznosti.
kód:
if podmienka {
delay(oneskorenie);
nastav rele;
}
to ti ale zastavi beh programu na ten cas.
kód:
if podmienka {
premenna= aktualne milis+oneskorenie
}
if (premenna<=aktualne milis) {
nastav rele
}
Tu program bude bezat dalej
Alebo cez prerusenie, to uz ale z hlavy nedam. v principe si nastavis interny timer, a on ti po zadanom case spusti tvoju funkciu, kde nastavis rele.
V poslednom moze nastat problem, ak vyuzivas kniznice, ktore pouzivaju tiez timer.
Ja osobne pouzivam druhy sposob. program bezi a +- nejake milisekundy u mna nie su podstatne. _________________ No vidis, a tak si sa bal
1/ nastavíš čas a jméno funkce přerušení
MsTimer2::set(500, flash); // 500ms period
2/ nastartuješ, kdy potřebuješ
if (podminka) MsTimer2::start();
3/ po uplynutí arduino 'zavolá' funkci flash(), což je přerušení od časovače TCNT2. Použité proměnné uvnitř by měly být deklarovány jako volatile, pokud se k nim přistupuje i mimo funkci flash()
Založen: Nov 20, 2012 Příspěvky: 1453 Bydliště: Praha
Zaslal: st únor 03 2021, 12:38 Předmět:
bdn napsal(a):
Použité proměnné uvnitř by měly být deklarovány jako volatile, pokud se k nim přistupuje i mimo funkci flash()
Jenom malá poznámka. Deklarace proměnné jako "volatile" uvnitř funkce opravdu nemění její rozsah platnosti. Tj. k takové proměnné nelze přistupovat mimo funkci, ve které je deklarována.
Nenapsal jsi zda zpožděné sepnutí bude:
- vyvolané např. externím vstupem
- vyvolané nějakou událostí v programu nezávisle na vstupech
a zda "zpožděné sepnutí" znamená:
- čekat nějakou dobu, co nějaká událost trvá a pokud nezmizí tak teprve pak sepnout?
- nebo objeví se událost, kvůli které má být relé sepnuto a protože je událost mžiková, sepneme relé a prodloužíme jeho sepnutí na nějakou delší dobu?
Děkuji za reakce. A k popisu fungování zařízení:
Je aku 18650 na pin Arduina a po zapnutí, pokud nepadne napětí pod cca 3,67V, sepne po 15sec. jiný pin na 1sec. Zařízení je napájeno a nabíjeno z USB portu PC- zatím. Po vypnutí PC relé opět sepne na 1sec.
Ano zařízení je napájeno z PC vč. Arduina.V PC nabíhá OS a následně software. Zařízením je myšleno 3D brýle, které jsou krmeny 18650. Po vypnutí resp. ukončení programu pochopitelně musí vypnout brýle, než se ukončí OS - ano a potom už nejde nic.
A software při startu čeká cca10-15s na brejle tedy na jejich sepnutí jinak err.
Založen: Apr 18, 2011 Příspěvky: 236 Bydliště: Benešov (u Prahy)
Zaslal: čt únor 04 2021, 16:35 Předmět:
Časovače patří k mým oblíbeným periferiím. U arduina jsem ale několikrát narazil, protože ono pro svou potřebu nějaký ten timer používá. Dost dlouho jsem takto řešil podivné chování programu něco šlo právě na úkor toho, ale ně všechno se mi tím podařilo vysvětlit.
Pokud neni potřeba nějakou extra přesnost, dalo by se periodicky zjišťovat milis()
něco jako if milis()>=cas_akce .... Zejména pokud program nemá dělat nic jiného než právě toto.
Případně by se to dalo napsat v assembleru nebo v něčem bez použití knihoven arduina a pak to tam naloadovat přes bootloader (použít ten samý příkaz avrdude, jako používá arduino IDE ale hex soubor nahradit svým ostatní ponechat).
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2Další
Strana 1 z 2
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.