Innehållsförteckning:

Hur man läser många switchar med en MCU -stift: 4 steg
Hur man läser många switchar med en MCU -stift: 4 steg

Video: Hur man läser många switchar med en MCU -stift: 4 steg

Video: Hur man läser många switchar med en MCU -stift: 4 steg
Video: Plugga effektivt! 2024, Juni
Anonim
Hur man läser många switchar med en MCU -stift
Hur man läser många switchar med en MCU -stift

Har du någonsin tappat bort ett eller flera projekt och projektet fortsätter att växa och växa, medan du lägger till fler saker i det (vi kallar det en Feaping Creaturism)? På ett nyligen projekt byggde jag en frekvensmätare och lade till en femfunktionssignalgenerator/frekvenssynthesizer. Jag slutade snart med fler switchar än jag hade tillgängliga stift kvar, så vad ska en kille göra?

Men jag hade snart sju switchar till på min Funbox (ja, det var vad jag kallade min funktionsgenerator … jag vet, jag har ingen kreativitet) och här är en kort instruktion som visar hur du kan göra detsamma. Det kräver inga skiftregister eller specifika IC: er. Faktum är att det inte heller kräver en mikrokontroller om diskreta halvledare är hur du rullar. Här är ett sätt du kan läsa/hantera flera switchar med en enda stift på din AVR (eller annan mikrokontroller … Jag har hört att det finns andra mikrokontroller förutom AVR, men jag kan inte föreställa mig …).:)

Steg 1: Essentials (inte riktigt)

För att uppnå detta behöver du några komponenter. Det hjälper att ha en mängd switchar som du måste hantera. Du behöver också några motstånd och antingen en mikrokontroller som har ADC (Analog-to-Digital Conversion) eller på något annat sätt som du vill indikera att det var en switch aktiverad och vilken switch det var.

Om du vill kan du använda en spänningsstyrd oscillator för att indikera detta, kanske med några blinklampor, eller alternativt med ljud. I den här artikeln ska jag låtsas att vi använder en AVR, men i din värld kan du låtsas vad som än gör dig lycklig. Jag saknar Bob Ross.

Steg 2: Spänningsdelaren

Spänningsdelaren
Spänningsdelaren
Spänningsdelaren
Spänningsdelaren

I huvudsak är det sätt vi ska göra detta på genom att använda en teknik och krets som kallas en spänningsdelare. Spänningsdelare gör, som du kanske gissat, dividera V,, in,, spänningen med något värde som du bestämmer. Du kan dela spänningen med flera komponenter, inklusive kondensatorer och induktorer, men här ska jag göra det med det goda motståndet. Idén Vad vi gör är att sätta två komponenter i serie som kommer att orsaka var och en för sig ett spänningsfall över komponenten. Titta på den första bilden om jag inte är vettig. Det finns en potentialskillnad på 9V från järnväg till järnväg. Mellan 9V och 0V finns det två motstånd i serie. Var och en av dessa kommer att uppleva ett spänningsfall över sig själv, beroende på motståndet, som du säkert kommer ihåg från V = IR. Om du gör en spänningsmätning mellan de två motstånden får du ett värde mellan 9V och 0V, beroende på hur mycket spänning som har sjunkit över det första motståndet och hur mycket som återstår att falla över det andra motståndet, före 0V. Det finns en enkel formel för att beräkna spänningsfallet över ett motstånd i denna situation och det ser ut så här. Låt spänningen över motstånd 1 (R1) vara V1 och spänningen över motstånd två (R2) vara V2. Eftersom jag inte kan använda formatering längre, titta på bild 2 nedan för formeln … Så i vår resistiva delare kan Vout -spänningen bestämmas av vår formel för V2 (eftersom vi refererar GND till 0V). Vad har detta att göra med att ett gäng switchar detekteras från en stift? Vänd på sidan så visar jag dig!

Steg 3: Spänningsdelare

Spänningsdelare
Spänningsdelare

Antag nu att vi har alla våra omkopplare, kanske sex eller åtta eller sexton, alla anslutna via motstånd som var och en fungerar som en spänningsdelare så att när läget för omkopplingsstiftet ändras läses spänningen och baseras på spänningsnivån, vi kan veta vilken omkopplare som just aktiverades. Titta nedan. På bilden nedan har jag anslutit två block av switchar. Det översta blocket har två omkopplare, och det längsta längst ner har fem omkopplare. Du kan ansluta dina separata omkopplare, momentana, taktila, etc. switchar på samma sätt. Det viktiga att notera är motståndet som din switch är ansluten till. I mitt exempel har jag nästan fördubblat motståndet i nästa motstånd för att skapa ett spänningsgap som är lätt att mäta och inte misstag för omkopplaren före eller efter. Om du inte har märkt det tidigare, titta igen och inse att vi är tillbaka på vår gamla vän, den resistiva spänningsdelaren. Det första motståndet, 10k ohm, är anslutet till 5V och det andra motståndet - motståndet som bestämmer Vut för SWITCH_ADC -stift, är ansluten till varje switch och därför är varje switch associerad med en viss Vout -spänning som kan avläsas från ADC -stiftet som är anslutet till SWITCH_ADC. Bestäm sedan den förväntade Vout från varje switch så

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

för switch ett:

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

för switch två:

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

och så vidare.. Ersätt gärna dina egna värden för R2 om du bara har vissa motstånd till hands … Det viktigaste här är att hålla ett tillräckligt stort spänningsgap mellan switcharna så att eventuell felmarginal på ADC vann ' t sätta dig in i den spänning som förväntas från en närliggande switch. Jag har hittat det enklaste att göra är att bygga avdelarstegen och sätta en multimeter/voltmeter på ADC -stiftet och tryck på varje stift och se vilka värden du får. De borde vara ganska i linje med vad du räknar ut. När du har alla förväntade spänningsvärden från varje switch med ett visst motstånd kan du låta din MCU läsa ADC -stiftet och jämföra det med dina kända värden för att avgöra vilken switch som trycktes in. Till exempel, säg att du har registrerat en avbrottsrutin som kommer att ringas upp när det finns en upptäckt ändring på ADC -stiftet. Inne i ISR: n kan du läsa ADC: n och jämföra det värdet med ditt switchbord. Om du använder ett 8-bitars ADC-värde kommer din spänning att omvandlas till ett tal mellan 0 och 255 som motsvarar en spänning mellan 0V och 5V. Detta förutsätter att du har din ADC konfigurerad på detta sätt.

Steg 4: Sammanfattning

Så nu borde du veta hur du ska vara sparsam med att använda GPIO -stift för switchar. När du har slut på GPIO -stift, eller knappt har något att börja med, eller om du inser att du kommer att använda en bank med switchar, är den resistiva avdelaren vägen att gå för att spara dina GPIO -stift medan du fortfarande tillhandahåller en robust mekanism för att upptäcka switchåtkomst.

Rekommenderad: