Ošetření tlačítka v přerušení
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
-
- Příspěvky: 67
- Registrován: 29 led 2020, 20:15
- Reputation: 0
Ošetření tlačítka v přerušení
Spouštím externí přerušení pomocí tlačítka, ale potýkám se se zákmity.
Delay ani millis v přerušení nefungují, dá se to nějak programově ošetřit?
Dík
Delay ani millis v přerušení nefungují, dá se to nějak programově ošetřit?
Dík
Re: Ošetření tlačítka v přerušení
millis by se mely dat cist, jen se behem preruseni nemeni, ale test jestli ubehnul debounc nebo ne by fungovat mel (samozrejme nesmis cekat ve smycce na jeho konec)
Mnohem lepsi ovsem je osetrit ty zakmity venku hardwarove, at uz jednoduchym RC clenem, nebo treba pomoci 555
Mnohem lepsi ovsem je osetrit ty zakmity venku hardwarove, at uz jednoduchym RC clenem, nebo treba pomoci 555
Re: Ošetření tlačítka v přerušení
zdravím, zákmity tlačítka jsem řešil zde na foru
snad se dají koupit i bezzákmitové tlačítka, ale nepátra jsem.
je tam odkaz + moje video s IO40106
snad se dají koupit i bezzákmitové tlačítka, ale nepátra jsem.
-
- Příspěvky: 67
- Registrován: 29 led 2020, 20:15
- Reputation: 0
Re: Ošetření tlačítka v přerušení
Dotaz byl na programové ošetření
Re: Ošetření tlačítka v přerušení
Ve funkci, která je vykonávána při přerušení zakážeš přerušení a uložíš si čas, kdy jsi toto provedl. V loopu pak budeš testovat jestli millis()-tenČas >= časIgnoracePřerušení a pokud ano, přerušení zase povolíš.
Re: Ošetření tlačítka v přerušení
Buď jak píše kiRRow, nebo to jde udělat automaticky ve dvou krocích. V proceduře přerušení od tlačítka si vyřešíš, co potřebuješ a spustíš si timer (třeba timer2) na nastavený čas pro odstup stisků. A v proceduře přerušení od toho timeru si vynuluješ registr přerušení od tlačítka a povolíš od něj přerušení. Tím to celé půjde na pozadí a netřeba to nějak řešit v programu.
-
- Příspěvky: 67
- Registrován: 29 led 2020, 20:15
- Reputation: 0
Re: Ošetření tlačítka v přerušení
Narážím na jiný problém, ošetřil jsem tlačítko dle kirrowa, přidal jsem ještě RC filtr, funguje to, ale...
Posílám stav tlačítka bezdrátově přes vysílač / přijímač RFM23BP. Pokud aktivuji přerušení pomalu (řádově 1 stisk za sekundu), je vše OK.
Pokud je aktivace přerušení častější nebo jsou dva po sobě rychlejší, program se kousne a pomůže jenom reset. Pro přenos používám knihovnu RadioHead. Když ji vyřadím a přerušení kontroluji na monitoru, zase ok. Jestli není problém v té knihovně.
Posílám stav tlačítka bezdrátově přes vysílač / přijímač RFM23BP. Pokud aktivuji přerušení pomalu (řádově 1 stisk za sekundu), je vše OK.
Pokud je aktivace přerušení častější nebo jsou dva po sobě rychlejší, program se kousne a pomůže jenom reset. Pro přenos používám knihovnu RadioHead. Když ji vyřadím a přerušení kontroluji na monitoru, zase ok. Jestli není problém v té knihovně.
-
- Příspěvky: 67
- Registrován: 29 led 2020, 20:15
- Reputation: 0
Re: Ošetření tlačítka v přerušení
Ještě upřesním, zjistil jsem, že kolaps programu ani tak nezávisí na četnosti přerušení, ale na tom, zda dojde k přenosu nebo ne.
Vypadá to opravdu na problém s knihovnou. Tady asi nic nevyřešíme. Ale co kdyby...
Vypadá to opravdu na problém s knihovnou. Tady asi nic nevyřešíme. Ale co kdyby...
Re: Ošetření tlačítka v přerušení
Prozkoumal bych technické parametry ono vysílače. Důležitý je odběr proudu v klidu a taky odběr proudu při vysílání - ten totiž dost často u vysílačů umí špičkově vyskočit i o několik řádu. Takovýto zvýšený odběr velmi snadno zakymácí s napájením procesoru a ten se pak zasekne.
Řešení : co nejblíže napájecím nožičkám onoho vysílače umístit kondenzátor s dostatečnou kapacitou, který zvládne zvýšený odběr krátkodobě pokrýt, nebo pokud to nepomůže, tak napájení vysílače samostatným zdrojem.
Řešení : co nejblíže napájecím nožičkám onoho vysílače umístit kondenzátor s dostatečnou kapacitou, který zvládne zvýšený odběr krátkodobě pokrýt, nebo pokud to nepomůže, tak napájení vysílače samostatným zdrojem.
-
- Příspěvky: 67
- Registrován: 29 led 2020, 20:15
- Reputation: 0
Re: Ošetření tlačítka v přerušení
Už jsem program ořezal úplně na kost:
žádný vysílač, pouze externí přerušení,
tlačítkem spouštím externí přerušení a to tak, aby reagovalo na změnu (CHANGE),
pokud je náběžná hrana, vypíše na monitor text "náběžná"
pokud je sestupná hrana, vypíše "sestupná"
stav tlačítka pro jistotu ještě kontroluji paralelně připojeným vstupem a ten testuji na stav (v loopu);
v přerušovací smyčce vypínám přerušení, nastavuji flag, abych věděl, že došlo k přerušení a v loopu ho testuji a shazuji.
Výsledek: občas se nespustí přerušení (nevypíše text) zcela nepravidelně jednou náběžnou hranou, pak někdy zase sestupnou.
Není to moc často, ale je to nepravidelné a tím nespolehlivé
Doufám, že jsem to vysvětlil dostatečně zmateně.
Jednodušeji: občas nezabere přerušení a je jedno, jestli ho aktivuji rychle nebo pomalu, nástupně nebo sestupně
žádný vysílač, pouze externí přerušení,
tlačítkem spouštím externí přerušení a to tak, aby reagovalo na změnu (CHANGE),
pokud je náběžná hrana, vypíše na monitor text "náběžná"
pokud je sestupná hrana, vypíše "sestupná"
stav tlačítka pro jistotu ještě kontroluji paralelně připojeným vstupem a ten testuji na stav (v loopu);
v přerušovací smyčce vypínám přerušení, nastavuji flag, abych věděl, že došlo k přerušení a v loopu ho testuji a shazuji.
Výsledek: občas se nespustí přerušení (nevypíše text) zcela nepravidelně jednou náběžnou hranou, pak někdy zase sestupnou.
Není to moc často, ale je to nepravidelné a tím nespolehlivé
Doufám, že jsem to vysvětlil dostatečně zmateně.
Jednodušeji: občas nezabere přerušení a je jedno, jestli ho aktivuji rychle nebo pomalu, nástupně nebo sestupně
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 19 hostů