En komplett starter guide till AVRs (2 / 10 steg)
Steg 2: IO pinnar
En av de första sakerna du kommer att vilja göra med en mikrokontroller är att läsa en knapp och slå på en LED.
Det här exemplet kommer jag att använda en ATtiny2313 MCU. De är billiga och kommer med 18 IO pinnar, 2K Flash och endast 128 byte ram!
Du öppnar databladet att följa med: ATtiny2313 datablad
Börja med att bygga banan på en skärbräda. MCU kan använda mellan 1,8/2.7 och 5.5v beroende på vilken version du har.
För att driva chip, jag använder en 3.3V regulator, du kan använda ett annat värde, men bo inne i de operativa värdena och hålla över 2v så du kan lätt att driva LED.
Anslut regulatorn till en strömkälla som ett 9v batteri eller en plugin pack (jag har en fått vid 9v som faktiskt levererar 12v!).
På MCU ansluta stift 10 (GND) till negationen / gnd din regulator och stift 20 till VCC (power).
Anslut en tryckknapp mellan GND och stift 13 (någon IO pin skulle göra, men fastnar med samma så koden bara fungerar för dig).
Ansluta lysdioder katoden (en platt fläck på LED och kortaste bly) via ett motstånd till jord. Anslut anoden (längsta bly) till stift 12.
Nu, på koden!
Om du inte vet hur man sätter koden på en AVR, blir det en bilaga i slutet av detta instructable förklarar det, gå läsa den nu och komma tillbaka när du är redo.
För så lite kod har vi mycket att förklara att göra!
DDRB är den "Data riktning registrera för PortB"
Detta register avgör om IO pinnar används bara att mäta spänningen på PIN-koden eller om de kan sjunka / källa nuvarande.
När 0 de är hög impedans och kommer inte att leverera tillräcklig ström för att driva en LED till exempel, men de kan användas för att kontrollera om en PIN-kod är hög eller låg.
När 1 kan de är låg impedans och leverera eller sjunka till allmänt 20mA, nog att driva en LED eller en transistor (om du vill växla större laster).
Här PB0 (Pin 12) är inställd på låg impedans att köra LED.
Nästa rad anger PORTB registret. Detta register används för att ange värdet av en PIN-kod, som detta stift (PB1 = Pin 13) som används för en knapp, vi ska sätta den höga standard.
När knappen trycks, kommer ansluter till marken, detta stift att dras låg.
Nästa är upp vår oändlig loop.
Detta for-loop kör tills strömmen bryts!
Inuti loop testar vi tillståndet för knappen, det är en upptagen linje, så låt oss bryta ner. För om tillstånd har vi:
! (PINB & (1 << PB1))
Vi börjar med ett inte (!) som förvandlar en sann till en falsk och vice versa.
Nästa vi har:
PINB & (1 << PB1)
PINB är registret du läsa för att få reda på värdet av IO pinnar.
Den "&" används för att maskera ut bara värdet av (1 << PB1) vilket som vi lärt oss tidigare, är en enda bit aktiverat i PB5 position.
Vi är så upp allt kontrollera om biten på PB1 i PINB är hög och sedan Invertera det.
Så vi kontrollerar om PB1 stift är låg (knappen intryckt).
Om det trycker vi aktivera LED: PORTB | = (1 << PB0)
Detta är att använda operatorn OR och den vänster SKIFT som vi upp tidigare, ange pin hög. Om knappen inte är intryckt vi vill ta bort PIN-koden (dra den låga):
PORTB & = ~ (1 << PB0)
Här används operatorn och tillsammans med inte och vänster SKIFT att vända bara som en pin off (låg).