Szilágyi Sándor Zoltán hobbielektronika és amatőr robottechnika oldala

Arduino kezdőknek cikksorozatom, melynek első 13 része publikálásra került. Amatőr robotok, robot autók és LED-kockák építése.

Arduino kezdőknek 14 - A CD74HC238E demultiplexerek párhuzamos kapcsolásai

 

Szilágyi Sándor Zoltán   Villamosmérnök, mérnök-informatikus

 

      A 14.1 cikket megírtam: 2025. 01. 04-06.

      A 14.2 cikket megírtam: 2025. 01. 09-11.

      A 14.3 cikket megírtam: 2025. 01. 12-16.

     A 14.4 cikket megírtam: 2025. 01. 21-24.

    A 14.5 cikket megírtam: 2025. 01. 25-29, 02. 12-13.

   A 14.6 cikket megírtam: 2025. 02. 16-20, 03. 04-05.

 

     2023 novembere után több cikket nem küldtem be a korábban említett magazinba, sőt úgy döntöttem, hogy egy időre félreteszem az egészet és elkezdek másik újságot keresni.

     Kb 1 hónappal később az Erasmus program keretében az eddigi Arduino-s kísérleteimről 4 órán keresztül angol nyelven előadást tartottam 4 török diáknak, akik a törökországi Bursa város egyik középiskolájából jöttek hozzánk másfél hónapra (heti egy napot velem töltöttek, így angolul tanítottam őket az elektronika, méréstechnika, gyengeáram, erősáram, törpefeszültség, kisfeszültség, Arduino-s tervezés, PLC-s célgéptervezés és szerelés, Eplan tervezés, épület villanyszerelés témaköreiben). Ezután ismét félretettem, de 2023 december végén elővettem és felélesztettem a korábban épített 2+4 tranzisztoros H-hidat, mely egy DC motort hajtott meg. Ezután semmi kedvem nem volt folytatni a korábban említettek miatt a publikálást, így 1 évre ténylegesen is abbahagytam az egészet.

     Néhány hét lélekben történő felkészülés után 2025 január 4-edikén késő este vettem elő, de úgy döntöttem, hogy nem a H-híd szöveges részével folytatom, hanem a félbehagyott demultiplexerek, és a még el sem kezdett multiplexerek és shift regiszterek alkalmazása jön, ezek a témakörök legyenek először rendbe téve és csak utána kezdek bele a robotokba.

 

 

14.1 - Két CD74HC238E demultiplexer IC párhuzamos kapcsolása (33. program)

 

     A Rádiótechnika 2023 februári számában jelent meg a demultiplexereket bemutató publikációm Arduino kezdőknek 11 címmel. Itt egy CD74HC238E típusú demultiplexert vezéreltem az Arduino digitális kimeneti portján keresztül. Ez egy 3-bemenetű DMX, azaz a bemeneti jelkombináció 8-féle lehet, több nem, viszont kevesebb előfordulhat: 2³=8 szabály szerint. Így tehát maximum 8 db kimenete lehet, melyek közül egynek mindig aktívnak kell lennie.

 

     Nemrég támadt egy ötletem, mi lenne ha a demultiplexerrel vezérelt demultiplexerek előtt megpróbálkoznék a párhuzamos kapcsolásaikkal. A kérdés, hogy az Arduino digitális kimeneteire köthetek-e több fogyasztót egymással párhuzamosan? A CD74HC238E demultiplexer IC adatlapja szerint a bemeneti áramerősség max 20 mA lehet, de kevesebb lesz, mert a rajta keresztül folyó áram időben egyszerre csak egy védőellenálláson és a vele sorbakapcsolt LED-en folyik keresztül. Ezért az erős fényű ledeket most kerüljük el, mert azokhoz meghajtó áramkör szükséges. Az Arduino UNO Rev3 adatlapja szerint az 5V-os digitális kimeneteken max 40 mA folyhat. Így tehát párhuzamosan köthető a két IC. Találtam erre egy példa kapcsolást is a neten, ahol egy db kimenetre több LED és egy piezo hangszóró is rá volt kötve. Tehát el kell bírnia a picit nagyobb terhelést. Párhuzamos kapcsolás esetén elég csak az A0, A1, A2 címkiválasztó bemeneteket (Address Select) és a G0|, G1| és G2 engedélyező/tiltó bemenetet párhuzamosan kapcsolni a másik IC ezekkel megegyező bemeneteivel. Az Arduino digitális kimeneteinek kiosztása megegyezik a 11-edik cikkemben közöltek szerint (50. ábra kapcsolási rajza). A két IC kimeneti oldala hasonló, érdemes a másodikra más színű ledeket kötni. Az előtét ellenállások értéke mind a 16 esetben 220Ω. Az IC-k 8-as lábát az Arduino GND pontjára kell felfűzni, viszont a 16-os VCC lábra az előző cikkekben említettekhez hasonlóan nem szabad tápfeszültséget kötni, mert az IC ellentétben az adatlapján leírtakkal nem igényel pozitív tápfeszültséget, ugyanis ez a láb folyamatosan +5V-os feszültségen van működése közben. A villamos kapcsolási rajz az 59. ábrán, a próbapanel fényképe a 60. ábrán van. 

 59._abra_-_demultiplexerek_parhuzamos_kapcsolasa_-_javitott.png

59. ábra

 

 60._abra_kicsinyitett.jpg

60. ábra

 

     A működtető program (33. program) teljesen megegyezik a 11-edik cikk programjával (52. ábra), a különbség csak a megjegyzésben van. A hardveres bővítés nincs kihatással a programra, mivel az Arduino digitális kimenetei változatlanok, így a leírását felesleges mégegyszer közzé tennem mert a 11-edik fülön megtalálható. A két demultiplexer időben egyszerre lép működésbe, és a kimenetekre kapcsolt megfelelő pozícióikban levő LED-ek is egyszerre kerülnek logikai magas-, majd alacsony szintre: Y0(IC1) és Y0(IC2), Y1(IC1) és Y1(IC2), Y2(IC1) és Y2(IC2),......végül Y7(IC1) és Y7(IC2), majd kezdődik elölről a végtelen ciklus. A program a 61. ábrán látható.

 61._abra_-_demultiplexerek_parhuzamos_kapcsolasanak_programja.png

61. ábra

 

 

14.2 - Két párhuzamos adatbemenetű de ellenfázisban vezérelt demultiplexer, a rájuk kapcsolt 8-8 bites futófénnyel (34. program)

 

 

     Az előző pont programjának a továbbfejlesztése következik, azaz a feladat, hogy ne csak a futófények kapjanak astabil jelleget, hanem az IC-k vezérlése is. Erre többféle megoldás létezik, mivel 3 féle engedélyező/tiltó bemenetük van. Bonyolultabb megoldás lehet az adatbemenetek időzített engedélyezése/tiltása, ez irányba indultam el program írásakor, de látva a felesleges bonyolultságot, inkább az egyszerűbb megoldást választottam. Nem szükséges tehát mindhárom (|E1, |E2, E3) enable bemenetet astabil multivibrálni, elegendő egyet kiválasztani. Én az E3-ast választottam. Az előző 14.1-es pontban az Arduino 8-as számú digitális I/O portját outputként használva folyamatos magas szintű jelet kaptak az IC1 E3 és az IC2 E3 engedélyező bemenetei, azaz párhuzamosan voltak rákapcsolva. A mostani feladatban viszont a DO-ként definiált 8-as portra csak az IC1 E3-as bemenete van kötve, míg a DO7-re az IC2 E3 pontja. Hardveres szempontból tehát csak ennyi a különbség az előzőhöz képest.

     A kapcsolási rajz a 62. ábrán látható, míg a próbapanel fotója a 63. ábrán.

 

 62._abra_-_2_db_dmx_astabil_multivibratoros_vezerlese.png

62. ábra

 

 63._abra.jpg

63. ábra

 

     A működtető program (a 31. program alapján a 34. program, 64. ábra) a két korábbi (10. és 33.) programok egymásba ágyazása. A deklarációs részben az előző programhoz képest fixen megmaradt a három adatbemenet és az |E1, |E2 tiltó bemenet, míg a hardveres szétválasztás miatt a G2-t (a hardveres E3 bemenet programbeli változója) kellett csak ketté választani, így lett G2_1, mely az IC1 E3 bemenetét reprezentálja és a G2_2, mely az IC1 E3 bemenetéhez tartozik.

     Az előző programban (61. ábra) a ciklus legelején fixen be lettek állítva G0n és G1n tiltó bemenetek LOW értékre, azaz nincs tiltás, és G2 engedélyező bemenet HIGH értékre, azaz van engedélyezés, és csak az a0, a1, a2  adatbemenetek voltak variálva. Viszont a mostani programban G0n és G1n szintén megkapja a ciklus elején a tiltás tiltását, azaz az engedélyezést, viszont a különválasztott G2_1 és G2_2 astabil multivibrátoros vezérlést kapnak, azaz egyik magas, míg másik alacsony állapotba kerül időben egyszerre, 500 ezred másodperces időtartamra úgy, hogy a 3 adatbemenet egy adott fajta variációban kap jelet. Az időzítés lejárta után a G2_1 és G2_2 egymáshoz képesti állapot váltása következik (ismét 500 msec időtartamig) és itt is ugyanazon állapotban lesznek az adatbemenetek.

A program működését kétféleképpen is el lehet magyarázni:

     1. Egy  astabil multivibrátoros ciklus (//1, //2, //3, ... //8 számmal jelzett alciklusok) alatt mindkét IC azonos lábain kerülnek beállításra egyazon adat kombinációs értékek, de az időzítésben szereplő időtartamig, pl. delay(500); esetében 500 msec-ig csak az egyik IC kap vezérlést, a másik nem majd a következő fél másodpercben a második IC kap vezérlést és az első nem. Ezután a következő alciklus kezdődik, azaz sorban az utána jövő sorszámmal (pl. //2) ellátott szekvencia. A nyolc alciklus együttes lefutása adja a teljes ciklust, azaz a két 8-8-bites futófény teljes végigfutását, mely után a program kezdődik elölről.

    2.  A program működését az astabil multivibrátor működési oldaláról is lehet magyarázni (de itt már egyszerűsítek a magyarázattal), azaz a 10. program (Arduino kezdőknek 4, 15. ábra) astabil multivibrátora lett alapul véve. 8-szor fut le ez a program úgy, hogy a 10. programbeli led_1 és a led_2  változók helyett a G2_1 és G2_2 változók vezérlik az astabil multivibrátort, de szekvenciálisan követi őket minden egyes állapot beállítás után az a1, a2, a3 változók logikai értékadása is.

 

ra_-_astabil_multvibratorral_vezerelt_2_dmx_8-8_bites_futofeny_javitott.png

64. ábra

 

 

 14.3 - Két CD74HC238E demultiplexer IC párhuzamos kapcsolása és monostabil multivibrátoros vezérlésük (35. program)

 

     Az Arduino kezdőknek cikksorozatom elején (4, 5, 6. számok) végigvettem a multivibrátorok alapjait. Az ASMV után az MSMV következett, így most is ezzel folytatom. A monostabil multivibrátorok elméleti alapjait tehát az 5. részben leírtam, itt csak a továbbfejlesztéssel folytatom, melyet a későbbiekben újabb és újabb folytatás fog követni.

     Az előző (14.2 rész) áramkörét tovább változtatjuk és bővítjük. A bővítés csak egy 10k-s ellenállást és egy nyomógombot tartalmaz, és egy szoftveres lebegésmentesítést. A változtatás az IC-k párhuzamos kapcsolásában van. A nyomógombnak ugyanis semmi köze a DMX-ek működéséhez, mert az, az Arduino egy adott bemenetként definiált digitális pinjére csatlakozik. A DMX-ek ki- és bekapcsolása astabil multivibrátornál elegendő volt egy láb vezérlésével. Bár a nyomógombnak fizikailag semmi köze a használt IC-hez, mégis egy működésképtelen hardvert fogunk kapni, ha csak a korábban használt E3 lábat programozzuk az IC-k ki- és bekapcsolására. Nem kísérleteztem két lábbal, hanem egyből a három lábas változatot választottam, azaz az |E1, |E2, E3 engedélyező/tiltó bemenetek egyaránt kapnak külön-külön vezérlést. Így tehát csökkent a két demultiplexer párhuzamos kapcsolásának a jellege, de egy bizonyos mértékig megmaradt, mivel az A0, A1, A2 adatbemenetek továbbra is párhuzamosan vannak kapcsolva az Arduino 11, 12, 13 lábaira. A hardver kapcsolási rajza a 65. ábrán látható, a szerelőlap fotója pedig a 66. ábrán.

 

65._abra_-_2_db_dmx_monostabil_multivibratoros_vezerlese.png

 65. ábra 

 

66._abra_-_2_db_dmx_monostabil_vezerlese_panel.jpg

66. ábra

 

     A forráskód (67. ábra) elején az előző program G0n, G1n, G2 változóit  felbontjuk G0n_1,  G1n_1,  G2_1,  G0n_2,  G1n_2,  G2_2-re, mivel a board korábbi 8, 9, 10 digitális kimenete mellett a 2, 3, 4-et is felhasználjuk. Továbbra is mindegyik byte típusú, mivel a változóink vagy igaz vagy hamis állapotot fognak felvenni. A setup részben pinMode-ként vesszük fel őket. Az INPUT_PULLUP paranccsal a belső felhúzó ellenállást kapcsoljuk be a legjobb lebegésmentesítés érdekében, a nyomógomb számára (lásd a 2. cikkem, ahol alaposan elmagyaráztam a működését)

     A ciklus egy egyszerű, de nagy méretű szelekcióból áll, mely a végén egy 20 millisecundumos pergésmentesítéssel zárul. A feltétel megadás fordított működést eredményez, mint a korábban bemutatott monostabil multivibrátorok esetében. Az if-es ágban a magas szint a nyomógomb alap állapotát jelenti, azaz amikor nincs megnyomva (azaz nem azt, mint amit első ránézésre gondolnánk, magas állapot = meg van nyomva), az else viszont a megnyomottat. Ha tehát a gomb nincs megnyomva, akkor az "if" utáni feltétel teljesül, és DMX1 működését engedélyezi, míg DMX2 le lesz tiltva, azaz a DMX1 kimenetére kapcsolt 8-bites futófény (piros ledek) fog működni. Ha a nyomógombot megnyomjuk, akkor az "else" ág lesz igaz, kikapcsol a DMX1, és a DMX2 lesz aktív, az ő kimenetére kapcsolt zöld ledek fognak futófényként világítani.

     A működésében négy eset lehetséges:

     1. Ha "if" állítás igaz, button nincs benyomva, piros ledes futófény aktívan működik
     2. Ha a gombot megnyomjuk, majd elengedjük úgy, hogy még a piros ledek világítanak, az "else" ág igaz lesz a gombnyomás alatti időtartamra, de mivel még fut az "if" ág ciklusa, így az "else" ág ciklusa nem hajtódik végre. Ez azért van, mert itt még nincs tényleges megszakítás kezelés, mivel ez még nem bistabil jelleg, azaz a nyomógomb megnyomásának a hatására nem szakítja meg az éppen futó folyamatot.
     3. Ha a gombot szintén megnyomjuk a piros ledek futása alatt, de nyomva is tartjuk a zöld ág megindulásáig és csak azután engedjük el, vagyis az "if" ág ciklusa után az "else" ág aktív egy ciklusig, majd a gombot elengedve az "if" ág kapja meg újra a vezérlést: ez a monostabil jelleg, azaz ez az egy stabil állapota van a rendszernek. A DMX2 vezérlése tehát egy instabil állapot, mely a saját ciklusának a lefutásáig tart.
     4. Ha a gombot megnyomjuk és a saját ciklusidején túl is nyomva tartjuk, az "else" ág folyamatosan igaz. Ekkor az  "if" ág ciklusa lefut, majd az "else" ághoz tartozó zöld ledekből álló futófény működik újra és újra, egészen addig, amíg el nem engedjük a gombot és le nem fut a hozzá tartozó vezérlés. Ezután kikapcsol a DMX2 és visszakapja a vezérlést a logikailag stabil DMX1 ledsora...

 

67._abra_-_2_db_dmx_monostabil_multivibratoros_vezerlese_program.png

67. ábra

 

 

14.4 - 2 db kapcsolótranzisztorral meghajtott, lebegésmentesített nyomógombos, monostabil multivibrátorral vezérlet, 2 db párhuzamosan kapcsolt demultiplexeres, pergésmentesített, astabil multivibrátoros 8-8 bites futófény (36. program)

 

     Korábban már írtam tranzisztor illesztéséről, tranzisztoros LED-futófények meghajtásáról. Azok a demultiplexer kimeneteire voltak kötve. Most először az Arduino digitális kimeneteire fogunk tranzisztorokat kötni. Fontos, hogy kis jelűek legyenek (BC sorozat), mivel az Arduino kimeneteit nem terhelhetjük túl (Az Arduino UNO Rev3 adatlapja szerint az 5V-os digitális kimeneteken max 40 mA folyhat.), lásd a 14.1 cikkem leírását, ahol erről is írtam. A tranzisztor kiválasztásánál az is szempont, hogy ne nagyfrekvenciás típus legyen, hanem egy olcsó, szokványos típus, mely digitális impulzusokat könnyedén kezelni tud. Így esett a választás az Arduino kezdőknek sorozatom 13. részében használt BC337-40-es NPN tranzisztorra. Mivel néhány évtizeddel ezelőtt kb. minden tévében benne volt, így bontásból több tucatot halmoztam fel, meghibásodás esetén nem jelent gondot a csere.

     A BC337-40-es adatlapja szerint a bázis-emitter feszültsége max 5,0 Volt lehet, ez megegyezik azzal az értékkel, ami az Arduino digitális kimenetén is megjelenik a GND pontjához képest (ez nálam kb. 4,8V). Hogy ne terheljük túl a tranzisztort, egy 1k-s előtét ellenállás kapcsoljunk vele sorosan, így a bázisra jutó feszültség kb. 0,8V lesz, mely már elegendő a tranzisztor bekapcsolásához.

     A kapcsolt tranzisztor feszültségei (egy tizedesre kerekítve) működés közben, maradva a fent említett BC337-40-es típusnál: Ucb=0,8V, Ube=0,8V, Uce=0,0V, eközben a rákapcsolt futófény folyamatosan működik. A másik, nem kapcsolt tranzisztoron, azaz az, amelyik nem kap az Arduino-ról jelet a következő feszültség értékek jelennek meg: Ucb=2,4V, Ube=0,0V, Uce=2,4V.

     A tranzisztorok emitter kivezetései földpontra csatlakoznak, ellenállást nem kell kapcsolni rájuk. A kollektor körbe kapcsoljuk a ledek katódjait, melyek 220Ω-os előtét ellenállásokon keresztül párhuzamosan kapcsolódnak a demultiplexer kimeneti kapcsaira, azaz minden LED közös pontja a katódok összekapcsolása, melyet a korábbi kapcsolásoknál levő GND helyett a tranzisztor kollektorához fogunk kötni, és az emitteren keresztül kapcsolódunk a földhöz, amennyiben a bázison megkapja az engedélyező jelet. Az áramkör kapcsolási rajza a 68. ábrán látható, a próbapanel fényképe a 69. ábrán.

     A demultiplexerek Vcc kimenetére továbbra se szabad tápfeszültséget kötni, mert kiégnek. Az Arduino által engedélyezett DMX ezen kimenetén kb. 3,3V van, míg a tiltott DMX ezen kimenetén kb. 4,0 Voltos feszültség van a GND ponthoz képest.

 

._abra_-_2_db_dmx_monostabil_multivibratoros_vezerlese_tranzisztorokkal.png

68. ábra

 

 _2_db_dmx_monostabil_multivibratoros_vezerlese_tranzisztorokkal_boardon.jpg

69. ábra

 

     A program a 2020. 04. 14-edikén írt LED-mátrix programjára épült, az astabil- és monostabil multivibrátoros programok összeollózásával. A 2020 tavaszán írt programjaim közül csak néhányat publikáltam a Rádiótechnikában, amik kimaradtak, az a közeljövőben fognak kikerülni ide, a weboldalamra.

     Mivel a program java része megegyezik a 14. részben publikált programokkal, így csak az eltéréseket és a főbb dolgokat írom le:

- A tranzisztorok bázisai (előtét ellenállásokon keresztül) az Arduino 4, 5 digitális kimeneteire csatlakoznak, így azokat byte típusú változóval deklaráltam.

- A bázisok OUTPUT-ként lettek definiálva

- Az előző programhoz képest maradt a nyomógomb, a lebegésmentesítés és a pergésmentesítés változatlanul.

- Egy if - else szelekció vizsgálja meg, hogy a gomb be van-e nyomva. Mint az előző programban, itt is fordítva működik a vizsgálat, azaz a HIGH állapot jelent a nem megnyomottat, míg az else ágban szereplő (a program lényegi működésében van, a sorok közt nem látszik) LOW állapot jelenti a benyomott állapotot.

- Az előzőekben közölt hosszú programokhoz képest itt az összevonást alkalmaztam, azaz a szekvenciákat nem írtam le kétszer, azaz a szelekció egyes ágai után ugyanúgy, hanem a feltételvizsgálat után, külön szekvenciaként. Így tehát ezek mindenképpen lefutnak, a szelekció állapotától függően, mely csak a tranzisztorok bázisaira van kihatással. Azaz mindkét demultiplexer megkapja az adatbemeneteire ugyanazt a 3 bites jelsorozatot, időben egyszerre, de csak az a DMX fog működni, amelyik a hozzá tartozó tranzisztoron keresztül engedélyt is kap a kimeneti körének záródására a föld felé, a ledeken keresztül.

 

_2_db_dmx_monostabil_multivibratoros_vezerlese_tranzisztorokkal_probram.png

70. ábra 

 

 

14.5 - Felfutó- és lefutóélre kapcsolt, megszakítás kezeléssel vezérelt, 1-nyomógombos, 2 db párhuzamosan kapcsolt demultiplexer (37. program)

 

     Az astabil és a monostabil multivibrátoros kapcsolások után a bistabil multivibrátorok következnek. Ezt a kis témakört két részre osztanám, mégpedig a megszakításkezeléses de még monostabil jellegű és a megszakításkezeléses de már bistabil jellegű programokra.

     Hardver tekintetében a 14.3-as fejezet kapcsolását fejlesztjük tovább egy apró módosítással, lásd a 71. ábrát. a különbség a két kapcsolás között csupán annyi, hogy a nyomógomb nem a 6-os digitális I/O-ra, hanem a 2-esre van kötve, azaz arra, amelyik megszakítás kezelésre alkalmas. A DMX2 engedélyező/tiltó bemenetei így a 3, 4, 5 digitális I/O-kra vannak kötve. A panel fényképe a 72. ábrán látható.

 71._abra_-_1_nyomogombos_megszakitas_kezeles_2_dmx-el.png

71. ábra

 

  72._abra_-_1_nyomogombos_megszakitas_kezeles_2_dmx-el.jpg 

72. ábra

 

      A program (73. ábra) működése: a DMX1 folyamatosan vezérlés alatt áll, a rá kötött piros ledekből álló 8-bites futófény aktívan működik. A gombot megnyomva, majd nyomva tartva a felfutó él idejétől kezdve, azaz nem teljes ciklus időtartamáig a vezérlést a DMX2 kapja meg, így a rá kötött zöld ledekből álló 8-bites futófény működik. Fontos, hogy a 2-es demultiplexer nem az első led kivezérlésével kezdi, hanem azon lábán levővel, amelyikkel a DMX1-esetében félbehagyta. A gomb megnyomásának a pillanatában, azaz a felfutó él bekövetkeztekor láthatóvá válik a 13-adik cikkemben leírt, Cd74HC238E minőségi hibája. A gombot folyamatosan nyomva tartva a ciklus a 2-es demultiplexeren lefut, majd - mivel ez még monostabil jellegű - visszakapja a vezérlést a DMX1, és annak első ledjétől kezdődően fut a program tovább újra, és újra. Ha az eddig folyamatosan nyomva tartott gombot elengedjük, a lefutó élre megismétlődik pontosan ugyanaz a folyamat, mint ami a felfutó élre is történt. Az IC minőségi hibája itt is ugyanúgy látható a lefutó él idejéig. Ezután ha nem érünk hozzá a gombhoz, a DMX1 kapja a vezérlést a végtelenségig.

     A void setup ()-ban a korábbi beállítások mellé felvesszük az 1-gombos megszakítás kezelést is az attachInterrupt(0, intr, CHANGE) függvénnyel. A 6-odik cikkemben már részletesen leírtam a függvény és a CHANGE paraméter működését, így azt most kihagyom, akit érdekel, lapozzon vissza.

      Két különböző ciklust tartalmaz a program. Az első a loop (), mely folyamatosan aktív, ezen van a vezérlés, így a DMX1-re kötött futófény működik. Ha a 2-es interrupt lábra kötött nyomógombot megnyomjuk, akkor a felfutóélre megtörténik a megszakításkezelés, és a rendszer átadja a vezérlést a DMX2-nek a folyamatban levő ciklus befejezéséig, illetve a nyomva tartott gombot elengedve szintén ugyanez játszódik le. Akár megnyomjuk, akár elengedjük a gombot, az intr () ciklus fog lefutni onnantól, ahol épp tartott az alap setup ()- ciklus, és ha véget ért, nem indul újra, mivel csak 1 db nyomógomb van a rendszerben, itt nincs még meg a bistabil jelleg.

 

 73._abra_-_1_nyomogombos_megszakitas_kezeles_2_dmx-el.png

73. ábra

 

 

14.6 - Megszakítás kezeléssel vezérelt bistabil multivibrátoros, 2-nyomógombos, 2 db párhuzamosan kapcsolt demultiplexer (38. program)

 

     A 14. rész végén elérkeztünk a valódi bistabil multivibrátorokhoz, melyek két megszakítás kezelő függvényt használnak. A fejezetet ezzel a modellel és programmal zárom. Később, még más jellegű alkalmazásoknál újra vissza fogok térni hozzá, továbbfejlesztve az itt megszerzett ismereteket.

     A modell alapjául a 6. fejezet (cikk) 18. programja és a 28. ábra kapcsolása szolgált. A kapcsolás a 14. fejezetre jellemző 2 db demultiplexerrel és a hozzájuk kapcsolt 8-8 bites astabil futófénnyel, illetve 1-1 visszajelző leddel bővült. A programban csak a megszakítási rutin lett kibővítve a demultiplexerek állapotvezérléseivel. A visszajelző ledeket nem kellett külön-külön felprogramozni, mivel azok a két DMX IC G2_1 és G2_2 azaz az IC-k 6-os lábai (E3 engedélyező bemenetei). Ha az adott IC 6-os lába az Arduino felől engedélyező jelet kap, azaz logikai magas szintre kerül, akkor a vele párhuzamosan kapcsolt led is (a 220 ohmos előtét ellenálláson keresztül) szintén logikai magas állapotba kerül, azaz folyamatosan világít. A bistabil jelleg tehát azt jelenti, hogy ezt a két engedélyező bemenetet kapcsolgatjuk felváltva. Azaz először a board indításakor egyik DMX se kap engedélyezést, nem működik egyik futófény sem. Bármelyik gombot megnyomva a hozzá tartozó DMX (és visszajelző led) E2 lába logikai magas szintre kerül, azaz megkapja a vezérlést, és a végtelenségig működik a hozzá kapcsolt futófény. Ezután bármikor a saját nyomógombját megnyomva, azon változás nem tapasztalható, a futófény menete nem változik meg, nem kezdi előröl, azaz nem szakítja meg önmagát. Szintén bármikor, tehát akár az első ciklusban, akár bármelyik következőben a másik nyomógombot megnyomva a hozzá tartozó megszakítási rutin felfüggeszti az előző folyamatot és átadja a vezérlést az ehhez tartozó DMX-nek, mely a rá kapcsolt futófénnyel együtt a végtelenségig működik. Ezután minden ugyanúgy folytatódik, mint az előző esetben, csak fordítva, azaz az első DMX-hez tartozó nyomógombot megnyomva felfüggeszti a DMX2 vezérlését (elalszik a futófény és az ellenőrző led is), és ismét visszakerül a vezérlés a DMX1-hez. A gombokat akárhányszor megnyomhatjuk, a bistabil jelleg is örök, akárhányszor lehet váltani a két folyamat között. A két DMX IC-nek csak az adatbemeneteik vannak párhuzamosan kapcsolva, az engedélyező/tiltó bemeneteik külön-külön kapnak vezérlést az Arduino-ról. A hardvert és az előző kapcsolásokhoz képesti módosításokat lásd a 74. ábrán, illetve a board fotóját a 75. ábrán.

 

74._abra_-_2_nyomogombos_megszakitas_kezeles_2_dmx-el.png

74. ábra

 

 75._abra_-_2_nyomogombos_megszakitas_kezeles_2_dmx-el.jpg

75. ábra

 

76._abra_-_2_nyomogombos_megszakitas_kezeles_programja.png

76. ábra

 

     A program (76. ábra) működése a 14. részben leírtakhoz hasonló, kiegészítve a 18. program bistabil multivibrátoros megszakítás kezelő függvényeivel. Először mindkét nyomógombot definiáljuk és deklaráljuk a korábbi programokhoz hasonlóan. A setup ()-ban a korábbi beállítások mellé felvesszük a két nyomógomb lebegésmentesítését, illetve megadjuk a két megszakítás kezelő rutint is a digitalPinToInterrupt-al, mely után már nem a pin számát hanem a nyomógombok definiált változónevét kell írni. A függvény működésmódja LOW lesz, azaz nem történik élvezérlés (a gombot folyamatosan nyomva is tarthatjuk).

     Ezek után következik a 3 db void típusú függvény kibontása, először az interrupt_1(), majd az interrupt_2(), végül a loop(),  mely a végtelenségig futó alap ciklust tartalmazza a DMX-ek párhuzamos adatbemeneteire adott 3 bites tehát 8 féle jelkombinációt tartalmazó jelsorozattal és a végén a szokásos pergésmentesítéssel.

     A megszakítás kezelő függvények hasonlóak, egymás tükörképei, melyek csak szekvenciákat tartalmaznak. 2x3 sort tartalmaznak, azaz az adott függvényhez  tartozó DMX engedélyező/tiltó bemeneteivel beállítja az aktív állapotot, míg a másik DMX-et passzív állapotba teszi. A loop() ciklusra egyik megszakítás kezelő függvény sincs hatással, az a végtelenségig szolgáltatja a 3 bites jelsorozatot a demultiplexerek adatbemeneteinek.

  

Felhasznált irodalom:

https://octopart.com/datasheet/arduino+uno+rev3-arduino-27999717

https://www.alldatasheet.com/html-pdf/220509/TI/CD74HC238E/93/3/CD74HC238E.html

https://forum.arduino.cc/t/bc337-transistor-to-control-led-strip-with-common-ground/1086366/3

 

Weblap látogatottság számláló:

Mai: 10
Tegnapi: 3
Heti: 13
Havi: 138
Össz.: 3 867

Látogatottság növelés
Oldal: Arduino kezdőknek 14 - demultiplexerek párhuzamos kapcsolása
Szilágyi Sándor Zoltán hobbielektronika és amatőr robottechnika oldala - © 2008 - 2025 - szilagyi-robot.hupont.hu

A HuPont.hu ingyen adja a tárhelyet, és minden szolgáltatása a jövőben is ingyen ...

ÁSZF | Adatvédelmi Nyilatkozat

X

A honlap készítés ára 78 500 helyett MOST 0 (nulla) Ft! Tovább »