Arduino kezdőknek 4 - Astabil multivibrátorok, egyszerű IF-es szerkezetek, független feltételek vizsgálata
Szilágyi Sándor Zoltán Villamosmérnök, mérnök-informatikus
A cikket megírtam: 2022. 03. 08-án
A Rádiótechnikában megjelent: 2022. május
Ez a blog oldal tehát az eredeti, saját tulajdonomban levő dokumentum, és nem a nyomtatásban megjelent másolata. A cikket én írtam, én küldtem be, és csak azután jelent meg nyomtatott formában is. A nyomtatásban megjelent cikkeimre szerződést nem kötöttek velem, és anyagi juttatást se kaptam soha érte. Mivel a magazin már nem kapható, ezért a megjelent 13 cikkemet itt folytatnám, mivel Magyarországon jelenleg nincs hobbielektronikával foglalkozó magazin.
4.1 Astabil multivibrátorok
Ebben és a következő cikkben több új feladatot mutatok be, továbbfejlesztve az 5-ödik programot. Az egy astabil multivibrátor volt, mely a beépített L-ledet és a külső LED-ledet villogtatta felváltva. Szinte minden alap elektronikával foglalkozó könyv, tankönyv foglalkozik a multivibrátorokkal, így én is ezzel folytatnám, mielőtt rátérnék a bonyolultabb kapcsolásokra. Először a hardvert tekintve lépünk feljebb: ezen cikk feladataihoz 2 db külső LED-re lesz szükségünk.
Az impulzus előállító áramköröknek több fajtája van. Ezek közül a billenőkapcsolások olyan pozitívan visszakapcsolt digitális áramkörök, melyek kimeneti feszültsége kétféle diszkrét értéket vehet fel: H-t és L-t. A két állapot közötti átmenet elhanyagolható (a mi esetünkben jelenleg még elhanyagolható). Fajtái: astabil-, monostabil-, és bistabil multivibrátorok.
10. program: az astabil multivibrátor
Ezt a kapcsolást szokták kezdőknek ajánlani (a detektoros rádió és az egy tranzisztoros erősítő mellett) az egyszerűsége és a gyakorlati felhasználhatósága miatt. Ha a tranzisztoros kapcsolást nézzük, akkor a bemenetre adott egyenfeszültségből a kimenetén (vagy inkább a kimenetein) végtelen sorozatú négyszögfeszültséget állít elő.
Arduino alkalmazása esetén csak 2 db külső led-re lesz szükség, a védőellenállásokkal együtt (14. ábra). Bemeneti periféria itt még nincs, mivel az egész működést a kis program végzi (15. ábra).A program függvényei a 18. ábrán láthatók.
14. ábra
15. ábra
A program két „int” típusú változó deklarálásával és definiálásával kezdődik. A 11-es és a 12-es kimeneteket fogjuk használni, melyekre a ledek vannak kötve. Bármilyen nevet adhatunk nekik, nem kötelező a „ledPin”. A lényeg, hogy jól megkülönböztethetők legyenek egymástól, fel lehessen ismerni, hogy melyik lábra fognak vonatkozni. A setup függvényben mindkettőt kimenetként deklaráljuk.
A főprogram megírása egyszerű. Megadjuk, hogy először melyik kimenet legyen H- és melyik L-állapotú, majd beteszünk egy késleltetést. Ez az időtartam mindkettőre vonatkozik, azaz addig az ideig H-állapotú az egyik és ezzel egy időben L-állapotú a másik kimenet. Majd fordítva – viszont a végére is kell késleltetés, mert utána kezdi elölről a program futtatását, a végtelenségig.
11. program: a módosított astabil multivibrátor
A módosítás (16. ábra) a szünetek (L) betétele az egyes H-állapotok után, az áramkör változatlan marad. Működés közben továbbra sem lesz egyetlen stabil állapot sem:
1 - Led1 H és led2 L
2 - Led1 L és led2 L
3 - Led1 L és led2 H
4 - Led1 L és led2 L... stb.
Természetesen ezt is lehet tovább fokozni, például berakhatunk egy negyedik fajta vezérlést, ahol mindkét led egyszerre van H állapotban. A példában most is minden szünet 1 másodperc, de ezen is lehet módosítani. Mint az előző feladatban, most is kell a végére egy késleltetés, mert a program ha lefutott, itt is kezdődik elölről.
A függvényei a 18. ábrán láthatók.
16. ábra
4.2 Független feltételek vizsgálata
12. program: előre programozott astabil multivibrátor
Legyen a feladat az, hogy a fentebbi példák hardvere változatlan maradjon, viszont a ledek H állapota ciklusonként növekedjen egy adott egységnyivel (pl 0,5 másodperccel). A növekedés 5-lépcsős legyen, majd az egész kezdődjön elölről a végtelenségig (mert nincs stabil állapota).
17. ábra
A program működése:
Marad az előző példából a két „int” típusú változó deklarálása és definiálása a 11-es és a 12-es lábakra. Ezek továbbra is kimenetként lesznek beállítva. Deklarálunk egy harmadik int típusú változót ido-névvel.
Az időzítő utasítások kétfélék lehetnek: időzítők és időmérők. Mindkettő lehet ezred- és milliomod másodperces. Így négyféle utasítást különböztetünk meg:
- delay(); Ezred másodperces késleltetés: a zárójelben megadott ideig késleltet. Ezalatt az idő alatt a program működését leállítja, majd a késleltetési idő után folytatja tovább. A példákban eddig ezt használtuk. Pl: a delay(1000) 1 másodpercig késleltet, a delay(500) 0,5 másodpercig.
- delayMicroseconds(); A fentebbi utasításhoz hasonlít, csak ez nem ezred, hanem milliomod másodperces.
- millis(); A bekapcsolás óta eltelt időt méri ezred másodpercben (millisec)
- micros(); Működése a millis()-re hasonlít, csak itt milliomod másodpercekben (mikrosec) méri a bekapcsolás óta eltelt időt.
Egyenlőre az ezred másodperces késleltetéssel és időméréssel foglalkozunk, a milliomod másodpercessel később.
A főprogram elején, az ido=millis(); sorban mérjük a bekapcsolás óta eltelt időt ezred másodpercben, amit az ido-változóba töltünk. Ezután következik a független feltételek vizsgálata, azaz 5 egyágú szelekció (mivel a feladatban a növekedés is 5-lépcsős).
Minden szelekció azonos felépítésű. A program amikor belép az első if-es sorba, megvizsgálja, hogy teljesül-e az ott levő feltétel, azaz hogy az idő kisebb-egyenlő-e mint 500 milliszekundum. Ha teljesül, végrehajtja az utána jövő utasításokat – ezek az adott if-es szerkezetben a feltétel után kapcsos zárójelek közé vannak írva. Így bármelyik if utáni feltétel teljesülése esetén csak a hozzá kapcsolódó utasítások hajtódnak végre. Amennyiben nem teljesül (jelen példában a bekapcsolás óta már több idő telt el) úgy a következő szerkezetre ugrik a vezérlés.
Az if (ido>500 and ido<=1000); sor megvizsgálja, hogy az ido-változó értéke 501-1000 között van-e. Ha teljesül a feltétel akkor végrehajtja az utasításait, ha nem, akkor tovább ugrik a következő szelekcióra. Az and egy logikai és, ami a két feltétel egyidejű teljesítését kapcsolja össze, azaz egyszerre kell nagyobbnak lennie 501-nél és kisebb-egyenlőnek lennie 1000-nél.
Az ido-változó vizsgálatai tehát:
- 0-500 msec
- 501-1000 msec
- 1001-1500 msec
- 1501-2000 msec
- 2001-2500 msec. Ezután több vizsgálat nincs, a program kezdi elölről.
Az egyes független feltételvizsgálatok utáni utasítások egy-egy astabil multivibrátor programot tartalmaznak, azaz a 10-edik gyakorlati feladat (15. ábra) főprogramját úgy, hogy az egyes kis programok csak a késleltetési idő értékében különböznek egymástól. A kapcsos zárójel bezárása után, azaz két független feltételvizsgálat között pedig késleltetések (szünetek) vannak, pontosan akkora idővel, mint ami az azt megelőző szelekció utasításában találhatók. (Ez a 11-edik gyakorlati feladat és a 16-odik ábrájára hasonlít, kisebb módosítással, azaz először lefut a vezérlés mindkét led-re, majd utána tart szünetet). A program 22,5 másodperc alatt fut le, és a működése 15 lépésben a következő lesz:
1 - Led1 H és led2 L: 500 msec-ig
2 - Led1 L és led2 H: 500 msec-ig
3 - Led1 H és led2 H: szünet 500 msec-ig
4 - Led1 H és led2 L: 1000 msec-ig
5 - Led1 L és led2 H: 1000 msec-ig
6 - Led1 H és led2 H: szünet 1000 msec-ig
7 - Led1 H és led2 L: 1500 msec-ig
8 - Led1 L és led2 H: 1500 msec-ig
9 - Led1 H és led2 H: szünet 1500 msec-ig
10 - Led1 H és led2 L: 2000 msec-ig
11 - Led1 L és led2 H: 2000 msec-ig
12 - Led1 H és led2 H: szünet 2000 msec-ig
13 - Led1 H és led2 L: 2500 msec-ig
14 - Led1 L és led2 H: 2500 msec-ig
15 - Led1 H és led2 H: szünet 2500 msec-ig.
A program függvényei a 18. ábrán láthatók.
18. ábra
Felhasznált irodalom:
http://www.elektromanoid.hu/progi15.html (2022.03.04.)
Kovács Csongor: Digitális elektronika (ismeretlen évjárat)
Angster Erzsébet: Objektumorientált tervezés és programozás – Java 1 (2. kiadás, 2002)
A cikket megírtam: 2022. 03. 08-án
A Rádiótechnikában megjelent: 2022. május