Turinys:

Kaip perskaityti daug jungiklių naudojant vieną MCU kaištį: 4 žingsniai
Kaip perskaityti daug jungiklių naudojant vieną MCU kaištį: 4 žingsniai

Video: Kaip perskaityti daug jungiklių naudojant vieną MCU kaištį: 4 žingsniai

Video: Kaip perskaityti daug jungiklių naudojant vieną MCU kaištį: 4 žingsniai
Video: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, Gruodis
Anonim
Kaip perskaityti daug jungiklių naudojant vieną MCU kaištį
Kaip perskaityti daug jungiklių naudojant vieną MCU kaištį

Ar kada nors užsispyrėte dėl projekto (-ų), o projektas vis auga ir auga, o jūs pridedate prie jo daugiau dalykų (mes tai vadiname svaiginančiu kūrybiškumu)? Neseniai įgyvendinęs projektą aš sukūriau dažnio matuoklį ir pridėjau penkių funkcijų signalo generatorių/dažnio sintezatorių. Netrukus turėjau daugiau jungiklių, nei turėjau kaiščių, tad ką daryti vaikinui?

Tačiau netrukus „Funbox“turėjau dar septynis jungiklius (taip, aš taip vadinau savo funkcijų generatorių … žinau, neturiu kūrybiškumo), ir čia yra trumpas pamokymas, parodantis, kaip galite padaryti tą patį. Tam nereikia jokių pamainų registrų ar specialių IC. Tiesą sakant, tam nereikia ir mikrovaldiklio, jei jūs ritinėjatės atskirais puslaidininkiais. Štai vienas būdas, kuriuo galite skaityti/valdyti kelis jungiklius, naudodami vieną AVR (ar kito mikrovaldiklio… kaištį)… Aš girdėjau, kad be AVR yra ir kitų mikrovaldiklių, bet neįsivaizduoju …).:)

1 žingsnis: esminiai dalykai (ne iš tikrųjų)

Norėdami tai padaryti, jums reikės kelių komponentų. Tai padeda turėti daugybę jungiklių, kuriuos turite valdyti. Jums taip pat reikės kai kurių rezistorių ir mikrovaldiklio, turinčio ADC (analoginio-skaitmeninio konvertavimo) arba kitu būdu, kuriuo norite nurodyti, kad buvo įjungtas jungiklis ir kuris jungiklis buvo.

Jei norite, galite naudoti įtampos valdomą osciliatorių, kad tai parodytumėte, galbūt su kai kuriomis mirksinčiomis lemputėmis arba garsu. Šiuo atveju aš apsimesiu, kad naudojame AVR, bet jūsų pasaulyje galite apsimesti, kas jus džiugina. Pasiilgau Bobo Rosso.

2 žingsnis: įtampos skirstytuvas

Įtampos skirstytuvas
Įtampos skirstytuvas
Įtampos skirstytuvas
Įtampos skirstytuvas

Iš esmės tai padarysime naudodami metodą ir grandinę, vadinamą įtampos dalikliu. Įtampos skirstytuvai, kaip jau spėjote, padalija įtampą V,, į, tam tikra jūsų nustatyta verte. Galite padalyti įtampą keliais komponentais, įskaitant kondensatorius ir induktorius, bet čia aš tai padarysiu su geru rezistoriumi. Idėja Tai, ką mes darome, yra sudėti du komponentus į seriją, dėl kurių kiekviena atskirai sumažės įtampa. Pažvelk į pirmąją nuotrauką, jei nesuprantu. Galimas 9V skirtumas nuo geležinkelio iki geležinkelio. Tarp 9V ir 0V yra du nuoseklūs rezistoriai. Kiekvienas iš jų patirs įtampos kritimą, priklausomai nuo pasipriešinimo, kaip jūs tikriausiai prisimenate iš V = IR. Jei atliksite įtampos matavimą tarp dviejų rezistorių, gausite tam tikrą vertę tarp 9V ir 0V, priklausomai nuo to, kiek įtampos nukrito pirmasis rezistorius ir kiek liko nukristi ant antrojo rezistoriaus iki 0V. Šioje situacijoje yra paprasta formulė, kaip apskaičiuoti įtampos kritimą rezistoriuje, ir tai atrodo taip. Tegul įtampa virš rezistoriaus 1 (R1) yra V1, o įtampa per antrąjį rezistorių (R2) - V2. Kadangi nebegaliu naudoti formatavimo, žiūrėkite 2 paveikslėlį žemiau, kad gautumėte formulę … Taigi, mūsų varžiniame skirstytuve Vout įtampą galima nustatyti pagal mūsų formulę V2 (nes mes nurodysime GND į 0V). Ką tai turi bendro su tuo, kad iš vieno kaiščio aptinkama daugybė jungiklių? Na, pavartyk puslapį ir aš tau parodysiu!

3 žingsnis: įtampos skirstytuvo kopėčios

Įtampos skirstytuvo kopėčios
Įtampos skirstytuvo kopėčios

Dabar tarkime, kad visi mūsų jungikliai, galbūt šeši, aštuoni ar šešiolika, yra prijungti per rezistorius, kurie kiekvienas veikia kaip įtampos skirstytuvas, kad pasikeitus jungiklio kaiščio būsenai, įtampa būtų skaitoma ir pagrįsta įtampos lygiu. gali žinoti, kuris jungiklis ką tik buvo įjungtas. Pažvelkite žemiau. Žemiau esančiame paveikslėlyje aš prijungiau du jungiklių blokus. Viršutiniame bloke yra du jungikliai, o apatiniame-penki jungikliai. Tuo pačiu būdu galite prijungti atskirus perjungimo, momentinius, lytėjimo ir tt jungiklius. Svarbu atkreipti dėmesį į rezistorių, prie kurio prijungtas jūsų jungiklis. Mano pavyzdyje aš beveik padvigubinau kito rezistoriaus varžą, kad būtų sukurtas įtampos tarpas, kurį būtų lengva išmatuoti, o ne suklysti jungikliui prieš ar po. Jei anksčiau to nepastebėjote, pažvelkite dar kartą ir supraskite, kad grįžome pas savo seną draugą - varžinį įtampos skirstytuvą. Pirmasis rezistorius, 10k om, yra prijungtas prie 5V, o antrasis rezistorius - rezistorius, kuris nustatys Višeiti skirtas SWITCH_ADC kaiščiui, yra prijungtas prie kiekvieno jungiklio, todėl kiekvienas jungiklis yra susietas su tam tikra Vout įtampa, kurią galima nuskaityti iš ADC kaiščio, prijungto prie SWITCH_ADC. Tada nustatykite tikėtiną Vout iš kiekvieno jungiklio taip

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

pirmajam jungikliui:

Vout = 5V * (500 / (10000 + 500)) = 5 * 0,048 = 0,24V arba 240 mV

antram jungikliui:

Vout = 5V * (2200 / (10000 + 2200)) = 5 * 0,18 = 0,9V arba ~ 900mV

ir tt.. Nedvejodami pakeiskite savo vertes R2, jei turite po ranka tik tam tikrus rezistorius … Svarbiausia, kad tarp jungiklių būtų pakankamai platus įtampos tarpas, kad bet kokia ADC klaidų riba laimėtų “Neįtraukite į įtampą, kurios tikimasi iš kaimyninio jungiklio. Radau, kad lengviausia yra pastatyti skiriamąsias kopėčias ir uždėti multimetrą/voltmetrą ant ADC kaiščio ir paspausti kiekvieną kaištį ir pamatyti, kokias vertes gausite. Jie turėtų būti gana tikslūs, ką apskaičiuojate. Kai turėsite visas tikėtinas įtampos vertes iš kiekvieno jungiklio, naudodami tam tikrą rezistorių, tuomet galėsite MCU perskaityti ADC kaištį ir palyginti jį su žinomomis vertėmis, kad nustatytumėte, kuris jungiklis buvo paspaustas. Pvz., Tarkime, kad užregistravote pertraukos paslaugų teikimo tvarką, kuri bus iškviesta, kai bus aptiktas ADC kaiščio pakeitimas. Toje ISR galite perskaityti ADC ir palyginti šią vertę su perjungimo lentele. Jei naudojate 8 bitų ADC vertę, jūsų įtampa bus paversta skaičiumi nuo 0 iki 255, kuris atitinka įtampą nuo 0V iki 5V. Tai reiškia, kad jūsų ADC yra sukonfigūruotas taip.

4 žingsnis: santrauka

Taigi, dabar jūs turėtumėte žinoti, kaip taupiai naudoti jungiklių GPIO kaiščius. Kai pritrūksta GPIO kaiščių arba vargu ar su kuo pradėti, arba jei suprantate, kad naudosite jungiklių banką, atsparus skirstytuvas yra būdas išsaugoti GPIO kaiščius, tačiau vis tiek tvirtas mechanizmas, skirtas aptikti jungiklio prieigą.

Rekomenduojamas: