Külső megszakítás

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Avatar
benzinkutas
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2011. április 30. szombat, 6:00

Külső megszakítás

HozzászólásSzerző: benzinkutas » 2012. május 26. szombat, 6:32

Ha figyelek egy digitális bemenet állapotát és ehhez kötök egy eljárást akkor megszakítással miért lesz gyorsabb mint ha pl. if utasitással oldanám meg?

attachInterrupt (interrupt, funkció, mode)

A leírásban ezt a szintaktikát találtam, kevés angol tudásom miatt sajnos nem tudtam pontosan értelmezni a paramétereit. Interupt ? funkció = gondolom ez a fügvény fut le a megszakításkor, mode?
És jó példát sem találtam még. Ezekben a dolgokban kérek szépen kiigazítást.

Köszönöm!

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 867
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2012. május 26. szombat, 11:04

A programod felépítéstől függ, hogy gyorsabb lesz-e.
A megszakítást kifejezetten arra találták ki, hogy a program (főprg) futása közben bejövő eseményekre minél rövidebb idő alatt tudj reagálni. Ha olyan a főprogram, elméletileg nem is tud róla, hogy jött egy INT (INT után ugyan oda tér vissza a programfutás).
Rövid ideig fennálló esemény lekezelése még a cél (főprogramod nem ér oda időben, mikorra a bejövő jel már változott és vissza is állt pl.) Fontos még az, hogy ha pontosan vársz egy feltételre, akkor ott "beragad" a programod, INTnél meg majd akkor hajtódik végre a kiszolgálás, ha bejött a jelváltozás. Tehát programfüggő, mikor jobb az INT és mikor jobb, ha vársz a jelváltozásra.
Amit írtam, az általános, az említett sor paraméterezésében sajnos nem tudok segíteni...
JAni

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

HozzászólásSzerző: kapu48 » 2012. május 26. szombat, 14:43

Engem ilyenkor arra biztattak, hogy tessék belökni valamely fordítóba a szöveget!:

csatolja megszakítás (interrupt, funkció, mód)

leírás

Megadja a meghívandó funkcióra, amikor egy külső megszakítás történik.
Megszaki minden korábbi funkciót csatlakoztatva volt a megszakítás. A legtöbb Arduino táblák két külső megszakítások: számok 0 (digitális pin 2) és 1 (digitális pin 3). Az Arduino Mega van további négy: a számok 2 (21 pin), 3 (20 pin), 4 (19 pin), és 5 (pin 18).

paraméterek

megszakítás: a megszakítás száma (int)

funkció: a funkció hívni, ha a megszakítás történik, ez a funkció nem vehet át paramétereket és vissza sem ad semmit. Ez a funkció néha nevezik megszakítás kiszolgáló rutin.

mód: határozza meg, amikor a megszakítás kell foganatosítani. Négy előre meghatározott contstants érvényes értékek:
LOW, alacsony amely kiváltja a megszakítást, ha a PIN alacsony,
CHANGE VÁLTOZÁS, amely kiváltja a megszakítást, ha a PIN-értéke megváltozik
RISING Felnőni a kiváltó Ha a PIN megy az alacsonytól a magasig,
FALLING Csökkennek, ha a PIN megy magastól alacsony felé.

visszatérő érték egyik sem

Megjegyzés:

Bent a mellékelt funkció késleltetés () nem fog működni, és a visszaadott érték a Millis () nem fogja növelni. Soros kapott adatok, míg a funkció is elvész. Meg kell nyilvánítania az illékony változókat, hogy módosítsa a csatolt funkciót.

A megszakítások

Megszakítások jól használható dolgok történnek automatikusan mikrokontroller programok, és segíthet megoldani időzítési problémákat. Egy jó feladat segítségével egy megszakítás lehet olvasni egy forgó jeladót, a monitoring felhasználói.


Ha akarta, hogy biztosítsák, hogy a program mindig elkapta az impulzusok egy forgó jeladó, soha nem hiányzik a pulzus, ez teszi nagyon nehéz lenne írni egy programot mást csinálni, mert a program kellene, hogy folyamatosan az érzékelő vonalak lekérésére a jeladó, annak érdekébenelkapni impulzusok, amikor történt. Más érzékelők is hasonló dinamikus felület is, mint például próbál olvasni egy érzékelő, amely hangot próbál elkapni egy kattintással, vagy egy infravörös érzékelő aljzat (foto-megszakító) próbál elkapni egy érmét csepp. Minden ilyen helyzetben, egy megszakítás segítségével lehet felszabadítani a mikrokontroller, hogy valamilyen más munkát, ugyanakkor nem hiányzik a csengőt.
Example

Kód: Egész kijelölése

int pin = 13;
volatile int state = LOW;

void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}

void loop()
{
  digitalWrite(pin, state);
}

void blink()
{
  state = !state;
}
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2012. május 27. vasárnap, 14:21-kor.

Avatar
benzinkutas
DrótVégénSzéndarab
Hozzászólások: 31
Csatlakozott: 2011. április 30. szombat, 6:00

HozzászólásSzerző: benzinkutas » 2012. május 27. vasárnap, 14:02

[quote="kapu48"]Engem ilyenkor arra biztattak, hogy tessék belökni valamely fordítóba a szöveget!:

csatolja megszakítás (interrupt, funkció, mód)

Erre én is képes vagyok, de sajnos kezdő vagyok még így a google által lefordított szövegből még nem tudom kihámozni a lényeget. Ezért bátorkodtam beírni a fórumra. Gondoltam ez mindenkinek szól nem csak a profiknak. Sokszor egy-két mondat ami rávezet a megoldásra többet ér mint sok oldal.

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

HozzászólásSzerző: kapu48 » 2012. május 27. vasárnap, 14:24

Mi nem olvashatunk helyetted!
Ha te elakadsz az első sornál!

Amelynek a további szövegben minden szó értelme el van magyarázva.

(Esetleg próbálkozz többször nekifutni! )
16. Megszakítások Interrupt:
http://avr.tavir.hu/modules.php?name=Co ... age&pid=18
:wink:

Vagy:
ATMega8 külső megszakítások beállítása
http://www.hobbielektronika.hu/kapcsola ... .html?pg=3

Mindenki másképp csinálja! Csak a HardWer a lényeg!
Azt kel megérteni! 8)

Avatar
Atesz
Tranzisztorgyógyász
Hozzászólások: 164
Csatlakozott: 2006. január 19. csütörtök, 7:00
Tartózkodási hely: Dombóvár

Re: Külső megszakítás

HozzászólásSzerző: Atesz » 2017. április 19. szerda, 17:03

Kód: Egész kijelölése

const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}

void loop() {
  digitalWrite(ledPin, state);
}

void blink() {
  state = !state;
}

Fordításkor ezt a hibát kapom: 'blink' was not declared in this scope
Mi lehet a baj?

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

Re: Külső megszakítás

HozzászólásSzerző: Robert » 2017. április 19. szerda, 19:00

Arduino verzió?
http://www.tavir.hu - a gazda :)

Avatar
csabeszq
Bitfaragó
Hozzászólások: 659
Csatlakozott: 2012. szeptember 5. szerda, 6:00

Re: Külső megszakítás

HozzászólásSzerző: csabeszq » 2017. május 5. péntek, 5:43

A C az nem java. Sorban halad minden előre.

Mikor a blinket meghívod még nincs deklarálva, tehát jogos a hiba. Cseréld fel a függvények sorrendjét, vagy deklaráld előre. C programozás.


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: Google [Bot] valamint 4 vendég