Je možné v jednom skeči použiť dve preušenia?

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

boro
Stály člen
Stály člen
Príspevky: 118
Dátum registrácie: 10 Nov 2010, 00:00
Vek: 80

Je možné v jednom skeči použiť dve preušenia?

Príspevok od používateľa boro » 28 Nov 2021, 15:50

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
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2573
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?

Príspevok od používateľa maskrtnik01 » 28 Nov 2021, 15:57

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.
0

peterple
Ultimate člen
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?

Príspevok od používateľa peterple » 28 Nov 2021, 17:24

Ť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.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

boro
Stály člen
Stály člen
Príspevky: 118
Dátum registrácie: 10 Nov 2010, 00:00
Vek: 80

Re: Je možné v jednom skeči použiť dve preušenia?

Príspevok od používateľa boro » 28 Nov 2021, 18:21

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
0

Používateľov profilový obrázok
StefanST
Pokročilý člen
Pokročilý člen
Príspevky: 778
Dátum registrácie: 20 Feb 2012, 22:25
Bydlisko: Nové Zámky

Re: Je možné v jednom skeči použiť dve preušenia?

Príspevok od používateľa StefanST » 28 Nov 2021, 18:52

Daj aj, ako to máš zapojené: spínač, kondenzátor, rezistory.
0

Používateľov profilový obrázok
misocko
Ultimate člen
Ultimate člen
Príspevky: 4319
Dátum registrácie: 14 Jún 2009, 00:00
Vek: 47

Re: Je možné v jednom skeči použiť dve preušenia?

Príspevok od používateľa misocko » 28 Nov 2021, 19:19

skusal si do googlu zadat "arduino debouncing"?
0

peterple
Ultimate člen
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?

Príspevok od používateľa peterple » 28 Nov 2021, 19:21

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í.

wizing
Nový člen
Nový člen
Príspevky: 95
Dátum registrácie: 21 Sep 2017, 09:09
Bydlisko: Žilina
Vek: 40

Re: Je možné v jednom skeči použiť dve preušenia?

Príspevok od používateľa wizing » 28 Nov 2021, 19:56

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;
}
SP.jpg
SP.jpg (8.4 KiB) 3770 zobrazení
0

Používateľov profilový obrázok
mclareniak
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1212
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?

Príspevok od používateľa mclareniak » 29 Nov 2021, 06:00

Pozri toto

Kód: Vybrať všetko

https://arduinoposlovensky.sk/teoria/ako-na-osetrenie-spinacich-kontaktov-debouncing/
Ja to robim vzdy 2x odpor s kondenzatorom 100n a funguje to skvele.
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.

boro
Stály člen
Stály člen
Príspevky: 118
Dátum registrácie: 10 Nov 2010, 00:00
Vek: 80

Re: Je možné v jednom skeči použiť dve preušenia?

Príspevok od používateľa boro » 29 Nov 2021, 17:33

Ďakujem pekne za námety k preštudovaniu.Je toho dosť,verím,že v "boji" so zákmitmi uspejem.
boro
0

maskrtnik01
Ultimate člen
Ultimate člen
Príspevky: 2573
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?

Príspevok od používateľa maskrtnik01 » 29 Nov 2021, 17:43

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).
0

Atlan
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1148
Dátum registrácie: 01 Feb 2008, 00:00
Bydlisko: Kosice okolie

Re: Je možné v jednom skeči použiť dve preušenia?

Príspevok od používateľa Atlan » 29 Nov 2021, 18:18

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.
1
Obrázok 1

peterple
Ultimate člen
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?

Príspevok od používateľa peterple » 29 Nov 2021, 22:04

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ú.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
mclareniak
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1212
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?

Príspevok od používateľa mclareniak » 30 Nov 2021, 07:04

Ja pouzivam dlhy cas toto
image.png
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.

Používateľov profilový obrázok
budvar10
Pokročilý člen
Pokročilý člen
Príspevky: 988
Dátum registrácie: 15 Dec 2014, 10:55
Bydlisko: Košice

Re: Je možné v jednom skeči použiť dve preušenia?

Príspevok od používateľa budvar10 » 30 Nov 2021, 08:43

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.
Netreba tam nič okrem tlačítka. ,... Rád by som vedel ako sa vám páči pripojiť 220nF na výstupný pin MCU?
V čom je problém? A ako by sa vám páčilo pripojiť stlačené tlačidlo na výstupný pin?
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

boro
Stály člen
Stály člen
Príspevky: 118
Dátum registrácie: 10 Nov 2010, 00:00
Vek: 80

Re: Je možné v jednom skeči použiť dve preušenia?

Príspevok od používateľa boro » 02 Dec 2021, 18:02

Zdravím,nerozumiem tomu ako je možné SW ošetriť zákmity tlačítka pri prerušení?
boro
0

Používateľov profilový obrázok
jirka.jirka.
Ultimate člen
Ultimate člen
Príspevky: 1538
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?

Príspevok od používateľa jirka.jirka. » 02 Dec 2021, 18:39

Zdravím,nerozumiem tomu ako je možné SW ošetriť zákmity tlačítka pri prerušení?
Vypadá to složitě, ale není. Řešení je mraky.

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á. :lol: 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. :D A bliká ledkou. :rock:

Obrázok

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.
Obrázok
0

boro
Stály člen
Stály člen
Príspevky: 118
Dátum registrácie: 10 Nov 2010, 00:00
Vek: 80

Re: Je možné v jednom skeči použiť dve preušenia?

Príspevok od používateľa boro » 02 Dec 2021, 22:29

Ď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 :applause:
0

Používateľov profilový obrázok
gfox
Stály člen
Stály člen
Príspevky: 199
Dátum registrácie: 12 Mar 2013, 20:16
Bydlisko: Lovinobaňa
Vek: 53

Re: Je možné v jednom skeči použiť dve preušenia?

Príspevok od používateľa gfox » 02 Dec 2021, 23:08

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?
0

Používateľov profilový obrázok
budvar10
Pokročilý člen
Pokročilý člen
Príspevky: 988
Dátum registrácie: 15 Dec 2014, 10:55
Bydlisko: Košice

Re: Je možné v jednom skeči použiť dve preušenia?

Príspevok od používateľa budvar10 » 03 Dec 2021, 07:58

boro napísal:
02 Dec 2021, 22:29
Do ISR naprogramujem to SW ošetrenie kontaktu.
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

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok