Cuprins:

Cum să citiți multe comutatoare cu un singur pin MCU: 4 pași
Cum să citiți multe comutatoare cu un singur pin MCU: 4 pași

Video: Cum să citiți multe comutatoare cu un singur pin MCU: 4 pași

Video: Cum să citiți multe comutatoare cu un singur pin MCU: 4 pași
Video: How to use up to 10 push button switch with 1 Arduino input pin ANPB-V1 2024, Iunie
Anonim
Cum să citiți multe comutatoare cu un singur pin MCU
Cum să citiți multe comutatoare cu un singur pin MCU

V-ați gândit vreodată la un proiect (e) și proiectul continuă să crească și să crească, în timp ce adăugați mai multe lucruri (numim asta un Creaturism Feaping)? La un proiect recent, construiam un contor de frecvență și adăugam un generator de semnal cu cinci funcții / sintetizator de frecvență. Curând m-am încheiat cu mai multe comutatoare decât mi-au rămas pini disponibili, deci ce să faci un tip?

Cu toate acestea, am avut în curând încă șapte comutatoare pe Funbox (da, așa am numit-o generatorul meu de funcții … Știu, nu am creativitate) și iată un scurt instructiv care vă arată cum puteți face la fel. Nu necesită registre de schimbare sau IC specifice. De fapt, nu necesită niciun microcontroler, dacă semiconductorii discreți sunt modul în care rulezi. Iată o modalitate prin care puteți citi / gestiona mai multe comutatoare folosind un singur pin pe AVR (sau alt microcontroler … Am auzit că există și alte microcontrolere în afară de AVR, dar nu-mi pot imagina …).:)

Pasul 1: Elementele esențiale (nu chiar)

Pentru a realiza acest lucru, veți avea nevoie de câteva componente. Vă ajută să aveți o multitudine de comutatoare pe care trebuie să le gestionați. De asemenea, veți avea nevoie de niște rezistențe și fie de un microcontroler care are ADC (conversie analog-digitală), fie de un alt mod în care doriți să indicați că a existat un comutator activat și care a fost comutatorul.

Dacă doriți, puteți utiliza un oscilator controlat de tensiune pentru a indica acest lucru, poate cu niște lumini intermitente sau, alternativ, cu sunet. În acest capitol, voi pretinde că folosim un AVR, dar în lumea ta poți pretinde orice te face fericit. Mi-e dor de Bob Ross.

Pasul 2: Divizorul de tensiune

Divizorul de tensiune
Divizorul de tensiune
Divizorul de tensiune
Divizorul de tensiune

În esență, modul în care vom face acest lucru este prin utilizarea unei tehnici și a unui circuit numit divizor de tensiune. Separatoarele de tensiune, după cum probabil ați ghicit, împart tensiunea V,, în,, cu o anumită valoare pe care o determinați. Puteți împărți tensiunea cu mai multe componente, inclusiv condensatoare și inductoare, dar aici o voi face cu rezistența bună. Ideea Ceea ce facem este să punem două componente în serie care vor provoca, fiecare în mod individual, o scădere a tensiunii pe componentă. Uită-te la prima poză dacă nu am sens. Există o diferență de potențial de 9V de la șină la șină. Între 9V și 0V există două rezistențe în serie. Fiecare dintre acestea va experimenta o cădere de tensiune în sine, în funcție de rezistență, așa cum probabil vă amintiți de la V = IR. Dacă luați o măsurătoare de tensiune între cele două rezistențe, veți obține o anumită valoare între 9V și 0V, în funcție de cât de multă tensiune a scăzut pe primul rezistor și de cât a mai rămas să scadă peste al doilea rezistor, înainte de 0V. Există o formulă simplă pentru calcularea căderii de tensiune pe un rezistor în această situație și arată astfel. Fie tensiunea peste rezistorul 1 (R1) să fie V1 și tensiunea peste rezistorul doi (R2) să fie V2. Deoarece nu mai pot utiliza formatarea, uitați-vă la imaginea 2 de mai jos pentru formula … Deci, în divizorul nostru rezistiv, tensiunea Vout poate fi determinată de formula noastră pentru V2 (deoarece vom face referire la GND la 0V). Ce legătură are asta cu detectarea unei grămezi de comutatoare de la un singur pin? Ei bine, întoarce pagina și îți arăt!

Pasul 3: Scara divizor de tensiune

Scara divizor de tensiune
Scara divizor de tensiune

Acum, să presupunem că avem toate comutatoarele noastre, poate șase sau opt sau șaisprezece, toate conectate prin intermediul rezistențelor care acționează fiecare ca un divizor de tensiune astfel încât, atunci când starea pinului comutatorului se schimbă, tensiunea este citită și se bazează pe nivelul de tensiune, poate ști care comutator tocmai a fost activat. Privește jos. În imaginea de mai jos, am conectat două blocuri de comutatoare. Blocul de sus are două comutatoare, iar blocul de jos are cinci comutatoare. Puteți conecta comutatoarele separate, momentane, tactile etc. în același mod. Important este să observați rezistența la care este conectat comutatorul. În exemplul meu, aproape că am dublat rezistența următorului rezistor pentru a crea un decalaj de tensiune ușor de măsurat și să nu confund cu comutatorul înainte sau după. Dacă nu ați observat până acum, uitați-vă din nou și realizați-vă că ne-am întors la vechiul nostru prieten, divizorul de tensiune rezistiv. Primul rezistor, 10k ohm, este conectat la 5V și al doilea rezistor - rezistorul care va determina Vafară pentru pinul SWITCH_ADC, este conectat la fiecare comutator și, prin urmare, fiecare comutator este asociat cu o anumită tensiune Vout care poate fi citită de la pinul ADC conectat la SWITCH_ADC. Apoi, determinați Vout-ul așteptat de la fiecare comutator astfel

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

pentru comutatorul unu:

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

pentru comutatorul doi:

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

și așa mai departe.. Simțiți-vă liber să înlocuiți propriile valori cu R2 dacă aveți la îndemână doar anumite rezistențe … Lucrul cheie aici este să păstrați un spațiu suficient de mare în tensiune între comutatoare, astfel încât orice marjă de eroare pe ADC să câștige ' Nu vă puneți în tensiunea așteptată de la un comutator vecin. Am găsit cel mai ușor lucru de făcut este să construiți scara separatoare și să puneți un multimetru / voltmetru pe pinul ADC și să apăsați fiecare pin și să vedeți ce valori obțineți. Ar trebui să fie destul de la față la ceea ce calculați. Odată ce aveți toate valorile de tensiune așteptate de la fiecare comutator folosind un anumit rezistor, atunci puteți solicita MCU-ului dvs. să citească pinul ADC și să îl comparați cu valorile cunoscute pentru a determina ce comutator a fost apăsat. De exemplu, spuneți că ați înregistrat o rutină de service de întrerupere care va fi apelată ori de câte ori se detectează o modificare pe pinul ADC. În interiorul acelui ISR, puteți citi ADC și puteți compara acea valoare cu tabelul de comutare. Dacă utilizați o valoare ADC pe 8 biți, tensiunea dvs. va fi convertită într-un număr între 0 și 255 care corespunde unei tensiuni între 0V și 5V. Aceasta presupune că aveți ADC configurat în acest fel.

Pasul 4: Rezumat

Deci, acum ar trebui să știți cum să fiți frugal la utilizarea pinilor GPIO pentru comutatoare. Ori de câte ori nu mai aveți pini GPIO sau cu greu aveți de început, sau dacă vă dați seama că veți folosi o bancă de comutatoare, divizorul rezistiv este calea de urmat pentru a vă salva pinii GPIO, oferind în același timp un mecanism robust pentru detectarea accesului comutatorului.

Recomandat: