Stránka 1 z 4
Ošetření tlačítka v přerušení
Napsal: 03 bře 2020, 09:43
od Dene Elanik
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
Re: Ošetření tlačítka v přerušení
Napsal: 03 bře 2020, 11:23
od gilhad
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
Re: Ošetření tlačítka v přerušení
Napsal: 03 bře 2020, 14:21
od Hanz
zdravím, zákmity tlačítka jsem řešil zde na foru
je tam odkaz + moje video s IO40106
snad se dají koupit i bezzákmitové tlačítka, ale nepátra jsem.
Re: Ošetření tlačítka v přerušení
Napsal: 03 bře 2020, 15:48
od Dene Elanik
Dotaz byl na programové ošetření
Re: Ošetření tlačítka v přerušení
Napsal: 03 bře 2020, 16:12
od kiRRow
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í
Napsal: 03 bře 2020, 19:04
od ondraN
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.
Re: Ošetření tlačítka v přerušení
Napsal: 03 bře 2020, 19:38
od Dene Elanik
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ě.
Re: Ošetření tlačítka v přerušení
Napsal: 03 bře 2020, 19:56
od Dene Elanik
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...
Re: Ošetření tlačítka v přerušení
Napsal: 04 bře 2020, 16:33
od kiRRow
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.
Re: Ošetření tlačítka v přerušení
Napsal: 04 bře 2020, 18:02
od Dene Elanik
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ě