Indholdsfortegnelse:

Sådan læses mange switches med en MCU -pin: 4 trin
Sådan læses mange switches med en MCU -pin: 4 trin

Video: Sådan læses mange switches med en MCU -pin: 4 trin

Video: Sådan læses mange switches med en MCU -pin: 4 trin
Video: Такие секреты уже все забыли, но их стоит знать! Полезные советы на все случаи жизни! 2024, Juni
Anonim
Sådan læses mange switches med en MCU -pin
Sådan læses mange switches med en MCU -pin

Har du nogensinde chugged væk ved et eller flere projekter, og projektet vokser og vokser, mens du tilføjer flere ting til det (vi kalder det en Feaping Creaturism)? På et nyligt projekt byggede jeg en frekvensmåler og tilføjede en femfunktionssignalgenerator/frekvenssynthesizer. Jeg sluttede hurtigt op med flere kontakter, end jeg havde ledige stifter tilbage, så hvad skal en fyr gøre?

Imidlertid havde jeg snart syv kontakter mere på min Funbox (ja, det var det, jeg kaldte min funktionsgenerator … jeg ved, jeg har ingen kreativitet) og her er en kort instruktør, der viser dig, hvordan du kan gøre det samme. Det kræver ingen skiftregistre eller specifikke IC'er. Faktisk kræver det heller ikke en mikrokontroller, hvis diskrete halvledere er, hvordan du ruller. Her er en måde, du kan læse/administrere flere switches ved hjælp af en enkelt pin på din AVR (eller anden mikrokontroller … Jeg har hørt, at der er andre mikrokontrollere udover AVR'er, men jeg kan ikke forestille mig …).:)

Trin 1: Essentials (ikke rigtig)

For at opnå dette skal du bruge et par komponenter. Det hjælper at have et væld af kontakter, som du skal administrere. Du skal også bruge nogle modstande og enten en mikrokontroller, der har ADC (analog-til-digital konvertering) eller på en anden måde, du gerne vil angive, at der var en switch aktiveret, og hvilken switch det var.

Hvis du ville, kunne du bruge en spændingsstyret oscillator til at angive dette, måske med nogle blinklys, eller alternativt med lyd. I denne artikel vil jeg foregive, at vi bruger en AVR, men i din verden kan du lade som om, hvad der gør dig glad. Jeg savner Bob Ross.

Trin 2: Spændingsdeleren

Spændingsdeleren
Spændingsdeleren
Spændingsdeleren
Spændingsdeleren

Grundlæggende er den måde, vi skal gøre dette på, ved at bruge en teknik og kredsløb kaldet en spændingsdeler. Spændingsdelere gør, som du måske har gættet, V,, in,, spændingen med en værdi, som du bestemmer. Du kan opdele spænding med flere komponenter, herunder kondensatorer og induktorer, men her vil jeg gøre det med den gode modstand. Ideen Hvad vi laver er at sætte to komponenter i serie, der hver især vil forårsage et fald i spændingen over komponenten. Se på det første billede, hvis jeg ikke giver mening. Der er en potentiel forskel på 9V fra skinne til skinne. Mellem 9V og 0V er der to modstande i serie. Hver af disse vil opleve et spændingsfald over sig selv, afhængigt af modstanden, som du sikkert husker fra V = IR. Hvis du foretager en spændingsmåling mellem de to modstande, får du en værdi mellem 9V og 0V, afhængigt af hvor meget spænding der er faldet over den første modstand, og hvor meget der er tilbage at falde over den 2. modstand, før 0V. Der er en ligetil formel til beregning af spændingsfaldet over en modstand i denne situation, og det ser sådan ud. Lad spændingen over modstand 1 (R1) være V1 og spændingen over modstand to (R2) være V2. Da jeg ikke længere kan bruge formatering, kan du se formlen på billede 2 herunder … Så i vores resistive divider kan Vout -spændingen bestemmes af vores formel for V2 (da vi refererer GND til 0V). Hvad har dette at gøre med at have en masse switches detekteret fra en pin? Tja, vend siden, så viser jeg dig det!

Trin 3: Spændingsdeler

Spændingsdeler stige
Spændingsdeler stige

Antag nu, at vi har alle vores afbrydere, måske seks eller otte eller seksten, alle forbundet via modstande, der hver fungerer som en spændingsdeler, således at når tilstanden for omskifterstiften ændres, læses spændingen og baseret på spændingsniveauet, vi kan vide, hvilken kontakt der lige var aktiveret. Se nedenfor. På billedet herunder har jeg tilsluttet to blokke switches. Den øverste blok har to kontakter, og den nederste blok har fem kontakter. Du kan tilslutte dine separate switches, momentane, taktile osv. Switches på samme måde. Den vigtige ting at bemærke er den modstand, som din switch er forbundet til. I mit eksempel har jeg næsten fordoblet modstanden i den næste modstand for at skabe et spændingsgab, der er let at måle og ikke tager fejl af kontakten før eller efter. Hvis du ikke har lagt mærke til det før, skal du kigge igen og indse, at vi er tilbage hos vores gamle ven, den resistive spændingsdeler. Den første modstand, 10k ohm, er forbundet til 5V og den anden modstand - modstanden, der bestemmer Vud for SWITCH_ADC pin, er forbundet til hver switch, og derfor er hver switch forbundet med en bestemt Vout spænding, der kan aflæses fra ADC pin, der er tilsluttet SWITCH_ADC. Bestem derefter den forventede Vout fra hver switch sådan

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

til switch 1:

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

til switch to:

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

og så videre.. Du er velkommen til at erstatte dine egne værdier med R2, hvis du kun har visse modstande til rådighed … Det vigtigste her er at holde et stort spændingsgab mellem switchene, så enhver fejlmargin på ADC'en vandt ' t sætte dig i den spænding, der forventes fra en nabokontakt. Jeg har fundet det nemmeste at gøre, er at bygge skillestigen og sætte et multimeter/voltmeter på ADC -stiften og trykke på hver pin og se, hvilke værdier du får. De burde være temmelig præcise til det, du regner ud. Når du har alle de forventede spændingsværdier fra hver switch ved hjælp af en bestemt modstand, kan du få din MCU til at læse ADC -stiften og sammenligne den med dine kendte værdier for at bestemme, hvilken switch der blev trykket på. Sig f.eks., At du har registreret en afbrydelsesrutine, der vil blive kaldt, når der er en registreret ændring på ADC -stiften. Inde i denne ISR kunne du læse ADC'en og sammenligne denne værdi med din switch -tabel. Hvis du bruger en 8-bit ADC-værdi, konverteres din spænding til et tal mellem 0 og 255, der svarer til en spænding mellem 0V og 5V. Dette forudsætter, at du har din ADC konfigureret på denne måde.

Trin 4: Resumé

Så nu skal du vide, hvordan du skal være nøjsom med at bruge GPIO -ben til kontakter. Når du er ved at løbe tør for GPIO -ben, eller næsten ikke har noget at starte med, eller hvis du indser, at du kommer til at bruge en bank af switches, er den resistive divider vejen til at gemme dine GPIO -ben, mens du stadig giver en robust mekanisme til at registrere switchadgang.

Anbefalede: