Je možné v jednom skeči použiť dve preušenia?
Moderátor: Moderátori
Je možné v jednom skeči použiť dve preušenia?
Zdravím,chcel by som sa spýtať či je možné v jednom skeči použiť,a keď áno,tak ako, dve prerušenia.Ja som to skúšal s dvomi prerušeniami tak,že v jednom bol RISING a v druhom FALLING.Fungovalo to tak,že došlo k prerušeniu len pri FALLING.Keď som okomentoval prerušenie s FALLING,tak prerušenie s RISING normálne fungovalo.
Ďakujem za odpoveď
boro
Ďakujem za odpoveď
boro
0
-
- Ultimate člen
- Príspevky: 2582
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Re: Je možné v jednom skeči použiť dve preušenia?
Samozrejme v jednom programe môže byť, a bežne je viacero prerušení. Jeden vstup ale môže byť iba v jednej konfigurácii.
Pozeral som aj zdrojáky Arduino AVR Core, tak tieto mikrokontroléry obvykle podporujú iba jeden režim na všetky vstupy. Ak by ste niekedy riešili iné dosky, nemusí to platiť pre všetky.
Pozeral som aj zdrojáky Arduino AVR Core, tak tieto mikrokontroléry obvykle podporujú iba jeden režim na všetky vstupy. Ak by ste niekedy riešili iné dosky, nemusí to platiť pre všetky.
0
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Je možné v jednom skeči použiť dve preušenia?
Ťažko veštiť na čo sa pýtaš. Ak chceš aby sa reagovalo aj na nábežnú aj na dobežnú hranu u prerušení na vstupoch INT0 alebo INT1 tak použi mód CHANGE
https://www.arduino.cc/reference/en/lan ... interrupt/
Z pohľadu CPU je to brané ako jeden zdroj prerušenia, nie dva. Iba vzniká pri dvoch rôznych udalostiach.
https://www.arduino.cc/reference/en/lan ... interrupt/
Z pohľadu CPU je to brané ako jeden zdroj prerušenia, nie dva. Iba vzniká pri dvoch rôznych udalostiach.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
Re: Je možné v jednom skeči použiť dve preušenia?
Zdravím.Je mi to už jasné.Ďakujem pekne za odpovede.Mal by som ešte jednu otázku.Pri stlačení tlačítka dochádza k mnonásobnému prerušeniu.Pripojil som ku kontaktom rôzne kondenzátory od 220n po 2uF styroflex a nič to nepomohlo.Čo by mohlo pomôcť?
boro
boro
0
Re: Je možné v jednom skeči použiť dve preušenia?
Daj aj, ako to máš zapojené: spínač, kondenzátor, rezistory.
0
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Je možné v jednom skeči použiť dve preušenia?
Kondenzátory a rezistory sú zbytočnosti. Zapni si na tom vstupe interný rezistor pullup. Ostatné sa rieši v sw. V tomto konkrétnom prípade asi pomocou millis(). Predpokladám že chceš ošetriť tlačítko voči zákmitom. Tak hľadaj arduino debounce. Tí čo to riešia kondenzátorom ani nepozeraj, aj tak to má polovica internetu blbo.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
Re: Je možné v jednom skeči použiť dve preušenia?
ja zakmity riešim v C takto
Kód: Vybrať všetko
uint8_t zakmitTlac(void)
{
uint8_t a,b;
do
{
a=RB2;
__delay_ms(10);
b=RB2;
}
while(a!=b);
return a;
}
0
- mclareniak
- Zaslúžilý člen
- Príspevky: 1214
- Dátum registrácie: 21 Feb 2008, 00:00
- Bydlisko: okr. Prievidza
Re: Je možné v jednom skeči použiť dve preušenia?
Pozri toto
Ja to robim vzdy 2x odpor s kondenzatorom 100n a funguje to skvele.
Kód: Vybrať všetko
https://arduinoposlovensky.sk/teoria/ako-na-osetrenie-spinacich-kontaktov-debouncing/
0
Keďže vedeniu fóra a niektorým užívateľom vadil obsah môjho podpisu, bol som požiadaný o odstránenie určitej časti. Preto som sa rozhodol odstrániť celý pôvodný podpis.
Re: Je možné v jednom skeči použiť dve preušenia?
Ďakujem pekne za námety k preštudovaniu.Je toho dosť,verím,že v "boji" so zákmitmi uspejem.
boro
boro
0
-
- Ultimate člen
- Príspevky: 2582
- Dátum registrácie: 20 Júl 2010, 00:00
- Bydlisko: okolie KE
- Vek: 27
Re: Je možné v jednom skeči použiť dve preušenia?
Určite, toto je úplne bežná záležitosť.
Ja odporúčam softwarový debouncing. Keď nerozbeháte vlastný kód / niektorý z uvedených, 100% na to existuje hotová arduino knižnica (alebo aj niekoľko).
Ja odporúčam softwarový debouncing. Keď nerozbeháte vlastný kód / niektorý z uvedených, 100% na to existuje hotová arduino knižnica (alebo aj niekoľko).
0
Re: Je možné v jednom skeči použiť dve preušenia?
Softverom neosetris pad celeho uP. Ano zachrani to sice WDT. Lenze co stoho ked uz su skody lebo program klakol.
Vsetko ma byt najprv osetrrne hardverom a potom sa mozes hrat s softom.
Vsetko ma byt najprv osetrrne hardverom a potom sa mozes hrat s softom.
1
1
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Je možné v jednom skeči použiť dve preušenia?
Môžem vedieť ako sw ošetrenie zákmitov tlačítka miesto hw môže viesť k pádu celého MCU?
Môj názor na hw debouncing som tu už napísal. Netreba tam nič okrem tlačítka.
Len tak pre podoprenie mojej teórie si pozrite link od mclareniak.
Rád by som vedel ako sa vám páči pripojiť 220nF na výstupný pin MCU?
Tiež je zaujímavý ten ich nápad s 74HC14. Keby si dali tú námahu a prečítali by si datasheet od MCU tak by zistili že každý jeden input má čítanie ošetrené Schmittovým klopným obvodom. Takže pripájať tam ďalší sa mi javí ako nosenie dreva do lesa. To je inak dôvod prečo tie hw riešenia na AVR architektúre dobre fungujú. Tak si dajte pozor ak toto riešenie použijete na nejakom inom type MCU kde tie Schmittáky nie sú.
Môj názor na hw debouncing som tu už napísal. Netreba tam nič okrem tlačítka.
Len tak pre podoprenie mojej teórie si pozrite link od mclareniak.
Rád by som vedel ako sa vám páči pripojiť 220nF na výstupný pin MCU?
Tiež je zaujímavý ten ich nápad s 74HC14. Keby si dali tú námahu a prečítali by si datasheet od MCU tak by zistili že každý jeden input má čítanie ošetrené Schmittovým klopným obvodom. Takže pripájať tam ďalší sa mi javí ako nosenie dreva do lesa. To je inak dôvod prečo tie hw riešenia na AVR architektúre dobre fungujú. Tak si dajte pozor ak toto riešenie použijete na nejakom inom type MCU kde tie Schmittáky nie sú.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
- mclareniak
- Zaslúžilý člen
- Príspevky: 1214
- Dátum registrácie: 21 Feb 2008, 00:00
- Bydlisko: okr. Prievidza
Re: Je možné v jednom skeči použiť dve preušenia?
Ja pouzivam dlhy cas toto
Pre istotu to riesim v niektorych pripadoch este tak, ze po zatlaceni tlacitka cakam na jeho uvolnenie a az to je relevantny stav a vykonam co potrebujem.
A nikdy som nemal problem so zakmitom.Pre istotu to riesim v niektorych pripadoch este tak, ze po zatlaceni tlacitka cakam na jeho uvolnenie a az to je relevantny stav a vykonam co potrebujem.
0
Keďže vedeniu fóra a niektorým užívateľom vadil obsah môjho podpisu, bol som požiadaný o odstránenie určitej časti. Preto som sa rozhodol odstrániť celý pôvodný podpis.
Re: Je možné v jednom skeči použiť dve preušenia?
Všetky spomenuté riešenia majú niečo "do seba". Je potrebné si vyskúšať, ak nemám istotu.
@peterple
Pre HW minimalistov by som osobne odporúčal tlačidlo pripojiť aspoň cez odpor, napr. 1k.
74HC14 má inú hysterézu ako Schmittov KO na ATmege. A funguje, nie je to nosenie dreva do lesa. To isté by sa dalo povedať o internom pull-up rezistore. NIekto s tým vystačí. Ja osobne vždy využívam externý odpor cca 10k. Javí sa mi to odolnejšie riešenie proti nežiadúcim javom.
K SW riešeniu od @wizing: Mne sa najviac osvedčilo riešenie: čítanie každých 8ms, tri čítania v rade rovnaké pre zmenu stavu. Tlačidlá reagujú príjemne dostatočne rýchlo.
@peterple
Pre HW minimalistov by som osobne odporúčal tlačidlo pripojiť aspoň cez odpor, napr. 1k.
V čom je problém? A ako by sa vám páčilo pripojiť stlačené tlačidlo na výstupný pin?Netreba tam nič okrem tlačítka. ,... Rád by som vedel ako sa vám páči pripojiť 220nF na výstupný pin MCU?
74HC14 má inú hysterézu ako Schmittov KO na ATmege. A funguje, nie je to nosenie dreva do lesa. To isté by sa dalo povedať o internom pull-up rezistore. NIekto s tým vystačí. Ja osobne vždy využívam externý odpor cca 10k. Javí sa mi to odolnejšie riešenie proti nežiadúcim javom.
K SW riešeniu od @wizing: Mne sa najviac osvedčilo riešenie: čítanie každých 8ms, tri čítania v rade rovnaké pre zmenu stavu. Tlačidlá reagujú príjemne dostatočne rýchlo.
0
Re: Je možné v jednom skeči použiť dve preušenia?
Zdravím,nerozumiem tomu ako je možné SW ošetriť zákmity tlačítka pri prerušení?
boro
boro
0
- jirka.jirka.
- Ultimate člen
- Príspevky: 1539
- Dátum registrácie: 17 Okt 2008, 00:00
- Bydlisko: Uherské Hradiště
- Kontaktovať používateľa:
Re: Je možné v jednom skeči použiť dve preušenia?
Vypadá to složitě, ale není. Řešení je mraky.Zdravím,nerozumiem tomu ako je možné SW ošetriť zákmity tlačítka pri prerušení?
Vezmeme timer a v jeho přerušení (např. každou 1ms) budeme kontrolovat stisknutí tlačítka. Jak zjistíme, že je stisknuté, začneme počítat nějaký čas, prostě nebudeme nic dělat, jenom inkrementovat nějakou proměnnou (a kontrolovat, jestli uteklo už např. 10ms). Po nějakém čase (10ms), zase zkontrolujeme stisk tlačítka. A pokud je stisknuto, tak jej považujeme za stisknuté.
Obrázek řekne víc než tisíc slov. To v tom červeném rámečku bude v tvém přerušení od timeru. Jenom nezapomeň, pokud použiješ oblíbenou funkci ardunistů delay(10) v přerušení, tak si zabiješ celý program. Tzn. pamatuj na to, že v přerušení musíš konat rychle. Žádné vykecávání v rutině přerušení.
Vypadá že jsi začátečník. Tak se to pokusím znova objasnit (po milionté, ale nevadí).
Ideální v přerušení je nastavit nějaký příznak, že přerušení nastalo. V hlavní smyčce, tuto proměnou kontrolovat a dle toho konat. A vyhnout se takovým funkcím jako je delay. Pokud tu funkci použiješ, procesor nedělá nic jiného, než prostě čeká. A čeká. A čeká. A když ten čas skončí, udělá další průchod a znova čeká. A čeká. Tzn. místo toho, aby program dělal něco užitečného, tak čeká. Proto každý zkušenější programátor ti řekne, ideální je, když jeho program v mcu nedělá nic jiného, než se vrtí v nekonečné smyčce, kde si kontroluje flagy z přerušení a dle toho vykonává podmínky. A bliká ledkou.
A ještě se podívejme na to, co že to je ten zákmit. Co se odstraní tím "čekáním".
Na obrázku je viděť, že po stisku tlačítka, dojde k takovému "několikanásobnému" sepnutí a rozepnutí. I když to vypadá, že je to velmi krátký děj, tak mcu je schopný jej detekovat. Proto při 1ms kontrole tlačítka, chytíme např. začátek sestupné hrany, uděláme krátkou prodlevu, tím eliminujeme zbylé špičky a nakonec, po 10ms zkontrolujeme stav, zde už by měl být ustálený. A to je vše.
0
Re: Je možné v jednom skeči použiť dve preušenia?
Ďakujem za odpoveď.Dúfam,že som to správne pochopil.Do ISR naprogramujem to SW ošetrenie kontaktu.
Teraz mi je to úplne jasné.Človek niekedy potrebuje aspoň trošku "nakopnúť".
boro
Teraz mi je to úplne jasné.Človek niekedy potrebuje aspoň trošku "nakopnúť".
boro
0
Re: Je možné v jednom skeči použiť dve preušenia?
Neviem, cítim tu správne iróniu?
Samozrejme ak voláme prerušenie pri stlačení tlačidla, tak obsluha prerušenia musí trvať dlhšie ako zákmity tlačidla. Inak by sa pri dalšom zákmite vyvolalo prerušenie znova. Či?
Samozrejme ak voláme prerušenie pri stlačení tlačidla, tak obsluha prerušenia musí trvať dlhšie ako zákmity tlačidla. Inak by sa pri dalšom zákmite vyvolalo prerušenie znova. Či?
0
Re: Je možné v jednom skeči použiť dve preušenia?
Lan pre istotu, nie priamo do ISR. ISR mala by byť čo najkratšia. Len zaznamenať udalosť. Akcia až v hlavnom programe.
Prerušení je viac, sú rôzne, nemala by sa tvoriť fronta kvôli obsluhe a už vôbec nie zdĺhavé, náročné úkony a nebodaj čakanie priamo v ISR. Procesor by odvisol.
@gfox
Jirka.jirka navrhuje riešenie založené na pravidelnej kontrole stavu tlačítka (1ms sa mi zdá príliš často ale OK).
Ak by sa jednalo o prerušenie vyvolané stlčením tlačidla, tak prechodový jav stejne vyvolá sériu prerušení. Je to HW záležitosť. Ak je stav ustálený, t.j. rovnaký ako bol pred 10ms, vtedy sa vyvolá akcia k tlačidlu. Zákmity sa týmto proste odignorujú.
Inak každý zákmit vyvolá prerušenie a každé prerušenie vyvolá ISR, ak sa stihne vykonať. Môže sa stať, že sa nestihne a jednoducho sa opomenie. Ak rozprávame o ATmege je tam fixná prioritizácia jednotlivých prerušení. Každé ma 1 bit flag, t.j. jedno prerušenie z každého druhu môže čakať vo fronte na obsluhu/vyvolanie ISR
0
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 2 Odpovedí
- 1065 Zobrazení
-
Posledný príspevok od používateľa taphome