16-nyckel knappsatsen avkodning med en AVR MCU (5 / 7 steg)

Steg 5: Skriva, ladda upp och köra din AVR kod



För att läsa dina data när en knapp trycks ner, vi kommer att skapa rutin som kommer att hantera läser data ingångar när data blir tillgängliga. AVR berättar automatiskt när data är tillgängliga för läsning om vi ber den att (eller kommando att... Jag försöker att vara trevlig så jag är dödade senast av vår snart-till-vara Robot herrar). Denna anmälan kallas ett avbrott och AVR har flera typer. Det enda jag kommer att skriva kallas en "avbryta pin förändring." Det avbryter flödet av din kod och kör din hantering rutin när--du gissade det - det är logik höjdskillnad på en PIN-kod du har bett att ses.

Har du undrat ännu hur 74C922 destillerar 8 bitar data i bara fyra data rader? Om du har läst min andra instructable du skulle förmodligen ha räknat ut. Tja, har kanske du redan räknat det ut. När du har gjort en sanning bordlägger du har gjort dem alla, rätt? :) De 8 stift från knappsatsen är kodad i binära med fyra data stiften. Jag har gjort en sanning bordlägger för dig.

Om du är oklart vad det innebär, ta en titt på min andra instructables, eller gör en sökning efter "sanningen bordlägger" eller "binär logik" på din favorit sökmotor.

Koden logik


Jag är inte säker på att få in på detaljer i min kod när den är tillgänglig för nedladdning är lämpligt, men jag ska presentera några saker här, och om du är en gammal salt på det här du kan hoppa över det, annars hoppas jag att jag kan lära dig något.

  • Kontrollera om en global flagga som indikerar data är redo att processen
  • När Data tillgängliga PIN-koden ändras till hög
  • Läsa data stift
  • Som bitar i ett allmänt register nedan 0xFF
  • Ange "data tillgänglig för bearbetning" flagga
  • Bearbeta data och göra vad vi vill med det

Avsnitt nummer

Jag har tagit en zip-fil för detta avsnitt som innehåller de viktigaste handlingarna och ett par axillär filer. Du kan ta ut USART grejer och bara sammanställa den huvudsakliga arkivera eller vad du vill. Så, jag ska bara kort täcka hur koden fungerar.

Deklarationer
Detta avsnitt är ganska självklar så jag kommer inte att gå in någon ytterligare utom att uppmärksamma lokala header-filer som jag har tagit med att du kanske eller kanske inte vill använda eller ta bort.

#include "common.h"#include "uart.h"#include < avr/io.h > < util/delay.h > < avr/interrupt.h > #define DATA1 PIND2 #include #include #define DATA2 PIND3 #define uppgifter3 PIND4 #define DATA4 PIND5 #define DATA_AVAIL PIND6void Interrupt_init (void), flyktiga uint8_t bDataReady = 0;

Initiering
Det finns två underavsnitt initiera i detta program:
1. USART systemet
2. avbrottet system för hantering
Det är säkert att ta bort USART grejer om du tar bort alla hänvisningar till det och inte vill kommunicera via USB-kabeln eller en extern seriell konsol via en max232 chip. Därför inte kommer att jag inkludera det nedan eftersom det är utanför omfånget för denna guide.

voidInterrupt_init(void) {BSET(PCICR,PCIE2); / / aktiverar Pin Change Interrupt 2 BSET(PCMSK2,PCINT22); / / aktivera PCINT22 (det är PD6) BSET(SREG,7); / / Set-bit i Status registrera GPIOR0 = 0x00; / / använda allmänna ändamål I/O register}

Avbryta tjänsten hanterare
Detta är pin change avbrottshanterare. Några saker att notera:
1. det är mycket kort
2. inga funktioner kallas inom det
3. detta avbrott kommer att kallas på någon logik nivå förändring, så det betyder när Data tillgängliga går högt (som vi vill) och när det går låg (som vi bryr oss inte om).
4. en global flagga ligger och avbrottshanterare återvänder för att tillåta huvudloop att hantera resten.
5. jag använder en generell I/O registret nedan 0xFF utrymme. Detta innebär tillgång är mycket snabb.

ISR(PCINT2_vect) {om (BCHK(PIND,DATA_AVAIL) == 0) returnera; om (BCHK(PIND,DATA1)) BSET(GPIOR0,GPIOR00); om (BCHK(PIND,DATA2)) BSET(GPIOR0,GPIOR01); om (BCHK(PIND,DATA3)) BSET(GPIOR0,GPIOR02); om (BCHK(PIND,DATA4)) BSET(GPIOR0,GPIOR03); bDataReady = 1;}

Main
Allt vi behöver göra här är loop vid kontroll av om data är tillgängliga för bearbetning. Om det är, göra våra magiska, som våra flaggor och arbetar register noll och tillbaka.

int main () {/ / initiera seriell delsystemet USART_init(BAUD_9600); / / initiera PCI2 Interrupt_init(); uint8_t kodade = 0x00; för (;) {om (bDataReady) {kodade = GPIOR0; USART_tx(Encoded); bDataReady = 0; GPIOR0 = 0X00; } }}

Se Steg
Relaterade Ämnen

Med Minimus AVR med Arduino IDE

The Minimus AVR är en USB-ansluten mikrokontroller, som använder ATMEL 90USB192 mikrokontroller. Dess en billig åter programmerbara mikrokontroller med 21 digital input/output stift.De har använts av människor som mod spelkonsoler konsoler, för att l...

Hur du använder Dragon Rider 500 med din AVR Dragon

detta instructable är en snabbkurs i hur man använder några av funktionerna av Dragon Rider 500 från Ecros Technologies. Tänk att det finns en mycket detaljerad Användarhandbok tillgänglig på webbplatsen Ecros.Dragon Rider är ett gränssnittskort för...

Kör en Stepper Motor med en AVR mikroprocessor

fick några Rota stepper motors från skrivare/disk drives/etc liggande?Vissa sondering med en ohmeter, följt av lite enkel förare kod på din mikroprocessor och du kommer att kliva i stil.Steg 1: Få veta Steppers i princip, du kommer att behöva räkna u...

Hur man använder en 74HC595 SKIFT Register med en AVR ATtiny13

om du har spelat med mikrokontroller och elektronik så du har förmodligen sett LED dot matrix-displayer och andra projekt som använder SKIFT register som 7-segment visar och mer. Detta instructable går över en snabb intro till 74HC595 8-bitars serail...

Från Arduino och perfboard att PCB med fristående MCU

Detta Instructable är en direkt efterföljare av denna. I slutet av detta bygga upp är min skivspelare projekt nästan klar (äntligen).Målet är att utveckla en snygg och arbetar PCB med SMD elektronisk med en arbetande ATtiny85 + programvara!Så är det...

Läs binär/Hex miniatyrhjul växla med en AVR Microcontroller

detta instructable visar dig hur att läsa antalet på en binär pushwheel eller miniatyrhjul växla med lysdioder eller en AVR microcontroller (jag använder en ATmega328p men detta kan anpassas för alla AVR eller förmodligen en annan mikrokontroller för...

Hur man styr en 16 x 2 LCD med en AVR ATtiny2313

om du bara får in microcontrollers finns det mycket att veta som du har sannolikt fått reda. Det finns en hel del bra online tutorials för Atmel AVR och chansen du har ser några av dem nu. Jag nyligen kom in mikrokontroller och visste inte jack om de...

Nyckel ring halsband med tyg & tråd

vad du behöver:1/4" nyckelring1" nyckelringSaxTyg för att förstoraSamordnande trådNålHalsband kedjaSteg 1: Layout Flytta nyckel ring på tyget tills du hittar en plats som du. Var noga med ditt fabric dubblat så att den kan bäras med antingen sid...

Förbättra cykel lås nyckel båge med Sugru

en cykel lås nyckel var svåra att använda, så vi tillämpas vissa röda Sugru på den, och bildade det för att täcka fören. Ursprungliga fören hade ett hål i den, för att göra det möjligt för kopplar den till en nyckelring. Med lite känslig mixtrande pr...

Styra allt med en AVR pin

detta instructable visar hur man styr en grupp av lysdioder med en mikroprocessor utgång.Jag kommer att använda micro är en Atmel Attiny2313.Steg 1: Delar och verktyg Parts:Attiny2313 (fick 5 gratis prover från Atmel)20-pin uttagMotstånd (alla storle...

Kom igång med Atmel AVR och BASCOM

Jag har sett massor av Instructables visar hur man kan arbeta med mikroprocessorer, men de alla antar att du har arbetat med dem tidigare och vet vad du gör. Jag har inte sett en Instructable som tar dig från ingenting och bygger på varje steg.Vad vi...

Mitt svar på WS2811 med en AVR sak

första off - vill sägaBra om du Alan Burlison.Detta är inte menat att uppsamlare du på något sätt. Din kod gjorde det det måste göra. Stor framgång. Min första reaktion i en forum kommentar var faktiskt riktat mot folk som när det gäller icke-arbetan...

Lätt ATTiny seriell kommunikation med liten AVR programmerare

ATTinies (som ATTiny 85) är super awesome! De är super billig, låg effekt, och de gör vad de flesta Arduino projekt utföra ändå (ge en enkel utgång eller ta i en enkel ingång).En svårighet kan snabbt se vad som händer med deras interna för enkel fels...

Redstone fackla nyckel - Redstone handledning med Andrew MC

Hej killar, jag började en You Tube-kanal om Minecraft där jag kommer att publicera redstone handledning och awesome överlevnad videor.Om du gillar min kanal lämna en liknande och tryck på Prenumerera-knappen: D!...

AVR fuse grunderna: kör en avr med en extern klocka

säkringar är bland de svåraste ämnen som jag stött på samtidigt lära sig om programmering microcontrollers. Även efter att söka och läsa flitigt, kunde jag fortfarande inte lyckas rensa mitt begrepp om dem. Men sedan jag började lära dem ta en i tage...

Bil nyckel mod med elektronik

Hej DIYers :)Inspirerad av lite enklare projekt med HotWheels bilmodell och ingen elektronik av användaren Schnurrbarten, projektet är här: Hot hjul bilnyckelså, låt oss komma igång... eller vänta... innan du åta sig att sådana bygga, se till att din...

Kom igång med ubuntu och AVR dragon

här är vad jag gjorde för att komma igång med AVR draken till programmet ATMEGA8 microcontrollers använder ubuntu (detta riktar sig till nybörjare, jag själv också är en nybörjare, så några förbättringar från mer erfarna användare är mycket uppskatta...

Programming AVR med Arduino som ISP utan bootloader och externa crystal

Hej, jag är riktronics , och detta är min första instructable. Här förklarade jag hur till bränna program i din AVR microcontroller med en Arduino. Av detta behöver du inte köpa dyra AVR programmerare om du redan har en Arduino. Och jag antar att du...

Autonoma Sumo bekämpa Robot med pneumatiska Flipper - hur man

denna Sumo Bot utformad, byggdes, programmerad och testade under en 12 veckors period för en av mitt sista år engineering klasser. Syftet var att konstruera och bygga en lätt helt självständiga sumo kämpar robot för en i klassen Sumo Bot konkurrens....