Mikrokontrolery AVR część 2 – podstawy

Bez zbędnego wstępu przejdę od razu do konkretów. Na początku muszę powiedzieć, że AVRy to kontrolery o 8 bitowej magistrali danych. Tak wiem, teraz pewnie zadajecie pytanie co to jest ta magistrala danych? Często słyszymy że jakiś procesor jest 8bitowy czy 32b. Ale co to znaczy? To właśnie określa szerokość magistrali danych, czyli ilość linii, po której przesyłane są dane pomiędzy poszczególnymi układami systemu, czyli na przykład pomiędzy procesorem a pamięcią, albo pomiędzy procesorem a układem We/Wy. Oprócz magistrali danych, w skład systemu mikroprocesorowego wchodzi także magistrala adresowa oraz magistrala sterująca.

Magistrala sterująca jak łatwo się domyślić może służyć do sterowania, na przykład tym czy chcemy coś do pamięci zapisać lub odczytać.

Magistrala adresowa dzięki niej wybieramy adres, pod który chcemy wysłać dane magistralą danych. Jest to coś w stylu numeru telefonu, chcemy gdzieś zadzwonić, żeby coś powiedzieć i usłyszeć, więc musimy wybrać numer (adres) i podać go na magistrale adresową. Zależnie od tego ile linii, jaką szerokość ma magistrala adresowa, taką możemy uzyskać liczbę adresów. Liczbę tych adresów określamy wzorem 2n, przy czym n to szerokość magistrali adresowej, na przykład dla magistrali adresowej 16b możemy uzyskać 216 adresów czyli 65536.

 

Jednak w podstawowym programowaniu w języku C AVRów nie będziemy korzystać bezpośrednio z żadnej magistrali. Przy czym w niektórych mikrokontrolerach z rodziny AVR jest możliwy dostęp do magistral, zostały one wyprowadzone na zewnątrz. Jednak w popularnych układach nie ma takiej możliwości, więc nie będę się tym zajmował. Te magistrale są w środku i tam jest wykonywany nasz program.

 

Przejdźmy teraz już do AVRów.

Kontroler do komunikacji z otoczeniem używa układów we/wy, czyli tak zwanych portów. Jest to taki najbardziej powierzchowny poziom poznawania kontrolera. Jakie ma piny i do czego służą. W przykładzie posłużę się kontrolerem Atmega8.

Na rysunku powyżej przedstawiłem schemat wyprowadzeń kontrolera Atmega8. Niektóre nazwy mogą się wydawać oczywiste, a niektóre mogą przerażać. Żeby nie było niedomówień opiszę wszystkie nazwy, które pojawiły się na rysunku. Jednak muszę jeszcze dodać, że niektóre piny mają dwa zastosowania, albo nawet i więcej. Podstawowe wykorzystanie pinu znajduje się zaraz obok rysunku układu, a dodatkowe (alternatywne) zastosowanie zapisane jest w nawiasie. Ale do rzeczy. Każdy układ trzeba w jakiś sposób zasilić, do tego służą piny takie jak VCC, GND oraz AVCC. VCC to pin, na który podajemy plus zasilania, w przypadku AVRów jest to napięcie pomiędzy 1,7, a 5V. Napięcie zasilania jest zależne od wersji kontrolera. GND to masa, a AVCC to pin, przez który zostaje zasilony wewnętrzny przetwornik A/C. Jest to takie samo napięcie jak dla VCC. Następnie rzuca się w oczy pin o nazwie AREF. Przez ten pin zadajemy napięcie odniesienia dla przetwornika A/C, ale to opiszę szerzej dopiero w części o przetworniku A/C.

Atmega8 posiada trzy porty, port B, C oraz D.

Port b – to 8b port, jego wyprowadzenia są na pinach 15, 16, 17, 18, 19, 9 oraz 10.

Port c – to 7b port, jego wyprowadzenia są na pinach od 23 do 28 oraz na pinie 1.

Port c – to 8b port, jego wyprowadzenia są na pinach od 2 do6 oraz od 11 do 13.

 

Alternatywną funkcją pinu 1 jest RESET. Służy on do zresetowania procesora, wyzerowania pamięci oraz rozpoczęcia programu od nowa. Resetu dokonuje się poprzez podanie masy na ten pin. Więc standardowo należy ten pin podciągnąć do plusa zasilania przez rezystor podciągający. Należy dodać ten rezystor, aby kontroler się przypadkowo nie resetował. Niektórzy konstruktorzy nie dają tego rezystora, za względu na to , że jest on wbudowany w strukturę układu, jednak przy dużych zakłóceniach nie spełnia on swojego zadania do końca. Reset jest alternatywną funkcją tego pinu, jednak jest on ustawiony standardowo, jest używany do programowania pamięci programu i jego zmiana uniemożliwi programowanie kontrolera przez prosty programator (ISP).

 

RXD – jest to linia służąca do odbierania danych przesyłanych transmisją RS232

TXD – przy pomocy tej linii możemy nadawać dane w standardzie RS232

INT0/INT1 ? te dwa piny umożliwiają obsługą zewnętrznych przerwań. Jeszcze nie pisałem co to są przerwania. Jest to takie wywołanie, które powoduje (prawie) natychmiastowy skok do odpowiedniego fragmentu programu.

XCK – jest to wejście zewnętrznego zegara dla transmisji UART (RS232).

T0/T1 – wejścia impulsów zewnętrznych dla układów licznik/czasomierz.

XTAL1/TOSC1, XTAL2/TSOC2 – do tych pinów podpinamy zewnętrzne generatory oraz rezonatory taktujące kontroler.

AIN0, AIN1 – są to wejścia komparatora analogowego.

ICP1 – jest to wejście do licznika/czasomierza.

ADC0-ADC5 – są to wejścia analogowe, do przetwornika A/C.

SCL, SCA – piny te umożliwiają realizacje sprzętową transmisji szeregowej i2c.

SCK, MISO, MOIS, SS – te piny są wykorzystywane przy transmisji SPI oraz podczas programowania mikrokontrolera poprzez ISP.

OC1A, OC1B – wyjścia z licznika/czasomierza, generują sygnał PWM.

 

Te funkcje pinów w innych kontrolerach są bardzo podobne i poprzez analogię do tego opisu jest bardzo łatwo wywnioskować jaką funkcje pełną one w kontrolerze. Standardowa funkcja pinów kontrolera to porty we/wy. Jak już wcześniej pisałem kontroler Atmega8 ma ich trzy. W innych kontrolerach liczba portów i liczba pinów w portach może być większa lub mniejsza. Porty te służą do komunikowania się z otoczeniem, mogą one wysyłać oraz odbierać sygnały. Ważną zaletą portów w AVRach jest to, że może z nich wypływać lub wpływać do nich prąd do 20mA na pin, co umożliwia zasilanie, na przykład diody Led, bezpośrednio z portu, bez konieczności buforowania sygnału poprzez tranzystor lub specjalny bufor.

 

Znając już zewnętrzną budowę kontrolera Atmega8, możemy przejść do tego co ma on w środku. Zacznijmy od pamięci.

Kontroler ten posiada trzy rodzaje pamięci:

  • Pamięć Flash jest w niej przechowywany program. Nasz kontroler ma tej pamięci 8kB. Jest to pamięć nie ulotna, możemy dokonywać 10 000 zapisów/kasowań.
  • Pamięć EEPROM jest to pamięć nieulotna, przeznaczona do zapisywania konfiguracji urządzeń. Możemy dokonać 100 000 zapisów/odczytów. Mamy do dyspozycji 512B.
  • Pamięć SRAM Jest to pamięć danych. Ma ona rozmiar 1kB.

Mikrokontroler Atmega8 posiada wiele układów peryferyjnych, częściowo już wcześniej je wypisywałem jednak nie podawałem ich dokładniejszej charakterystyki. Kontroler ten posiada:

  • dwa 8b liczniki/czasomierze, z oddzielnymi preskalerami.
  • 16b licznik/czasomierz
  • trzy kanały PWM
  • 6-kanałowy przetwornik A/C o rozdzielczości 10b
  • port szeregowy i2c
  • port szeregowy UART (RS232)
  • szeregowy port SPI Master/Slave
  • watchdog
  • komparator analogowy

W tej części to wszystko. W następnym artykule opiszę co należy dopiąć do kontrolera, aby mógł funkcjonować prawidłowo.

Facebook Comments

Komentarze do „Mikrokontrolery AVR część 2 – podstawy

  1. Bardzo ładny cały kurs, jak dla mnie to wszystko jest zrozumiałe i dobrze napisane, podrawiam

  2. Port c ? to 7c port, jego wyprowadzenia są na pinach od 23 do 28 oraz na pinie 1.

    Port d ? to 8d port, jego wyprowadzenia są na pinach od 2 do6 oraz od 11 do 13.

  3. Kurs przedni i dobrze wytłumaczony lecz zawiera dość dużą ilość literówek jak i pewnych drobnych zakłamań (w celu uproszczenia-jak sądze ) jednak dla osób mających pierwsze otarcie o tą 8 bitową rodzinkę kurs świetny. Podziękowania dla autora za inicjatywę!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Time limit is exhausted. Please reload CAPTCHA.

This site uses Akismet to reduce spam. Learn how your comment data is processed.