Atmel start 4: Blinky två-växlar, Pull-Up motstånd och Bit Ops (2 / 11 steg)
Steg 2: Kontrollera Pull-Up Resistor
Så, hur kan pull-up resistor [12,13] kontrolleras programmässigt?
Minns från Start-up #3, DDR, PORT, och PIN uttalanden i Atmel Studio C/C++ kontrollera funktion och delstaten MCU hamnarna. Till exempel uttrycket partiell "DDRB =" ställer in 8 bitar data riktning registret för port B med 0 och 1 som MCU tolkar sedan ange motsvarande fysisk port B stift till ingång och utgång, respektive. '= PINB' partiell uttalande (så som i x = PINB), till exempel läser indata registret för fysisk port B stiften. Den "PORTB =" partiell uttalande kommer att skriva 8 bitar till port B utgången registrera som MCU tolkar för att ställa motsvarande fysisk port B stift - med ett förbehåll om Pull-Up motstånd. Och då startar vår diskussion för närvarande steg. Det här steget använder port B som ett exempel men andra tillgängliga portar på en Atmel AVR MCU (till exempel A, B,...) beter sig på samma sätt. Minns ATTiny2313A använder stift 12 till 19 för portB betecknas med B0 genom B7, respektive [1] som visas i tabell 1.
Vi anser att ett exempel som visar användningen av blandade indata och utdata för portB som också aktiverar en pull-up resistor. Till exempel, anta att vi bara behöver utgångar på fysiska stift 13 och 14 (dvs, B1 och B2, se tabell 1) men kräver ingångar på resten av stiften för Port B. Anta vidare att det klämmer fast 18 (dvs B6) bör ha en pull-up resistor som för en switch liknar som visats i föregående steg.
För det första inriktas på pull-up resistor. Det kan vara engagerade genom att skriva en "1" till en ingång pin. Låt det sjunka ett tag. Skriva en '0' till en ingångsstiftet inaktiverar den inre pull-up resistorn och anger den, till en hög impedans tillstånd [1].
Tabell 1: Ett exempel på stift 12-19 med både ingångar och utgångar och pull-up PU aktiveras och hög impedans HZ.
Fysiska Pins | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 |
Namn | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
DDRB | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
Fysiska PortB | I | I | I | I | I | Ute | Ute | I |
PORTB = 0b0100100
0
1
0
0
0
1
0
0
Fysiska Pin resultatet
HZ
PU
HZ
HZ
HZ
VCC
0V
HZ
Så i detta exempel för att få den input och output visas i den fjärde raden i tabell 1, vi måste först ange DDRB = 0b00000110 så att fysiska stift 13-14 är utgifts- och resten är ingångarna. För att aktivera den (PU) pull-up resistorn för pin 18, skriver vi en '1' till B6, som är en ingång, som i den sjätte raden. Nästa, vi satt PORTB = 0b0100100 som visas i den sjätte raden i tabellen. Den sista raden visar de resulterande fysiska tillstånd fysiska stift 12-19. För fysiska stift 13 och 14, har de logiska värdena i registret över DDRB översatts till spänningar på stiften som förväntat. Stift 12, 15-17 och 19 är insatsvaror och lagts i en hög impedans stat, vilket framgår av HZ, eftersom DDRB ställa dem som insatsvaror och motsvarande bitarna i den PORTB skriva har inaktiverat pull-up motstånd. Ofta (men absolut inte alltid) programmet anger DDRB och Pull-Up motstånd i början av utförande och återställer dem inte. För att använda den blandade input/output-porten, behöver en en metod för att programmässigt skilja mellan inkommande och utgående stift som också ger möjlighet att självständigt läsa och skriva dem utan att påverka pull-up motstånd och portinställningar. Här är där Maskeringen blir viktigt.