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 mikrokontrolerów wyposażony jest w większą lub mniejszą liczbę wyprowadzeń cyfrowych które 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ładów.

  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 skrót 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ę również 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 rejestrów opisany jest dokładnie w dokumentacji mikroprocesora. W rejestrach znajdują się bity które mogą przyjmować stan 0 lub 1. Dla ułatwienia zrozumienia można rejestr porównać do tabeli w której każdy z bitów to oddzielna komórka. Tak samo jest w przypadku linii I/O. Port jest rejestrem a konkretne linie są bitami tego rejestru. Poniżej przykład 3 rejestrów 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 rejestrów PORTx (gdzie x to litera portu) odpowiedzialny jest za dane portu x. Przykładowo by do portu B wpisać wartość heksalną 5E, która równa 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. Równoznaczny z poprzednią instrukcją będzie zapis:

PORTB = 01011110;

Kolejny sposób zapisu jest analogiczny do poprzedniego, w którym podajemy, które 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 które bity rejestru zostały ustawione (wartość 1), a które 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 bitów 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 sposób podany poniżej

DDRB = 10110000; // zapisz wartość 10110000 do rejestru DDRB

DDRB = 10110000; // zapisz wartość 10110000 do rejestru DDRB

Identyczną wartość można zapisać również w systemie szesnastkowym (heksalnym):

DDRB = 0xB0;

Można również użyć poleceń ustawiających poszczególne bity rejestru:

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

Tabele bitów rejestru DDRB po załadowaniu pokazano poniżej.

178976828.png

PINx

Jeżeli następuje potrzeb odczytania stanu któregoś 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 których 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 mikrokontrolerów AVR jest możliwość podciągnięcia wejścia do zasilania za pomocą wewnętrznych rezystorów. Jest to bardzo wygodne rozwiązanie bardzo chętnie wykorzystywane przez konstruktorów, ponieważ eliminuje potrzebę montowania rezystorów 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 rejestrów spowoduje, że na wyprowadzeniu PB2 pojawi się stan wysoki (napięcie zasilania), co można łatwo sprawdzić używając woltomierza.


DataOdwiedzinKomentarze
Suma445684
So. 21150
Pt. 20500
Cz. 19880
Śr. 18930
 

Komentarze  

 
+5 #1 rgnrk 2010-11-08 18:55
prosto wyjasnione, przydatne;p
literowki:
Read/Write – Litera R oznacza możliwość zapisu bity, litera W oznacza możliwość odczytu bitu
Initial Walue – wartość domyślna bitu
że linia PC6 ni jest
potrzeb
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: 44617

Sonda

Skąd wiesz o www.mikrokontrolery.org
 

Statystyka

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

Facebook

Logowanie



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