Atmel start 4: Blinky två-växlar, Pull-Up motstånd och Bit Ops (9 / 11 steg)

Steg 9: Blinky två-innebörden av uttalanden

Den övergripande idén för Blinky två program: först ställa in B0 som en utgång och B1 (och övriga) som indata. B0 drivar LED och B1 är en ingång för växeln. Vi vill ha lampan att blinka, vilket innebär B0 måste ständigt växla stater om indata B1 när logik 0 (dvs stift på marken). För LED blinkar måste vi växelvis skriva 0 och 1 till exakt ett stift, nämligen B0 utan att det påverkar eventuella andra pin. Vi gör detta genom att använda bitvis operationer på ett sådant sätt att den påverkar endast B0. För att avgöra om indata på B1 är logik 0, använder vi en mask (och en bitvis drift) för att välja ut den B1 lite och testa om det är noll, som motsvarar till lampan i en blinkande läge. Normalt vill man inte använda sådant komplicerat arrangemang om det inte fanns något annat val. Växeln skulle sannolikt placeras på en annan tillgänglig port separat från lampan.

För vissa av diskussionen nedan, kanske du vill skriva ut den Blinky två kodning för att enkelt jämföra med förklaringen.

  1. #include, #define F_CPU 8000000UL och #include inte har ändrats från Blinky One, eller har uttalandena som DDRB = 0b00000001, while(1), och _delay_ms uttalanden.

  2. Märker att DDRB = 0b00000001 ställer B0 som en utgång medan alla andra B fysiska stiften är ingångar till MCU. B1 är särskilt indata. B0 drivar LED och B1 känner av växeln.

  3. PORTB = 0b00000010: här, eftersom B0 är en utgång, högra 0 i PORTB tilldelningen anger pin B0 till noll volt (LED "av"). Nästa, eftersom B1 är en ingång, 1 PORTB uppdraget skriver en 1 till en ingång (B1) som aktiverar B1 pull-up resistor.

  4. uint8_t: Osignerat 8-bitars heltal som brukar kallas en "byte". Här variabeltypen hålla tal bestående av högst 8 bitar. Denna variabel kan variera från 0 till 11111111 som är 255 (eller 0 till 0xFF). Uint8_t är en "definierad typ" och är inte hemma i C/C++ även dessa språk har "röding" och "unsigned char". Observera att en "signerat" byte som int8_t också skulle ha ett värde 0 till 0xFF men den mest signifikanta biten (dvs z i 0bzxxxxxxx) är 1 för negativ och 0 för positiva tal.

  5. uint8_t Mask = 0b00000010: definierar en 8-bitars variabel Mask som ges värdet av 0b00000010. Masken kommer att användas för att eliminera bitarna 0 och 2-7 från behandling.

  6. Uint8_t MaskL = 0b00000001: definierar en 8 bitars maskering variabel MaskL med ett värde av 0b00000001. L i MaskL tjänar som en påminnelse om att det gäller för LED. MaskL används för att ta bort bitar B1 genom B7 från behandling och påverkar endast lite B0.

  • uint8_t Test = 1: en 8-bitars variabel med tanke på det ursprungliga värdet av 0b00000001. I det här fallet spelar det initiala värdet ingen roll eftersom variabeln Test kommer att ges ett värde före kontroll av dess värde. Den '= 1' delen kunde har lämnats av; Semikolonet krävs dock fortfarande.

  • Test = PINB & Mask: The PINB uttalande kommer att läsa bitarna i registret som motsvarar bitarna B7 genom B0. Den "&" föreställer en bit-för-bit logiskt och (se tabell 2). Bara lite #1 i testvariabeln (dvs lite motsvarar B1) kommer att behålla det ursprungliga PINB värdet efter Maskeringen (dvs & Mask) [16]. Följaktligen per tabell 2, lite variabeln Test kommer att ha alla nollorna utom möjligen för B1 som kan vara antingen 0 eller 1.

    När slutet av kabeln är ansluten till 0v järnväg, pin B1 blir noll och så PINB & Mask kommer att producera alla noll för alla bitar och Test måste därför värdet 0. MCU kommer sedan att köra LED "på". Om du tar bort i slutet av kabeln placerar pull-up resistor Vcc på B1 PIN-koden så att värdet av PINB & Mask har värdet 0b00000010. MCU kommer att se ett annat värde för testet och det kommer att inaktivera LED.

  • IF(x): en flödeskontroll som utför uttalanden mellan två följande hängslen {} när uttrycket x är sant. I det här fallet uttalande x har formuläret Test == 0. Dubbel likhetstecknet "==" frågar om variabeln "Test" är samma som "noll" (dvs 0x00). I C/C++, det logiska 'falskt' är motsvarande värdet '0', men den logiska 'true' är något inte '0' som '1' eller ' 5' och så vidare. För Blinky två, variabeln "Test" är noll när växeln är stängd och som har när vi vill att lampan blinka. Så vi använder uttrycket "om (Test == 0)".

  • PORTB | = MaskL: allmänt, den vertikala linjen | innebär att bitvis eller [16]. Uttalandet är en genväg för

    PORTB = PORTB | MaskL

    Högra PORTB läser det föregående värdet skickas till portB. Vänstra PORTB skriver sedan resultaten av bitvis eller tillbaka till portB. Maskeringen använder MaskL = 0b00000001 med 1 endast i #0-läge (motsvarande B0), som styr LED. Eller kommer då endast påverka lite B0 genom att ställa det till logik 1 (stift 12 kommer att Vcc) som diskuteras i samband med tabell 3. De andra bitarna i portB skriva kommer att vara samma som de var när först läste. Så när PORTB skrivs, kommer att ingen av Pull-Up motstånd aktiveras eller inaktiveras! Endast den minst signifikanta biten (dvs B0) skrivs till 1 som kommer att placera 5v på det fysiska B0 stiftet och som kommer att aktivera LED.

  • PORTB & = ~ MaskL: detta uttalande är genvägen för PORTB = PORTB & ~ MaskL där & är bitvis AND-operationen (jfr, tabell 4). Högra PORTB läser värdena tidigare skrivit till portB. Vänstra PORTB skriver resultatet av och tillbaka till portB. Givet det MaskL = 0b00000001 sedan ~ MaskL = 11111110. OCH att ange bit #0 i PORTB logik 0. De återstående bitarna från PORTB kommer inte att påverkas och de ursprungliga värdena skrivs tillbaka till portB. Anslutning av pull-up motstånd kommer därför inte att påverkas. PIN-koden B0, som driver LED, sätts till noll och LED kommer att vara "off".

  • Se Steg
    Relaterade Ämnen

    Atmel start 1: Atmel Studio och programmerare

    M. A. Parker c2015Installera Atmel Studio (AS) och en programmerare förkroppsligar de första stegen [0] på väg mot med hjälp av en Atmel AVR Microcontroller individenhet MCU [1] i motsats till MCU-på-en-styrelsen som Arduino [2]. Här startar resan, o...

    Atmel start 2: Microcontroller kretsar och säkringar

    M. A. Parker c2015Kretsar och säkringar konstruerar en enkel men viktig krets på en experimenter's skärbräda som ska användas som grundläggande plattform för många microcontroller projekt och för att ange parametrarna mikrokontroller (dvs säkringar)....

    Atmel start 3: Binky en-PORT, PIN, DDR och LED

    M. A. Parker c2015Blinky, blinkande LED, visar hur man använder språket som C/c ++ i Atmel Studio (AS) för att styra Atmel MCU portar för ingång och utgång (dvs IO) och avslöjar den "hemliga" liv av Atmel PORT, PIN och DDR register. Blinky använ...

    Atmel start 5: Livlina

    M. A. Parker c2015Livlinan är en enkel krets baserad på Atmel ATTiny2313A mikrokontroller enheten (MCU) som fungerar som ett substitut klocka källa för ett mål MCU återges ur funktion av felaktigt ställa in klockan säkringar. Projektet, tänkt att var...

    DIY luft värmeväxlare - från läskburkar och pvc-rör

    Du lära dig hur man gör en låg kostnad, lätt att bygga och mycket effektiv luft värmeväxlare med läskburkar, pvc-rör och några datorfläktar.Syftet med värmeväxlaren är att ventilera ett rum eller hus med frisk luft samtidigt inte förlora för mycket v...

    Laptop automatisk Start/stopp anklagat för (med Arduino, Yun sköld och ESP8266)

    Jag arbetar utanför mitt land och laptop är en stor hjälp för mig att ansluta till min familj och vänner och göra alla mina computing tyger också, men jag alltid kom över för att driva svagt batteri och jämn värst till kritisk nivå eller reserverade...

    Automatic 18650 Analyzer

    Flyttade uppdateringar till steg 2.Jag hade turen att få många dussintals begagnad laptop batterier från en vän som jobbar på en datorbutik. Efter laddning och urladdning några hundra cell 18650 celler med 3 Imax B6 laddare att mäta kapacitet, jag be...

    Arduino Powered Home

    Jag har gjort några uppdateringar till detta instructable sedan Aug 2014 ***Jag bestämde mig att dela denna information så att det kan hjälpa andra som har kämpat för att göra liknande saker med deras Arduino. Jag har nyligen fått med Arduino. Jag kö...

    Gör din egen IR-fjärr som kan nå någonstans

    Min hemmabio är långt borta från min säng och fjärrkontrollen kan inte nås där. Många gånger, tänkte jag styra hemmabiosystemet från min säng att njuta av musik när som helst (på grund av lathet förstås). Så jag gjorde en sökning och hittade denna fa...

    Hur du använder ESP8266-01 stiften

    IntroduktionESP8266-01 är en mycket låg kostnad WiFi aktiverat chip. Men det har mycket begränsad I/O. När du konfigurerar den för programmering används vid första anblicken, alla stiften.Denna instructiable bygger på med hjälp av ESP8266 GPIO0/GPIO2...

    Säkerhet med en gammal Pentium 1 del II

    Micro-styrenheter är mycket snyggt. Har ett par själv. Ansluter till micro-kontrollanter eller till en PC är i princip samma. Så har du inte en mikro-controller ännu, ta en gammal PC och få att fungera. Detta är en förlängning av ursprungliga instruc...

    Hur du använder I2C i LabVIEW

    För detta projekt ansluten jag PmodGYRO till chipKIT WF32 med LabVIEW och LabVIEW MakerHub LINX. Denna guide kommer att gå igenom hur du ställer in pull-up motstånd för framgångsrik I2C kommunikation och hur man läser ett datablad för att hitta det d...

    Hur man gör en PIP-Boy (prototyp)

    så vad är en PIP-Boy, du frågar? För de obekanta är en PIP-Boy en anordning som används av huvudpersonen i den populära Fallout-serien av spel för navigering, strålning upptäckt, data storage/uppspelning och lagerhantering. Är ett stort fan av serien...

    Mobiltelefon larm för en motorcykel, bil eller något du vill

    jag fick nog med normala larm vilket gör en massa oväsen, och ingen tar några märker av dem längre.Också utan att veta om någon hade bud med min cykel eftersom jag var för långt bort att höra larmet.Så jag bestämde mig att göra detta larm med en gamm...

    Bärbar infödda MOD spelare baserat på Raspberry PI (spelar MOD, S3M, det, XM etc...). Använder BassPlay bibliotek.

    Description:Hallon-PI grundval av ursprunglig MOD player för att spela musik moduler MOD, S3M, det, XM bland andra.Den använder kommandoradsverktyget spelare baserad på bas-play bibliotek.Kort beskrivning av musik moduler:Musik moduler påbörjar från...

    1981 Portable VCR Raspberry PI Media Centre

    Detta är en tidig 80-Sharp VC - 2300H bärbara Videobandspelare som jag har konverterat - det har nu en Raspberry Pi i centrum, kör de utmärkta Raspbmc medierna Center software. Andra uppgraderingar inkluderar en snazzy arduino-baserad klocka och en E...

    FSR Tutorial!

    Vad är en Force känsliga motstånd?FSRs är sensorer som gör att du kan upptäcka fysiskt tryck, klämma och vikt. De är enkla att använda och låg kostnad.FSRS är i grunden en resistor som ändrar dess resistiv värde (i ohm) beroende på hur mycket dess pr...

    HD44780 LCD till I2C adapter styrelsen för buss pirat

    billigt tecken LCD-skärmar baserat på HD44780 chipset kommer i olika storlekar: 2 x 16, 4 x 20, etc. Dessa skärmar har två standardgränssnitt lägen, 4 och 8 bitars parallellt. 8 bitar kräver sammanlagt 11 data linjer, 4 bitar kräver 7 (6 för lässkydd...

    (7) noll till 132 volt AC eller DC!

    jag gick hem med min fru en dag efter lunch i en av de många asiatiska restauranger som vi har i Oahu.Promenader är bra.Får hjärtat att arbeta hårdare, du bryta en svett och du förlora lite vikt du inte behöver släpa runt i första hand.Hawaii är en m...