Stap 2: Controle van de Pull-Up weerstand
Dus, hoe kan de pull-up weerstand [12,13] programmatisch gecontroleerd worden?
Haal uit Start-up #3, de DDR, de poort, en PIN verklaringen in Atmel Studio C/C++ controle over de functie en de stand van de MCU-poorten. Bijvoorbeeld, de gedeeltelijke instructie ' DDRB =' het 8 bit gegevens richting register voor poort B met 0s en 1s die de MCU vervolgens interpreteert in te stellen van de bijbehorende fysieke poort B-pinnen op de input en output, respectievelijk wordt ingesteld. De '= PINB' gedeeltelijke verklaring (zoals in x = PINB), bijvoorbeeld, leest de invoer registreren voor de fysieke poort B-pinnen. De ' PORTB =' gedeeltelijke verklaring zal schrijven 8 bits aan de poort B uitvoer registreren die de MCU interpreteert u de bijbehorende fysieke poort B-pinnen - met één voorbehoud betreffende de Pull-Up weerstanden. En dit begint onze discussie voor de huidige stap. De huidige stap gebruikt de poort B als voorbeeld maar andere beschikbare poorten op een Atmel AVR MCU (zoals A, B,...) werken op dezelfde manier. Herinner me, de ATTiny2313A maakt gebruik van pins 12 tot en met 19 voor portB aangeduid door B0 tot en met B7, respectievelijk [1] zoals aangegeven in tabel 1.
We bekijken een voorbeeld dat toont het gebruik van gemengde input en output voor portB dat ook een pull-up weerstand activeert. Bijvoorbeeld, stel dat we hoeven alleen maar uitgangen op fysieke pin 13 en 14 (dat wil zeggen, B1 en B2, zie tabel 1) maar vereisen ingangen op de rest van de pinnen voor poort B. Veronderstel verder dat pin 18 (dat wil zeggen, B6) moeten een pull-up weerstand zoals voor een switch die vergelijkbaar is met die in de vorige stap gedemonstreerd.
Eerst richten op de pull-up weerstand. Het kan worden ingeschakeld door te schrijven een '1' op een ingang pin. Laat die wastafel voor een tijdje. Het schrijven van een '0' tot een invoer pin schakelt de interne pull-up weerstand en Hiermee stelt u de invoer naar een hoge impedantie staat [1].
Tabel 1: Een voorbeeld tonen van pins 12-19 met zowel ingangen en uitgangen als pull-up PU geactiveerd en hoge impedantie HZ.
Fysieke pinnen | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 |
Naam | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
DDRB | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
Fysieke PortB | In | In | In | In | In | Uit | Uit | In |
PORTB = 0b0100100
0
1
0
0
0
1
0
0
Fysieke Pin resultaat
HZ
PU
HZ
HZ
HZ
VCC
0V
HZ
Dus in dit voorbeeld om te verkrijgen van de inputs en outputs getoond in de vierde rij van tabel 1, moeten we eerst instellen DDRB = 0b00000110, zodat de fysieke pinnen 13 en 14 zijn zowel de output als de rest zijn ingangen. Als u wilt activeren de pull-up (PU) weerstand voor de pincode 18, schrijven we een '1' B6, oftewel een invoer, zoals in de zesde rij. Wij stel vervolgens PORTB = 0b0100100 zoals in de zesde rij van de tabel. De laatste rij bevat de resulterende fysieke toestanden van de fysieke pinnen 12-19. Voor fysieke pin 13 en 14, zijn de logische waarden in het register van de DDRB vertaald in de spanningen op de pinnen zoals verwacht. Pins 12, 15-17 en 19 zijn ingangen en in een hoge impedantie staat, zoals aangegeven door de HZ, omdat DDRB hen als input en de bijbehorende bits in het schrijven van de PORTB heeft uitgeschakeld de pull-up-weerstanden zijn vastgesteld. Vaak (maar zeker niet altijd) het programma DDRB en de Pull-Up weerstanden ingesteld aan het begin van de uitvoering en niet hen opnieuw ingesteld. De gemengde invoer/uitvoer-poort wordt gebruikt, moet men een methode om via programmacode een onderscheid maken tussen de input- en output pinnen ook bieden de mogelijkheid om zelfstandig te lezen en te schrijven zonder de pull-up weerstanden en poortinstellingen. Hier is waar het maskeren wordt belangrijk.