60 nap alatt Arduino #25-#26 - Megszakítás
Re: 60 nap alatt Arduino #25-#26 - Megszakítás
A millis() a TIMER megszakítást használ_ná_ mnegszakításban. Abban lépked_ne_ előre.
Ez a megszakításban késlelteés az Arduinoban el van b....(altázva).
Ez a megszakításban késlelteés az Arduinoban el van b....(altázva).
Re: 60 nap alatt Arduino #25-#26 - Megszakítás
Sziasztok!
Az okke hogy lenyomom a gombot es megszakitasra kerul a program. De mi van ha egy analog ertekhez akarnam csatolni. Pl. Egy homerseklet erzekelo amit pl az A0-ra kotok, es azt szeretnem ha annak erteke meghaladja az adott erteket akkor mindent megszakitva azonnal hajtson vegre egy programot. Amiket eddig lattam ott igazabol csak a LOW es HIGH valtozasokat tudtuk figyelni. Amennyiben amit alapbol szeretnek nem megoldhato, van e javaslat hogy ilyenkor mi az az eljaras amit tudnek alkalmazni. Elore is kosz a valaszokat (optimista)
Az okke hogy lenyomom a gombot es megszakitasra kerul a program. De mi van ha egy analog ertekhez akarnam csatolni. Pl. Egy homerseklet erzekelo amit pl az A0-ra kotok, es azt szeretnem ha annak erteke meghaladja az adott erteket akkor mindent megszakitva azonnal hajtson vegre egy programot. Amiket eddig lattam ott igazabol csak a LOW es HIGH valtozasokat tudtuk figyelni. Amennyiben amit alapbol szeretnek nem megoldhato, van e javaslat hogy ilyenkor mi az az eljaras amit tudnek alkalmazni. Elore is kosz a valaszokat (optimista)
Re: 60 nap alatt Arduino #25-#26 - Megszakítás
Erre csak valamilyen külső HW megoldás van.
Ha fix feszültség határértéken akarsz megszakítást?
Pl.: A DIÓDA 0.7V-on kapcsol. Annyit kötsz sorba, ami megközelíti a megkívánt értéket.
http://w3.enternet.hu/furedi/modul/hw/EC1_Dioda.pdf
Ha fix feszültség határértéken akarsz megszakítást?
Pl.: A DIÓDA 0.7V-on kapcsol. Annyit kötsz sorba, ami megközelíti a megkívánt értéket.
http://w3.enternet.hu/furedi/modul/hw/EC1_Dioda.pdf
Re: 60 nap alatt Arduino #25-#26 - Megszakítás
Analóg méréshez le/felfutó él?:)
Amúgy az alaóg mérés ideje ~0,1 msec. Azaz ez csak a mérés!
INTre alkalmatlan.
Javaslat:
1, Timerrel időként mérsz. Ha mért érték>elvárt -> a program végrehajtja a vészfunkciót.
2, AIN0/AIN1. Ez egy komparátor 2 bemenete. Az egyiken a hőmérő (ellenállásosztóval), a másikon a potméter. Ha a hőmérséklet megszalad, az AIN kimenet átbillen (fel/lefutó él).
3, ADC mérés indít.
Mérés végén INT jelet ad. Ez indítja, hogy valamit tegyél az eredménnyel....
Ezek jók INT alapúnak?
Kérdés: hőmérsékletmérés esetén kell az azonnali (<1usec) beavatkozás?
10-100-1000 msec is szerintem sokszor elég gyakori a mérésre.
Ha automatőn menjen, akkor a milis() függvényt meghackelni, hogy minden 10-100 lefutáskor csináljon hőmérést....
Amúgy az alaóg mérés ideje ~0,1 msec. Azaz ez csak a mérés!
INTre alkalmatlan.
Javaslat:
1, Timerrel időként mérsz. Ha mért érték>elvárt -> a program végrehajtja a vészfunkciót.
2, AIN0/AIN1. Ez egy komparátor 2 bemenete. Az egyiken a hőmérő (ellenállásosztóval), a másikon a potméter. Ha a hőmérséklet megszalad, az AIN kimenet átbillen (fel/lefutó él).
3, ADC mérés indít.
Mérés végén INT jelet ad. Ez indítja, hogy valamit tegyél az eredménnyel....
Ezek jók INT alapúnak?
Kérdés: hőmérsékletmérés esetén kell az azonnali (<1usec) beavatkozás?
10-100-1000 msec is szerintem sokszor elég gyakori a mérésre.
Ha automatőn menjen, akkor a milis() függvényt meghackelni, hogy minden 10-100 lefutáskor csináljon hőmérést....
Re: 60 nap alatt Arduino #25-#26 - Megszakítás
Azt irja a lecke, higy az interrupt rutint minél rövidebbre kell irni. Nekem sajnos nem világos pontosan hol láthato az interrupt rutin hossza illetve az eleje meg a vége. A kodban meghivjuk az attachInterrupt-l valamit, pl a blink subrutint. Az adott esetben akkor mi tartozik az interrupthoz az egész blink rutin, vagy csak a nyomogomb állapotának a vizsgálata?
Ezekkel vagyok mindig gondban. Kösz!
Ezekkel vagyok mindig gondban. Kösz!
Éljenek a vonatok!
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: 60 nap alatt Arduino #25-#26 - Megszakítás
Az attachinterrupt fügvénynek átadsz paraméterként egy függvény címet. Na, az lesz az ISR. Annak a függvénynek kell minél rövidebbnek lennie. És itt nem (csak) a kódsorok számáról van szó, sokkal inkább azok végrehajtási idejétől. Tehát ne legyen benne kommunikáció, delay, stb.
Re: 60 nap alatt Arduino #25-#26 - Megszakítás
Kösz, ez nem volt világos, és sajnos a multban is sokszor elvesztem abban, hogy mi tartozik az iSR-hez meg mi nem. Igyekszek majd jobban odafigyelni. Az Arduino nyelvben talán ez világosabb lesz mint az ASM-ben.
Éljenek a vonatok!
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: 60 nap alatt Arduino #25-#26 - Megszakítás
Mikor meghívódik valamelyik megszakítás, automatikusan letiltódik a további megszakítások elfogadása.
Mivel az AVR egyszerre csak egy megszakítást tud kezelni.
Mivel minden C kód végül assemblerre fordul ezért abban mutatom a példát:
Mivel az AVR egyszerre csak egy megszakítást tud kezelni.
Mivel minden C kód végül assemblerre fordul ezért abban mutatom a példát:
Kód: Egész kijelölése
; Interrupt Vector
INT0_vect: ; További INT letiltódik
inc r18
out PORTB, r18
; Itt ugrálhatsz ki-be, bárhova, még mindig az interruptban vagy!
reti ; mikor itt a végén kilépsz, a RETI utasítás intézi a RETurnt, és az INTek engedélyezését.
; Csak akkor van vége az aktuális interrup rutinnak.
Re: 60 nap alatt Arduino #25-#26 - Megszakítás
Én egy kicsit másképp szoktam használni az interruptot ( legalábbis eddig nem volt olyan feladat, amit külsö imterrupttal kellett kezelni. Ezért nekem van egy régi, de jol bevált makrom ( vagy szubrutinom ki minek hivja) ahol föleg a belsö idözitéssel kezelem a dolgokat. A leggyakoribb amit használok az a 20 ms megszakitás, azaz 20 ms-ként beolvassa pl a nyomogombokat, stb. Azután itt vannak olyan háttérmunkák, amik lassabban is mehetnek pl minden 4. megszakitás kezeli az LCD-t stb. Egy kicsit mindig fáj a fejem, amikor pontosan definiálni kell az IRQ hosszát, mert amikor pl lekérdezi a nyomogombokat ki kell ugornia egy másik rutinba, ahol az egész lekérdezés a prellmentesitéssel megtörténik, majd elmenti az aktuális gombot. Szoval ezek a programok lehetnek hosszabbak is.
Éljenek a vonatok!
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: 60 nap alatt Arduino #25-#26 - Megszakítás
Most éppen rátapintottál az AVR megszakítások lényeges hiányosságára.
Nem lehet rangsorolni a megszakításokat, a fontosabb nem tudja megszakítani a kevésbé lényegeset.
Esetedben ez időzítő timer ami a us, ms-eket számolja is megszakítást kérne!
De nem fog tudni, mert te éppen megszakításban várakozol, a gombjaid prrel mentesítése közben.
Bizonytalan hibás működés lesz az eredmény!
Nem lehet rangsorolni a megszakításokat, a fontosabb nem tudja megszakítani a kevésbé lényegeset.
Esetedben ez időzítő timer ami a us, ms-eket számolja is megszakítást kérne!
De nem fog tudni, mert te éppen megszakításban várakozol, a gombjaid prrel mentesítése közben.
Bizonytalan hibás működés lesz az eredmény!
Re: 60 nap alatt Arduino #25-#26 - Megszakítás
Szerintem forditva megy a dolog, a timer megy folytonosan és 20 ms-ként lekérdezi a klaviaturát és 80 ms-ként frissiti az LCD-t. Most kell egy ujabb dolog, de még nem probáltam az analog bemenetet is a megszakitással kell kezelni.
De mindegy, ne itt boncoljuk az ASM kodot.
De mindegy, ne itt boncoljuk az ASM kodot.
Éljenek a vonatok!
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: 60 nap alatt Arduino #25-#26 - Megszakítás
Szerintem most Arduinos fórumban vagyunk! És arról beszélgetünk?
Teljesen lényegtelen, hogy te miben programozod az eszközt, asm-ban vagy C-ben.
Arduinoban mind a kettőt használhatod.
A timer az hardwer, mikor megszakítást kér, az is hardweres.
Mindezeknek a beállítása viszont softweres téma.
Arduinoban az összes time függvény, timer megy és megszakítást kér mikor lejárt, alapon működik.
https://www.arduino.cc/reference/en/lan ... ime/delay/
Ezért értelmetlen dolog megszakításba delayt rakni.
Hozzá teszem AVR-en, mert ARM-ot is lehet arduinon programozni.
És azokon már megoldható, hogy a System timer magasabb prioritású és megszakíthatja az összes többit.
Teljesen lényegtelen, hogy te miben programozod az eszközt, asm-ban vagy C-ben.
Arduinoban mind a kettőt használhatod.
A timer az hardwer, mikor megszakítást kér, az is hardweres.
Mindezeknek a beállítása viszont softweres téma.
Arduinoban az összes time függvény, timer megy és megszakítást kér mikor lejárt, alapon működik.
https://www.arduino.cc/reference/en/lan ... ime/delay/
Ezért értelmetlen dolog megszakításba delayt rakni.
Hozzá teszem AVR-en, mert ARM-ot is lehet arduinon programozni.
És azokon már megoldható, hogy a System timer magasabb prioritású és megszakíthatja az összes többit.
Re: 60 nap alatt Arduino #25-#26 - Megszakítás
Eddig ilyen ügyem nem volt, hogy delayeket rakjak a rutinokba, attol meg még nagyon messze vagyok, hogy az Arduino programba ASM kodot rakjak
Éljenek a vonatok!
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
Re: 60 nap alatt Arduino #25-#26 - Megszakítás
Na, ilyeneket nem kellene megszakításból csinálni. A megszakítás állítson be egy volatile flag-et, és a főprogram olvasson / írjon perifériákat. RTOS esetén ébresszen egy alvó szálat, és az kezelje a perifériákat.etwg írta:ki kell ugornia egy másik rutinba, ahol az egész lekérdezés a prellmentesitéssel megtörténik
Re: 60 nap alatt Arduino #25-#26 - Megszakítás
Ezt teszi, csak rosszul fogalmaztam, a flag jelzi, hogy mit kell tennie a föprogramnak.
Csak a definiciokkal vagyok gondban... ezek szerint a föprogram ide vágo sorai nem számitanak abba bele, hogy milyen hosszu az interrupt.
Csak a definiciokkal vagyok gondban... ezek szerint a föprogram ide vágo sorai nem számitanak abba bele, hogy milyen hosszu az interrupt.
Éljenek a vonatok!
http://www.youtube.com/playlist?list=PLF2674BF4E3765682
http://www.youtube.com/playlist?list=PLF2674BF4E3765682