Inhoudsopgave:

Veel schakelaars lezen met één MCU-pin: 4 stappen
Veel schakelaars lezen met één MCU-pin: 4 stappen

Video: Veel schakelaars lezen met één MCU-pin: 4 stappen

Video: Veel schakelaars lezen met één MCU-pin: 4 stappen
Video: Control 10 output pins or relay using 10 push button switch with 1 Arduino input pin ANPB-V2 2024, Juni-
Anonim
Veel schakelaars lezen met één MCU-pin
Veel schakelaars lezen met één MCU-pin

Ben je ooit bezig geweest met een project(en) en het project blijft maar groeien en groeien, terwijl je er meer dingen aan toevoegt (we noemen dat een Feaping Creaturism)? Bij een recent project was ik een frequentiemeter aan het bouwen en heb ik een signaalgenerator/frequentiesynthesizer met vijf functies toegevoegd. Ik kreeg al snel meer schakelaars dan ik beschikbare pinnen over had, dus wat moet een man doen?

Ik had echter al snel zeven extra schakelaars op mijn Funbox (ja, zo noemde ik mijn functiegenerator … ik weet het, ik heb geen creativiteit) en hier is een korte instructie die je laat zien hoe je hetzelfde kunt doen. Het vereist geen schuifregisters of specifieke IC's. In feite is er ook geen microcontroller nodig, als discrete halfgeleiders je rol zijn. Hier is een manier waarop je meerdere schakelaars kunt lezen/beheren met een enkele pin op je AVR (of een andere microcontroller… Ik heb gehoord dat er naast AVR's ook andere microcontrollers zijn, maar ik kan het me niet voorstellen…).:)

Stap 1: De essentie (niet echt)

Om dit te realiseren heb je een aantal componenten nodig. Het helpt om een groot aantal schakelaars te hebben die u moet beheren. Je hebt ook wat weerstanden nodig en ofwel een microcontroller met ADC (analoog-naar-digitaal conversie) of een andere manier waarop je wilt aangeven dat er een schakelaar was geactiveerd en welke schakelaar het was.

Als je wilde, zou je een spanningsgestuurde oscillator kunnen gebruiken om dit aan te geven, misschien met wat knipperende lampjes, of als alternatief, met geluid. In deze 'ible' ga ik doen alsof we een AVR gebruiken, maar in jouw wereld kun je doen alsof wat je gelukkig maakt. Ik mis Bob Ross.

Stap 2: De spanningsdeler

De spanningsdeler
De spanningsdeler
De spanningsdeler
De spanningsdeler

In wezen gaan we dit doen door een techniek en circuit te gebruiken die een spanningsdeler wordt genoemd. Spanningsdelers delen, zoals je misschien al geraden hebt, de V,, in,, spanning door een waarde die je bepaalt. Je kunt spanning delen met verschillende componenten, waaronder condensatoren en inductoren, maar hier ga ik het doen met de goede weerstand. Het idee Wat we doen is twee componenten in serie zetten die elk afzonderlijk een spanningsval over het component veroorzaken. Kijk naar de eerste foto als ik het niet begrijp. Er is een potentiaalverschil van 9V van spoor tot spoor. Tussen 9V en 0V staan twee weerstanden in serie. Elk van deze zal een spanningsval over zichzelf ervaren, afhankelijk van de weerstand, zoals u zich waarschijnlijk herinnert van V = IR. Als je een spanningsmeting doet tussen de twee weerstanden, krijg je een waarde tussen 9V en 0V, afhankelijk van hoeveel spanning er over de eerste weerstand is gedaald en hoeveel er nog over de 2e weerstand moet vallen, vóór 0V. Er is een eenvoudige formule voor het berekenen van de spanningsval over een weerstand in deze situatie en het ziet er zo uit. Laat de spanning over weerstand 1 (R1) V1 zijn en de spanning over weerstand twee (R2) V2. Aangezien ik geen opmaak meer kan gebruiken, kijk naar afbeelding 2 hieronder voor de formule … Dus in onze resistieve deler kan de Vout-spanning worden bepaald door onze formule voor V2 (aangezien we GND naar 0V zullen verwijzen). Wat heeft dit te maken met het detecteren van een aantal schakelaars vanaf één pin? Nou, sla de pagina om en ik zal het je laten zien!

Stap 3: Spanningsdelerladder

Spanningsverdelerladder
Spanningsverdelerladder

Stel nu dat we al onze schakelaars hebben, misschien zes of acht of zestien, allemaal verbonden via weerstanden die elk fungeren als een spanningsdeler, zodat wanneer de toestand van de schakelaarpen verandert, de spanning wordt gelezen en gebaseerd op het spanningsniveau, we weet welke schakelaar zojuist is geactiveerd. Kijk beneden. In de onderstaande afbeelding heb ik twee blokken schakelaars aangesloten. Het bovenste blok heeft twee schakelaars en het onderste blok heeft vijf schakelaars. U kunt op dezelfde manier uw afzonderlijke toggle-, momentary-, tactiele-, etc-schakelaars aansluiten. Het belangrijkste om op te merken is de weerstand waarop uw schakelaar is aangesloten. In mijn voorbeeld heb ik de weerstand van de volgende weerstand bijna verdubbeld om een spanningsverschil te creëren dat gemakkelijk te meten is en niet verward wordt met de schakelaar ervoor of erna. Als je het nog niet eerder hebt opgemerkt, kijk dan nog eens en realiseer je dat we terug zijn bij onze oude vriend, de resistieve spanningsdeler. De eerste weerstand, de 10k ohm, is verbonden met 5V en de 2e weerstand - de weerstand die V. zal bepalenuit voor SWITCH_ADC-pin, is verbonden met elke schakelaar en daarom is elke schakelaar geassocieerd met een bepaalde Vout-spanning die kan worden gelezen van de ADC-pin die is aangesloten op SWITCH_ADC. Bepaal vervolgens de verwachte Vout van elke schakelaar, zoals zo

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

voor schakelaar één:

Vout = 5V * (500 / (10000 + 500)) = 5*0.048 = 0.24V of 240 mV

voor schakelaar twee:

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

enzovoort. Voel je vrij om R2 in je eigen waarden te vervangen als je alleen bepaalde weerstanden bij de hand hebt … Het belangrijkste hier is om een voldoende groot spanningsverschil tussen de schakelaars te houden, zodat elke foutmarge op de ADC wint' t zet u in de spanning verwacht van een naburige schakelaar. Ik heb ontdekt dat het gemakkelijkste is om de scheidingsladder te bouwen en een multimeter / voltmeter op de ADC-pin te plaatsen en op elke pin te drukken en te zien welke waarden je krijgt. Ze moeten goed aansluiten bij wat je berekent. Zodra u alle verwachte spanningswaarden van elke schakelaar hebt met een bepaalde weerstand, kunt u uw MCU de ADC-pin laten lezen en die vergelijken met uw bekende waarden om te bepalen welke schakelaar is ingedrukt. Stel bijvoorbeeld dat u een interruptserviceroutine hebt geregistreerd die wordt aangeroepen wanneer er een verandering op de ADC-pin wordt gedetecteerd. Binnen die ISR zou u de ADC kunnen lezen en die waarde kunnen vergelijken met uw schakeltabel. Als u een 8-bits ADC-waarde gebruikt, wordt uw spanning omgezet in een getal tussen 0 en 255 dat overeenkomt met een spanning tussen 0V en 5V. Dit veronderstelt dat uw ADC op deze manier is geconfigureerd.

Stap 4: Samenvatting

Dus nu zou u moeten weten hoe u zuinig kunt zijn met het gebruik van GPIO-pinnen voor schakelaars. Wanneer u bijna geen GPIO-pinnen meer hebt, of nauwelijks om mee te beginnen, of als u zich realiseert dat u een reeks schakelaars gaat gebruiken, is de resistieve verdeler de juiste keuze om uw GPIO-pinnen op te slaan terwijl u toch een robuust mechanisme om toegang tot schakelaars te detecteren.

Aanbevolen: