SŁAWOMIR WIAK (redakcja)

Podobne dokumenty
MIKROKONTROLERY I MIKROPROCESORY

2. Architektura mikrokontrolerów PIC16F8x... 13

Technika mikroprocesorowa. W. Daca, Politechnika Szczecińska, Wydział Elektryczny, 2007/08

Wstęp Architektura... 13

1. Wprowadzenie Programowanie mikrokontrolerów Sprzęt i oprogramowanie... 33

Kurs Elektroniki. Część 5 - Mikrokontrolery. 1/26

Wykład 4. Przegląd mikrokontrolerów 16-bit: - PIC24 - dspic - MSP430

WPROWADZENIE Mikrosterownik mikrokontrolery

Mikroprocesory i Mikrosterowniki

Algorytmika i Programowanie VBA 1 - podstawy

Programowanie mikrokontrolerów AVR

LEKCJA TEMAT: Zasada działania komputera.

1.1 Co to jest USBasp? Parametry techniczne Obsługiwane procesory Zawartość zestawu... 4

STM32Butterfly2. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

Systemy wbudowane. Wprowadzenie. Struktura. Mikrokontrolery AVR. Wprowadzenie do programowania w C

Elementy składowe systemu komputerowego

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Mikrokontroler ATmega32. Język symboliczny

Systemy operacyjne i sieci komputerowe Szymon Wilk Superkomputery 1

1 Podstawy c++ w pigułce.

Charakterystyka mikrokontrolerów. Przygotowali: Łukasz Glapiński, Mateusz Kocur, Adam Kokot,

Mikroprocesory i Mikrosterowniki

Szkolenia specjalistyczne

1. Wstęp Różnice pomiędzy mikrokontrolerami ST7 a ST7LITE Rdzeń mikrokontrolerów ST7FLITE... 15

Budowa Mikrokomputera

Systemy wbudowane Mikrokontrolery

ARCHITEKTURA PROCESORA,

1.2. Architektura rdzenia ARM Cortex-M3...16

Spis treúci. Księgarnia PWN: Krzysztof Wojtuszkiewicz - Urządzenia techniki komputerowej. Cz. 1. Przedmowa Wstęp... 11

Architektura mikroprocesorów TEO 2009/2010

Wykład 2. Przegląd mikrokontrolerów 8-bit: -AVR -PIC

Wykład Mikroprocesory i kontrolery

Architektura komputerów

Programowanie w języku Python. Grażyna Koba

Wykład 2. Mikrokontrolery z rdzeniami ARM

Mikrokontroler AVR ATmega32 - wykład 9

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Zastosowanie procesorów AVR firmy ATMEL w cyfrowych pomiarach częstotliwości

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych

ICD Wprowadzenie. Wprowadzenie. Czym jest In-Circuit Debugger? 2. O poradniku 3. Gdzie szukać dodatkowych informacji? 4

dokument DOK wersja 1.0

System mikroprocesorowy i peryferia. Dariusz Chaberski

Struktura i działanie jednostki centralnej

Ćwiczenie 5 Zegar czasu rzeczywistego na mikrokontrolerze AT90S8515

Przykładowe pytania DSP 1

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

o Instalacja środowiska programistycznego (18) o Blink (18) o Zasilanie (21) o Złącza zasilania (22) o Wejścia analogowe (22) o Złącza cyfrowe (22)


Programator AVR USBasp

Arduino dla początkujących. Kolejny krok Autor: Simon Monk. Spis treści

Opracował: Jan Front

Komunikacja w mikrokontrolerach Laboratorium

Układy zegarowe w systemie mikroprocesorowym

Organizacja pamięci VRAM monitora znakowego. 1. Tryb pracy automatycznej

ADuCino 360. Zestaw uruchomieniowy dla mikrokontrolerów ADuCM360/361

Systemy uruchomieniowe

Technika mikroprocesorowa. Struktura programu użytkownika w systemie mikroprocesorowym

Budowa komputera Komputer computer computare

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Opis efektów kształcenia dla modułu zajęć

LITEcompLPC1114. Zestaw ewaluacyjny z mikrokontrolerem LPC1114 (Cortex-M0) Sponsorzy:

Systemy Wbudowane. Arduino, AVR. Arduino. Arduino. Arduino. Oprogramowanie. Mikrokontroler. Mikrokontroler Platforma Arduino. Arduino IDE: Arduino C:

ZL8AVR. Płyta bazowa dla modułów dipavr

Technika mikroprocesorowa. W. Daca, Politechnika Szczecińska, Wydział Elektryczny, 2007/08

1 Podstawy c++ w pigułce.

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Wstęp do programowania

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

STM32 Butterfly. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

Techniki mikroprocesorowe i systemy wbudowane

Programowanie w języku C++ Grażyna Koba

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Wprowadzenie do informatyki i użytkowania komputerów. Kodowanie informacji System komputerowy

Architektura komputera. Cezary Bolek. Uniwersytet Łódzki. Wydział Zarządzania. Katedra Informatyki. System komputerowy

Układ wykonawczy, instrukcje i adresowanie. Dariusz Chaberski

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Mikrokontrolery AVR techniczne aspekty programowania

Mikroprocesory i mikrosterowniki

Szkoła programisty PLC : sterowniki przemysłowe / Gilewski Tomasz. Gliwice, cop Spis treści

Zaliczenie Termin zaliczenia: Sala IE 415 Termin poprawkowy: > (informacja na stronie:

Hardware mikrokontrolera X51

LEKCJA TEMAT: Współczesne procesory.

Politechnika Białostocka

OPTIMA PC v Program konfiguracyjny dla cyfrowych paneli domofonowy serii OPTIMA ELFON. Instrukcja obsługi. Rev 1

Zestaw uruchomieniowy z mikrokontrolerem LPC1114 i wbudowanym programatorem ISP

PRZETWORNIK ADC w mikrokontrolerach Atmega16-32

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Rok akademicki: 2013/2014 Kod: EEL s Punkty ECTS: 2. Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne

Programowanie sterowników przemysłowych / Jerzy Kasprzyk. wyd. 2 1 dodr. (PWN). Warszawa, Spis treści

11.Mikrokomputeryjednoukładowe

Spis treści. Dzień 1. I Rozpoczęcie pracy ze sterownikiem (wersja 1707) II Bloki danych (wersja 1707) ZAAWANSOWANY TIA DLA S7-300/400

Budowa i zasada działania komputera. dr Artur Bartoszewski

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Wykład 4. Środowisko programistyczne

Aby w pełni przetestować układ o trzech wejściach IN_0, IN_1 i IN_2 chcemy wygenerować wszystkie możliwe kombinacje sygnałów wejściowych.

Transkrypt:

SŁAWOMIR WIAK (redakcja) Akademicka Oficyna Wydawnicza EXIT

Recenzenci: Prof. Janusz Turowski Politechnika Łódzka Prof. Ewa Napieralska Juszczak University Lille Nord de France, LSEE, UA, Francja Autorzy rozdziałów: Prof. Piotr Ostalczyk (rozdz. 1, 2) Prof. Edward Jezierski (rozdz. 3) Dr hab. inż. Zbigniew Gmyrek (rozdz. 4) Dr hab. inż. Ryszard Szczerbanowski, prof. PŁ (rozdz. 5) Dr inż. Grzegorz Tosik (rozdz. 6) Prof. Zbigniew Lisik (rozdz. 6) Dr hab. inż. Jacek Gołębiowski, prof. PŁ (rozdz. 7) Dr hab. inż. Krzysztof Pacholski, prof. PŁ (rozdz. 8, 9) Prof. Krzysztof Gniotek (rozdz. 10) Dr hab. inż. Iwona Frydrych, prof. PŁ (rozdz. 10) Dr hab. Inż Ryszard Korycki, prof. PŁ (rozdz. 11) Dr inż. Grażyna Sobiczewska (rozdz. 12) Dr hab. Maria Dems, prof. PŁ (rozdz. 13, 15) Prof. Sławomir Wiak (rozdz. 13, 14, 15, 16, 17) Dr inż. Wojciech Rosiak (rozdz. 13, 15) Dr inż. Paweł Drzymała (rozdz. 14, 16, 17) Dr inż. Henryk Welfle (rozdz. 14, 16, 17) Dr inż. Ryszard Lasota (rozdz. 18) Dr inż. Marek Jan Glaba (rozdz. 19) Monografia przygotowana w ramach projektu "Innowacyjna dydaktyka bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej - zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do zatrudniania, także osób niepełnosprawnych", współfinansowanego przez Unię Europejską w ramach europejskiego Funduszu Społecznego - Programu Operacyjnego Kapitał Ludzki "Priorytet IV, poddziałanie 4.1.1. Wzmocnienie potencjału dydakty-cznego uczelni". Utwór w całości ani we fragmentach nie może być powielany ani rozpowszechniany za pomocą urządzeń elektronicznych, mechanicznych, kopiujących, nagrywających i innych, w tym również nie może być umieszczany ani rozpowszechniany w postaci cyfrowej zarówno w Internecie, jak i w sieciach lokalnych bez pisemnej zgody posiadacza praw autorskich. ISBN 978-83-60434-85-7 Copyright by EXIT, Politechnika Łódzka Łódź 2010

Grażyna Sobiczewska 12. Programowanie mikrokontrolerów 12.1 Informacje wstępne Mikrokontroler, zwany wcześniej mikrokomputerem jednoukładowym, to układ scalony zdolny do autonomicznej pracy, bo zawierający w pojedynczym elemencie procesor, pamięci i układy do komunikacji z otoczeniem. Spotykamy go w życiu codziennym jako element wbudowany różnych urządzeń, takich jak: sprzęt gospodarstwa domowego, pojazdy, układy kontrolno-pomiarowe, układy automatyki, sprzęt medyczny i telekomunikacyjny, urządzenia peryferyjne systemów komputerowych, zabawki itp., ponieważ służy do ich cyfrowego sterowania. Niewielkie rozmiary i cena powodują, że znajduje zastosowanie w coraz szerszej gamie urządzeń. Jako przodka mikrokontrolerów można uznać 4-bitowy układ Intel 4004 z 1971 roku, wraz z jego 8-bitowym następcą o numerze 8008. Pierwszym zasługującym w pełni na to miano, bo wyposażonym w wewnętrzną pamięć, był 8048, który pojawił się na rynku w 1976 roku. Jednakże standardem stał się model 8051 z roku 1980 - prototyp wiodącej w klasie 8-bitowych kontrolerów (obok 68HC11 firmy Motorola) rodziny MCS-51. Producenci obecnie produkowanych modeli, rozbudowując ich zasoby wewnętrzne, często starają się, aby ich rozwiązania zachowywały kompatybilność wsteczną (zgodność programową) z tym typem. Produkcją mikrokontrolerów zajmuje się wiele firm: Analog Devices, Atmel, Dallas Semiconductor, FreeScale Semiconductor, Fujitsu, Hitachi, Infineon, Intel, NEC, Philips, Siemens, ST, Toshiba, Zilog i inne. Obecnie największą popularnością cieszą się produkty Intela, seria AVR Atmela i PIC firmy Microchip Technology. Aktualne tendencje rozwojowe oprócz wzrostu niezawodności, obejmują poprawę parametrów i rozszerzenie zasobów oraz możliwość zastosowania rozbudowanych układów peryferyjnych. Tym niemniej zapotrzebowanie na proste rozwiązania wciąż istnieje. Najbardziej udane rozwiązania sprzed lat są produkowane do dziś często w uproszczonych wersjach i dostępne w przystępnych cenach. 515

Rys. 12.1. Model mikrokontrolera firmy Atmel w obudowie DIP (ang. Dual In-line Package) Zasady programowania trudno jest przedstawić w sposób ogólny w oderwaniu od architektury oraz wyposażenia w urządzenia peryferyjne konkretnego typu mikrokontrolera. Wybór modelu użytego jako ilustracja wywodu jest trudny, bo nie ma takiego, który można by było uznać za reprezentatywny, a szczegółowy opis jego architektury i metod programowania mógłby czytelnikowi dać pogląd na całość zagadnienia. Wybór modelu W niniejszym opracowaniu wybrano jako przykładowy mikrokontroler popularnej na rynku krajowym firmy Atmel. Obecnie produkowane mikrokontrolery tej firmy z rdzeniem AVR można podzielić na rodziny: ATtiny przeznaczone do realizacji prostych zadań układy zamknięte w obudowach z małą ilością wyprowadzeń z niewielką ilością peryferii, stosowane głównie w układach zasilanych bateryjnie, ATmega układy z bogatym wyposażeniem m.in. wiele linii wejścia/wyjścia, wbudowane przetworniki A/C. 12.2 Architektura mikrokontrolerów Działanie mikrokontrolera wynika z realizacji rozkazów umieszczonych w jego pamięci. Przygotowanie zestawu rozkazów, czyli napisanie programu, wymaga od autora znajomości zasobów wybranego układu scalonego i ich organizacji. Omówienie architektury mikrokontrolerów jest jednak zadaniem trudnym, ze względu na szeroki wachlarz produkowanych modeli, a zatem również ich elementów składowych. Na rynku oferowanych jest kilkadziesiąt podstawowych typów z 8, 16- i 32-bitową szyną danych. Lista ich odmian różniących się parametrami 516

technicznymi liczy setki pozycji [4]. A zatem, aby zapoznać się z konkretnym rozwiązaniem należy sięgnąć do dokumentacji dostępnej najczęściej na stronach internetowych producenta. Jednakże pewne rozwiązania są wspólne i na nich skupimy się w niniejszym rozdziale. Na Rys. 12.2 przedstawiono w uproszczeniu podstawowe bloki funkcjonalne mikrokontrolera. Rezonator kwarcowy Reset zegar Jednostka centralna (CPU) Zasilanie Wewnętrzna szyna adresowa m Pamięć programu Pamięć danych Układy Sygnały wejściowe... we/wy... Sygnały wyj. i peryferyjne n Wewnętrzna szyna danych Rys. 12.2. Uproszczony schemat funkcjonalny mikrokontrolera [wg 4] Jednostka centralna (CPU ang. Central Procesor Unit) realizuje ciąg rozkazów zapisanych w pamięci programu na danych pochodzących z pamięci danych i/lub przekazywanych z urządzeń wejścia/wyjścia i jest układem sekwencyjnym synchronizowanym z zegara. Stan początkowy CPU jest inicjowany sygnałem Reset generowanym ręcznie, programowo lub pochodzącym z innego układu. Zerowanie układu występuje również po włączeniu zasilania albo w odpowiedzi na chwilowe spadki napięcia zasilania. Najważniejszym elementem układu wykonawczego CPU jest jednostka arytmetyczno-logiczna (ALU - ang. Arithmetic-Logic Unit), która wykonuje operacje należące do jej listy rozkazów (katalog dostępnych operacji zależny jest od modelu mikrokontrolera) na zawartości wyspecjalizowanych obszarów do dostarczania argumentów operacjom. W przypadku rozkazów jednoargumentowych wykorzystuje się akumulator, który po wykonaniu operacji zawiera również jej wynik, bo jego zawartość może być zarówno odczytywana, jak i wprowadzana na szynę danych. Operacje dwuargumentowe wymagają wykorzystania drugiego rejestru 517

zwanego często przejściowym, który różni się tym, że jego wartości nie można wystawić na szynie danych. Konieczność transmisji danych między akumulatorem a pamięcią, która to operacja jest relatywnie wolna ze względu na konieczność przygotowywania i wysyłania adresu pamięci, może być ograniczona przez zastosowanie tzw. rejestrów roboczych (ang. General Purpose Registers), które są strukturą pamięci dostępną bez określania adresów, poprzez nazwy symboliczne. Rejestry te są często wyspecjalizowane pod względem zastosowania, a ich ilość od kilku do kilkudziesięciu zależy od modelu mikrokontrolera. Charakterystyczną dla mikrokontrolerów cechą rejestrów jest często możliwość adresowania ich poszczególnych bitów. Jeśli chodzi o pamięci mikrokontrolera to mieszczą się we wnętrzu układu scalonego, a część może być przyłączona z zewnątrz. Pamięci wbudowane można podzielić na: RAM (ang. Random Access Memory) do zapisu i odczytu podtrzymywana tak długo, jak działa zasilanie układu realizowana jako dynamiczna (odświeżana cyklicznie) lub statyczna (nie wymaga odświeżania, często podtrzymywana bateryjnie), ROM (ang. Read Only Memory) służąca tylko do odczytu nieulotna pamięć zawierająca niezbędne do pracy oprogramowanie dostarczane z mikrokontrolerem, czyli opracowane fabrycznie (ang. Firmware) zawierające często program do ładowania, uruchamiania i nadzorowania programów użytkowych zwany monitorem, pamięć EPROM (ang. Erasable Programmable ROM) to nieulotna pamięć programowalna ograniczoną ilość razy po skasowaniu zawartości ultrafioletem, pamięć EEPROM (ang. Electrically EPROM) podobna do poprzedniej, ale ilość cykli zapisu ograniczona jest do ok.10 tys. razy, pamięć Flash jest w porównaniu do dwóch poprzednich szybsza i często zapewnia większą ilość cykli zapisu. Ten sam typ mikrokontrolera może być wyposażony w różne rodzaje pamięci o różnych pojemnościach. Istnieją rozwiązania, których pamięć programowana jest dopiero po zamontowaniu mikrokontrolera w urządzeniu docelowym (ISP ang. In System Programmable). Wewnętrzna n-bitowa szyna danych decyduje o zakresie liczb, na jakich mikrokontroler może wykonywać obliczenia (dla całkowitych bez znaku od 0 do 2 n 1). Szyna adresowa ogranicza zakres adresowalnego obszaru pamięci do 2 m adresów, a adresy dotyczą albo danych, albo rozkazów umieszczonych w pamięci programu. W najprostszych modelach stosuje się 8-bitowe adresowanie danych (256 bajtów) i 12-bitowe rozkazów (4 kb pamięci dla programu). Na rysunku 12.2 pominięto 518

zewnętrzną szynę adresową, która najczęściej jest 16-bitowa (w bardziej rozbudowanych układach 32- bitowa), co umożliwia wykorzystanie 64 kb pamięci zewnętrznej. Dla programisty ważne jest powiązanie poszczególnych rodzajów pamięci z przestrzenią adresową (ang. Memory Map). Stosowane rozwiązania to: jednolita przestrzeń adresowa dla wszystkich pamięci, rejestrów, układów we/wy (tzw. architektura von Neumanna), wykorzystanie oddzielnych szyn adresowych danych i rozkazów (ang. Harvard Architecture), a zatem rozdzielenie obszaru programu i danych, segmentacja pamięci stosowana zarówno do pamięci wbudowanych w układ scalony mikrokontrolera, jak i przyłączonych do niego z zewnątrz, a zapewniająca ochronę obszaru programu, danych i stosu przed wzajemnym przenikaniem, czyli ochronę przed niepowołanym dostępem ważną również w systemach wielozadaniowych; adres fizyczny w tym przypadku oblicza się, bazując na numerze segmentu i adresie wewnętrznym zwanym przesunięciem (ang. offset), stronicowanie stosowane w najbardziej rozbudowanych mikrokontrolerach. Sposobem na zwiększenie efektywności pracy mikrokontrolera jest wyposażenie CPU w większą liczbę arytmometrów często wyspecjalizowanych np. do operacji całkowitoliczbowych, zmiennopozycyjnych lub operacji na sygnałach DSP (ang. Digital Signal Processing). Taka architektura nosi nazwę superskalarnej (ang. Superscalar). Wykorzystanie możliwości takiego rozwiązania, czyli jednoczesne wykonywanie wielu instrukcji, wymaga zmiany koncepcji sterowania, bowiem z pamięci trzeba pobrać więcej niż jeden rozkaz i skierować je do współbieżnego wykonania przez poszczególne arytmometry. Pamięć typu FIFO (ang. First Input First Output) gromadzi kolejkę instrukcji, które są kierowane do wykonania, a takie rozwiązanie nosi nazwę przetwarzania potokowego (ang. Pipelining). Wspominając o architekturze harwardzkiej nie sposób nie wspomnieć o procesorach RISC (ang. Reduced Instruction Set Computer), które oprócz tego, że mogą w tym samym czasie współpracować z pamięcią danych i programu oraz wykorzystują zasady przetwarzania potokowego, korzystają z ograniczonego zestawu zunifikowanych (czyli przede wszystkim zajmujących w pamięci ten sam obszar) rozkazów, które operują na niewyspecjalizowanych rejestrach, stosując różne tryby adresowania argumentów. 519

Mikrokontrolery przeważnie wykorzystywane są do wykonywania operacji złożonych, program zatem bardzo rzadko ma postać jednolitej listy instrukcji. Układ przeważnie musi działać dynamicznie, czyli odpowiednie podprogramy muszą być wykonywane selektywnie w kolejności zależnej od stanu wewnętrznych modułów i dołączonych do mikrokontrolera zewnętrznych układów peryferyjnych i portów wejścia-wyjścia. Możliwość tą dają instrukcje warunkowe, które zależnie od ustalonego warunku przenoszą wykonywanie programu w wybrane miejsce. Innym mechanizmem stosowanym do współpracy z urządzeniami peryferyjnymi jest system przerwań, czyli zawieszenie realizacji aktualnie wykonywanego zadania i przejście do procedury obsługi przerwania w momencie pojawienia się żądania obsługi. Kolejność obsługi przerwań wynika dla większości współczesnych mikrokontrolerów z przypisanego do konkretnego urządzenia priorytetu, a nie tylko z kolejności zgłoszeń. Aby po zakończeniu obsługi przerwania kontynuować działanie, należy przed rozpoczęciem zapamiętać stan mikrokontrolera i adres instrukcji, od której należy wznowić program. Do tego celu stosuje się stos, czyli obszar RAM zarządzany zgodnie z zasadą LIFO (ang. Last Input First Output), który można rozbudowywać w stronę rosnących (najczęściej) lub malejących adresów. Ma on zastosowanie również do chwilowego zapisu zawartości rejestrów i zmiennych w programach użytkownika, Zestaw układów wejścia-wyjścia (I/O ang. Input/Output) i układów peryferyjnych zależy od konkretnego typu mikrokontrolera. Są to porty służące do równoległej lub szeregowej transmisji danych działające w trybie asynchronicznym (UART ang. Universal Asynchronous Receiver-Transmitter) lub częściej synchronicznym (USART ang. Universal Synchronous-Asynchronous Receiver-Transmitter). Najczęściej pracują w standardach opracowanych przez różne firmy: SIO (ang. Serial Input/Output), SCI i SCI+ (ang. Serial Communiation Interface), SPI (ang. Serial Peripherial Interface), CAN (ang. Controller Area Network), USB (ang. Universal Serial Bus), I 2 C (ang. Inter-Integrated Circuit Bus), 1-Wire, Microwire i inne. Typowymi układami peryferyjnymi mikrokontrolerów są również liczniki impulsów. Służą nie tylko do zliczania zdarzeń, ale przede wszystkim do odmierzania czasu (timery) i innych celów. Układ kontroli poprawności pracy WatchDog zapobiegający nieprzewidzianemu zawieszeniu lub zapętleniu programu to po prostu wyspecjalizowany licznik, którego przepełnienie generuje sygnał Reset, a zatem powinien być co pewien czas zerowany programowo, aby do tego nie doszło. Jest niezbędny przede wszystkim w układach pracujących długi czas bez nadzoru. Przetworniki analogowo-cyfrowe 8-, 10-, a nawet 12-bitowe (ADC ang. Analog to Digital Converter) i cyfrowo-analogowe (DAC ang. Digital to Analog Converter) występują w bardziej rozbudowanych układach. 520

W niektórych rozwiązaniach istnieje wyspecjalizowana jednostka FPU (Flow Point Unit) do wykonywania operacji na liczbach zmiennoprzecinkowych zapisywanych w postaci wykładniczej (cecha - mantysa). Mikrokontrolery są wyposażone w system zarządzania poborem mocy. Oprócz dwóch podstawowych stanów mikrokontrolera: pracy i obsługi przerwań, może on przejść do stanu obniżonego poboru mocy w trybie uśpienia (ang. Sleep Mode, Idle Mode),kiedy pracuje tylko zegar i niektóre urządzenia peryferyjne lub czuwania (ang. Stand By Mode), gdzie wyłączany jest nawet zegar, a podtrzymywana zawartość pamięci wewnętrznych i rejestrów. Dane zastosowanego mikrokontrolera Wybrany w niniejszym opracowaniu jako przykładowy mikrokontroler z rdzeniem AVR opiera się na architekturze RISC (ang. Reduced Instruction Set Computer), ale lista zawiera ponad 130 instrukcji, a redukcja dotyczy rozkazów operujących bezpośrednio na pamięci danych, ponieważ do tego celu przewidziano dużą ilość rejestrów roboczych, z których każdy może pełnić rolę akumulatora, co umożliwia szybszą pracę. Instrukcje wykonywane są w trakcie jednego cyklu zegarowego (tylko w układach ATmega operacja mnożenia wymaga 2 taktów zegarowych). W rdzeniu AVR konstruktorzy zastosowali mechanizm przetwarzania potokowego, polegający na jednoczesnym (zachodzącym w tym samym cyklu zegarowym) wykonywaniu bieżącej instrukcji oraz pobieraniu z pamięci programu kodu instrukcji następnej. Mikrokontrolery AVR są układami ośmiobitowymi, ale ich słowo rozkazowe ma długość 2 bajtów. Osiągana prędkość przetwarzania dochodzi do 1 MIPS (miliona operacji na sekundę) przypadających na każdy 1 MHz częstotliwości taktującego zegara. Układ ATmega16 to 8-bitowy mikrokontroler AVR o dużej wydajności i małym poborze mocy, który cechują następujące właściwości [1]: zaawansowana architektura Harvard ze zredukowaną liczbą instrukcji (RISC): - 131 dwubajtowych instrukcji, większość wykonywana w 1 cyklu zegara, - 32 rejestry 8-bitowe robocze ogólnego przeznaczenia, dostosowane do wymagań języków wysokiego poziomu, - całkowicie statyczna praca (od 0 Mhz), - wydajność do 16 MIPS przy taktowaniu zegarem 16 MHz, - wbudowany układ mnożący, operacja mnożenia wykonywana w 2 cyklach zegara. 521

522 Rys. 12.3. Rdzeń mikrokontrolerów AVR i typowe układy zewnętrzne [2] nieulotna pamięć programu i danych: - 16 kb pamięci programu typu Flash na program, programowanej poprzez SPI lub JTAG o wytrzymałości 10 000 cykli kasowanie/zapis, - opcjonalny boot-loader z niezależnymi bitami zabezpieczającymi, - 512 bajów nieulotnej pamięci danych EEPROM o trwałości 100 tys. cykli kasowanie/zapis, która może być wykorzystana do zapamiętania ustawień systemu lub akwizycji danych, - 1 kb wewnętrznej statycznej pamięci danych RAM, na której realizowany jest również stos, - programowane zabezpieczenia programu przed odczytem. wbudowane urządzenia peryferyjne: - dwa 8-bitowe liczniki-czasomierze z osobnym preskalerem (dzielnik częstotliwości podstawowej mikrokontrolera ) i trybem porównania,

- jeden 16-bitowy licznik-czasomierz z osobnym preskalerem, trybem porównania i przechwytywania, - licznik czasu rzeczywistego z osobnym oscylatorem, - cztery kanały PWM, - 8-kanałowy, 10-bitowy przetwornik A/C z multiplekserem, który wykorzystuje następujące wyprowadzenia: AVCC (zasilanie części analogowej), AREF (wejście napięcia odniesienia) oraz wejścia sygnałów analogowych oznaczone ADC0 do ADC7, - interfejs szeregowy SPI w trybie master/slave, pozwalający na łączenie jednego układu nadrzędnego z wieloma podrzędnymi, a ponadto dodatkowo pełni funkcję szeregowego interfejsu programowania; umożliwiającego programowanie mikrokontrolera w urządzeniu docelowym (ISP), przez bezpośrednie (lub przez zabezpieczający układ 74HC244) przyłączenie do portu drukarki LPT; modułowi SPI zostały przyporządkowane cztery wyprowadzenia o dodatkowych oznaczeniach: MOSI (ang. Master Out, Slave In), MISO (ang. Master In, Slave Out), SCK (ang. Serial Clock) i SS (ang. Slave Select), - programowany interfejs szeregowy USART, służący do łączenia mikrokontrolerów ze sobą, a po zastosowaniu zewnętrznych konwerterów do obsługi interfejsu RS-232 lub RS-485; układ USART w trybie asynchronicznym wykorzystuje dwie linie mikrokontrolera, oznaczone TxD (tor danych nadawanych) i RxD (tor danych odbieranych); w trybie synchronicznym dodatkowo wykorzystywana jest linia taktująca oznaczona XCK, - programowany układ watchdog z osobnym wbudowanym oscylatorem, - wbudowany komparator analogowy; któremu przyporządkowane są dwa wyprowadzenia o dodatkowych oznaczeniach AIN0 (wejście nieodwracające) i AIN1 (wejście odwracające). specjalne cechy mikrokontrolera: - wbudowany układ Reset i programowany detektor spadku napięcia zasilania, - wbudowany kalibrowany oscylator RC, - wewnętrzne i zewnętrzne źródła przerwań, - sześć trybów oszczędzania energii: Idle, ADC Noise Reduction, Power-save, Power-down, Standby, Extended Standby. wejścia/wyjścia oraz dostępne obudowy układu: - porty wejścia/wyjścia (oznaczone PA, PB, PC i PD), z maksymalnie ośmioma liniami każdy (do każdej przypisana jest funkcja alternatywna), 523

- dostępne wersje obudowy: DIP do montażu przewlekanego, TQFP, PLCC, QFN/MLF do montażu powierzchniowego. napięcie zasilania: - od 2,7 do 5,5 V dla ATmega16L, - od 4,5 do 5,5 V dla ATmega16. częstotliwość taktowania: - od 0 do 8 MHz dla ATmega16L, - od 0 do 16 MHz dla ATmega16. Rys. 12.4. Różne obudowy oraz rozkład wyprowadzeń układu ATmega16 (wraz z funkcjami alternatywnymi) [1] pobór prądu przy taktowaniu 1 MHz, zasilaniu 3 V, temperaturze 25 C (ATmega16L): - stan aktywny 1,1 ma, - tryb oszczędzania energii Idle 0,35 ma, - tryb oszczędzania energii Power-down poniżej 1 μa. Na rysunku 12.4 przedstawione zostały dostępne warianty obudów układu ATmega16. Zostały na nim zaznaczone główne oraz alternatywne (w nawiasach) funkcje poszczególnych wyprowadzeń mikrokontrolera. 524

12.3 Realizacja projektu Projekt urządzenia, które będzie wykorzystywało mikrokontroler, wymaga opracowania zarówno części sprzętowej, jaki i programu. W pierwszym etapie należy zaprojektować i uruchomić sprzęt, stosując zasady takie, jak przy projektowaniu układów cyfrowych o wysokim stopniu integracji. Możliwe jest również wykorzystanie gotowych zestawów uruchomieniowych (Rys. 12.5). Rys. 12.5. Przykładowy zestaw uruchomieniowy [2] Podczas programowania należy uwzględnić przede wszystkim ograniczenia sprzętowe wybranego mikrokontrolera. Ponadto program jest przygotowywany na innym procesorze, niż będzie wykonywany, bo najczęściej na komputerach osobistych. A zatem do tworzenia programów stosuje się oprogramowanie zewnętrzne (ang. Cross-software): asemblery, makroasemblery, kompilatory różnych języków programowania, konsolidatory. Asemblery mogą tworzyć postać relokowalną, co wymaga stosowania konsolidatora lub od razu postać wynikową. Przygotowane oprogramowanie nie jest często wolne od błędów. Aby móc je przetestować przed załadowaniem do urządzenia docelowego wykorzystuje się symulatory, które umożliwiają śledzenie wykonania programu z jednoczesną obserwacją, a nawet modyfikacją stanu rejestrów procesora, czy zawartości pamięci w trybie krokowym po odpowiednim 525

ustawieniu pułapek. Niekiedy symulator stanowi całość z edytorem kodu, asemblerem czy kompilatorem, dając kompleksowe środowisko programistyczne. Symulatory jednak nie umożliwiają najczęściej pracy programu w czasie rzeczywistym oraz symulacji układów współpracujących z mikrokontrolerem. Do tego celu należałoby zastosować emulatory. Programatory układów ATmega Wybrane jako przykładowe w niniejszym opracowaniu układy rodziny ATmega mogą być programowane: przy pomocy wyspecjalizowanego drogiego i skomplikowanego programatora wykorzystującego interfejs równoległy, bezpośrednio w urządzeniu, w którym mikrokontroler ma pracować przy wykorzystaniu: - interfejsu uruchomieniowego JTAG (ang. Joint Test Action Group), który pozwala nie tylko na zaprogramowanie pamięci programu i ustawienie bitów sterujących, ale również na śledzenie wykonywania programu i badanie stanu mikrokontrolera; wykrywa również brak połączenia z obwodem drukowanym; wykorzystywane są cztery wyprowadzenia mikrokontrolera o nazwach: TMS (ang. Test Mode Select), TCK (ang. Test ClocK), TDO (ang. Test Data Out) i TDI (ang. Test Data In), które muszą być odpowiednio połączone, - jednoprzewodowego interfejsu DebugWire, bazującego na wyprowadzeniu Reset mikrokontrolera, który jest prosty, ale nie pozwala na wykorzystanie zewnętrznych sygnałów zerujących interfejsu programowania SPI; ponieważ dokumentacja tego interfejsu nie jest dostępna można go wykorzystać jedynie z oryginalnym urządzeniem JTAGICE firmy Atmel. 12.4 Środowiska programistyczne Początkowo programowanie mikrokontrolerów odbywało się w oparciu o język programowania zwany asemblerem oparty na zbiorze instrukcji odpowiadających liście rozkazów maszynowych procesora, czyli w języku niskiego poziomu. Wykorzystanie tej metody zapewnia pełną kontrolę programisty nad zachowaniem układu, ale pisanie programów jest pracochłonne. Jednak dziś jest stosowane rzadko tylko do pisania fragmentów wymagających bardzo wysokiej wydajności lub przy ograniczonej pamięci programu. 526

Obecnie programy źródłowe są zapisywane jako ciąg symbolicznych instrukcji w językach wysokiego poziomu tworzonym przy użyciu wyspecjalizowanych edytorów i zapisywanych w postaci pliku ASCII. W przypadku mikrokontrolerów rodziny AVR wśród języków wysokiego poziomu dominują kompilatory języka Basic oraz języka C. Najbardziej rozpowszechnionym kompilatorem języka Basic jest środowisko BASCOM-AVR. Oprogramowanie to łączy funkcje edytora, kompilatora, symulatora i programatora. Głównym powodem popularności tego pakietu jest prostota użytkowania i relatywnie niska cena. Natomiast jedyną wadą bezpłatnej wersji demonstracyjnej jest jedynie ograniczenie długości generowanego kodu wynikowego do 4 kb. BASCOM jest wyposażony w rozbudowane funkcje biblioteczne, które uwalniają programistę od konieczności dokładnego poznawania wykorzystywanych w aplikacjach interfejsów i urządzeń peryferyjnych. Daje mało optymalny kod wynikowy zarówno pod względem objętości, jak i szybkości działania (bardziej optymalny kod generuje inny pakiet programistyczny FastAvr). BASCOM nie jest też wolny od błędów, a dla bardziej zaawansowanych programistów uciążliwe są jego ograniczenia. Jeżeli chodzi o C, to stworzono wiele kompilatorów tego języka dla mikrokontrolerów serii AVR. Wśród środowisk komercyjnych najbardziej popularne są CodeVisionAVR i ImageCraft ICCAVR. Znacznie droższym narzędziem o większych możliwościach jest pakiet IAR Embedded Workbench. Bezpłatnie dostępny jest kompilator znany pod nazwą AVR-GCC, wyposażony w niezbędne biblioteki standardowe. Dostępne są jego kody źródłowe, obszerna dokumentacja, a jego możliwości można uznać za zadawalające. Kompilator ten jest wykorzystywany w darmowym pakiecie WinAVR. Jest to zbiór programów dla Windows, które nie ustępują w zakresie funkcjonalności komercyjnym środowiskom programistycznym. Chociaż za jego podstawową wadę można uznać dość skomplikowaną obsługę, to najnowsze wersje oferują bardziej funkcjonalny interfejs użytkownika. Po zainstalowaniu pakiet nie wymaga już specjalnych procedur konfiguracyjnych, a wygodny edytor standardowo jest przystosowany do współpracy z kompilatorem. Początkujących może zrazić konieczność tworzenia dla każdego projektu pliku Makefile, czyli zbioru reguł, według których ma przebiegać kompilacja. Dostarczono więc program, który automatycznie edytuje ten plik według nastaw dokonywanych przy pomocy rozwijanego menu. Problemem bywa czasami wybór poziomu optymalizacji zbyt wysoki powoduje czasami usuwanie pozornie niepotrzebnych fragmentów programu. Pakiet WinAVR nie został wyposażony w biblioteki dla typowych interfejsów i urządzeń peryferyjnych, ale potrzebne pliki można znaleźć w Internecie i dołączyć samodzielnie. Bardzo ciekawa i godna polecenia 527

jest biblioteka RKLibAVR, której funkcje wzorowane są na ich odpowiednikach w pakiecie BASCOM-AVR. Dla układów AVR stworzono również kompilatory języków mniej popularnych, np. języka Pascal (AVRco) oraz Ada (AVR-Ada). Pomimo spójności i jasności tych języków, sensowność ich wykorzystania stoi jednak pod znakiem zapytania, głównie ze względu na ich małą popularność, słabą przenośność i trudny dostęp do dodatkowych bibliotek funkcji. 12.4.1 Środowisko programistyczne BASCOM-AVR Środowisko programistyczne BASCOM-AVR zostało stworzone do pracy pod kontrolą dowolnego systemu operacyjnego Windows 95, 98, 98SE, Me, NT, 2000 lub XP. Charakteryzuje się następującymi właściwościami: posiada edytor z wyróżnianiem składni i systemem pomocy kontekstowej, ułatwiającym pisanie programów, zawiera kompilator języka BASIC o składni zbliżonej do Microsoft Visual Basic i Quick Basic, który generuje szybki kod maszynowy, daje możliwość kompilacji programów dla każdego mikrokontrolera AVR, który posiada wewnętrzną pamięć danych, zawiera zintegrowany symulator oraz emulator terminala, zawiera zintegrowany programator ISP obsługujący większość popularnych układów programatorów. Środowisko BASCOM-AVR w wersji demo jest dostępne w Internecie na stronach firmy MCS Electronics. Domyślnym folderem podczas instalacji tego oprogramowania jest C:\Program Files\MCS Electronics\BASCOM-AVR. Ze względu na ograniczenia występujące w systemach Windows NT, 2000 i XP, do pracy ze środowiskiem BASCOM należy wykorzystywać konto użytkownika z uprawnieniami administratora. W przeciwnym razie niemożliwe będzie wykorzystanie wbudowanego programatora ISP. Do poprawnej pracy programu konieczne jest zainstalowanie w systemie drukarki. Przy jej braku wystarczy zainstalować sterownik dowolnej drukarki. Podstawy obsługi środowiska BASCOM-AVR Po uruchomieniu programu i otwarciu pliku poleceniem File/Open, okno będzie wyglądać tak, jak pokazano na rysunku 12.6. 528

Rys. 12.6. Główne okno programu BASCOM AVR z przykładowym programem W głównym oknie programu występują typowe elementy aplikacji systemu Windows (paski tytułu, menu, przycisków narzędziowych, a na dole stanu). Charakterystycznymi elementami interfejsu są: lista procedur i etykiet. Menu zawiera następujące grupy poleceń: File, które grupuje typowe polecenia operacji na plikach i drukowania, Edit, zawierającą operacje cofania, działania na zawartości schowka, wyszukiwania i zamiany łańcuchów znaków, ustawiania zakładek ułatwiających przemieszczanie kursora do wskazanych miejsc kodu, View sterującą wyświetlaniem paneli interfejsu, Program z poleceniami służącymi do sprawdzenia poprawności kodu i wyświetlania raportu o jego przebiegu, kompilacji programu, uruchomienia symulatora lub programatora przesyłającego kod do mikrokontrolera, Tools zawierającą dodatkowe narzędzią wspomagające programowanie, takie jak emulator terminala, program do projektowania własnych znaków wyświetlaczy LCD, program do tworzenia własnych bibliotek, zapis kodu w formacie RTF, konwerter plików BMP do formatu BGF, wykorzystywanego przez graficzne wyświetlacze LCD, analizator stosu, program testujący aplikacje wykorzystujące protokół TCP/IP, menadżer wtyczek rozszerzających możliwości programu, Options zawierającą polecenia umożliwiające zmianę konfiguracji pakietu BASCOM: kompilatora, emulatora, edytora kodu, symulatora, 529