16-nyckel knappsatsen avkodning med en AVR MCU (3 / 7 steg)
Steg 3: Läsa knapptryckningar på AVR
Jag valde PD [2..7] och PB [0.. 1] för mina anslutningar. Skygga PD [0.. 1] om du vill använda seriell kommunikation på din arduino eller andra klon. Jag hade också problem med min pins flytande, så jag använde fyra 10 k motstånd att dra ner kolumnen stiften till marken. Din AVR har förmodligen inre pull-ups, men logiken jag hade redan kommit fram till i mitt huvud fungerade bra med som. Du kommer att notera att det finns ingen PIN-kod eller hookup för makt till knappsatsen, till skillnad från växeln binära miniatyrhjul jag talade om i en tidigare instructable.
Här är den grundläggande idén. Dra de fyra kolumn stift till 0V. Ange de stift som indata. Ange din rad pins med inledande logik 0 värden. Loopa igenom varje rad, skicka en logik 1 till ro och läsa kolumnen stiften. Om det är där, så har du en knapptryckning. Notera är frågan om viktiga debounce. Genom experiment jag hittade en fungerande dröjsmål hastighet, annars får du många många knapptryckning meddelanden för varje enda knapptryckning. Beroende på hastigheten på din MCU, kan du behöva snurra det lite, alltför.
Jag har bifogat en fil längst ner som jag skrev för detta avsnitt att Visa direkt anslutning och behandlingen av knappsatsen. Om du väljer att använda den måste du ändra det som jag referensbibliotek som jag skrev för seriell kommunikation. Annat än att tror jag att det ska vara allmänt bra. Här är pseudo kod för att Visa flödet:
RADER uppsättning INPUT COLS Ställ in utgång för (någonsin) {för varje rad från 0 till 3 {Ange rad hög om Kol1 många tryckt är (4 * rad) annars om COL2 många tryckt är ((4 * rad) + 1) om COL3 höga tal tryckte är (4 * rad) + 3) om COL4 höga tal tryckte är ((4 * rad) + 3) fördröjning för Dämpningstid ange rad låg}}
OBS! Siffrorna är deras logiska nummer från 0 till 15, inte det faktiska antalet på den nyckel som trycktes. För att göra detta, måste du antingen lägga till mer logik i din "numret tryckte är..." avsnitt eller mappa den till en matris, som är bara ett par steg bort. Första, låt oss se hur man kan minska antalet I/O pins detta knappsatsen tar på våra mikrokontroller.