In deze tutorial gaan we een 4x4 (16 toetsen) toetsenbord koppelen aan een ATMEGA32A microcontroller. We weten dat het toetsenbord een van de belangrijkste invoerapparaten is die wordt gebruikt in elektronicaprojecten. Toetsenbord is een van de gemakkelijkste manieren om opdrachten of instructies aan een elektronisch systeem te geven.
Componenten vereist
Hardware: ATMEGA32, voeding (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16 * 2LCD), 100uF condensator, 100nF condensator, 10KΩ weerstand (8 stuks).
Software: Atmel studio 6.1 of Atmel studio 6.2, progisp of flash magie.
Schakelschema en werkuitleg
In circuit is PORTB van ATMEGA32 verbonden met datapoort LCD. Hier moet men onthouden om de JTAG-communicatie in PORTC of ATMEGA uit te schakelen door de zekeringbytes te wijzigen, als men de PORTC als een normale communicatiepoort wil gebruiken. In 16x2 LCD zijn er in totaal 16 pinnen als er een achtergrondverlichting is, als er geen achtergrondverlichting is, zijn er 14 pinnen. Men kan de achterlichtpinnen van stroom voorzien of laten. Nu in de 14 pennen zijn er 8 datapennen (7-14 of D0-D7), 2 voedingspennen (1 & 2 of VSS en VDD en GND en + 5 V), 3 rd pin voor contrastregeling (VEE-bepaalt hoe dik de tekens moet afgebeeld), en 3 controlepennen (RS & RW & E).
In het circuit kun je zien dat ik maar twee controle pinnen heb genomen, dit geeft de flexibiliteit, het contrast bit en READ / WRITE worden niet vaak gebruikt waardoor ze kunnen worden kortgesloten naar aarde. Dit plaatst LCD in het hoogste contrast en leesmodus. We hoeven alleen de ENABLE- en RS-pinnen te bedienen om tekens en gegevens dienovereenkomstig te verzenden.
De aansluitingen die zijn gemaakt voor LCD worden hieronder gegeven:
PIN1 of VSS naar aarde
PIN2 of VDD of VCC tot + 5v vermogen
PIN3 of VEE naar aarde (geeft maximaal contrast het beste voor een beginner)
PIN4 of RS (registerselectie) naar PD6 van uC
PIN5 of RW (lezen / schrijven) naar aarde (zet LCD in leesmodus vereenvoudigt de communicatie voor de gebruiker)
PIN6 of E (inschakelen) naar PD5 van uC
PIN7 of D0 tot PB0 van uC
PIN8 of D1 tot PB1 van uC
PIN9 of D2 naar PB2 van uC
PIN10 of D3 naar PB3 van uC
PIN11 of D4 naar PB4 van uC
PIN12 of D5 naar PB5 van uC
PIN13 of D6 naar PB6 van uC
PIN14 of D7 naar PB7 van uC
In het circuit kun je zien dat we 8bit communicatie hebben gebruikt (D0-D7) maar dit is niet verplicht, we kunnen 4bit communicatie gebruiken (D4-D7) maar met 4 bit wordt het communicatieprogramma een beetje ingewikkeld. Dus door alleen de bovenstaande tabel te observeren, verbinden we 10 pinnen van het LCD-scherm met de controller waarin 8 pinnen datapinnen zijn en 2 pinnen voor controle.
Laten we het nu hebben over het toetsenbord, het toetsenbord is niets anders dan gemultiplexte toetsen. Knoppen zijn verbonden in een gemultiplexte vorm om het pingebruik van het besturingssysteem te verminderen.
Stel dat we een 4x4-toetsenbord hebben, in dit toetsenbord hebben we 16 knoppen, in normale gevallen hebben we 16 controller-pinnen nodig om 16 knoppen te koppelen, maar dit is niet goed vanuit het oogpunt van het besturingssysteem. Dit pingebruik kan worden verminderd door de knoppen in multiplex-vorm te verbinden.
Stel dat we 16 knoppen hebben en we willen deze aan een controller bevestigen om een toetsenbord te vormen, deze toetsen zijn gerangschikt zoals weergegeven in de afbeelding:
Deze knoppen zijn verbonden door gemeenschappelijke kolommen, zoals weergegeven in de afbeelding:
Zoals weergegeven in de afbeelding, worden niet-gemarkeerde uiteinden van elke vier knoppen samengesleept om een kolom te vormen, en dus hebben we voor 16 toetsen vier kolommen.
Als we de bovenstaande kolomverbindingen vergeten en gemeenschappelijke gemarkeerde uiteinden van elke vier knoppen met elkaar verbinden om een rij te vormen:
Zoals weergegeven in de afbeelding, hebben we voor 16 toetsen vier rijen, zoals weergegeven in de afbeelding.
Als ze nu allebei samen worden gezien, krijgen we zoiets als het onderstaande circuit:
Hier hebben we 16 toetsen in een gemultiplexte vorm aangesloten om het pingebruik van de controller te verminderen. In vergelijking met het eerste geval van verbonden 16 toetsen hadden we 16 pinnen nodig op de controller, maar nu na multiplexen hebben we slechts 8 pinnen van de controller nodig om 16 toetsen aan te sluiten.
Normaal gesproken is dit wat wordt gepresenteerd op een toetsenbord:
Zoals weergegeven in bovenstaande afbeelding zijn er 16 toetsen in het bovenstaande toetsenbord en elk van deze toetsen vertegenwoordigt een knop in de gemultiplexte knopconfiguratie. En er zijn ook 8-pins verbindingen zoals weergegeven in de bovenstaande afbeelding die een multiplexverbinding symboliseert.
Nu voor werken:
Het toetsenbord heeft hier vier kolommen en vier rijen, voor identificatie van de ingedrukte knop gaan we de kruisverwijzingsmethode gebruiken. Hier gaan we eerst alle kolommen of alle rijen verbinden met vcc, dus als rijen zijn verbonden met gewone vcc, gaan we de kolommen gebruiken als invoer voor de controller.
Als nu knop één wordt ingedrukt, zoals weergegeven in de afbeelding:
Daarna vloeit er een stroom door het circuit zoals weergegeven in onderstaande afbeelding:
Dus we hebben C1 hoog, voor een druk op de knop. Op dit moment gaan we de stroom- en invoerpoorten verschuiven, dat wil zeggen, we gaan de kolommen van stroom voorzien en rijen als invoer nemen, Daardoor zal er een krachtstroom zijn zoals weergegeven in de onderstaande afbeelding:
Dus voor de rij hebben we R1 hoog.
Vanaf nu hebben we C1 hoog in het eerste geval en R1 hoog in het tweede geval, dus we hebben de matrixpositie van de knop, vandaar het nummer “één”.
Als de tweede knop wordt ingedrukt, hebben we C1 als kolom, maar de hoge logica die we in de gemeenschappelijke kolom krijgen, is 'R2'. Dus we hebben C1 en R2, dus we hebben de matrixpositie van de tweede knop.
Dit is hoe we het programma gaan schrijven, we gaan acht pinnen van het toetsenbord verbinden met acht pinnen van de controller. En om te beginnen voeden we vier pinnen van de controller voor het voeden van vier rijen toetsenbord, op dit moment worden de andere vier pinnen als invoer gebruikt. Wanneer de knop wordt ingedrukt, wordt de corresponderende kolompen omhoog getrokken en wordt de controllerpin omhooggetrokken, dit wordt herkend om de invoer te veranderen in stroom en stroom in invoer, dus we hebben rijen als invoer.
Hierdoor krijgen we de knop ingedrukt door de gebruiker. Deze matrixadressen worden naar het overeenkomstige nummer geleid en dit nummer wordt op het LCD-scherm weergegeven.
De werking van de interface van het toetsenbord met de avr-microcontroller wordt stap voor stap uitgelegd in de onderstaande C-code. U kunt ook kijken naar: toetsenbord interface met 8051 microcontroller.