Obsah:

Ako čítať mnoho prepínačov jedným pinom MCU: 4 kroky
Ako čítať mnoho prepínačov jedným pinom MCU: 4 kroky

Video: Ako čítať mnoho prepínačov jedným pinom MCU: 4 kroky

Video: Ako čítať mnoho prepínačov jedným pinom MCU: 4 kroky
Video: LDmicro 14: ЖК-дисплей I2C и часы реального времени DS3231 (программирование лестничной схемы ПЛК микроконтроллера с помощью LDmicro) 2024, November
Anonim
Ako čítať veľa prepínačov s jedným pinom MCU
Ako čítať veľa prepínačov s jedným pinom MCU

Vyhýbali ste sa niekedy projektu (projektom) a projekt stále rastie a rastie, pričom do neho pridávate ďalšie veci (hovoríme tomu Feaping Creaturism)? Na nedávnom projekte som postavil frekvenčný merač a pridal som päťfunkčný generátor signálu/frekvenčný syntetizátor. Čoskoro som skončil s väčším počtom prepínačov, než mi zostalo k dispozícii, takže čo má chlap robiť?

Čoskoro som však mal na svojom Funboxe ďalších sedem prepínačov (áno, tomu som hovoril generátor funkcií … Viem, nemám žiadnu kreativitu) a tu je krátky návod, ktorý vám ukáže, ako môžete to isté urobiť. Nevyžaduje žiadne posuvné registre ani konkrétne integrované obvody. V skutočnosti nevyžaduje ani mikrokontrolér, ak sa otáčate diskrétnymi polovodičmi. Toto je jeden zo spôsobov, ako môžete čítať/spravovať viac prepínačov pomocou jedného kolíka na AVR (alebo inom mikrokontroléri … Počul som, že okrem AVR existujú aj ďalšie mikrokontroléry, ale neviem si to predstaviť …).:)

Krok 1: Základy (nie naozaj)

Aby ste to dosiahli, budete potrebovať niekoľko komponentov. Pomáha mať množstvo prepínačov, ktoré musíte spravovať. Budete tiež potrebovať nejaké odpory a buď mikrokontrolér, ktorý má ADC (analógovo-digitálna konverzia), alebo iným spôsobom, ktorým by ste chceli naznačiť, že bol aktivovaný spínač a ktorý to bol.

Ak by ste chceli, môžete na to použiť napäťovo riadený oscilátor, možno pomocou blikajúcich svetiel alebo alternatívne so zvukom. V tomto prípade budem predstierať, že používame AVR, ale vo svojom svete môžete predstierať, že vás robí šťastným. Chýba mi Bob Ross.

Krok 2: Delič napätia

Delič napätia
Delič napätia
Delič napätia
Delič napätia

V zásade to urobíme pomocou techniky a obvodu nazývaného delič napätia. Oddeľovače napätia robia, ako ste asi uhádli, delenie napätia V,, v, nejakou hodnotou, ktorú určíte. Napätie môžete rozdeliť na niekoľko komponentov vrátane kondenzátorov a induktorov, ale tu to urobím pomocou dobrého odporu. Myšlienka To, čo robíme, je zaradenie dvoch komponentov do série, ktoré spôsobia, jednotlivo, pokles napätia v komponente. Pozrite sa na prvý obrázok, ak mi to nedáva zmysel. Existuje potenciálny rozdiel 9 V od koľajnice k železnici. Medzi 9V a 0V sú dva odpory v sérii. Každý z nich zaznamená pokles napätia sám v závislosti od odporu, ako si pravdepodobne pamätáte z V = IR. Ak zmeráte napätie medzi dvoma odpormi, dostanete nejakú hodnotu medzi 9 V a 0 V, v závislosti od toho, koľko napätia pokleslo na prvom odpore a koľko ešte zostáva poklesnúť cez druhý odpor pred 0 V. V tejto situácii existuje jednoduchý vzorec na výpočet poklesu napätia na rezistore a vyzerá to takto. Nech napätie na odpore 1 (R1) je V1 a napätie na odpore dva (R2) je V2. Pretože už nemôžem používať formátovanie, pozrite sa na obrázok 2 nižšie na vzorec … Takže v našom odporovom deliči môže byť napätie Vout určené naším vzorcom pre V2 (pretože budeme odkazovať na GND na 0V). Čo to má spoločné s tým, že je z jedného kolíka zistených veľa prepínačov? Otočte stránku a ja vám to ukážem!

Krok 3: Rebrík rozdeľovača napätia

Rebrík rozdeľovača napätia
Rebrík rozdeľovača napätia

Teraz predpokladajme, že máme všetky naše prepínače, možno šesť alebo osem alebo šestnásť, všetky prepojené pomocou odporov, z ktorých každý funguje ako delič napätia tak, že keď sa zmení stav spínacieho kolíka, napätie sa odčíta a na základe napäťovej hladiny môže vedieť, ktorý prepínač bol práve aktivovaný. Pozrite sa nižšie. Na obrázku nižšie som spojil dva bloky prepínačov. Najhornejší blok má dva prepínače a najspodnejší blok má päť prepínačov. Rovnakým spôsobom môžete pripojiť svoje samostatné prepínače, chvíľkové, hmatové atď. Dôležitá vec, ktorú si musíte všimnúť, je odpor, ku ktorému je pripojený váš prepínač. V mojom prípade som takmer zdvojnásobil odpor ďalšieho rezistora, aby som vytvoril medzeru napätia, ktorú je ľahké merať a nemýliť sa s prepínačom pred alebo po. Ak ste si to predtým nevšimli, znova sa pozrite a uvedomte si, že sme späť u nášho starého priateľa, odporového deliča napätia. Prvý odpor, 10 kOhm, je pripojený k 5 V a druhý odpor - odpor, ktorý bude určovať Vvon pre kolík SWITCH_ADC je pripojený ku každému prepínaču, a preto je ku každému prepínaču priradené konkrétne napätie Vout, ktoré je možné čítať z kolíka ADC pripojeného na SWITCH_ADC. Ďalej určte očakávaný Vout z každého prepínača

Vout = Vin * (R2 / (R1 + R2))

pre prepínač jeden:

Výstup = 5 V * (500 / (10 000 + 500)) = 5 * 0,048 = 0,24 V alebo 240 mV

pre prepínač dva:

Výstup = 5 V * (2200 / (10 000 + 2200)) = 5 * 0,18 = 0,9 V alebo ~ 900 mV

a tak ďalej.. Pokojne nahraďte R2 svojimi vlastnými hodnotami, ak máte poruke iba určité odpory … Kľúčovou vecou je udržať dostatočne širokú medzeru v napätí medzi prepínačmi, aby zvíťazila akákoľvek chyba v ADC. t vás uvedie do napätia očakávaného od susedného spínača. Zistil som, že najľahšie je postaviť deliaci rebrík a na pin ADC vložiť multimetr/voltmetr a stlačiť každý kolík a zistiť, aké hodnoty získate. Mali by byť celkom presní v tom, čo vypočítate. Akonáhle budete mať všetky očakávané hodnoty napätia z každého prepínača pomocou konkrétneho odporu, potom môžete nechať svoj MCU prečítať pin ADC a porovnať ho so svojimi známymi hodnotami, aby ste zistili, ktorý spínač bol stlačený. Povedzme napríklad, že ste zaregistrovali rutinnú službu prerušenia, ktorá sa bude volať vždy, keď dôjde k zistenej zmene na pine ADC. Vnútri tohto ISR by ste mohli prečítať ADC a porovnať túto hodnotu s vašou prepínacou tabuľkou. Ak používate 8-bitovú hodnotu ADC, vaše napätie bude prevedené na číslo medzi 0 a 255, ktoré zodpovedá napätiu medzi 0 V a 5 V. To predpokladá, že máte takto nakonfigurovaný ADC.

Krok 4: Zhrnutie

Teraz by ste teda mali vedieť, ako šetriť na používaní pinov GPIO na prepínače. Kedykoľvek vám začnú dochádzať piny GPIO alebo s nimi takmer žiadny nebudete mať, alebo ak si uvedomíte, že budete používať banku prepínačov, odporový delič je spôsob, ako uložiť svoje piny GPIO a súčasne poskytnúť robustný mechanizmus na detekciu prístupu prepínača.

Odporúča: