Att få mer I/O pins på ATTiny med Skift register (4 / 6 steg)
Steg 4: Exempel #2: [ingång]
Så konstigt som det låter, hantera flera digitala ingångar med ett skiftregister är nästan samma som hanterar flera utgångar. Låt oss titta på kretsen först, så jag kan förklara hur det fungerar.
Dioder läggs till skydda utgångarna av skiftregister, eftersom flera höga ingångar kan orsaka en kortslutning. PB3 är ansluten till marken genom en 10K resistor (logisk 0 när ingen matchning hittades).
Grundidén är att skicka en viss uppsättning bitar till skiftregister och om det finns en bitvis match med input - vi kommer att få hög signal på PB3. Exempelvis har vi en 8-bitars ingång 0x91, som är 10010001 i binär.
Vi börjar med att skicka 0x01 till skiftregister (0b00000001) och se om den första biten är 1. Om vi har en match (PB3 är hög), utför vi OR-operation av indata till resultatet. Nästa, vi flytta testdata 1 bit till vänster, så vi få 0x02 (0b00000010) och upprepa proceduren för att förvärva det andra lite, vilket ger ingen match som resulterar i logiska 0... och så vidare tills vi testa alla 8 bitar.
Skiftregister | PB3 | Resultatet |
---|---|---|
00000001 | 1 | 00000001 |
00000010 | 0 | 00000001 |
00000100 | 0 | 00000001 |
00001000 | 0 | 00000001 |
00010000 | 1 | 00010001 |
00100000 | 0 | 00010001 |
01000000 | 0 | 00010001 |
10000000 | 1 | 10010001 |
Denna teknik gör för att läsa någorlunda stor mängd insatsvaror till priset av förvärv hastighet bara. Det kräver inte några ytterligare stift, så det är en perfekt lösning för låg hastighet program, knappsatser, panelutrustning eller ens låg hastighet digitala sensorer. Antalet använda stift kan minskas ytterligare, om vi alternerar seriella Data stift mikrokontroller mellan digital utgång och digital ingång (i stället för PB3).
För vår nästa exempel kommer vi att använda nästan identiska krets, men i stället för digitala ingångar och transistorer kommer vi att använda enkla taktil switchar.