Cw.5 MIKROKONTROLERY
Typowy system mikroprocesorowy, czy to realizowany przy użyciu mikroprocesora, czy mikrokontrolera, zawiera (rys. 3.1) [5]:
- centralną jednostkę procesora (CPU),
- pamięć programu (ROM),
- pamięć danych (RAM)
- porty wejścia/wyjścia (I/O).
Rysunek 3.1. Schemat funkcjonalny mikrokontrolera 8051. [2]
3.1. Procesor - CPU
Ośmiobitowa jednostka centralna może wykonywać 111 rozkazów (49 jedno-, 45 dwu- i 17 trzybajtowych) umożliwiających łatwą i efektywną realizację wszelkiego rodzaju algorytmów sterowania (również wymagających złożonych obliczeń) [2, 7]. Lista rozkazów zawiera m.in. rozkazy arytmetyczne (w tym mnożenie i dzielenie) i logiczne, rozkazy dotyczące operacji logicznych na bitach (procesor boolowski) oraz rozbudowane grupy rozkazów skoków warunkowych i wejścia-wyjścia. Prawie wszystkie rozkazy wykonują się w czasie jednego lub dwóch cykli maszynowych. Wyjątek stanowi tu mnożenie i dzielenie, wymagające czterech cykli.
Każdy rejestr stanowi komórkę pamięci, w której może być przechowywane jedno słowo maszynowe. W czasie pracy procesora rejestry są używane do chwilowego przechowywania danych i wyników wykonywanych operacji. Przetwarzanie danych zapisanych w rejestrach wewnętrznych procesora lub komórkach pamięci jest realizowane przez arytmometr ALU. Zespół rejestrów i arytmometrów tworzy tzw. układ operacyjny procesora.
Zarówno rozkazy, jak i dane są zapisywane w identycznej postaci słów zerojedynkowych. O tym, jak procesor zidentyfikuje słowo pobrane z pamięci decyduje miejsce, do którego słowo to zostanie przesłane wewnątrz procesora. Słowa przesłane do układu sterującego są traktowane jako rozkazy, słowa przesłane do układu operacyjnego są przetwarzane jako dane. Słowem nazywa się wektor informacji cyfrowej, który może mikroprocesor wymienić z pamięcią w wyniku jednej operacji czytania lub zapisu. Długość słowa (liczba bitów) mikroprocesora jest jednym z jego najważniejszych parametrów. Determinuje ona w decydującym stopniu jego efektywność (moc obliczeniową). Liczba bitów w słowie mikroprocesora jest równa liczbie linii jego magistrali danych. Z reguły nie jest ona równa liczbie linii jego wewnętrznej magistrali.
W różnych mikroprocesorach stosuje się różną długość słowa; zwykle jednak jest to wielokrotność 8 bitów (8 bitów = 1 bajt).
Rysunek 3.3. Struktura wewnętrzna mikrokontrolera 8-bitowego MCS-C51. [11]
3.2. Pamięć - ROM, RAM
Zadaniem pamięci jest przechowywanie informacji [10]. W elektronice cyfrowej informacją będzie stan napięcia określający stan logiczny. Układy cyfrowe przetwarzają i przechowują (pamiętają) informacje w postaci binarnej (0 - 1). Informacje przetwarzane muszą być wcześniej zapamiętane.
Istotnym zagadnieniem dotyczącym pamięci jest możliwość zapisania informacji w określonym miejscu jak i jej pobranie. Wymaga to uporządkowania rozmieszczenia komórek i realizacji tzw. adresowania, czyli wskazywania komórki do zapisu lub odczytu informacji. Pierwszym kryterium podziału pamięci jest sposób wprowadzania i wyprowadzania danych. Może być on szeregowy lub równoległy. Z tym wiążą się różne struktury pamięci: szeregowa i matrycowa. Struktura szeregowa występuje w rejestrze przesuwnym. Zasadniczym blokiem pamięci matrycowej (rys. 3.5a) jest matryca pamięci zawierająca uporządkowane komórki pamięci. Komórki te rozmieszczone są na płaszczyźnie np. układu scalonego i ich położenie można określić za pomocą współrzędnych X i Y (rys. 3.5b). Adres komórki składa się więc z dwóch części. Dane są wprowadzane lub wyprowadzane z pamięci przez układ we/wy.
Pamięć systemu mikroprocesorowego można również podzielić ze względu na możliwość wielokrotnego zapisu informacji do pamięci na dwie odrębne części: pamięć zapisywalną i pamięć stałą. Każda z tych części składa się z pamięciowych układów scalonych, połączonych w sposób zależny od ich organizacji wewnętrznej. Na rysunku 3.6 pokazano podział funkcjonalny pamięci półprzewodnikowych [2].
Rysunek 3.6. Podział funkcjonalny pamięci półprzewodnikowych. [2]
W zależności od typu, mikrokontroler może być wyposażony w kilka rodzajów wbudowanej pamięci wewnętrznej [3]. Ze względu na technologię wykonania pamięci te dzieli się na sześć podstawowych odmian.
Pamięć RAM (ang. random access memory) może być zarówno odczytywana, jak i zapisywana przez CPU. Zawartość pamięci jest podtrzymywana tak długo, jak długo jest włączone zasilanie układu. Rozróżnia się statyczne i dynamiczne pamięci RAM. Pamięci dynamiczne zachowują swoją zawartość tylko wtedy, gdy jest ona cyklicznie odświeżana (czas rzędu milisekund). Pamięci statyczne nie wymagają odświeżania i zapewniają krótszy czas dostępu. Pamięci dynamiczne są łatwiejsze do scalenia, dlatego pamięci RAM o dużych pojemnościach wykonuje się zwykle jako dynamiczne, natomiast mniejsze pamięci realizuje się jako statyczne.
Do pamięci RAM doprowadzany jest adres, sygnały sterujące CE, R/W (zapis W lub odczyt R) oraz dane (rys. 3.7) [10]. Adres, podawany liniami adresowymi
Rysunek 3.7. Pamięci RAM. [10]
służy do wyboru komórki, do której zostanie zapisana informacja lub, z której zostanie odczytana. Sygnał sterujący CE uaktywnia pamięć, tzn. dołącza ją do linii adresowych i danych.
Pamięć ROM (ang. read-only memory) może być tylko odczytywana [3]. Zawartość pamięci jest określona na stałe podczas procesu produkcji. Pamięci tego typu są używane jako wewnętrzna pamięć programu do przechowywania kodu firmowego oprogramowania dostarczanego wraz z mikrokontrolerem (ang. firmware).
Schemat budowy tych pamięci przedstawiono na rysunku 3.8.
Rysunek 3.8. Pamięci ROM. [10]
Pamięć EPROM (ang. erasable programmable ROM) służy do przechowywania programów i danych użytkownika (rys. 3.9). Zawartość pamięci może być zmieniana przez skasowanie poprzedniej zawartości i wpisanie nowej. Operacja ta wymaga zwykle wyjęcia układu z podstawki. Kasowanie przeprowadza się naświetlając pamięć promieniami ultrafioletowymi, natomiast programowanie odbywa się
w sterowanym przez komputer programatorze, przy użyciu napięcia o wartości równej kilkanaście woltów. Liczba cykli kasowania-programowania jest ograniczona. Podobnie jak pamięć ROM, pamięć EPROM jest nieulotna, to znaczy po wyłączeniu zasilania zachowuje swoją zawartość.
Pamięć jednokrotnie programowalna OTP (ang. one time programmable) ma budowę identyczną jak EPROM, ale proces programowania można wykonać tylko jeden raz. W odróżnieniu od pamięci EPROM, których obudowy są wyposażone w okno z kwarcu umożliwiające kasowanie w ultrafiolecie, pamięci OTP nie mają takiego okienka, nie mogą być więc kasowane. Ściślej biorąc, zawartość zaprogramowanej pamięci OTP można modyfikować, ale tylko przez zmianę jedynek na zera. Zaprogramowane wcześniej zera nie mogą być już przeprogramowane na jedynki.
Pamięć EEPROM (ang. electrically erasable PROM) może być przeprogramowana elektrycznie, bez potrzeby kasowania ultrafioletem. Jest pamięcią nieulotną, stosowaną do przechowywania programów i danych. Wadą pamięci tego typu jest długi czas zapisu wynoszący zwykle od kilkuset nanosekund do około 1 milisekundy. Liczba cykli zapisu-kasowania jest ograniczona i wynosi typowo 10 000.
3.3. Układ czasowo-licznikowy
Bloki timerów - liczników umieszczone wewnątrz struktury procesorów '51 są jednymi z najbardziej użytecznych układów jakie możemy wykorzystywać [5]. Umożliwiają one dokonywanie wszelkich operacji rozgrywających się w czasie rzeczywistym, budowanie zegarów, timerów, stoperów oraz innych układów, których działanie uzależnione jest od upływu czasu. Jednocześnie, obsługa timerów sprawia zwykle wiele problemów początkującym programistom.
Układ czasowo-licznikowy (ang. timer-counter) mikrokomputera 8051 zawiera dwa 16-bitowe (2x8bitów) liczniki: Timer0 i Timer1 [7].
Mogą one zliczać impulsy zewnętrzne, doprowadzone do wejść, odpowiednio, T0 (P3.4) lub T1 (P3.5), spełniając w ten sposób funkcję licznika (ang. event counter).
Mogą też zliczać wewnętrzne impulsy zegarowe, w celu odmierzania opóźnień czy generowania przerwań zegarowych o zadanej częstotliwości. W tym przypadku spełniają funkcję czasomierza (ang. timer) - (zliczanie cykli maszynowych mikrokontrolera).
3.4. Układ wejścia - wyjścia (porty)
Jednym z istotniejszych parametrów mikrokontrolerów jednoukładowych, który często decyduje o wyborze układu jest liczba i możliwości wykorzystania linii wejść/wyjść mikrokontrolera [9]. W celu uelastycznienia struktury mikrokontrolera, a tym samym poszerzenia możliwości jego zastosowań, przy jednoczesnym zachowaniu małych rozmiarów układu, znaczna część linii wejść/wyjść mikrokontrolerów może zwykle pełnić różne funkcje. W przypadku mikrokontrolerów rodziny 51 większości linii wejść/wyjść przypisane są dwie lub trzy alternatywne funkcje. Z reguły, oprócz funkcji zwykłego wejścia/wyjścia cyfrowego, linia może być wejściem lub wyjściem sygnałów strobujących, impulsowych, analogowych, adresu, danych itp. Rodzaj funkcji pełnionej przez daną linię prawie zawsze może być ustalany programowo. Linie pełniące zbliżone funkcje zebrane są w grupy określane mianem portów.
Jeśli linia pracuje jako wyjście cyfrowe, zapis jedynki logicznej do przerzutnika powoduje odcięcie tranzystora i pojawienie się na wyprowadzeniu zewnętrznym mikrokontrolera stanu wysokiego, na skutek działania rezystora podciągającego przyłączonego do dodatniego napięcia zasilania mikrokontrolera. Zapis zera do przerzutnika powoduje wejście tranzystora w przewodzenie i wymuszenie na wyprowadzeniu zewnętrznym mikrokontrolera stanu niskiego.
3.4.1. Budowa wewnętrzna portów
Porty, oprócz standardowych funkcji wejścia-wyjścia nie realizują żadnych dodatkowych funkcji. W takim układzie sygnał wyjściowy rejestru portu steruje bezpośrednio tranzystorem wyjściowym, wymuszając odpowiedni stan na końcówce układu. Schemat standardowych portów wejścia-wyjścia przedstawiono na rysunku 3.17.
Rysunek 3.17. Schemat standardowych portów wejścia-wyjścia. [2]
Elementem wspólnym w strukturze każdego z portów jest przerzutnik typu D, będący elementem rejestru danego portu. Sterowanie portami odbywa się w podobny sposób, jak jest w przypadku pozostałych rejestrów mikrokontrolera. Rejestry portów należą do grupy rejestrów adresowanych bitowo i bajtowo. Dzięki temu możliwe jest ustawianie każdego bitu rejestru danego portu (lub odczytanie stanu dowolnego bitu rejestru portu) niezależnie, wykorzystując rozkazy operacji na bitach.
3.6. Rodzaje przetworników
Układy przetwarzające przebieg jednej wielkości sygnału (wejściowego) na drugą wielkość (wyjściową) nazywamy przetwornikami. Najważniejszymi przetwornikami stosowanymi w systemach mikroprocesorowych są:
komparatory napięć
przetworniki analogowo-cyfrowe A/C
przetworniki cyfrowo-analogowe C/A
3.6.2. Przetworniki analogowo-cyfrowe
Przetworniki analogowo-cyfrowe stosowane w mikrokontrolerach wykorzystują najczęściej dwie spośród wielu znanych metod przetwarzania napięcia na odpowiadającą mu miarę liczbową [3]:
1) metodę sukcesywnej aproksymacji SAR (ang. successive approximation),
2) metodę jednozboczowego ładowania pojemności SS (ang. single-slope A/D).
METODY KONWERSJI ANALOGOWO-CYFROWEJ
Przetwornik SAR składa się z układu próbkująco-pamiętającego (ang. sample-and-hold), komparatora, rejestru aproksymacyjnego i układu sterowania realizującego algorytm SAR (rys. 3.23). W rzeczywistych układach stosuje się zazwyczaj kilka (bądź nawet kilkanaście) kanałów przetwarzania A/C, multiplekser kanałów, źródło napięcia odniesienia i niekiedy oddzielny układ zasilania części analogowej w celu wyeliminowania zakłóceń.
Rysunek 3.23. Uproszczony schemat blokowy przetwornika A/C pracującego na zasadzie sukcesywnej aproksymacji. [3]
Cykl konwersji w układzie SAR zaczyna się od pobrania próbki mierzonego napięcia wejściowego i zapamiętania jej w pojemności C. Rejestr aproksymacyjny jest zazwyczaj inicjowany w taki sposób, że ma ustawiony najbardziej znaczący bit, a pozostałe bity wyzerowane. Zawartość rejestru reprezentuje zatem napięcie równe połowie maksymalnego napięcia (zakresu pomiarowego).
układY sterowania za pomocą mikrokontrolera
Schemat blokowy
W stanowisku laboratoryjnym, można wyróżnić poszczególne bloki: blok mikrokontrolera, klawiaturę, wyświetlacz, blok sterowania silnikiem oraz silnik.
Na rysunku 1 przedstawiono schemat blokowy układu.
Języki programowania mikroprocesorów
Program jest to ciąg instrukcji danego procesora wykonywanych jeden po drugim w określonej przez programistę kolejności. Ciąg ten zapisany w formie symbolicznej, czyli z użyciem symbolicznych nazw instrukcji stworzony przez programistę nazywa się programem źródłowym. Ten sam program przetworzony przez kompilator do postaci kodów dla mikroprocesora nazywamy programem binarnym lub programem wykonywalnym. Ten podział spowodowany jest tym, że mikrokontrolery nie mogą wykonywać programów źródłowych, ponieważ oczekują one ciągu zer i jedynek będących kodami instrukcji. Z drugiej strony człowiek nie może poruszać się w programie binarnym, ponieważ jest on dla niego kompletnie nieczytelny. Stosowany do przetwarzania z zapisu źródłowego na postać binarną program jest kompilatorem, czyli programem tłumaczącym jedną postać na drugą. Dla uniknięcia problemów z interpretacją zapisów w programach stworzony jest specjalny język programowania. Takim językiem jest asembler (jako podstawowy i elementarny język programowania). Oprócz asemblera są stosowane inne języki programowania, wśród których duża popularnością cieszy się język C, natomiast wśród elektroników przeważa prostszy i wygodniejszy do zastosowania język BASCOM.
Asembler
Język C oraz C++
BASCOM
a) b)
Rysunek 3.5. a) Pamięć matrycowa b) Matryca pamięci. [10]
Wyświetlacz LCD
Klawiatura
Silnik
TDA844
DAC4
DAC3
DAC2
DAC1
ATMEL
8535
I2C
E
Reg.napięcia 1
Reg.napięcia 2
Reg.napięcia
Reg. napięcia 4