Ogólna charakterystyka systemu mikroprocesorowego
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]
Centralna jednostka procesora (CPU)
CPU jest mózgiem każdego systemu mikroprocesorowego, ponieważ koordynuje ono działanie wszystkich pozostałych układów, a ponadto wykonuje wszystkie operacje (obliczenia) arytmetyczne i logiczne. Ponadto, podczas wykonywania instrukcji, CPU adresuje pamięć i układy wejścia/wyjścia, oraz odpowiada na zewnętrzne sygnały sterujące. Wewnątrz CPU znajdują się, odpowiednio ze sobą połączone:
- rejestry,
- jednostka arytmetyczno-logiczna (ALU),
- układy sterujące (np. dekoder instrukcji),
- układ obsługi przerwań.
Rejestry stanowią rodzaj pamięci do chwilowego przechowywania różnego rodzaju informacji. Niektóre z rejestrów, jak np. licznik rozkazów pełnią specjalne funkcje. Inne, jak np. akumulator, mają bardziej ogólne zastosowanie.
Jednostka arytmetyczno-logiczna (ALU), jak sama nazwa wskazuje, służy do wykonywania obliczeń arytmetycznych i operacji logicznych. Operacje te są zwykle wykonywane na liczbach dwójkowych. Niektóre mikrokontrolery i mikroprocesory umożliwiają wykonywanie operacji także na liczbach dziesiętnych. Jednostka ALU zawiera sumator, który umożliwia dodanie zawartości dwóch rejestrów. Układ ALU zawiera również specjalne bity tzw. wskaźników, które służą do sygnalizowania określonych stanów, powstałych w wyniku wykonywania operacji arytmetycznych i logicznych. Stan tych wskaźników może być testowany programowo, a wykrycie określonego stanu wybranych wskaźników może być wykorzystane do spowodowania skoku w inne miejsce wykonywanego programu.
Układy sterujące, w oparciu o sygnał zegarowy (taktujący), generują odpowiednie sygnały sterujące pobieraniem kodu instrukcji z pamięci programu, dekodowaniem kodu operacji, oraz wysyłają do innych wewnętrznych i zewnętrznych układów sygnały niezbędne do wykonania przez CPU kolejnych operacji. Układy sterujące są również odpowiedzialne za obsługę specjalnych sygnałów zewnętrznych - np. przerwań.
Stosowanie przerwań umożliwia maksymalne wykorzystanie możliwości przetwarzania danych, jakie daje mikrokontroler. Dość często system mikroprocesorowy współpracuje z urządzeniami stosunkowo wolnymi - jak np. drukarki, wyświetlacze, pamięci dyskowe. W takich sytuacjach zamiast wytracać czas, oczekując na gotowość urządzenia zewnętrznego do wykonania następnej operacji (np. przesłania danych), mikrokontroler może wykonywać inne operacje, a do obsługi danego urządzenia przejść w chwili zgłoszenia przez to urządzenie przerwania sygnalizującego gotowość do dalszej wymiany informacji. Przerwania są również przydatne do obsługi nieregularnych zdarzeń i sytuacji awaryjnych sygnalizowanych z zewnątrz - np. przekroczenia dopuszczalnej wartości ciśnienia płynu, sygnalizowanego przez czujnik pomiarowy. Procedura obsługi takiego przerwania powinna być napisana w taki sposób, by jej wykonanie spowodowało odpowiednią reakcję na sygnalizowane zdarzenie - w podanym przykładzie np. wysłanie sygnału powodującego przymknięcie odpowiedniego zawora.
Mikrokontroler może współpracować z kilkoma urządzeniami zgłaszającymi przerwania. W takim przypadku każdemu z przerwań przypisany jest inny priorytet. Dzięki temu, przy jednoczesnym zgłoszeniu kilku przerwań, w pierwszej kolejności zostanie wykonana procedura obsługi przerwania o najwyższym priorytecie, czyli przerwania uznanego za najważniejsze.
Pamięć
Do działania mikrokontrolera niezbędny jest odpowiedni program. Pamięć programu musi się zatem znaleźć w projektowanym systemie i musi być ona gotowa do odczytu już w chwili załączania zasilania w układzie. Z tego względu pamięć programu wykonywana jest najczęściej jako pamięć nieulotna typu:
ROM - programowana maską w fazie produkcji,
PROM - programowana jednorazowo przez użytkownika,
EPROM, EEPROM - przystosowane do wielokrotnego programowania przez użytkownika.
Do przechowywania wyników wykonywanych operacji i innych danych wykorzystywanych przez CPU, konieczne jest zastosowanie pamięci RAM, której zawartość może być zarówno odczytywana, jak i modyfikowana przez CPU.
Porty wejścia/wyjścia
Porty wejścia/wyjścia są dla mikrokontrolera mostami łączącymi mikrokontroler ze światem zewnętrznym. Porty wejściowe umożliwiają odczytywanie informacji z takich źródeł jak przełączniki i czujniki sygnalizujące zdarzenia zewnętrzne. Porty wyjściowe wykorzystywane są do przesyłania informacji do urządzeń zewnętrznych, takich jak diody LED, przekaźniki, silniki, czy nawet inne mikrokontrolery.
3.1. Procesor - CPU
Mikroprocesor jako jednostka centralna (ang. Central Processing Unit - CPU) wraz z zestawem układów dodatkowych tworzą system mikroprocesorowy zwany również mikrokomputerem [2].
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.
Przepływ danych i wyników między rejestrami, pamięcią i arytmometrami jest sterowany przez układ sterujący, który decyduje o tym, jakie operacje i na jakich danych maję być wykonane. Układ sterujący jest odpowiedzialny za pobieranie kolejnych rozkazów programu z pamięci, interpretowanie treści pobranych rozkazów i ich wykonanie w układzie operacyjnym. Działanie procesora jest cykliczne i w kolejnych cyklach pracy (cyklach rozkazowych) z komórki pamięci są pobierane kolejne rozkazy programu. Pobrany rozkaz jest przesyłany do układu sterującego, który rozpoznaje typ rozkazu i ustala rodzaj operacji, która ma być wykonana i identyfikuje argumenty operacji. Następnie steruje pobraniem odpowiednich danych i wykonaniem operacji w układzie operacyjnym. Dane stanowiące argumenty operacji są pobierane z rejestrów procesora lub z komórki pamięci. Pobranie danych z rejestrów (a nie z pamięci) pozwala na szybsze wykonanie operacji. Liczba rejestrów uniwersalnych procesora jest zwykle ograniczona.
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).
Na rysunku 3.3. przedstawiono schemat ideowy struktury mikrokomputera. Rozwój technologii umożliwiający scalanie coraz większych układów doprowadził do zbudowania również całych mikrokomputerów zawartych w jednym mikroukładzie. Są to tzw. mikrokomputery jednoukładowe (ang. single chip microcomputer) w postaci układu scalonego zawierającego w sobie wszystkie bloki funkcjonalne (jednostkę centralną, pamięć, układy wejścia-wyjścia) tworzące mikrokomputer zdolny do samodzielnego działania.
Rysunek 3.3. Struktura wewnętrzna mikrokontrolera 8-bitowego MCS-C51. [11]
Układ sterowania wysyła również sygnały sterujące do elementów zewnętrznych (pamięci i układów wejścia-wyjścia) określające rodzaj operacji jaką mają one wykonać. Sygnały sterujące są generowane w rytmie narzuconym przez częstotliwość podstawowego zegara taktującego.
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.
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.
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).
Pamięć EPROM (ang. erasable programmable ROM) służy do przechowywania programów i danych użytkownika. 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.
Pamięć błyskowa FLASH łączy w sobie pozytywne cechy pamięci EPROM - szybkie programowanie i EEPROM - elektryczne kasowanie [6]. Zapewnia również zwykle większą liczbę cykli zapisu-kasowania. Jest stosowana jako pamięć wewnętrzna lub zewnętrzna w nowoczesnych mikrokontrolerach. Ważną zaletą pamięci błyskowej jest możliwość szybkiego kasowania wybranych sektorów pamięci lub całej jej zawartości.
Architektura podsystemu pamięci ma duży wpływ na projektowanie i programowanie systemów cyfrowych z mikrokontrolerami [3]. Ze względu na to, że część pamięci mieści się wewnątrz scalonego układu mikrokontrolera, a część jest dołączana z zewnątrz, budowa i działanie tego podsystemu jest na ogół bardziej skomplikowane niż w przypadku konwencjonalnych systemów mikroprocesorowych.
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).
Przy pracy w trybie czasomierza inkrementacja licznika następuje w każdym kolejnym cyklu maszynowym, a zatem maksymalna częstotliwość zliczania jest równa 1/12 częstotliwości zegarowej mikrokontrolera [9].
W przypadku wykorzystywania układu w trybie licznika, jego zawartość jest zwiększana w odpowiedzi na opadające zbocze sygnału wejściowego. Detekcja zbocza odbywa się jednak synchronicznie z cyklem pracy mikrokontrolera - przez testowanie stanu odpowiedniej linii wejściowej w każdym kolejnym cyklu maszynowym. Jeśli testowanie wykazuje stan wysoki linii w jednym cyklu maszynowym oraz stan niski linii w następnym cyklu maszynowym, zawartość licznika jest zwiększana. Tak więc, aby zagwarantować wykrycie wszystkich impulsów, każdy (zarówno niski jak i wysoki) stan testowanej linii wejściowej musi trwać co najmniej jeden pełny cykl maszynowy. Skutkiem tego maksymalna częstotliwość pracy układu w trybie licznika jest ograniczona do 1/24 częstotliwości zegarowej 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. Aby uniknąć zapamiętywania stanu wyjść w pamięci RAM, co mogłoby być nieodzowne, gdyby informacja o stanie wyjść miała być wykorzystywana w przyszłości, układ wyjściowy został wyposażony w bufor trójstanowy umożliwiający odczyt zawartości przerzutnika.
W przypadku, gdy linia ma pracować jako wejście cyfrowe, wpisanie jedynki do przerzutnika powoduje, że jedynym obciążeniem wyprowadzenia mikrokontrolera staje się rezystor podciągający. Rezystancja tego rezystora wynosi kilkadziesiąt (50-100) kiloomów, co dla układów cyfrowych jest obciążeniem minimalnym. Stan wejścia jest odczytywany przy wykorzystaniu drugiego bufora trójstanowego.
Uwaga: Wpisanie jedynki do przerzutnika jest warunkiem koniecznym, aby linia mogła pracować jako wejście cyfrowe. Wpisanie zera może doprowadzić do konfliktu wyjść, co uniemożliwi odczyt prawidłowej wartości stanu linii.
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.
Dane przesyłane do portu zapisywane są w buforowym rejestrze wyjściowym. Stan tego rejestru nie zmienia się aż do ponownego wpisania nowych wartości.
Odczytywanie danej z portu odbywa się przez bufory, przy czym dana może zostać odczytana albo z rejestru portu, albo bezpośrednio z końcówki portu: zależy to od użytego rozkazu. Do odczytywania danych z rejestru wyjściowego portu służą rozkazy, których wykonanie powoduje odczytanie, modyfikację i ponowne zapisanie danych do portu.
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.1. Komparator napięć
W systemach mikroprocesorowych, zwłaszcza pełniących funkcję sterowników przemysłowych, zachodzi często potrzeba zastosowania komparatorów analogowych. Wśród układów rodziny 51 są takie, które posiadają komparatory analogowe zintegrowane ze strukturą samego mikrokontrolera. Bardzo często komparatory wykorzystywane są do monitorowania napięcia zasilającego [9].
Mikrokontrolery C1051 i C2051 zawierają pojedynczy komparator analogowy , którego wejścia podłączone są do linii P1.0 (+) i P1.1 (-). Z tego względu linie te pozbawione są standardowych rezystorów podciągających, a ich wejściowy prąd upływu nie przekracza 10 A. Napięcie niezrównoważenia komparatora jest mniejsze od 20 mV, a zakres jego napięć wejściowych jest ograniczony od dołu potencjałem masy, a od góry napięciem zasilania mikrokontrolera. Stan wyjścia komparatora może być testowany wyłącznie programowo, przy czym operacja ta jest realizowana dość nietypowo - przez odczyt bitu P3.6 (port P3 nie posiada wyprowadzenia P3.6). Bit P3.6 ma wartość jedynki logicznej, jeśli napięcie na wejściu nieodwracającym jest wyższe od napięcia na wejściu odwracającym.
Komparatory mogą generować przerwania (powodujące np. wyjście mikrokontrolera ze stanu uśpienia). W tym celu wyjścia komparatorów muszą być wykorzystane do sterowania wejść przechwytujących układu PCA. Jeśli komparator steruje przechwytującym wejściem układu PCA, ale jego wyjście nie jest dołączone do wyprowadzenia mikrokontrolera, to wyprowadzenie to może być wykorzystane jako linia wejść/wyjść cyfrowych ogólnego zastosowania. Jeśli wyjście komparatora jest dołączone do wyprowadzenia mikrokontrolera, to rezystory podciągające na tym wyprowadzeniu są odłączane i stopień końcowy danej linii pracuje wówczas w konfiguracji otwarty dren.
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).
Częściej stosowana jest metoda SAR, która nie wymaga dołączania do mikrokontrolera zewnętrznych elementów dyskretnych i jest łatwiejsza przy programowaniu obsługi przetwornika. Zaletą metody SAR jest ponadto stosunkowo krótki czas konwersji, równy zwykle od 10 do 16 cykli zegara w przypadku konwerterów 8-bitowych. Realizacja przetworników SAR o większej rozdzielczości napotyka jednak trudności, dlatego w praktyce rozdzielczość przetworników SAR wbudowywanych do mikrokontrolerów nie przekracza 10 bitów. Metoda SS wymaga z kolei stosowania dołączanego z zewnątrz kondensatora, co jest jej oczywistą wadą. Zapewnia jednak stosunkowo prostą realizację przetworników o większej rozdzielczości, na przykład 12- lub nawet 16-bitowej. Czas przetwarzania jest jednak dłuższy niż w przypadku metody SAR.
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). Wartość ta jest zamieniana przez przetwornik C/A na napięcie i porównywana z napięciem mierzonym. W zależności od wyniku porównania układ sterowania pozostawia najbardziej znaczący bit rejestru niezmieniony albo go neguje. Pierwszy przypadek ma miejsce wtedy, gdy napięcie mierzone jest większe od połowy napięcia maksymalnego, drugi natomiast - gdy jest mniejsze. Po określeniu wartości najbardziej znaczącego bitu rejestru aproksymacyjnego układ SAR ustawia w rejestrze kolejny bit i powtarza opisaną wyżej procedurę. Przy n-bitowym rejestrze aproksymacyjnym układ określa jego ostateczną zawartość po n cyklach.
3.6.3. Przetworniki cyfrowo-analogowe typu PWM
Niektóre z mikrokontrolerów wyposażone są w jedno lub dwa wyjścia typu PWM o programowanej częstotliwości powtarzania i wypełnienia generowanych przebiegów (szerokości wytwarzanych impulsów).
Realizacja przetwornika cyfrowo-analogowego w oparciu o wyjście typu PWM polega na przepuszczeniu generowanego przebiegu przez filtr dolnoprzepustowy RC o stałej czasowej dużo mniejszej od okresu powtarzania impulsów (rys. 3.26). W ten sposób na wyjściu filtru uzyskuje się napięcie proporcjonalne do wypełnienia wytwarzanego przebiegu (rys. 3.27).
Rysunek 3.25. Układ modulacji szerokości impulsu (PWM) pracujący jako przetwornik C/A. [1]
Rysunek 3.26. Zależność zmiennego wypełnienia impulsu oraz wartość prądu na wyjściu filtru w funkcji czasu. [8]
Innym rozwiązaniem jest użycie scalonego kwarcowego generatora częstotliwości. Wykorzystanie takiego generatora jest możliwe, ponieważ mikrokontrolery rodziny `51 mogą być także taktowane sygnałem zewnętrznym. W przypadku taktowania mikrokontrolera sygnałem zewnętrznym pojawiają się jednak między producentami pewne rozbieżności co do wykorzystania wyprowadzeń XTAL1 i XTAL2 oraz parametrów sygnału taktującego.
Inicjowanie systemu - RESET
Wszystkie mikrokontrolery rodziny 51 posiadają specjalne wyprowadzenie służące do zerowania mikrokontrolera. Zerowanie polega na wykonaniu przez mikrokontroler szeregu operacji, wskutek których znaczna część wewnętrznych rejestrów przybiera standardowe wartości. Dzięki temu początkowe warunki pracy mikrokontrolera po jego wyzerowaniu są zawsze jednakowe.
Operacja zerowania trwa dwa cykle maszynowe i jest wykonywana w odpowiedzi na aktywny sygnał zerowania na wyprowadzeniu RESET (oznaczanym też czasami symbolem RST).
Po włączeniu zasilania zawartość zarówno wewnętrznej pamięci RAM, jak i rejestrów mikrokontrolera jest nieokreślona [9]. Z tego względu zerowanie mikrokontrolera po włączeniu napięcia zasilania jest warunkiem koniecznym prawidłowej pracy mikrokontrolera. W przypadku mikrokontrolerów rodziny 51 realizacja automatycznego zerowania mikrokontrolera w wyniku załączenia napięcia zasilania jest niezwykle prosta i polega na podłączeniu kondensatora na wyprowadzenie RESET (rys. 3.30). Wartość stosowanego kondensatora wynosi zwykle kilka mikrofaradów. Wybór okładki kondensatora podłączanej na wyprowadzenie RESET (z racji znacznej pojemności jest to zwykle kondensator elektrolityczny) zależy od aktywnego poziomu sygnału zerującego, który nie jest niestety jednakowy dla wszystkich mikrokontrolerów rodziny 51.
Rysunek 3.30. Realizowany przy użyciu pojedynczego kondensatora, układ automatycznego zerowania po załączeniu zasilania, dla mikrokontrolerów zerowanych poziomem wysokim (np. C51) i poziomem niskim (np. C517). [9]
3.9. Budowa wewnętrzna, rozmieszczenie wyprowadzeń
Rodzina mikrokontrolerów x51 jest jedną z najbardziej popularnych rodzin mikrokontrolerów 8-bitowych ogólnego przeznaczenia.
Mikrokontrolery x51 są produkowane w niemal wszystkich rodzajach obudów. Najbardziej popularne są układy w obudowach PLCC-44. Oznaczenia symboliczne i funkcje wyprowadzeń przedstawiono na rysunku 3.32.
Rysunek 3.32. Wyprowadzenia i ich symbole w podstawowej wersji mikrokontrolera 80C51. [3]
BIBLIOGRAFIA
Dyrcz K. P. - praca zbiorowa; Podstawy techniki mikroprocesorowej; Oficyna Wydawnicza Politechniki Wrocławskiej; Wrocław 1999.
Pełka R.; Mikrokontrolery architektura programowanie zastosowania; Wydawnictwa Komunikacji i Łączności; Warszawa 1999.
Philips Semiconductors - materiały firmowe; 80C51 family hardware description; 01.12.1997
Rudnicki C.; Radioelektronik Audio-HiFi-Video 9/2000.
Rydzewski A.; Mikrokomputery jednoukładowe rodziny MCS-51; Wydawnictwa Naukowo-Techniczne; Wydanie trzecie; Warszawa 1992, 1995.
Scheibert K. / Seth M. / Hollmann A.; Generating sinusoidal three-phase currents with the CCU of C504; Siemens - Semiconductor Group 06/1997.
Starecki T.; Mikrokontrolery jednoukładowe rodziny 51; "NOZOMI"; Warszawa 1996.
„Elektronika inaczej - pamięci półprzewodnikowe”; Elektronik Praktyczny 2/1999.
1
2