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 15 - A CD74HC238E demultiplexerek A/D átalakítós vezérlései

 

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

 

A 15.1 cikket megírtam: 2025. 03. 27-28

 

15.1 - 8-bites demultiplexeres, ide-oda astabil futófény potenciométeres AD átalakítóval(39. program)

   

     2022. Augusztusában jelent meg a rádiótechnikában az "Arduino kezdőknek" cikksorozatom 7. része, melyben az alap analóg beviteli eszközökről írtam. Ez 1 db potenciométert tartalmazott, mely 0-5VDC feszültségjelet vitt be az Arduino egy adott analóg bemenetére, majd mintavételezés-kvantálás-kódolás után a soros monitoron megjelentette valós időben a feszültség éréket.

     2022 szeptemberében megjelent az "Arduino kezdőknek" cikksorozatom 8. része, melyben tovább vittem az A/D átalakítók alapjait 3 különböző programon át, a led kapcsolgatás potenciométerrel (de nem PWM-el), led fényerő változtatás és led villogtatási sebesség változtatás PWM-el (impulzus szélesség modulációval), szintén potméterrel.

     Tehát eddig 2 db publikációm jelent meg ebben a témában, összesen 3 féle alap kapcsolással és 4 féle alap programmal. Ezt a gyakorlati tudást bővítem tovább, az utóbbi cikkeimben megszokott demultiplexeres futófényekkel. Az eddigiekhez hasonlóan ezek is csak modellek lesznek a folyamatosan felépítendő gyakorlati tudás miatt, konkrét alkalmazások majd később jönnek.

     A hardver a 77. ábrán látható. Az áramkör két részből tevődik össze. Az egyik az 50. ábra, mely az Arduino kezdőknek 11 alapkapcsolása. A 13, 12, 11 digitális kimenetekre 3 bites jelsorozatot adunk, mellyel a demultiplexer 3 adatbemenetét vezéreljük, és a megfelelő jelkombinációhoz tartozó Y0-Y7 kimenet aktív lesz. A másik rész a 35. ábra, mely az Arduino kezdőknek 8. rész egyik kapcsolása. A potenciométert 5V és 0 V közé kapcsoljuk úgy, hogy a csúszkája az A0 analóg bemenetre csatlakozik. Az Arduino egy belső programozható AD átalakítót tartalmaz. Mint ahogy a fent említett cikkemben írtam, az analóg bemenetről beolvasott feszültség értéket egy 0-1023 közötti számmá alakítja át. 0V esetén tehát 0-át, 5V esetén 1023-at ad, köztes állapotban pedig az adott értékhez tartozó 0-1023 közötti értéket. A két áramkör résznek villamos szempontból semmi köze egymáshoz, a potenciométer input, az Arduino a feldolgozó egység, a demultiplexeres futófény pedig az output szerepét tölti be. A próbapanel fényképe a 78. ábrán látható.

 

 77._abra_-_dmx_8bites_futofeny_ad_converteres_leptetese.png

77. ábra

 

 78._abra_-_dmx_8bites_futofeny_ad_converteres_leptetese.jpg

78. ábra

 

     A program a 79. ábrán látható. A deklarációs részben felvesszük a 6 db digitális kimenetet a DMX vezérléséhez, illetve két integer típusú változót az A/D átalakító működéséhez. A pinMode()-okkal csak a 6 db digitális kimenetet kell konfigurálni.

     A főprogram két szekvenciával kezdődik. Először beolvassa a potenciométer csúszkájáról vett analóg feszültségjelet (pot), majd áthelyezi a "value"-ba, ahol a map() függvény újraképezi a változó értékét. 

     A map() függvény szerkezete: map(value, fromLow, fromHigh, toLow, toHigh);, ami a 79. ábrán így néz ki: „value=map(value, 0, 1023, 0, 1023);”. Öt paramétere van:

     - value: ez a feltérképezendő szám. Ebbe töltötte át a program a "pot"-ba beolvasott értéket

     - fromLow: a szám aktuális tartományának alsó határa, azaz a "0".

     - fromHigh: a szám aktuális tartományának felső határa, azaz a "1023".

     - toLow: a céltartomány alsó határa, azaz a "0".

     - toHigh: a céltartomány felső határa, azaz a "1023".

     A mi esetünkben tehát az aktuális tartomány (fromLow) alsó határa "0", (fromHigh) felső határa "1023". Az analogRead() ezen tartományon belüli értéket ad vissza. Teljesen letekert potméternél 0-t, míg teljesen feltekert potméternél 1023-at. A céltartomány (toLow) alsó határa szintén "0", míg a (toHigh) felső határa szintén "1023". Azért 0-1023, mert erre a cél értéktartományra képezi le az új számot.

     A következő szekvencia 3 sorból áll, melyben a demultiplexer engedélyező/tiltó bemeneteit állítjuk be, melyek közül a G0n és a G1n általános digitális kimenet helyett a 10-es és a 9-es PWM jellegű digitális kimenetre lett kötve. A PWM jelentése: Pulse-Width Modulation, azaz impulzusszélesség moduláció. Ez egy olyan vezérlés, ahol állandó periódusidő mellett a jel bekapcsolási idejét, azaz az impulzus szélességét változtatjuk. Minél nagyobb az amplitúdó változása, annál nagyobb az impulzusszélesség. A board AD átalakítója az A0  bemenetről beolvasott értéket a fentebb említettek alapján feldolgozza, adott szélességű impulzusra alakítja. A potenciométer adott állásától függően tehát adott szélességű impulzus jelenik meg a PWM kimeneteken.

     A szekvenciák után egy szelekció következik, mely 8 db független feltételt vizsgál meg, azaz az if-es szerkezeteknek nincs else ága. Ezek a lehetséges zárt-zárt intervallumok a következők:

1:   0 <= value and value <= 127

2:   128 <= value and value <= 255

3:   256 <= value and value <= 383

4:   384 <= value and value <= 511

5:   512 <= value and value <= 639

6:   640 <= value and value <= 767

7:   768 <= value and value <= 895

8:   896 <= value and value <= 1023.

 

     A <= azaz a 'kisebb egyenlő' az 'egyenlő' miatt lesz zárt, azaz az egyik feltétel végén levő egész szám érték már nem szerepelhet a következő intervallum elején, attól 1 egész számmal nagyobbnak kell lennie. Továbbá fontos, hogy egész számokat használjunk.

     Ha tehát nem teljesül a feltétel az első feltételvizsgálatnál, a program tovább adja a vezérlést a következő vizsgálatnak, majd tovább és tovább egészen addig, ahol a feltétel teljesül. Ekkor a kapcsos zárójelek közötti szekvenciális utasítások végrehajtódnak, azaz megtörténik a demultiplexer adatbemeneteinek 3 bites vezérlése (analogWrite() helyett digitalWrite() van, mivel nem egy LED-et, hanem a demultiplexert fogjuk kivezérelni), majd végül a pergésmentesítés. Ha tehát egy if-es ág lefutott,  kezdődik a folyamat elölről, az analóg jel beolvasásával...

 

 79._abra_-_dmx_8bites_futofeny_ad_converteres_leptetese.png

79. ábra

 

 

15.2 - 8-bites demultiplexeres astabil futófény sebességének változtatása potenciométeres AD átalakítóval

  

     A hardver az előző ponthoz képest változatlan marad, csak a programot kell átírni. A feladat, hogy a potenciométer ide-oda forgatásával ne az épp világító led pozíciója változzon, hanem a 8-bites astabil futófény sebessége. Ehhez két korábban megírt programot használhatunk fel. Az egyik a 31-ik, mely "Demultiplexer teszt" néven jelent meg a 2023 februári Rádiótechnikában (Arduino kezdőknek 11). A másik a 22. program,  "LED villogtatása (logaritmikus) potenciométerrel", mely az Arduino kezdőknek 8-adik cikkem egyik programja volt, (Rádiótechnika 2022 szeptemberi szám).

     A program a 80. ábrán látható. A deklarációs részben felvesszük a 6 db digitális kimenetet a DMX vezérléséhez, illetve két integer típusú változót az A/D átalakító működéséhez, akárcsak az előző feladatnál. A pinMode()-okkal itt is csak a 6 db digitális kimenetet kell konfigurálni.

     A főprogram csak szekvenciákat tartalmaz. Először beolvassa a potenciométer csúszkájáról vett analóg feszültségjelet (pot), majd áthelyezi a "value"-ba. Ezután feltételvizsgálat nélküli lefutó szekvenciák sorozata jön. Az 2-4 sor a demultiplexer engedélyezése, majd 8x4 sor jön (a 80. ábrán a 4-edik sor a 3-adik végén található helytakarékossági okokból). Minden négy soros rész egy-egy 3 bites adatot küld ki a DMX adatbemeneteire, mely a hozzá tartozó 0-7 kimenetek valamelyikét logikai igaz állapotba kapcsolja át. Egy kimenete mindig igaz állapotú, azaz nincs szünet két led aktív állapota között. A negyedik szekvenciális sor pedig egy késleltetés, azaz a "value" változó értékét használja fel a program. Az adott kombinációhoz tartozó led tehát a változóban eltárolt értéknek megfelelő ideig aktív, utána a soron következő led lesz aktív, mely szintén ugyanezt a változót használja fel a saját időzítésére úgy, hogy annak az értéke folyamatosan változhat a potenciométer forgatása miatt, de ameddig a ciklus nem fut le, addig az előzőleg beolvasott-feldolgozott értéket használja. Ha tehát a ciklus lefutott, kezdődik előröl, beolvasva az úgy analóg feszültségjelet, melyet a korábban ismertetett A/D átalakítás után újra felhasznál az időzítésre. Így tehát a potméter forgatása miatti sebességváltozás mindig csak az adott ciklus lefutása után lesz érzékelhető. A program végén ennél a feladatnál nincs szükség pergésmentesítésre.

 

80._abra_-_dmx_8bites_futofeny_adc_sebesseg_valtoztatasa.png

80. ábra

 

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

Mai: 5
Tegnapi: 3
Heti: 8
Havi: 133
Össz.: 3 862

Látogatottság növelés
Oldal: Arduino kezdőknek 15 - A/D átalakítók 3
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 »