60 nap alatt Arduino #25-#26 - Megszakítás

A "60 nap alatt Arduino" tanfolyam házi feladatai és közvetlen témái
Avatar
Robert
Elektronbűvölő
Hozzászólások: 9989
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: 60 nap alatt Arduino #25-#26 - Megszakítás

HozzászólásSzerző: Robert » 2014. március 28. péntek, 8:54

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

majgomboc
Újonc
Újonc
Hozzászólások: 1
Csatlakozott: 2014. november 1. szombat, 8:56

Re: 60 nap alatt Arduino #25-#26 - Megszakítás

HozzászólásSzerző: majgomboc » 2014. november 1. szombat, 9:02

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) :)

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3320
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: 60 nap alatt Arduino #25-#26 - Megszakítás

HozzászólásSzerző: kapu48 » 2014. november 18. kedd, 11:31

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

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9989
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: 60 nap alatt Arduino #25-#26 - Megszakítás

HozzászólásSzerző: Robert » 2014. november 18. kedd, 12:47

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

Avatar
etwg
Pákabűvész
Hozzászólások: 212
Csatlakozott: 2011. február 7. hétfő, 7:00
Tartózkodási hely: Ausztria
Kapcsolat:

Re: 60 nap alatt Arduino #25-#26 - Megszakítás

HozzászólásSzerző: etwg » 2019. október 27. vasárnap, 9:07

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!
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682

vargham
Chipgyilok
Hozzászólások: 268
Csatlakozott: 2014. január 8. szerda, 8:32
Kapcsolat:

Re: 60 nap alatt Arduino #25-#26 - Megszakítás

HozzászólásSzerző: vargham » 2019. október 27. vasárnap, 10:47

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.

Avatar
etwg
Pákabűvész
Hozzászólások: 212
Csatlakozott: 2011. február 7. hétfő, 7:00
Tartózkodási hely: Ausztria
Kapcsolat:

Re: 60 nap alatt Arduino #25-#26 - Megszakítás

HozzászólásSzerző: etwg » 2019. október 27. vasárnap, 11:20

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

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3320
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: 60 nap alatt Arduino #25-#26 - Megszakítás

HozzászólásSzerző: kapu48 » 2019. október 28. hétfő, 15:20

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:

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.

Avatar
etwg
Pákabűvész
Hozzászólások: 212
Csatlakozott: 2011. február 7. hétfő, 7:00
Tartózkodási hely: Ausztria
Kapcsolat:

Re: 60 nap alatt Arduino #25-#26 - Megszakítás

HozzászólásSzerző: etwg » 2019. október 29. kedd, 9:33

É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

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3320
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: 60 nap alatt Arduino #25-#26 - Megszakítás

HozzászólásSzerző: kapu48 » 2019. október 29. kedd, 12:37

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!

Avatar
etwg
Pákabűvész
Hozzászólások: 212
Csatlakozott: 2011. február 7. hétfő, 7:00
Tartózkodási hely: Ausztria
Kapcsolat:

Re: 60 nap alatt Arduino #25-#26 - Megszakítás

HozzászólásSzerző: etwg » 2019. október 29. kedd, 18:35

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.
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3320
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: 60 nap alatt Arduino #25-#26 - Megszakítás

HozzászólásSzerző: kapu48 » 2019. október 29. kedd, 19:51

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.

Avatar
etwg
Pákabűvész
Hozzászólások: 212
Csatlakozott: 2011. február 7. hétfő, 7:00
Tartózkodási hely: Ausztria
Kapcsolat:

Re: 60 nap alatt Arduino #25-#26 - Megszakítás

HozzászólásSzerző: etwg » 2019. október 29. kedd, 20:13

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

vargham
Chipgyilok
Hozzászólások: 268
Csatlakozott: 2014. január 8. szerda, 8:32
Kapcsolat:

Re: 60 nap alatt Arduino #25-#26 - Megszakítás

HozzászólásSzerző: vargham » 2019. október 31. csütörtök, 8:04

etwg írta:ki kell ugornia egy másik rutinba, ahol az egész lekérdezés a prellmentesitéssel megtörténik

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.

Avatar
etwg
Pákabűvész
Hozzászólások: 212
Csatlakozott: 2011. február 7. hétfő, 7:00
Tartózkodási hely: Ausztria
Kapcsolat:

Re: 60 nap alatt Arduino #25-#26 - Megszakítás

HozzászólásSzerző: etwg » 2019. október 31. csütörtök, 10:57

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.
Éljenek a vonatok!

http://www.youtube.com/playlist?list=PLF2674BF4E3765682


Vissza: “60 nap alatt Arduino - Házi feladatok”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég