16-toonsoort Keypad decoderen met een AVR MCU (3 / 7 stap)

Stap 3: Lezen van toetsaanslagen op AVR


Ok, het eerste ding u zult opmerken is dat we gonna worden 8 I/O poorten voor dit bloedige toetsenbord opzuigen. Dat is een heleboel I/O. In de volgende stappen ziet u hoe u verminderen kunt dat om rond vier, misschien een paar meer afhankelijk van hoe veel u controleren wilt. Maar voor nu, we gonna haak deze sukkel rechtsaf acht gratis I/O poorten voor onze AVR.

Ik koos PD [2..7] en PB [0..1] voor mijn verbindingen. Uit de weg PD [0..1] als u wilt gebruik maken van de seriële communicatie op uw arduino of andere kloon. Ik had ook problemen met mijn pinnen zweven, dus ik vier gebruikte 10 k weerstanden te trekken van de kolom pinnen op grond. Uw AVR heeft waarschijnlijk interne pull-ups, maar de logica die ik al in mijn hoofd bedacht had werkte goed mee. U zult merken dat er is geen pin of aansluiting voor macht op het toetsenblok, in tegenstelling tot de binaire draaischijf switch ik sprak over in een vorige instructable.

Hier is het basisidee. Trek de pinnen van de vier kolom tot 0V. Stel de pinnen als input. Uw rij-pinnen als uitgang met eerste logica 0 waarden instellen Doorlopen van elke rij, een logica 1 te sturen naar de rij en de kolom pinnen te lezen. Als er een daar is, dan heb je een druk op de toets. Ook is van nota de kwestie van de belangrijkste ontdendering. Via experimenten vond ik een werkbare vertraging tarief, anders krijg je vele vele ToetsIndrukken (KeyPress) meldingen voor elke één ToetsIndrukken (KeyPress). Afhankelijk van de snelheid van uw MCU wellicht u tweek het een beetje, ook.

Ik heb een bestand dat ik schreef voor deze sectie om directe verbinding en lezing van het toetsenbord te tonen onderaan toegevoegd. Als u ervoor kiest om het te gebruiken zul je om het te wijzigen als ik naslagbibliotheken die ik schreef voor seriële communicatie. Anders dan dat, ik denk dat het moet over het algemeen goed. Hier is een pseudocode om te laten zien van de stroom:

 ROWS set INPUT COLS set OUTPUT for (ever) { for each ROW from 0 to 3 { Set ROW HIGH if COL1 HIGH number pressed is ( 4 * ROW) else if COL2 HIGH number pressed is ( (4 * ROW) + 1) if COL3 HIGH number pressed is ( 4 * ROW) + 3) if COL4 HIGH number pressed is ( (4 * ROW) + 3) delay for debounce Set ROW LOW } } 

N.B. De nummers zijn hun logische getallen van 0 tot 15, niet het werkelijke aantal op de toets waarop is gedrukt. Om dit te doen, moet u meer logica in uw "nummer ingedrukt is..."-sectie toe te voegen, of het toewijzen aan een matrix, die is slechts een paar stappen weg. Ten eerste, laten we eens kijken hoe te verminderen van het aantal I/O pinnen dit toetsenbord op onze microcontroller neemt.

Gerelateerde Artikelen

Het gebruik van een 74HC595 Shift Register met een AVR ATtiny13

Het gebruik van een 74HC595 Shift Register met een AVR ATtiny13

als je hebt gespeeld met microcontrollers en elektronica dan u waarschijnlijk gezien hebt LED dot matrix displays en andere projecten die daar gebruik van shift registers zoals 7-segment displays en meer. Dit instructable gaat over een snelle intro a
Hoe om te lezen binair getal/Hexuitdraai draaischijf schakelen met een AVR Microcontroller

Hoe om te lezen binair getal/Hexuitdraai draaischijf schakelen met een AVR Microcontroller

dit instructable zal u tonen hoe om te lezen het nummer op een binaire pushwheel of draaischijf schakelaar met behulp van LED's of een AVR microcontroller (ik gebruik een ATmega328p maar dit kan worden aangepast voor elke AVR of waarschijnlijk een an
Controle om het even wat met een AVR-pin

Controle om het even wat met een AVR-pin

dit instructable toont hoe de controle van een groep van led met een microprocessor uitgang.De micro die mij zal zitten using is een Atmel Attiny2313.Stap 1: Onderdelen en Tools Parts:Attiny2313 (kreeg 5 gratis monsters van Atmel)20 pins aansluitingW
AVR fuse basics: een avr met een externe klok

AVR fuse basics: een avr met een externe klok

zekeringen zijn de moeilijkste onderwerpen die ik tegenkwam terwijl leren over programmeren microcontrollers. Zelfs na zoeken en uitgebreid lezen, ik nog steeds kon niet in geslaagd om te wissen mijn concepten over hen. Maar toen begon ik te leren ov
Rijden een Stepper Motor met een Microprocessor AVR

Rijden een Stepper Motor met een Microprocessor AVR

Got sommige scavenged stepper motors van printers/schijf schijven/etc ligggen?Sommige sonderen met een ohmeter, gevolgd door enkele eenvoudige stuurprogramma-code op uw microprocessor en u zult worden intensivering in stijl.Stap 1: Maak kennis met St
Het gebruik van de Dragon Rider 500 met uw AVR Dragon

Het gebruik van de Dragon Rider 500 met uw AVR Dragon

dit instructable is een spoedcursus in het gebruik van enkele van de kenmerken van de Dragon Rider 500 van Ecros technologieën. Wees u ervan bewust dat er een zeer gedetailleerde handleiding beschikbaar op de website Ecros is.De Dragon Rider is een i
Hoe te lezen veel schakelaars met een MCU-Pin

Hoe te lezen veel schakelaars met een MCU-Pin

hebben u ooit geweest chugging weg op een project(en) en het project houdt groeit en groeit, terwijl u er meer dingen aan toevoegen (wij noemen dat een Feaping-Creaturism)?  Op een recente project, ik was het bouwen van een frequentie meter en een vi
Hoe u een 16 x 2 LCD met behulp van een AVR ATtiny2313

Hoe u een 16 x 2 LCD met behulp van een AVR ATtiny2313

als je gewoon bent om in microcontrollers er is een hoop te weten zoals u waarschijnlijk heb ontdekt. Er is een heleboel goede online tutorials voor de Atmel AVR en kansen zijn dat u een paar van die inmiddels heb zien. Ik onlangs heb in microcontrol
Macht van uw Arduino/AVR met een batterij Hand-Cranked

Macht van uw Arduino/AVR met een batterij Hand-Cranked

als u ooit hebt willen macht uw Arduino of AVR uit een batterij voor het testen van de ontwikkeling (batterijen hebben verschillende macht levering kwaliteiten dan, zeg, getransformeerde AC of zelfs een gereglementeerde muur wrat in DC) testen maar w
Mijn reactie op de WS2811 met een ding van AVR

Mijn reactie op de WS2811 met een ding van AVR

eerst af - wil zeggenGoed op je Alan Burlison.Dit is niet bedoeld om te worden opzakcapaciteit u op geen enkele manier.  Uw code deed wat het moest doen.  Groot succes.  Mijn eerste reactie in een forum commentaar was eigenlijk gericht op de mensen d
Met behulp van een Dot Matrix LED met een Arduino en Shift Register

Met behulp van een Dot Matrix LED met een Arduino en Shift Register

de Siemens DLO7135 Dot matrix LED is een verbazingwekkend stukje opto-elektronica. Het is gefactureerd als een 5 x 7 Dot Matrix intelligente Display (r) met geheugen/Decoder/Driver. Samen met dat het geheugen, het heeft een 96-ASCII karakterdisplay s
Bouw een AVR Xmega Prototyping Board!

Bouw een AVR Xmega Prototyping Board!

De AVR ATXmega -chip is een nieuwere aanbod in Atmel's AVR lijn.  De Xmega wordt gefactureerd als een hybride 8/16-bit MCU, wat betekent dat u uw normale ontwikkelomgeving voor programma Xmegas (in vergelijking met AVR32 en Atmel's ARM lijn) kunt geb
Fiets achterlicht met een twist

Fiets achterlicht met een twist

laten we eerlijk zijn. Achterlichten zijn saai.In het beste ze gaan ' knipperen blink - kijk naar mij! Ik ben knipperen - woohoo' de allertijden. En ze zijn altijd rood. Zeer creatief. We kunnen beter doen dan dat, misschien niet veel, maar nog steed
3D afgedrukt 'Centrifugaal puzzel Box' - opgelost met een spin...

3D afgedrukt 'Centrifugaal puzzel Box' - opgelost met een spin...

Voor dit project heb ik besloten om te verkennen van de wereld en het gebruik van 3D-printing verder nadat mijn verkenning van de 3D iPhone gevallen markt waar ik ontworpen afgedrukt, gemaakt en nu verkopen de "TriStand iPhonegeval - 3D gedrukte iPho