Atmel opstarten 3: Binky een-poort, PIN, DDR en LED (4 / 12 stap)

Stap 4: Atmel geheim: DDRs of poorten en PINs

Deze huidige stap neemt een pauze van bouw- en test. Mensen vaak vragen (en moet) hoe om te schakelen van het spanningsniveau (dat wil zeggen, logica staat) op een MCU poort pin te maken van een LED knipperen (figuur 1) en hoe om te lezen van een digitale ingang.

Vaak met betrekking tot een microcontroller (MCU)-processor of spreekt men van 'poort', wat betekent dat een groep van draden dat ofwel brengt gegevens uit de MCU of in het MCU. Voor een geïntegreerde schakeling verwijzen de 'draden' naar de fysieke pinnen op de IC. De MCU Atmel AVR's hebben over het algemeen poorten met 8 pinnen elke aangezien de MCU 1 byte breed gegevens bussen gebruikt. De poorten worden vaak aangeduid als Input-Output poorten, als IO poorten of als enkel IO; Dit zijn de digitale IO poorten. De Atmel MCU's hebben veel dergelijke IO poorten die worden geëtiketteerd als A, B, enzovoort. Vaak vindt men de Atmel sleutelwoorden van PORTA, PORTB, PORTC, PORTD. Gelieve te herlezen van dit lid en merken dat een fysieke poort naar de fysieke pinnen op de IC verwijst. Atmel maakt gebruik van de sleutelwoorden van de haven en PIN (Opmerking caps) met betrekking tot de Output en Input en registers. Bij wijze van definitie is een register [14] een soort geheugenlocatie (misschien beter 'opslagplaats' genoemd) met speciale betrekkingen/interconnectiviteit aan hardware. Het register wordt niet beschouwd als deel van het programma en variabele geheugen hoewel het mogelijk is om te lezen, schrijven, bewerken en breng de inhoud van het register.

Nu hier deel van het geheim is. In Atmel jargon verwijst het woord poort (zoals gebruikt in PORTB bijvoorbeeld) naar een digitale uitvoerpoort waarbij de MCU genereert een spanning op de draden verlaten de MCU. Het woord van de Atmel PIN (zoals gebruikt in PINB bijvoorbeeld) de MCU betekent plaatst de groep van fysieke draden in een hoge impedantie-staat en de MCU vindt de digitale spanningen (0 of Vcc waar Vcc = 5 voor de installatie van de Raad van bestuur van de experimentator). Misschien nog belangrijker is, PORTB en PINB verwijzen naar dezelfde groep van fysieke draden op de MCU. Een soortgelijke opmerking geldt voor PORTA en PINA behalve de fysieke pinnen algemene zullen afwijken van die PORTB en PINB betrekking hebben. Dus hoe men bepalen of een fysieke pin op de MCU een invoer of een uitvoer voor het MCU is?

Laten we zeggen dat dit opnieuw met andere woorden. Er is een verschil tussen haven en PIN in ATMEL met behulp van C/C++. Het woord poort verwijst naar een registreren waarmee uitgangen naar de fysieke pinnen van MCU. 1s en 0s worden opgeslagen in het register van de haven en de MCU vertaalt deze logische waarden spanningen van Vcc en nul, respectievelijk op de fysieke pinnen. Het woord PIN verwijst naar een register dat de invoer uit een groep van fysieke pinnen ontvangt. De MCU zal het vertalen van de spanningen van de Vcc en nul op de fysieke pinnen aan logische 1s en 0s, respectievelijk voor de PIN-register. Zoals u ziet, dat het woord fysieke verwijst naar de werkelijke korte draden uitsteken van de MCU-pakket. We gebruiken vaak het woord 'haven' verwijzing naar de collectie van de 8 pinnen; Dit moet worden gelezen als fysieke poort en fysieke pinnen.

OK, dus hoe geeft één of een fysieke pin is een invoer of een uitvoer voor het MCU? Atmel AVR gebruikt het concept van de Data richting registreren DDR. Elke groep van draden vormen een fysieke IO-poort heeft een dergelijke DDR en aangeduid als DDRA, DDRB, DDRC, DDRD, enzovoort. Een DDR is een 8-bit register (dat wil zeggen, geheugenopslag/locatie) vergelijkbaar met het bijbehorende register voor de 8 bit IO poorten. Een waarde van 1 in een DDR-standpunt komt overeen met een uitgang voor de corresponderende fysieke pin. Een waarde van 0 produceert een ingang op de corresponderende fysieke pin. Als voorbeeld, DDRB komt overeen met fysieke PortB. Wanneer DDRB-bits #i heeft de waarde 1 dan pin #i in fysieke PortB zullen een output voor de MCU. Aan de andere kant, als DDRB beetje heeft #i een waarde nul kan fysieke pin #i in fysieke PortB zal een ingang. Meer concrete voorbeelden zou misschien beter zijn.

Voorbeeld 1: Één digitale uitgang en zeven digitale ingangen

Overwegen fysieke PortB op de ATTiny2313A en overwegen van tabel 1 hieronder. De bovenste rij bevat de fysieke pinnen op de 20pin duik pakket zoals op de eerste pagina of twee van de Atmel data sheet. De tweede rij bevat de naam van de Atmel voor de fysieke pin.

Tabel 1: Voorbeeld ATTiny2313A Pin 12 als een uitgang en de andere poort B-pinnen als ingangen.

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

0

0

1

Fysieke PortB

In

In

In

In

In

In

In

Uit

Stel nu dat we eerst hebben vastgesteld DDRB = 1, zoals in de derde rij van tabel 1. Het DDRB-register zou normaal gesproken voorafgaand aan het lezen of wegschrijven van PortB worden ingesteld. De MCU leest het DDRB-register en de fysieke pin #12 ingesteld als uitgang. Omdat de andere bits in DDRB nul, de resterende fysieke pinnen 13-19, die heten B1-B7, zijn alle ingangen. Op dit punt, het programma kon lezen of schrijven van de PortB sinds de invoer en uitgangen zijn vastgesteld.

Voorbeeld 2: Twee output pinnen en 6 ingangen

Tabel 2: Voorbeeld met pin 13 en 14 als uitgangen en ingangen van de rest.

Fysieke pinnen

19

18

17

16

15

14

13

12

Naam

B7

B6

B5

B4

B3

B2

B1

B0

DDRB = 00000110

0

0

0

0

0

1

1

0

Fysieke PortB

In

In

In

In

In

Uit

Uit

In

De derde rij van de tabel 2 laat zien dat we eerst hebben vastgesteld DDRB = 00000110 in binary. In C/C++ is dit geschreven als DDRB = 0b110 waar de '0b' betekent 'binair'. De voorloopnullen zijn weggelaten voor eenvoud deel uitmaken van de '110' maar ze kunnen worden opgenomen in de C-instructie als DDRB = 0b00000110 indien gewenst. Dezelfde waarde kan worden geschreven in decimale als DDRB = 6. En het kan worden geschreven in de hexadecimale notatie als DDRB = 0x06 waar de '0 x' staat voor de hexadecimale notatie. De fysieke PortB heeft daarom pin13 en pin 14 als uitgangen en alle andere pinnen als ingangen.

Commentaar: Deze fysieke pinnen die uitgangen zullen kunnen genereren een van twee staten, namelijk nul en Vcc. Voor ons project, gebruikt het de experimentator bestuur Vcc = 5v, terwijl de levenslijn worden geconstrueerd in een plastic doos gebruikt Vcc als de accuspanning, die van 4.9 volt tot 3 volt afhankelijk van de toestand van de lading van de batterijen variëren kan. De uitgangsspanning kan vervolgens worden gebruikt voor de bediening van andere apparaten. Atmel fysieke pinnen kunnen bron of sink 40mA van de huidige. Als u wilt controleren, verwijzen naar de elektrische kenmerken in de spec/gegevensbladen zoals http://www.atmel.com/Images/doc8246.pdf. Zodat de uitgang-pins kan leveren (d.w.z., bron) bias huidige wanneer de fysieke pin op uitgangsspanning van heeft + Vcc of het huidige kunt ontvangen (dat wil zeggen, zinken) wanneer de fysieke pin 0v heeft.

Voorbeeld 3: Schrijf waarden op de uitgangen

OK dus laten we eens een paar voorbeelden van het gebruik van DDRB, PORTB en PINB. Eerst overwegen de PORTB.

Tabel 3: Een voorbeeld maken van IO poort B-pinnen uitgangen.

Fysieke pinnen

19

18

17

16

15

14

13

12

Naam

B7

B6

B5

B4

B3

B2

B1

B0

DDRB

1

1

1

1

1

1

1

1

Fysieke PortB

Uit

Uit

Uit

Uit

Uit

Uit

Uit

Uit

PORTB = 0b0100100

0

1

0

0

0

1

0

0

Fysieke Pin resultaat

0V

VCC

0V

0V

0V

VCC

0V

0V

In het voorbeeld van tabel 3, zetten we eerst DDRB = 0b11111111 = 0xFF = 255 decimale zodat de fysieke pinnen 12-19 zijn alle uitgangen voor de MCU. Vervolgens Stel dat we de volgende byte schrijven naar het register van de uitvoer voor B als PORTB = 0b0100100 zoals in de zesde rij van tabel 3. Opmerking ' PORTB =' register van de uitgang van de middelen om in te stellen van de PortB op een waarde-is het makkelijker om na te denken van PORTB als een variabele en ' PORTB =' middelen om in te stellen die variabele gelijk aan een waarde die de MCU naar de spanningen op de fysieke poort vertaalt. Wanneer PORTB logica '1' heeft moet de output vertonen de fysieke realisatie van de '1' oftewel Vcc of, voor onze experimentator van bestuur,

Logica 1 = > Vcc = + 5volts

Met behulp van logica 1 op deze manier zorgt voor een geweldig veel verschillende platformen de dezelfde codage zo lang als de MCU weet hoe om te zetten van de waarden van de logica in spanningen te gebruiken. Dus het vergelijken van het zesde en zevende rijen van tabel 3 toont dat de fysieke pinnen waarnaar een logica 1 heeft geschreven een spanning van de Vcc zal vertonen. De andere pennen hebben nul volt potentiële. BELANGRIJK punt: De tekens "PORTB =" betekent in dit geval om iets te schrijven naar de fysieke pinnen in PortB (eigenlijk dit eerst schrijft naar de PORTB registreren en vervolgens de waarden van de logica worden vertaald door spanning genereren van circuits in het MCU). Op deze manier kunt de MCU externe circuits.

Voorbeeld 4: Waarden lezen van input pins

Nu overwegen een ander geval waar we eerst (in ons programma instellen) DDRB = 0b00000000 (binair) = 0x00 (hex) = 0 (decimaal) zoals in tabel 4. Hier zullen alle van de fysieke pinnen 12-19 ingangen vanwege alle de nullen in DDRB.

Tabel 4: Voorbeeld tonen Pins 12-19 zijn alle ingangen.

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

0

0

0

Fysieke PortB

In

In

In

In

In

In

In

In

Toegepaste volt tot en met Pin

0V

0V

0V

0V

0V

VCC

0V

VCC

PINB inhoud

0

0

0

0

0

1

0

1

Verder stel dat sommige externe agent (zoals mij of jou) past spanningen aan het MCU fysieke pins 12-19 zoals aangegeven in de zesde rij van tabel 4. BELANGRIJK punt: Het gebruik van '= PINB' betekent om te lezen van de spanningen die aanwezig zijn op de fysieke pinnen overeenkomt met IO PortB en hen omzetten in logica waarden. Dit zou worden gebruikt in de instructie voor het toewijzen van een C/C++, zoals ' x = PINB'. De inhoud van de variabele x (bijvoorbeeld PINB) kunnen worden gezien in de laatste rij van de tabel 4 de waarde

x = 0b00000101 (binair) = 0x05 (hex) = 5 (decimaal)

De MCU converteert Vcc op een invoer pin aan de waarde van de logica van 1 en nul anders. Op deze manier kan de MCU lezen de Staten van externe circuits.

Voorbeeld 5: Gemengde IO en Pull-up weerstanden

Er is nog een andere mogelijke situatie waarbij een IO-poort heeft beide Input en Output en de MCU voert een schrijven aan de poort. Wat gebeurt er? Voor een pin thats een inbreng het schrijven (met behulp van PORTB enz) kan in- of uitschakelen van een interne pull-up weerstand afhankelijk van de bijbehorende bit in het schrijven een 1 of 0 respectievelijk. Verwijzen naar opstarten 4. Een poort (met behulp van PINB enz) lezing van gemengde leest IO (sommige pinnen in de haven worden uitgevoerd en de rest zijn input) de input wanneer de pin is ingesteld als input en het zal het lezen van de eerder getypte waarde (die is nog steeds in het register PORTB) als de fysieke pin een output is. Verwijzen naar opstarten 4 of de gebruikershandleiding voor details [0,1].

Nu om te coderen de Blinky één project.

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 4: BLINKIE twee-Switches, Pull-Up weerstanden en bits Ops

Atmel opstarten 4: BLINKIE twee-Switches, Pull-Up weerstanden en bits Ops

Figuur 1: Voorbeeld schakelopties waarmee kunnen de MCU pull-up resisters, Front: foto-weerstand, foto-transistor, drukknop; Achterzijde: voorbeeld van de cijfertoetsen.M. A. Parker c2015Blinky twee toont aan hoe de MCU gemakkelijk kan lezen van de s
Hack een HC SR04 op een 3-pin sensor

Hack een HC SR04 op een 3-pin sensor

Ik hoop dat jullie allemaal hebben gehoord van dat dure-maar-geweldig parallax ping))) sensor. Ik kan niet een van hen het mijn budget ontploffing in uiterst kleine kleine stukjes puin rondzweven kopen (30$ ik bedoel). Dus wat doe je? letterlijk kapp
Hoe maak een 9-pins serieel naar Ethernet-kabel

Hoe maak een 9-pins serieel naar Ethernet-kabel

deze instructies zal u tonen hoe maak een 9-pins serieel naar Ethernet-kabel. Seriële kabels worden gebruikt om te controleren en configureren van apparaten met seriële poorten. Bij het ene uiteinde converteren naar Ethernet, kan het signaal verder r
Hoe te lezen veel schakelaars met een MCU-Pin

Hoe te lezen veel schakelaars met een MCU-Pin

hebben u ooit geweest chugging weg op een project(en) en het project houdt groeit en groeit, terwijl u er meer dingen aan toevoegen (wij noemen dat een Feaping-Creaturism)?  Op een recente project, ik was het bouwen van een frequentie meter en een vi
How-to: Schil een Bowling pin...

How-to: Schil een Bowling pin...

Dus een vriend van mij een fanatieke bowler is. Hij heeft zelfs een part time baan onderhoud aan een lokale steegje doen... Hij bracht me een dozijn pinnen de andere dag en ik ben niet precies zeker wat te doen met hen, maar ik ben een houten turner
Hoe maak je een kleding Pin mij

Hoe maak je een kleding Pin mij

In dit instructable, leert u hoe maak je een kleding Pin-mijn die is geweldig voor, grappen. Het "klappen omhoog" met een klein effect. Het zal schrikken de heck van vervelende roomates, of alle andere mensen die u wilt schrikken.Stap 1: Verzame
Bouwen van een digital pin-hole camera

Bouwen van een digital pin-hole camera

ik altijd al wilde proberen het maken van foto's met een pinhole camera, maar het was een van die dingen die ik nooit helemaal heb rond om. Nu met digitale camera's zijn makkelijk.Je moet een digitale single lens reflex (SLR) camera met een verwissel
Hoe maak je een Push Pin portret

Hoe maak je een Push Pin portret

wij zijn gonna make fotorealistische push pin portretten.We zullen in de plaatsing van onze pin laten leiden door een lage resolutie geïndexeerde kleur GIF-afbeelding, die wij in Photoshop maken zullen. Het GIF wordt gebruikt een beperkt palet beperk
Lenzen voor een Digital pin hole camera

Lenzen voor een Digital pin hole camera

dit Instructable is niet om je te leren hoe maak je een pin gat, het is het maken van lenzen voor de pin hole die u al hebt gemaakt.U MOET:Een oude DVD-speler die u voor onderdelen vernietigen kan,Hulpprogramma's voor het openen van de DVD-speler,Kar
RaspberryPi: Meerdere knoppen op een Digital Pin

RaspberryPi: Meerdere knoppen op een Digital Pin

Als je ooit jezelf bijna geen GPIO pinnen op een RaspberryPi kun je dat meerdere drukknop schakelaars op een enkele pin met behulp van deze methode te vinden. Het wordt een variabele ingesteld door de timing van het opladen van een condensator door m
IN/OUT op een poort

IN/OUT op een poort

IN / OUT op een poort is een poort-saving ideeën.Eigenlijk heb ik solliciteerde en het voelde heel goed. Mijn toepassingen toegepast op koffiezetapparaten. Benieuwd naar de opmerkingen van u ontvangen.Stap 1: Stap 2: Stap 3:Stap 4:Stap 5:Toepassingsp