Start Mikrokontrolery AVR Mikrokontrolery AVR Wej?cia / wyj?cia binarne w mikrokontrolerach AVR

Partnerzy

www.prototypy.com

helion

www.elektroda.pl

www.zestawyuruchomieniowe.pl

Kredyty Gdynia

Translate this



Wej?cia / wyj?cia binarne w mikrokontrolerach AVR PDF Drukuj
Ocena użytkowników: / 47
SłabyŚwietny 
wtorek, 27 lipca 2010 09:56

IOKa?dy z mikrokontrolerw wyposa?ony jest w wi?ksz? lub mniejsz? liczb? wyprowadze? cyfrowych ktre s?u?? do wprowadzania i odbierania informacji z mikrokontrolera. Wypowadzenia te umo?liwiaj? komunikacj? z uk?adami peryferyjnymi, innymi mikroprocesorami oraz s?u?? do programowania uk?adw.

  Wyprowadzenia te nazywane s? I/O (ang. In/Out) (wej?cia/wyj?cia). Dla przyk?adu uk?ad ATmega8 ma 23 programowalne wyprowadzenia I/O, a mikrokontroler ATmega16 posiada a? 32 I/O. Linie wej??/wyj?? podzielone zosta?y na porty. Na rysunkach zamieszczonych poni?ej zaznaczono wszystkie I/O mikrokontrolera ATmega8. Z rysunku zosta?y usuni?te wszystkie zb?dne oznaczenia.

3877362647.png

Wszystkie linie programowalne I/O zosta?y pogrupowane w porty zawieraj?ce do 8 linii. Firma Atmel produkuj?ca mikroprocesory AVR przyj??a nast?puj?ce oznaczanie wyprowadze?: pierwsza litera P to skrt od nazwy PORT, druga litera oznacza nazw? portu. Dla ATmega8 s? to litery B, C i D. Cyfra wyst?puj?ca po literze portu oznacza bit wyprowadzenia tego portu i mo?e zawiera? si? w granicach od 0 do 7.
Przyk?ad: Wyprowadzenie ma oznaczenie PC5 oznacza to, ?e jest to 5 bit portu C.
Nie zawsze ka?dy port posiada 8 wyprowadze?, spowodowane jest to ograniczeniem zastosowanej obudowy i ilo?ci jej wyprowadze?. Przyk?adowo port C mikrokontrolera ATmega8 posiada tylko 7 wyprowadze?, a pozosta?e pory B i D po 8. Dodatkowo nale?y zaznaczy?, ?e linia PC6 nie jest normalnie dost?pna jako I/O. Domy?lnie znajduje si? tam pin resetu opisany w artykule o programatorach. Mo?na z niego skorzysta? ustawiaj?c odpowiednie fuse bits, lecz wi??e si? to z rezygnacj? z programowania poprzez ISP.
Podczas programowania podaje si? liter? portu i cyfr? dla okre?lenia konkretnego wyprowadzenia. W programie mo?na odwo?ywa? si? rwnie? do ca?ego portu i wpisa? do niego pewn? liczb? lub odczyta? jego stan i zapisa? go do zmiennej.

Za wszystkie ustawienia w mikrokontrolerze odpowiadaj? rejestry. Ka?dy z rejestrw opisany jest dok?adnie w dokumentacji mikroprocesora. W rejestrach znajduj? si? bity ktre mog? przyjmowa? stan 0 lub 1. Dla u?atwienia zrozumienia mo?na rejestr porwna? do tabeli w ktrej ka?dy z bitw to oddzielna komrka. Tak samo jest w przypadku linii I/O. Port jest rejestrem a konkretne linie s? bitami tego rejestru. Poni?ej przyk?ad 3 rejestrw odpowiedzialnych za ustawienia fizycznych wyprowadze? mikrokontrolera.
Bit numer bitu
Read/Write Litera R (read) oznacza mo?liwo?? odczywu bitu, litera W (write) oznacza mo?liwo?? zapisu bitu
Initial Value warto?? domy?lna bitu

2246708636.png

PORTx

Pierwszy z rejestrw PORTx (gdzie x to litera portu) odpowiedzialny jest za dane portu x. Przyk?adowo by do portu B wpisa? warto?? heksaln? 5E, ktra rwna jest warto?ci 94 w systemie dziesi?tnym i warto?ci 01011110 w systemie binarnym wystarczy zapisa?:

PORTB = 0x5E;

Jak mo?na zauwa?y? dodano przedrostek 0x okre?la on, ?e warto?? podana jest w systemie heksalnym. Rwnoznaczny z poprzedni? instrukcj? b?dzie zapis:

PORTB = 01011110;

Kolejny sposb zapisu jest analogiczny do poprzedniego, w ktrym podajemy, ktre bity maj? zosta? ustawione (warto?? 1).

PORTB = _BV(6)|_BV(4)|_BV(3)|_BV(2)|_BV(1); // ustaw bity 6,4,3,2,1 w rejestrze PORTB

W tym przypadku wida? dok?adnie ktre bity rejestru zosta?y ustawione (warto?? 1), a ktre skasowane (warto?? 0). Dla takiego ustawienia poni?ej zaprezentowano rysunek rejestru PORTB po za?adowaniu do niego powy?szej warto?ci. Bez wzgl?du na to czy warto?? do rejestru wpisana b?dzie w systemie dziesi?tnym czy heksalnym ostatecznie zostaje zapisana ona zapisana w systemie binarnym jak wida? poni?ej.

3096060972.png

DDRx

Jako, ?e wyprowadzenia I/O jak sama nazwa skazuje mog? pe?ni? rol? wej?? lub wyj??, nale?y okre?li? kierunek przep?ywu informacji w linii. W tym celu nale?y pos?u?y? si? rejestrem DDRx (gdzie x to litera portu). Odpowiednie ustawienie bitw okre?la kierunek danych:
0 wej?cie (In)
1 wyj?cie (Out)

Przyk?adowo by wyprowadzenia PB4, PB5 i PB7 mia?y s?u?y? jako wyj?cia a pozosta?e jako wej?cia nale?y zapisa? rejestr DDRB w sposb podany poni?ej

DDRB = 10110000; // zapisz warto?? 10110000 do rejestru DDRB

DDRB = 10110000; // zapisz warto?? 10110000 do rejestru DDRB

Identyczn? warto?? mo?na zapisa? rwnie? w systemie szesnastkowym (heksalnym):

DDRB = 0xB0;

Mo?na rwnie? u?y? polece? ustawiaj?cych poszczeglne bity rejestru:

DDRB = _BV(7)|_BV(5)|_BV(4);

Tabele bitw rejestru DDRB po za?adowaniu pokazano poni?ej.

178976828.png

PINx

Je?eli nast?puje potrzeb odczytania stanu ktrego? z wej?? mikrokontrolera korzysta si? z rejestru PINx, (gdzie x to litera portu). W rejestrze PINx zapisane s? binarnie fizyczne stany wybranego portu (1 - stan wysoki, 0 - stan niski). Nale?y pami?ta? by odpowiednio ustawi? rejestr DDRx by wyprowadzenia na ktrych sprawdzamy stan by?y wej?ciami (warto?? 0). Poni?ej przyk?ad pobieraj?cy dane z portu B i zapisuj?cy stan ca?ego portu do zmiennej test.

test = PINB; // zapisz stan rejestru PINB do zmiennej test

Podci?gni?cie wej?cia do logicznej jedynki

Do wej?? mikrokontrolera pod??czane s? r?nego rodzaju przyciski chwilowe, czujniki kra?cowe itp. Stan za??czenia i przerwy mo?na rozwi?za? na dwa sposoby. W pierwszym sposobie stan zamkni?tego ??cznika objawia si? pojawieniem napi?cia zasilania na wej?ciu mikroprocesora, natomiast stan otwartego ??cznika brakiem napi?cia, nale?y zastosowa? tutaj rezystor pomiedzy wej?cie uk?adu a mas? po to by podczas gdy ??cznik jest otwarty na wej?ciu pojawi? si? potencja? masy i nie wyst?powa? efekt p?ywaj?cego potencja?u. W drugim sposobie jest zupe?nie odwrotnie, gdy ??cznik zamyka si? wej?cie mikroprocesora ??czone jest z mas? uk?adu ( 0V ), a gdy ??cznik jest otwarty na wej?ciu uk?adu powinna pojawi? si? logiczna jedynka czyli napi?cie zasilania. Sprawa komplikuje si? poniewa? w przypadku otwartego ??cznika wej?cie wisi w powietrzu co dok?adnie oznacza, ?e nie jest pod??czone do niczego. Jest to tak zwany floating point (p?ywaj?cy punkt), poniewa? potencja? na wej?ciu nie jest okre?lony. Podczas gdy ??cznik jest otwarty nale?y podci?gn?? wej?cie uk?adu do napi?cia zasilania z wykorzystaniem rezystora analogicznie do sposobu pierwszego. Mo?na to zrobi? montuj?c rezystor pod??czony do napi?cia zasilania uk?adu i do jego wej?cia, ale mo?na te? pro?ciej. Jedna z wielu zalet mikrokontrolerw AVR jest mo?liwo?? podci?gni?cia wej?cia do zasilania za pomoc? wewn?trznych rezystorw. Jest to bardzo wygodne rozwi?zanie bardzo ch?tnie wykorzystywane przez konstruktorw, poniewa? eliminuje potrzeb? montowania rezystorw podci?gaj?cych na p?ytce drukowanej. Dla przyk?adu podci?gni?cie do logicznej jedynki wykonane zostanie dla wej?cia PB2. Aby tego dokona? nale?y najpierw ustawi? linie PB2 jako wej?cia za pomoc? wpisania warto?ci 0 w odpowiednie bity rejestru DDRB:

DDRB &= ~_BV(2); // wpisz 0 do bitu 2 w rejestrze DDRB, czyli ustaw jako wej?cie

Nast?pnie wpisa? warto?? 1 w drugi bit portu B

PORTB |= _BV(2); // podci?gni?cie linii PB2 do logicznej jedynki

Takie ustawienie rejestrw spowoduje, ?e na wyprowadzeniu PB2 pojawi si? stan wysoki (napi?cie zasilania), co mo?na ?atwo sprawdzi? u?ywaj?c woltomierza.


DataOdwiedzinKomentarze
Suma463494
Pt. 1590
Cz. 14330
Śr. 13320
Wt. 12320
 

Komentarze  

 
+5 #1 rgnrk 2010-11-08 18:55
Cytować
 
 
0 #2 Piotr 2016-04-26 09:36
Jest ok po prostu wyt?umaczone
Cytować
 
 
0 #3 W?adek 2016-09-05 14:45
W BB nie zosta?o to a? tak fajnie rozpisane (albo sam si? tego nie doczyta?em) - wielkie dzi?ki
Cytować
 
 
0 #4 Kris 2017-05-23 14:15
Fajnie wyt?umaczone.
Cytować
 

Dodaj komentarz


Kod antysapmowy
Odśwież

Licznik

Artyku? przeczytano: 46401

Sonda

Sk?d wiesz o www.mikrokontrolery.org
 

Statystyka

Użytkowników : 1
Artykułów : 28
Zakładki : 1
Odsłon : 399492

Facebook

Logowanie



www.mikrokontrolery.org, Powered by Joomla! Designed by SiteGround web hosting