AVR Assembler Övningsexempel 7 (6 / 12 steg)

Steg 6: Vilka vippströmbrytare ställer vi?



Låt oss först tänka på hur vi ska koden detta så att styrenheten kan läsa indata från knappsatsen och förvandla det till ett numeriskt värde som motsvarar knappen som trycktes.

Vi kommer att använda Analog till Digital omvandlare (ADC) som är inbyggda i Atmega328p. Vi kommer att använda AREF som vår referens spänning och våra knappsatsen utgång kommer att anslutas till PortC0 eller PC0. Observera att detta stift är också ADC0 för Analog till Digital omvandlare 0.

Det kan vara en bra idé för dig att läsa igenom avsnittet 12,4 på avbrott för ATmega328P och också kapitel 24 på Analog-till-Digital-omvandlare innan vi komma igång eller har åtminstone de delar redo för referens.

För att ställa in mikrokontroller så att den vet vad jag ska göra med en analog insignal, och hur man interagerar med vårt program, måste vi först ställa några av de olika ADC med registrera bitar. Detta är i huvudsak motsvarar de gamla vippströmbrytare på de första datorerna. Du vänder antingen en switch ON eller OFF eller ännu längre tillbaka du vill ansluta kablar mellan ett utlopp och en annan så att elektronerna att nå det vägskäl skulle hitta en grind stängd och en annan öppna tvingar det ner en annan väg i labyrinten av kretsar och utför således en olika logiska uppgift. När kodning i assembler har vi nära tillgång till dessa funktioner av mikrokontroller som är en av de attraktiva sakerna om att göra det i första hand. Det är mer "hands on" och långt mindre som händer "bakom kulisserna" så att säga. Så tror inte att dessa register som en mödosam uppgift. Det är vad gör assembler intressant! Vi vinner en mycket personlig relation med det inre arbetet och logik av chip och göra det göra exakt vad vi vill ha det till--inte mer och inte mindre. Ingen bortkastad klockcykler.

Så är här en lista av växlar vi måste ställa:

  1. Stänga av makt minskade ADC lite, PRADC, som är bit 0 av PRR registret, eftersom om denna bit är på det kommer att stänga ner ADC. Power minskning registret är i grunden ett sätt att stänga av olika saker som använder ström när du inte behöver dem. Eftersom vi använder ADC vill vi se till att det inte är inaktiverat på detta sätt. (Se PRADC på sidan 46)
  2. Välj den analog ingångskanal vara ADC0 genom att stänga av MUX3... 0 i ADC Multiplexer urval (ADMUX) registret (se tabell 24-4 sidan 249) dessa är redan utanför standard så vi egentligen inte behöver göra detta. Jag är dock även det eftersom om du någonsin använda en annan port än ADC0 du kommer att behöva växla dessa växlar därför. Olika kombinationer av MUX3, MUX1 MUX2, MUX0 kan du använda någon av de analoga portarna som din indata och du kan även ändra dessa på fluga om du vill titta på en massa olika analoga signaler på en gång.
  3. Stänga av REFS0 och REFS1 bitar i ADMUX register så att vi kommer att använda AREF som våra referensspänningen snarare än en intern referens (se sidan 248).
  4. Slå på ADLAR lite i ADMUX så resultatet är "vänster justerad" vi kommer att diskutera detta val i nästa steg.
  5. Ange ADC0D bit i Digital Input inaktivera Register (DIDR0) inaktivera digital ingång till PC0. Vi använder den porten för analog ingång så vi kan också inaktivera den digitala ingången för den.
  6. Ange ISC0 och ISC1 i den externa avbryta kontroll registrera A (EICRA) för att ange att vi vill utlösa på stigande kanten av en spänning signal till INT0 stift (PD2), se sidan 71.
  7. Tydliga bitar INT0 och INT1 i den externa avbryta Mask Register (EIMSK) att indikera att vi inte använder avbrott på detta stift. Om vi aktiverar avbrott på detta stift skulle vi behöva en avbrottshanterare på adress 0x0002 men istället vi ställer det in så att en signal på detta stift utlöser ADC konvertering, slutförandet av som hanteras av ADC konvertering komplett avbrottet på adress 0x002A. Se sidan 72.
  8. Ange ADC aktiverar (ADEN) bit (stycke 7) i kontrollen ADC och status register A (ADCSRA) aktivera ADC. Se sidan 249.
  9. Vi kunde starta en enda konvertering genom att ADC start konvertering biten (ADSC) varje gång vi ville läsa den analoga signalen, men för nu skulle vi hellre ha det Läs automatiskt när någon trycker på knappen, så istället kommer vi att ge den ADC Autotrigger aktiverar (ADATE) lite i ADCSRA registrera dig så att utlösa görs automatiskt.
  10. Vi ligger också ADPS2... 0 bits (AD Prescalar bitar) till 111 för att ADC klockan är CPU klockan dividerat med en faktor på 128.
  11. Vi kommer att välja källan till ADC utlöser vara PD2 som också kallas INT0 (externa avbrottsbegäran 0). Vi gör detta genom att växla de olika bitarna i ADCSRB register (se tabell 24-6 på sidan 251). Vi se av tabellen som vi vill ADTS0 off, ADTS1 på och ADTS2 av så att ADC kommer att utlösa det klämmer fast. Observera om vi ville ständigt prova den analoga ingången som om vi läste några kontinuerlig analog signal (som ljud provtagning eller något) vi skulle ställa detta till gratis kör läge. Metoden vi använder för att ange utlöser på PD2 utlöser en ADC läsning av analog port PC0 utan att orsaka ett avbrott. Avbrottet kommer när konverteringen är klar.
  12. Aktivera ADC avbrott aktiverar (Ebba Grön) lite i ADCSRA register så att när analog till digital konvertering är klar kommer det att generera ett avbrott som vi kan skriva en avbrottshanterare för och sätta på .org 0x002A.
  13. Ange den jag lite i SREG aktivera avbrott.

Övning 1: se till att du läsa de relevanta avsnitten i databladet för var och en av ovanstående inställningar så att du förstår vad som pågår och vad skulle hända om vi ändrade dem till alternativa inställningar.

Se Steg
Relaterade Ämnen

AVR Assembler Övningsexempel 9

Välkommen till Övningsexempel 9.Idag kommer vi att visa hur du kan styra både 7-segment display och en 4-siffrig display med våra ATmega328P och AVR assembler kod. I samband med detta får vi ta omvägar till hur du använder stacken för att minska anta...

AVR Assembler Övningsexempel 4

Välkommen till tutorial nummer 4!I den här guiden kommer vi att bygga en krets som kommer att simulera rullning av två tärningar. Sedan kommer vi först skriva en brute force-program som gör jobbet. Sedan kommer vi förenklar det programmet på olika sä...

AVR Assembler handledning 11

Välkommen till handledning 11!I den här korta guiden kommer vi slutligen att bygga den första delen av vårt sista projekt.Det första du bör göra är att gå till det allra sista steget i denna tutorial och titta på videon. Sedan komma tillbaka hit. [pa...

AVR Assembler Tutorial 1

Jag har beslutat att skriva en serie tutorials om hur man skriver assembler program för den Atmega328p som är mikrokontroller används i Arduino. Om människor förblir intresserad fortsätter jag att lägga ut en en vecka eller så tills jag får slut på l...

AVR Assembler handledning 6

Välkommen till Tutorial 6!Dagens handledning kommer att vara kort där vi kommer att utveckla en enkel metod att kommunicera data mellan en atmega328p och en med två portar ansluta dem. Vi kommer ta sedan tärningarna rullen från läraren 4 och registre...

AVR Assembler handledning 8

Välkommen till Tutorial 8!I denna kort tutorial ska vi ta lite av en skenmanöver från att införa nya aspekter av assembler programmering att visa hur man flytta våra prototyper komponenter till ett separat "tryckta" kretskort. Anledningen är att...

AVR Assembler Tutorial 2

Denna handledning är en fortsättning på "AVR Assembler Tutorial 1"Om du inte har gått igenom Tutorial 1 bör du sluta nu och göra att man först.I den här guiden kommer vi fortsätta vår studie av assembler programmering av den atmega328p som använ...

AVR Assembler handledning 10

Välkommen till handledning 10!Ledsen att det tog så lång tid för att få denna nästa avbetalning ut men detta är en ganska hektisk tid på året. I alla fall, är här det!Vi har kommit långt och du förmodligen redan är kompetenta nog att skriva många int...

AVR Assembler handledning 5

Idag kommer vi att ta en närmare titt på de olika minnesplatserna i Atmega328p mikrokontroller och se om vi bättre kan förstå hur saker lagras, där de lagras och hur pekare och uppslagstabeller fungerar.Handledningen kommer att delas upp i två delar....

AVR Assembler handledning 3

Välkommen till tutorial nummer 3!Innan vi börjar vill jag göra en filosofisk punkt. Inte vara rädd för att experimentera med kretsar och den kod som vi konstruerar i dessa tutorials. Ändra sladdar runt, lägga till nya komponenter, ta komponenter ut,...

Utveckling styrelsen för Attiny84 mikrokontroller

Detta är en utveckling styrelse för Attiny84 mikrokontroller. Tha Attiny84 chip har 11 pins adresserbara med Arduino IDE, 8k flashminne för lagring av program och 512 byte ram tillgängligt för variablerna stack och program.En funktion av den Attiny84...

Hur man ladda program till en Arduino UNO från Atmel Studio 7

I denna korta Instructable kommer vi att lära sig att ladda ett program till en Arduino UNO ombord med Atmel Studio istället för Arduino IDE. Detta är användbart när du behöver utveckla ett program med fler advance funktioner eller på ett annat språk...

MRETV - Video, ljud och mycket mer från en standard Arduino!

MRETV - Video, ljud och mycket mer från en standard Arduino!Nu uppdaterad för Arduino 1.6.6 November 2015!Använd endast två resistorer och två dioder för att generera full skärm video. Text 47 x 29 8 x 8 tecken, dubbla vertikala upplösningen (47 x 57...

Enklaste AVR parallell port programmerare

Hej, är detta min första instructables, som handlar om avr programmerare. Detta är den enklaste krets med vilka AVR (Atmega serie, Attiny serien, AT90S serien) microcontrollers kan programmeras. Det finns en hel del programmerare, men detta är enkel...

Älskling, jag krympte Arduino: flytta från Arduino till ATtiny och skriva din kod i ren AVR-C

Arduino är en stor hård- och mjukvaruplattform, men med alla dess funktioner är det också lite uppsvälld och ofta behöver du bara en liten del av alla funktioner. Projektet kräver ibland för att ha mindre och billigare enheter. Vad du behöver är ATti...

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...

Fattig mans AVR speldosa

detta är en enkel AVR speldosa, kostar ca 10$ för att bygga.DISCLAIMER: Detta projekt är vad man skulle kalla en SMOP, "en enkel fråga om programmering". Det innebär att det är av trivial komplexitet men långa... så om du kan tolerera tristess i...

Montering av Dragon Rider 500 för användning med AVR Dragon

inte länge sedan företaget Atmel kom ut med ett bra verktyg för användning med AVR microcontrollers kallas AVR Dragon. Denna lilla USB-enhet ger proffs och amatörer både förmågan att använda: I System programmering (ISP), JTAG, felsöka tråd och hög s...

16-nyckel knappsatsen avkodning med en AVR MCU

detta instructable visar dig hur gränssnittet en 16-nyckel knappsats till din AVR microcontroller och läsa nyckeln när en tangent är nedtryckt. Jag ska presentera knappsatsen först, sedan 74HC922 16-nyckel dekodern IC som pin-saving mekanism, sedan s...