Atmel opstarten 4: BLINKIE twee-Switches, Pull-Up weerstanden en bits Ops (9 / 11 stap)

Stap 9: BLINKIE twee – de betekenis van de verklaringen

Het algemene idee voor het Blinky twee programma: Stel eerst B0 als een uitgang en B1 (en de rest) als input. B0 drijft de LED en B1 is een ingang voor de schakelaar. Wij willen dat de LED knipperen, waardoor dat B0 moet voortdurend Staten overgeschakeld wanneer de input B1 op logica 0 (dat wil zeggen, pin op de grond is). LED knippert moeten we afwisselend schrijven 0 en 1 tot en met precies één pin, namelijk B0 zonder enige andere pin. Wij doen dit met behulp van bitsgewijze bewerkingen in zodanig beïnvloeden alleen B0. Om te bepalen als de ingang op B1 logica 0, gebruiken we een masker (en een bitsgewijze bewerking) uitkiezen van de B1-bit te testen als het is nul, wat correspondeert met de LED in een knipperende modus. Normaal, zou een dergelijke een ingewikkelde regeling niet gebruiken tenzij er geen andere keuze waren niet. De switch zou waarschijnlijk worden geplaatst op een andere beschikbare poort los van de LED.

Voor een aantal van de discussie hieronder, kan u wilt afdrukken uit de Blinky twee codering te gemakkelijk vergelijken de codering met de uitleg.

  1. De #include #define F_CPU 8000000UL en de #include zijn niet veranderd van Blinky One, noch hebben de verklaringen van de DDRB = 0b00000001, while(1), en de verklaringen van de _delay_ms.

  2. Aankondiging dat DDRB = 0b00000001 sets B0 als uitgang overwegende dat alle andere B fysieke pins inputs voor de MCU. In het bijzonder is B1 een ingang. B0 drijft de LED en B1 zintuigen de schakelaar.

  3. PORTB = 0b00000010: hier, aangezien B0 een uitgang is, de rechterhand 0 in deze PORTB toewijzing ingesteld pin B0 tot nul volt (LED 'uit'). Vervolgens omdat B1 een input is, schrijft de 1 in de toewijzing van PORTB een 1 op een ingang (B1), die de B1 pull-up weerstand activeert.

  4. uint8_t: 8-bits geheel getal zonder voorteken dat wordt meestal aangeduid met een 'byte'. Dit type variabele opslaan van getallen, bestaande uit ten hoogste 8 bits. Deze variabele kan variëren van 0 tot 11111111 die is 255 (of 0 tot 0xFF). De uint8_t is een 'gedefinieerde type' en is geen native C/c++ al die talen 'char' en 'unsigned char hebben'. Let op dat een 'ondertekend' byte zoals int8_t ook een waarde van 0 naar 0xFF maar de meest significante bit (dat wil zeggen, de z in 0bzxxxxxxx) zou hebben is 1 voor negatief en 0 voor positieve getallen.

  5. uint8_t masker = 0b00000010: definieert een 8 bits variabele masker die de waarde van 0b00000010 is gegeven. Het masker worden gebruikt voor het elimineren van bit 0 en 2-7 van overweging.

  6. Uint8_t MaskL = 0b00000001: Hiermee definieert u een 8 bits variabele MaskL met een waarde van 0b00000001 maskeren. De L in MaskL dient als een herinnering dat het geldt voor de LED. MaskL worden gebruikt voor het verwijderen van de stukjes B1 tot en met B7 van overweging en alleen van invloed op bit B0.

  • uint8_t Test = 1: een 8 bits variabele gezien de initiële waarde van 0b00000001. In dit geval de aanvankelijke waarde maakt niet uit, omdat de variabele Test een waarde krijgt vóór de waarde te controleren. Het gedeelte '= 1' kan zijn gebleven de puntkomma is echter nog steeds vereist.

  • Test = PINB & masker: de PINB-instructie zal het lezen van de bits in het register die vertegenwoordigen de bits B7 via B0. De '&' vertegenwoordigt een stukje-bij-beetje logische en (zie tabel 2). Alleen beetje #1 in de variabele van de Test (dat wil zeggen, de bits overeenkomen met B1) de oorspronkelijke waarde van de PINB na het maskeren blijft (dat wil zeggen, & masker) [16]. Bijgevolg zoals per tabel 2, bit de Test zal hebben alle nullen, behalve misschien voor variabele B1 die ofwel 0 of 1 kunnen.

    Wanneer het einde van de draad is verbonden met de 0v-rail, zal pin B1 nul en dus PINB & masker zal het produceren van alle nul voor alle bits en Test zal daarom de waarde 0 hebben. De MCU rijden dan de LED 'on'. Als het einde van de draad wordt verwijderd, zal de pull-up weerstand Vcc op de B1-pin plaats, zodat de waarde van PINB & masker de waarde 0b00000010 hebben zal. De MCU ziet een andere waarde dan nul voor de Test en de LED zal onbruikbaar.

  • if(x): een flow-control die verklaringen tussen de twee volgende voert accolades {} wanneer de instructie x geldt. In dit geval, de verklaring van x heeft de vorm Test == 0. De dubbele gelijkteken '==' vraagt of de variabele 'Test' is hetzelfde als 'nul' (dat wil zeggen, 0x00). In C/C++, de logische 'false' komt overeen met de waarde '0', maar de logische 'true' is om het even wat niet '0' zoals '1' of ' 5', enzovoort. Voor Blinky twee, de variabele 'Test' is nul wanneer de schakelaar is gesloten en dat is wanneer we willen de LED knipperen. Dus we de instructie gebruiken ' als (Test == 0)'.

  • PORTB | = MaskL: in het algemeen, de verticale lijn | betekent bitsgewijze of [16]. De verklaring is een snelkoppeling voor

    PORTB = PORTB | MaskL

    De rechterhand PORTB leest de vorige waarde naar portB gestuurd. De linkerhand PORTB schrijft vervolgens de resultaten van de bit-gewijze of terug naar portB. Het maskeren wordt gebruikt MaskL = 0b00000001 met een 1 alleen in positie #0 (overeenkomend met B0), die controles van de LED. De OR zal dan alleen invloed beetje B0 bij het instellen van het op 1 van de logica (pin 12 zullen Vcc), zoals besproken in combinatie met de tabel 3. De andere bits in het schrijven portB zal hetzelfde zijn zoals ze waren toen eerst lezen. Dus als PORTB wordt geschreven, zal geen van de Pull-Up weerstanden worden geactiveerd of gedeactiveerd! Alleen het minste significante beetje (dat wil zeggen, B0) zal worden geschreven op 1 die plaats zal dan 5v op de fysieke B0-pin en dat de LED zal activeren.

  • PORTB & = ~ MaskL: deze verklaring is de sneltoets voor PORTB = PORTB & ~ MaskL waar & is de bit-gewijze AND-bewerking (c.f., tabel 4). De rechterhand PORTB leest de waarden eerder geschreven naar portB. De linkerhand PORTB schrijft het resultaat van de en terug naar portB. Gezien dat MaskL = 0b00000001 then ~ MaskL = 11111110. EN zal de PORTB bits #0 instellenin aan logica 0. De overige bits van PORTB zal niet worden beïnvloed en de oorspronkelijke waarden zal terug worden geschreven naar portB. Daarom is de connectiviteit van de pull-up weerstanden zal niet worden beïnvloed. De pin B0, die de LED drijft, wordt ingesteld op nul en de LED zal 'uit'.

  • Gerelateerde Artikelen

    Atmel opstarten 5: Levenslijn

    Atmel opstarten 5: Levenslijn

    M. A. Parker c2015De levenslijn is een eenvoudige schakeling op basis van de Atmel ATTiny2313A microcontroller eenheid (MCU) die functioneert als een plaatsvervanger klokbron voor een doel MCU uitgevallen gesmolten door klok ten onrechte instellen ze
    Atmel opstarten 1: Atmel Studio en programmeur

    Atmel opstarten 1: Atmel Studio en programmeur

    M. A. Parker c2015Installeren Atmel Studio (AS) en een programmeur belichamen de eerste stappen [0] op het pad aan het gebruik van een afzonderlijke eenheid voor Atmel AVR Microcontroller MCU [1] in tegenstelling tot de MCU-on-a-board zoals Arduino [
    Atmel opstarten 2: Microcontroller-schakelingen en zekeringen

    Atmel opstarten 2: Microcontroller-schakelingen en zekeringen

    M. A. Parker c2015Circuits en zekeringen construeert een eenvoudige maar belangrijke circuit op de experimentator breadboard die zal worden gebruikt als het fundamentele platform voor vele microcontroller projecten en voor het instellen van de parame
    Atmel opstarten 3: Binky een-poort, PIN, DDR en LED

    Atmel opstarten 3: Binky een-poort, PIN, DDR en LED

    M. A. Parker c2015Blinky, de knipperende LED, laat zien hoe met de taal C/C++ in Atmel Studio (AS) om te controleren de Atmel MCU poorten voor input en output (dat wil zeggen, IO) en het 'geheim' leven van de Atmel poort, PIN en DDR registers blijkt.
    Draadloze Wii Nunchuck gecontroleerd Arduino

    Draadloze Wii Nunchuck gecontroleerd Arduino

    Gebruik een volledig ongewijzigde draadloze Wii Nunchuck als een controlesysteem voor elke Arduino gebaseerd project. Geen toegevoegde radio zender/ontvanger paren enz.Dit instructable aanvaardt enige ervaring met de Arduino microcontroller.De radio-
    De Fibonacci-klok

    De Fibonacci-klok

    UPDATE: dit project heeft met succes gefinancierd op Kickstarter en is nu beschikbaar voor verkoop op http://Store.basbrun.com Bedankt aan al degenen die mijn campagne gesteund!Presenteer ik u de Fibonacci-klok, een klok voor nerds met stijl. Mooie e
    MINI Si7021 temperatuur en luchtvochtigheid Sensor

    MINI Si7021 temperatuur en luchtvochtigheid Sensor

    Synopsis: ± 0,3% nauwkeurigheid (temp en vochtigheid) is de Mini-Si7021 een zeer nauwkeurige sensor voor accumuleren gegevens van temperatuur en vochtigheid. De I2C busarchitectuur biedt snelle data-acquisitie, foutdetectie en ondersteuning voor cont
    Lezing Switches met ATtiny2313

    Lezing Switches met ATtiny2313

    zijn er verschillende Instructables omgaan met uitgangen van de ATtiny2313 en soortgelijke AVR apparaten. Bijvoorbeeld,. Bezig met de nieuwste versie van de echte Elliot, waaruit hoe de controle van de stappenmotoren blijkt, vond ik dat het zou echt
    Eind Stop / Switch problemen beperken

    Eind Stop / Switch problemen beperken

    Grenzen schakelaars of 'einde stopt' kan zoals ze zijn genoemd naar de 3D printen Gemeenschap worden lastig voor Hobby CNC en 3D print opstellingen. Vele forums discussie hebben over hoe om te stoppen met de valse triggers en allermeest naar het schi
    Arduino gecontroleerd SIP & PUFF Switch

    Arduino gecontroleerd SIP & PUFF Switch

    The Arduino serie van micro-controllers opent een enorme wereld van mogelijkheden voor beginnende programmeurs en hobbyisten! Met vrij beschikbare ontwikkelingssystemen tutorials en een uitgebreid scala aan bibliotheekfuncties en monster schetsen, ka
    R/C Controlled Switch voor Drones

    R/C Controlled Switch voor Drones

    Hoewel er veel goede circuits beschikbaar op het internet voor soortgelijke projecten zijn, had ik een specifiek probleem op te lossen. Allermeest naar de circuits beschikbaar schakelt hun uitgangen op mid stick positie (50%). Mijn alle drones gebrui
    Wat zit er in een pull snoer schakelaar

    Wat zit er in een pull snoer schakelaar

    pull snaar schakelt zoals deze zijn gemeenschappelijk in badkamers in het Verenigd Koninkrijk zij voorkomen natte vingers krijgen dicht bij netspanningen. In mijn badkamer begon te spelen dus ik het nooit te missen een opertunity nam ik het appart om
    Hoe maak je een pull schakelen.

    Hoe maak je een pull schakelen.

    Een tijdje geleden kreeg ik een pooltafel in mijn schuur, en mij wilden voor zitten kundig voor zien van alle ballen, dus ik zette de verlichting erboven. Ik wilde een pull-schakelaar op de lichten, maar toen ik keek naar het kopen van een, zij waren
    Vakantiewoningen Toy Switch aanpassing

    Vakantiewoningen Toy Switch aanpassing

    Voor veel kinderen met een lichamelijke handicap is spelen met off-the-shelf speelgoed niet mogelijk. Afhankelijk van hun unieke vaardigheden, kan het voorkomen dat speelgoed niet meer toegankelijk.Als een kind hun voet, hoofd, arm, mond of elk ander