Arduino Shields - rozširujúce dosky pre arduino. Rozšírenie analógových vstupov v Arduino Arduino rozšírenie vstupných výstupných portov

  • 10.02.2022

Nové články

● 5.4. Rozšírenie digitálnych portov pre NodeMCU ESP8266 pomocou čipu MCP23017

Zavedieme LED indikáciu a zvukový alarm pri použití modulu Nodemcu ako ovládača inteligentnej domácnosti. Počet pinov na module Nodemcu je oveľa menší ako na Arduino Mega, takže potrebujeme vstupný expandér IC MCP23017. Čip MCP23017 pridáva 16 portov, ktoré je možné nakonfigurovať pre vstup aj výstup (obrázok 5.7). Čip využíva populárnu dvojvodičovú I2C zbernicu.

Ryža. 5.7. Pinouty MCP23017

Adresu čipu MCP23017 pre protokol I2C je možné nastaviť kombináciou signálov na digitálnych vstupoch A0 - A2 (obr. 5.8), čo umožňuje pripojiť k mikrokontroléru súčasne 8 čipov MCP23017, respektíve 16* 8 = 128 kolíkov.

Ryža. 5.8. Nastavenie adresy čipu MCP23017

Čip má 2 banky portov A (GPA0-GPA7) a B (GPB0-GPAB), z ktorých každý môže byť nakonfigurovaný na vstup alebo výstup.
Výpis 5.3. ukazuje príklad nastavenia výstupných bánk A a B.

Výpis 5.3

// pripojenie knižnice Wire.h #zahŕňajú byte input=0 ; void setup()( Serial.begin(9600); Wire.begin(0,2); // spustenie I2C Wire.beginTransmission(0x20); // i2c - adresa (A0-0,A1-0,A2-0) Wire.write(0x00); // register IODIRA Wire.write(0x00 ); // nastavíme PORT A ako výstup Wire.endTransmission(); ) prázdna slučka (){ // načítanie údajov z PORT B Wire.beginTransmission(0x20 ); Wire.write(0x13 ); Wire.endTransmission(); Wire.requestFrom(0x20, 1); input=Wire.read(); // zápis prijatých údajov na PORT A Wire.beginTransmission(0x20 ); Wire.write(0x12 ); // adresa PORT A Wire.write(input); // PORT A Wire.endTransmission(); oneskorenie(100); // pauza)

Použitie čipu MCP23017 rozšíri počet digitálnych kontaktov modulu Nodemcu o 16 a umožní organizáciu LED indikácie a zvukovej signalizácie kritických parametrov snímača.

Každý má rád lacné dosky Arduino, ale projektu často doslova chýba jeden alebo dva voľné porty! A niekedy je dosť portov, ale nechcete ťahať zväzok drôtov do inej časti konštrukcie. Predpokladajme, že na predný panel zariadenia potrebujete umiestniť niekoľko tlačidiel a LED diód. Je spoľahlivejšie a jednoduchšie ich pripojiť k základnej doske iba pomocou dvoch vodičov dátovej zbernice a nie pomocou kábla alebo zväzku, však?

Pre takéto situácie sú určené rôzne expandéry (expandéry) Arduino portov.

Piny mikrokontroléra zvyčajne implementujú niekoľko rôznych funkcií, takže expandéry sú odlišné:

  1. Štandardný rozširovač portov GPIO
  2. PWM výstupný expandér
  3. Expandéry analógových vstupov - multiplexory a externé ADC

Samostatne stojí za zmienku digitálno-analógové prevodníky (DAC) a expandéry adresného priestoru zbernice I2C. Tieto zariadenia priamo neduplikujú funkcie portov, ale rozširujú možnosti mikrokontrolérov.

V prvom článku série si povieme o najjednoduchších a najužitočnejších expandéroch, ktoré fungujú ako digitálne I/O porty. Ide o mikroobvody a. Sú usporiadané a fungujú úplne identicky a líšia sa iba počtom portov.

Výber modulu expandéra pre Arduino

Najpopulárnejší a najlacnejší modul je vyrobený na čipe PCF8574 (obr. 1)

Ryža. 1.Populárny modul expandéra portov PCF8574

výhody:
  • Nízka cena.
  • Moduly možno reťazovo spájať jednoduchým zasunutím zástrčiek jedného modulu do zásuviek predchádzajúceho. Nezabudnite nastaviť prepojky na rôzne adresy modulov!
Nevýhody:
  • Nedá sa vložiť priamo do doštičky (odporúčam prispájkovať konektor portu na zadnú stranu).
  • Celkom osem portov v jednom module.

Ak máte náladu na serióznejšie projekty, objednajte si 16-bitový modul pre PCF8575 na Aliexpress. Dôrazne odporúčam modul zobrazený na obr. 2.

Ryža. 2. Modul expandéra portov PCF8575

výhody:
  • Dvakrát toľko portov.
  • Zabudovaný napájací zdroj 3,3V, môžete napájať ďalšie moduly.
  • Zabudované prispôsobenie logickej úrovne pre zbernicu I2C pri rôznych napájacích napätiach.
  • Pohodlný formát na doštičku.
Nevýhody:
  • Nad cenou.

Ako funguje PCF8574/PCF8575 GPIO Port Expander

Výmena dát prebieha cez I2C zbernicu. Na pripojenie k doske Arduino vrátane napájania sú potrebné iba štyri vodiče. Adresa expandéra sa nastavuje tromi prepojkami na vstupoch A0…A2, takže na zbernicu je možné súčasne pripojiť osem rovnakých čipov a získať tak maximálne 8*8=64 prídavných portov s PCF8574 alebo 8*16=128 s PCF8575 čip.

Pre výstup dát na port zapíšte dátový bajt na adresu modulu na I2C zbernici. Ak chcete čítať údaje z portu, prečítajte si bajt na rovnakej adrese. Bajt sa zapisuje a číta vždy ako celok, práca s jednotlivými číslicami prebieha programovo.

Výstupy mikroobvodu sú súčasne vstupmi a neexistuje žiadny servisný register, ktorý by určoval účel výstupu. Existuje len latch, do ktorého sa zapisuje výstupný bajt. Ako je to možné?

Porty fungujú ako otvorený kolektor a majú vnútorné pull-up odpory. Ak sa na výstup zapíše logická nula, výstupný tranzistor sa otvorí, čo násilne pritiahne výstup „k zemi“. Čítanie z takéhoto portu vždy vráti nulu.

Buďte opatrní pri privádzaní priameho napájacieho napätia na kolík s nízkou úrovňou alebo pri prekročení prúdu 50 mA zničíš čip!

Ak chcete použiť port ako vstup, napíšte doň jedničku. V tomto prípade bude vnútorný tranzistor uzavretý a výsledok čítania bude určený externou logickou úrovňou aplikovanou na kolík. Voľný výstup je napájaný pomocou vstavaného odporu.

Aby bolo možné súčasne použiť niektoré porty ako vstupy a niektoré ako výstupy, pred zápisom každého dátového bajtu do expandéra je potrebné použiť masku jednotiek na tie bity, ktoré zodpovedajú vstupom pomocou operácie „logické OR“ . To je všetko)))

Generovanie prerušenia

PCF857* Expandéry portov generujú prerušovací impulz nízky level na výstupe INT pri akejkoľvek zmene vstupného signálu na ktoromkoľvek vstupe mikroobvodu. To je výhodné, ak expandér obsluhuje klávesnicu. V obslužnom programe prerušení však musíte určiť, ktoré tlačidlo bolo stlačené alebo uvoľnené. Generátor prerušení je vybavený filtrom na potlačenie chvenia.

Príklad 1: Použitie modulu PCF8574

Zostavme si jednoduchý obvod zo štyroch LED, modulu PCF8574 a dosky Arduino (obr. 3 a 4). Pri tejto schéme spínania nepotrebujeme ani zhášacie odpory pre LED. Prúd preteká cez LED a vstavaný odpor pripojený k napájacej lište.

Ryža. 3. Schéma zapojenia modulu PCF8574

Ryža. 4. Usporiadanie obvodov s modulom PCF8574

Skopírujte a vložte skicu 1 do dosky Arduino:

// Adresa modulu na zbernici (A0, A1, A2 = 0) int adresa = 0x38; // Dáta načítané z modulu uint8_t dataReceive; // Dáta, ktoré sa majú zapísať do modulu uint8_t dataSend; void setup() ( Wire.begin(); Serial.begin(9600); // Vysoká na všetky porty PCF8574 dataSend = B11111111; pcf8574_write(dataSend); ) void loop() ( // Čítanie bajtu z modulu dataReceive = pcf8574_read (); // Výstup na monitor v binárnom formáte Serial.println(dataReceive, BIN); // Posunutie bitov doľava o nibble dataSend = dataReceive<< 4; // Накладываем битовую маску dataSend |= B00001111; // Записываем байт в модуль pcf8574_write(dataSend); delay(500); } // Процедура записи байта в модуль void pcf8574_write(uint8_t dt) { Wire.beginTransmission(address); Wire.write(dt); Wire.endTransmission(); } // Процедура чтения байта из модуля int8_t pcf8574_read() { Wire.beginTransmission(address); Wire.endTransmission(); Wire.requestFrom(address, 1); return (Wire.read()); }

Vysoká úroveň je spočiatku zapísaná do všetkých portov mikroobvodu, takže porty P0 ... P3 môžu fungovať ako vstupy.

Úrovne na kolíkoch portu sa čítajú každých 500 ms a výsledok čítania sa zobrazuje na monitore. Ak pripojíte jeden zo vstupov P0…P3 na spoločný vodič, v jeho bite sa objaví nula. Potom sa načítaná hodnota posunie doľava o štyri bity, výsledok sa odošle na port a jedna z LED zhasne. Napríklad, ak sa na kolíku P0 načíta nula, LED pripojená na kolík P4 zhasne.

Všimnite si, že pred každým zápisom do expandéra musíme použiť bitovú masku jednotiek na všetky bity, ktoré by mali byť vstupmi: dataSend |= B00001111;

Podprogramy pre prácu so zbernicou I2C sú extrémne zjednodušené, nespracúvajú sa žiadne chyby.

Poradenstvo: na nájdenie a kontrolu adresy modulu na zbernici I2C môžete použiť . Výstupom na terminál sú adresy všetkých zariadení, ktoré reagujú na požiadavku zbernice.

Príklad 2: Použitie modulu PCF8575

Zvláštnosťou modulu PCF8575 je, že má 16 portov, teda ono vždy píšte dva bajty a čítajte dva bajty. Toto pravidlo je potrebné dodržať, aj keď druhý bajt nie je potrebný.

Zmeňme trochu schému. LED pripojíme na porty P10 ... P13 a porty P00 ... P03 pripojíme prepojkou na spoločný vodič (obr. 5 a 6).

Ryža. 5. Schéma zapojenia modulu PCF8575

Ryža. 6. Rozloženie obvodov s modulom PCF8575

Náčrt 2 najskôr zapíše jednotky na všetky porty a potom každých 500 ms načíta ich stav. Procedúra čítania vracia 16-bitové slovo, ktoré je rozdelené na bajty. Obsah dolného bajtu (piny P00…P07) sa skopíruje do horného bajtu a nahrá sa späť do modulu. Ak je jeden z výstupov P00…P03 pripojený na spoločný vodič, potom jedna z LED pripojených k P10…P13 zhasne.

// Knižnica pre prácu s I2C #include // Adresa modulu na zbernici predvolene int adresa = 0x20; // Dáta načítané z modulu uint8_t hi, lo; uint16_t dataReceive; uint8_tdataHighByte; // Vysoký bajt (P10...P17) uint8_t dataLowByte; // Nízky bajt (P00...P07) void setup() ( Wire.begin(); Serial.begin(9600); // Vysoká úroveň pre všetky porty PCF8575 dataHighByte = B11111111; dataLowByte = B11111111; pcf8575_dataByte,data ); ) void loop() ( // Čítanie bajtu z modulu dataReceive = pcf8575_read(); // Tlač na monitor v binárnom formáte Serial.println(dataReceive, BIN); // Extrahovanie nízkeho bajtu z dlhého slova dataLowByte = lowByte(dataReceive ); // Skopírujte nízky bajt do vysokého bajtu dataHighByte = dataLowByte; // Maskovanie dolného bajtu dataLowByte |= B11111111; // Zapíšte nové údaje do modulu, dva bajty pcf8575_write, dataHighByte; delay(500); ) / / Postup zápisu bajtu do modulu void pcf8575_write(uint8_t dtl, int8_t dth) ( Wire.beginTransmission(address); Wire.write(dtl); // Zápis nízkeho bajtu (P00... P07) Wire.write(dth); / / Zápis vysokého bajtu (P10...P17) Wire.endTransmission(); ) // Postup čítania bajtu z modulu int16_t pcf8575_read( ) ( Wire.beginPrenos(adresa); Wire.endTransmission(); Wire.requestFrom(adresa, 2); lo = Wire.read(); // Čítanie nízkeho bajtu (P00...P07) hi = Wire.read(); // Čítanie vysokého bajtu (P10...P17) return (word(hi, lo)); // Vrátiť dlhé slovo )

Knižnica Arduino pre PCF8574/PCF8575

Knižnicu je možné stiahnuť z GitHub. Ako však vidíte, práca s rozširovačmi portov je veľmi jednoduchá a pokojne sa zaobídete aj bez špeciálnej knižnice.

Jednou z kľúčových výhod platformy Arduino je jej popularita. Populárna platforma je aktívne podporovaná výrobcami elektronických zariadení, ktorí uvoľňujú špeciálne verzie rôznych dosiek, ktoré rozširujú základnú funkčnosť ovládača. Takéto dosky, celkom logicky nazývané expanzné dosky (iný názov: arduino shield, shield), slúžia na plnenie najrozličnejších úloh a môžu arduinianovi výrazne zjednodušiť život. V tomto článku sa dozvieme, čo je rozširujúca doska Arduino a ako ju možno použiť na prácu s rôznymi zariadeniami Arduino: motory (štíty ovládačov motora), obrazovky LCD (štíty LCD), karty SD (zapisovač údajov), snímače (štít senzora) a mnoho ďalších.

Poďme najprv pochopiť pojmy. Rozširujúca doska Arduino je kompletné zariadenie určené na vykonávanie určitých funkcií a pripája sa k hlavnému ovládaču pomocou štandardných konektorov. Ďalším populárnym názvom pre rozširujúcu dosku je anglický štít Arduino štít alebo jednoducho štít. Všetky potrebné elektronické komponenty sú nainštalované na rozširujúcej doske a interakcia s mikrokontrolérom a ďalšími prvkami základnej dosky prebieha prostredníctvom štandardných arduino pinov. Najčastejšie je shield napájaný aj z hlavnej arduino dosky, aj keď v mnohých prípadoch je možné ho napájať aj z iných zdrojov. V každom štíte je niekoľko voľných kolíkov, ktoré môžete použiť podľa vlastného uváženia pripojením akýchkoľvek iných komponentov k nim.

Anglické slovo Shield sa prekladá ako štít, clona, ​​clona. V našom kontexte to treba chápať ako niečo, čo zakrýva dosku ovládača, čím vzniká ďalšia vrstva zariadenia, obrazovka, za ktorou sa skrývajú rôzne prvky.

Prečo sú potrebné štíty arduino?

Všetko je veľmi jednoduché: 1) aby sme ušetrili čas a 2) niekto na tom mohol zarobiť. Prečo strácať čas navrhovaním, umiestnením, spájkovaním a ladením niečoho, čo si môžete vziať už zmontované a začať ihneď používať? Rozširujúce dosky, ktoré sú dobre navrhnuté a zostavené na kvalitnom hardvéri, sú zvyčajne spoľahlivejšie a zaberajú menej miesta v konečnom zariadení. To neznamená, že musíte úplne opustiť vlastnú montáž a nemusíte pochopiť princíp fungovania určitých prvkov. Skutočný inžinier sa predsa vždy snaží pochopiť, ako to, čo používa, funguje. Ale budeme môcť vyrábať zložitejšie zariadenia, ak nebudeme zakaždým znovu objavovať koleso, ale zameriame svoju pozornosť na to, čo pred nami vyriešilo len málo ľudí.

Prirodzene, za príležitosti musíte platiť. Takmer vždy budú náklady na konečný štít vyššie ako cena jednotlivých komponentov, vždy môžete podobnú možnosť zlacniť. Tu je však na vás, aby ste sa rozhodli, nakoľko kritický je pre vás vynaložený čas alebo peniaze. Ak vezmeme do úvahy všetku možnú pomoc zo strany čínskeho priemyslu, náklady na dosky neustále klesajú, takže najčastejšie sa volí v prospech použitia hotových zariadení.

Najpopulárnejšími príkladmi štítov sú rozširujúce dosky pre prácu so snímačmi, motory, LCD obrazovky, SD karty, sieťové a GPS štíty, štíty so vstavanými relé na pripojenie k záťaži.

Pripojenie Arduino Shields

Na pripojenie štítu ho stačí opatrne "položiť" na hlavnú dosku. Zvyčajne sa kolíky hrebeňového štítu (samec) ľahko zasúvajú do konektorov dosky Arduino. V niektorých prípadoch je potrebné opatrne vyladiť kolíky, ak samotná doska nie je úhľadne prispájkovaná. Hlavná vec je konať opatrne a nepoužívať nadmernú silu.

Štít je spravidla určený pre veľmi špecifickú verziu ovládača, aj keď napríklad veľa štítov Arduino Uno funguje celkom dobre s doskami Arduino Mega. Pinout na mega je vyrobený tak, že prvých 14 digitálnych kontaktov a kontakty na opačnej strane dosky sa zhodujú s umiestnením kontaktov na UNO, takže sa ním štít z arduina ľahko stane.

Programovanie Arduino Shield

Programovanie obvodu s rozširujúcou doskou sa nelíši od bežného programovania arduina, pretože z pohľadu ovládača sme naše zariadenia jednoducho pripojili na jeho obvyklé piny. V náčrte je potrebné špecifikovať tie kolíky, ktoré sú v štíte spojené s príslušnými kolíkmi na doske. Výrobca spravidla uvádza zhodu kolíkov na samotnom štíte alebo v samostatnom návode na pripojenie. Ak si stiahnete náčrty odporúčané výrobcom dosky, ani to nebudete musieť robiť.

Čítanie alebo zapisovanie signálov štítu sa tiež vykonáva obvyklým spôsobom: pomocou funkcií a iných príkazov, ktoré pozná každý arduinista. V niektorých prípadoch sú možné kolízie, keď ste zvyknutí na túto schému pripojenia a výrobca si vybral inú (napríklad ste vytiahli tlačidlo na zem a na štíte - na napájanie). Tu si len treba dávať pozor.

Spravidla sa táto rozširovacia doska dodáva v arduino kitoch a preto sa práve s ňou ľudia arduina stretávajú najčastejšie. Štít je pomerne jednoduchý - jeho hlavnou úlohou je poskytnúť pohodlnejšie možnosti pripojenia k doske Arduino. To sa deje pomocou prídavných napájacích a uzemňovacích konektorov, privedených na dosku ku každému z analógových a digitálnych kolíkov. Na doske nájdete aj konektory pre pripojenie externého zdroja napájania (pre prepnutie je potrebné osadiť jumpery), LED diódu a tlačidlo reštartu. Možnosti štítu a príklady použitia nájdete na obrázkoch.




Existuje niekoľko verzií rozširujúcej dosky snímača. Všetky sa líšia počtom a typom konektorov. Najpopulárnejšie verzie sú dnes Sensor Shield v4 a v5.

Tento arduino štít je veľmi dôležitý v robotických projektoch. Umožňuje naraz pripojiť bežné a servomotory k doske Arduino. Hlavnou úlohou štítu je zabezpečiť ovládanie zariadení, ktoré spotrebúvajú prúd, ktorý je dostatočne vysoký pre bežnú dosku arduino. Doplnkovými vlastnosťami dosky sú funkcia ovládania výkonu motora (pomocou PWM) a zmeny smeru otáčania. Existuje mnoho druhov dosiek na ochranu motora. Spoločné pre všetky z nich je prítomnosť výkonného tranzistora v obvode, cez ktorý je pripojená externá záťaž, prvky chladiča (zvyčajne radiátor), obvody na pripojenie externého napájania, konektory na pripojenie motorov a kolíky na pripojenie k arduinu.



Organizácia práce so sieťou je jednou z najdôležitejších úloh moderných projektov. Na pripojenie k lokálnej sieti cez Ethernet je k dispozícii príslušná rozširujúca doska.




Prototypovanie rozširujúcich dosiek

Tieto dosky sú pomerne jednoduché - majú kontaktné podložky pre montáž prvkov, zobrazí sa tlačidlo reset a je možné pripojiť externé napájanie. Účelom týchto štítov je zvýšiť kompaktnosť zariadenia, keď sú všetky potrebné komponenty umiestnené bezprostredne nad základnou doskou.





Arduino LCD štít a tft štít

Tento typ štítu sa používa na prácu s LCD obrazovkami v arduine. Ako viete, pripojenie aj tej najjednoduchšej 2-riadkovej textovej obrazovky nie je ani zďaleka triviálna úloha: musíte správne pripojiť 6 kontaktov obrazovky naraz, nepočítajúc napájanie. Oveľa jednoduchšie je vložiť hotový modul do arduino dosky a jednoducho nahrať príslušnú skicu. V populárnom LCD Keypad Shield je k doske okamžite pripojených 4 až 8 tlačidiel, čo umožňuje okamžite organizovať externé rozhranie pre používateľa zariadenia. Pomáha aj TFT Shield



Arduino Data Logger Shield

Ďalšou úlohou, ktorú je dosť ťažké samostatne implementovať do vašich produktov, je ukladanie údajov prijatých zo senzorov s časovou referenciou. Hotový štít umožňuje nielen ukladať dáta a prijímať čas zo vstavaných hodín, ale aj pohodlne pripojiť senzory spájkovaním alebo na doske plošných spojov.




Krátke zhrnutie

V tomto článku sme zvážili iba malú časť z obrovskej ponuky rôznych zariadení, ktoré rozširujú funkčnosť arduina. Rozširujúce dosky vám umožňujú sústrediť sa na to najdôležitejšie – na logiku vášho programu. Tvorcovia štítov zabezpečili správnu a spoľahlivú inštaláciu, potrebné napájanie. Zostáva vám len nájsť dosku, ktorú potrebujete, pomocou obľúbeného anglického slova shield, pripojiť ju k arduinu a nahrať náčrt. Zvyčajne každé programovanie štítu spočíva vo vykonávaní jednoduchých akcií na premenovanie vnútorných premenných už hotového programu. Vďaka tomu získame jednoduchosť používania a pripojenia, ako aj rýchlosť montáže hotových zariadení alebo prototypov.

Nevýhodou používania rozširujúcich kariet je ich cena a možná strata účinnosti v dôsledku všestrannosti štítov, ktorá spočíva v ich povahe. Pre vašu konkrétnu aplikáciu alebo koncové zariadenie nemusia byť potrebné všetky funkcie štítu. V takom prípade by ste mali štít používať iba vo fáze prototypovania a testovania a pri vytváraní konečnej verzie vášho zariadenia premýšľajte o jeho nahradení dizajnom s vlastnou schémou a typom rozloženia. Je to len na vás, máte všetky možnosti pre správny výber.

→ Ako rozšíriť počet analógových vstupov a výstupov na vašom Arduine?

Ako rozšíriť počet analógových vstupov a výstupov na vašom Arduine?

Multiplexer alebo demultiplexer vám umožní rozšíriť počet vstupov a výstupov na vašom Arduine.
4051 je 8-kanálový analógový multiplexor/demultiplexor, teda:
* Ak používate 4051 ako multiplexer: Môžete si vybrať ktorýkoľvek z 8 rôznych vstupov a prečítať jeho stav do ovládača.
* Ak používate 4051 ako demultiplexer, môžete si vybrať ktorýkoľvek z 8 rôznych výstupov a napísať tam požadovanú hodnotu.

4051 tiež dokáže spracovať analógové hodnoty, vo vašom Arduine môžete použiť analógové signály 0-5V a pripojiť IC k analógovým vstupom na Arduine.

Na výber požadovaného mikroobvodového vstupu ako aj režimov čítania alebo zápisu musíme použiť tri riadiace signály (S0, S1 a S2). Každý z týchto kolíkov musí byť pripojený k jednému z digitálnych výstupov Arduina. Každý výstup má číslo (S0 = 1; S1 = 2; S2 = 4) a ak je jeden z týchto výstupov nastavený na vysokú logickú úroveň, počet reprezentovaných kolíkov bude 4051.

Napríklad:
* Ak nastavíte log „1“ na vstupoch mikroobvodu S0 a S1 a log „0“ na S2, potom je zvolený vstup y3 mikroobvodu, vyzerá to takto (1 +2 +0 = 3).
* Ak nastavíte log „1“ na vstupoch mikroobvodu S0 a S2 a log „0“ na S1, potom je zvolený vstup y5 mikroobvodu, vyzerá to takto (1 + 0 + 4 = 5).

Nie je možné čítať alebo zapisovať stav na viac ako jeden 4051 pin súčasne. Ale môžete čítať a zapisovať stav z výstupu čipu pomerne rýchlo. Nie je potrebné žiadne oneskorenie medzi výberom, čítaním alebo zápisom stavu 4051 pinov.

* Z----- spoločný vstupný alebo výstupný signál (prepojený s Arduino I/O)
* E ----- povoliť vstup (aktívny protokol "0") (pripojený k zemi (GND))
* V --- záporné napájacie napätie (pripojené k zemi (GND))
* GND --- uzemnenie záporné (0 V)
* S0-S2 - výber vstupov (pripojené k trom digitálnym pinom Arduino)
* y0-Y7 - nezávislé vstupy/výstupy
* Vcc --- kladné napájacie napätie (5V)



Ľavý obrázok vyššie je príkladom toho, ako použiť 9 multiplexer na čítanie 64 analógových vstupov iba s jedným analógovým vstupom Arduino.
Pravý obrázok vyššie je príkladom toho, ako použiť dva 4051 (jeden nakonfigurovaný ako demultiplexor a jeden ako multiplexor) v matici 8x8 na testovanie 64 tlačidiel alebo iných digitálnych vstupov len z jedného digitálneho vstupu na Arduine (z druhého nastavenia môžete mať iba dve tlačidlá súčasne). V opačnom prípade by ste mali použiť prvé (ľavé) nastavenie).

Príklad kódu:

// Príklad použitia analógového multiplexora/demultiplexora 4051
// od Davida c.

int led = 13 ; // Nastavte LED na 13. nohe
int ro = 0; // výstup vyberte hodnotu na 4051 (S0)
int r1 = 0; // výstup vyberte hodnotu na 4051 (S1)
int r2 = 0; // výstup na výber hodnoty na 4051 (S2)
int riadok = 0 ; // uloženie kódu bin
int pocet = 0 ; // kefa
int bin = (000, 1, 10, 11, 100, 101, 110, 111); // Pole binárnych čísel definujúcich číslo zvoleného vstupu/výstupu čipu 4051, od 1 do 8.
void setup () ( // INITIALIZE
pinMode (2 , VÝSTUP) ; // výstup s0
pinMode (3 , VÝSTUP) ; // výstup s1
pinMode (4 , VÝSTUP) ; // výstup s2
digitalWrite (led , HIGH) ; //rozsvieti LED
beginSerial(9600) ; // Výmenný kurz UART
}

void loop()(
for (počet = 0 ; počet ≤ 7 ; počet ++) ( // cyklus cez prvky poľa od 1 do 8
riadok = bin [ počet ] ;
r0 = riadok & 0x01 ;
r1 = (riadok >> 1) & 0x01 ; //
r2 = (riadok >> 2) & 0x01 ; //
digitalWrite(2, r0) ;
digitalWrite(3, r1) ;
digitalWrite(4, r2) ;
Serial.println(bin);
oneskorenie(1000) ;

Čipy SPI alebo I2C ADC sú ľahko dostupné v rôznych rozlíšeniach, vzorkovacích frekvenciách a počte kanálov. Dajú sa pomerne ľahko pridať do akéhokoľvek Arduina.

Napríklad MCP3208 poskytne 8 kanálov s 12-bitovým rozlíšením na SPI, čo znamená 3 piny (MOSI/MISO/SCK) + 1 na čip (SS). Takže 1 čip bude 4 kolíky, 2 čipy 5 kolíkov, 3 čipy 6 kolíkov atď.

Pridanie veľkého množstva integrovaných obvodov do zbernice SPI však môže byť samo osebe nepríjemné so zvýšenou kapacitou všetkých týchto vstupov, čo znamená, že musíte trochu spomaliť rýchlosť odosielania správ alebo pridať ďalšie vyrovnávacie pamäte, aby sa zbernica poháňala intenzívnejšie.

I2C čipy môžu byť zložitejšie, pretože na zbernici I2C je len obmedzený počet adries – plus na mnohých Arduinos I2C sú tiež dva analógové kolíky, ktoré možno nebudete chcieť obetovať.

Druhá možnosť zahŕňa použitie analógových multiplexerov (napr. 4051) na prepínanie rôznych zdrojov na existujúce analógové vstupy.

Tretia možnosť, o ktorej ste pravdepodobne neuvažovali, je mať viacero arduinos (alebo iných lacných mikrokontrolérov), z ktorých každý robí nejaké načítanie a potom implementuje nejaký spôsob komunikácie medzi nimi (alebo s jedným masterom). To má ďalšiu výhodu v možnosti vzorkovať viacero kanálov súčasne (jeden na mikrokontrolér), čo trochu urýchľuje vašu prácu.

Po rozšírení Mazhenkovej odpovede môžete použiť analógový multiplexer ako 74HC4051 na premenu jedného analógového portu na 8.

Jeho bratranec, 74HC4067, bude multiplexovať 16 portov. Teraz so 6 analógovými vstupmi na Arduino Uno môžete mať 6 x 16 vstupov = 96. Riadiace signály A/B/C môžu byť paralelné.

To vám umožní zvládnuť 96 vstupov so 6 extra čipmi a pomerne jednoduchým kódom. Na svojej stránke mux/demux 74HC4051 mám príklady kódu.

Pre 8 vstupov kód:

// Príklad použitia multiplexora/demultiplexera 74HC4051 // Autor: Nick Gammon // Dátum: 14. marca 2013 const byte sensor = A0; //kde je pripojený vstupný/výstupný port multiplexora // riadky výberu adresy multiplexora (A/B/C) const byte addressA = 6;//bit low-order const byte addressB = 5; const byte addressC = 4; //bit void vyššieho rádu setup()( Serial.begin(115200); Serial.println("Spúšťa sa test multiplexera..."); pinMode(adresaA, OUTPUT); pinMode(adresaB, OUTPUT ); pinMode (adresaC, OUTPUT); ) //koniec nastavenia int readSensor (konšt. bajt ktorý) ( //výber správneho kanála MUX digitalWrite (adresaA, (ktorá & 1) ? HIGH: LOW); //bit nižšieho rádu digitalWrite (adresaB, (ktorá & 2) ? HIGH: LOW); digitalWrite (adresaC, (ktorá & 4) ? HIGH: LOW); //bit vyššieho rádu //teraz čítajte návrat snímača analogRead (senzor); ) / /koniec readSensor void loop () ( //zobrazenie všetkých 8 hodnôt senzora pre (bajt i = 0; i< 7; i++) { Serial.print ("Sensor "); Serial.print (i); Serial.print (" reads: "); Serial.println (readSensor (i)); } delay (1000); } //end of loop

Pracoval som presne s rovnakým problémom. Potrebujem program, ktorý číta 100 termistorov... Prečo? no, ak to potrebuješ.

Už som to dokončil.

Skúšal som multiplexer/demultiplexer 74HC4051. Ale z nejakého dôvodu som nedosiahol požadovaný výsledok.

Prvá vec, ktorú nájdete... NAPÁJANIE, budete potrebovať externé napájanie, v mojom prípade som len vyrobil delič napätia a pripojil termistor k tomuto napájaniu a potom už len použite analógový port na čítanie...

Používam I2C protokol, 8 arduino Mega 7 slave a jeden master. a po odoslaní poslať Integer, float a bla bla mi nefungovalo, aby som to urobil. Môže poslať analógové čítanie cez I2C a master vykoná všetku potrebnú konverziu.

Ak máte stále záujem, môžem vám poslať zdrojový kód pre master a slave. Pomocou tejto šablóny môžete pripojiť až 50 arduino a master vyhľadá každé arduino pripojené k sieti a vyžiada si údaje.