Charakterystyka mikrokontrolerów 1. Historia powstania Pierwszym mikrokontrolerem (a nie mikroprocesorem) był wyprodukowany pod koniec roku 1972 przez Texas Instruments procesor TMS1000. Łączył on w sobie prosty 4-bitowy mikroprocesor, 1KB pamięci ROM i 32B pamięci RAM w jednym chipie. Układ był niedrogi i pokazał liczne zastosowania w systemach łączonych. 2. Co to jest mikrokontroler (skład, architektury) Jest to komputer jednoukładowy - pojedynczy układ scalony, w którego skład wchodzi mikroprocesor, pamięć RAM i pamięć programu oraz układy Wejścia/Wyjścia. Określenie mikrokontroler pochodzi od głównego obszaru zastosowań, jakim jest sterowanie urządzeniami elektronicznymi. Mikrokontroler stanowi użyteczny i całkowicie autonomiczny system mikroprocesorowy, który z reguły nie musi współpracować z układami zewnętrznymi. Wśród wbudowanych w mikrokontroler bloków funkcjonalnych można znaleźć: procesor (CPU), pamięć danych (RAM, EEPROM), programu (Flash, EPROM, EEPROM), kontrolery przerwań i układy peryferyjne takie jak: timery/liczniki, kontrolery transmisji równoległej lub szeregowej (UART, SPI, I2C, USB, CAN, 1-Wire itp.), przetworniki A/C lub C/A czy zegar czasu rzeczywistego RTC itp. ARCHITEKTURA VON NEUMANA Odznaczała się wspólną magistralą dla danych i instrukcji. Wszystko dostępne jest w jednej przestrzeni adresowej. Program wykonywalny może zmienić sam siebie jeżeli potraktuje obszar instrukcji jako dane, a po przetworzeniu zacząć je wykonywać. Architektura zastosowana w układach z rdzeniem ARM7. ARCHITEKTURA HARVARDZKA Była odpowiedzią na w.w. architekturę i w odróżnieniu od niej zakładała oddzielenie pamięci danych od pamięci rozkazów. Dodatkowo prostsza budowa gwarantuje lepszą wydajność. Zmodyfikowana architektura harwardzka, znana również jako architektura mieszana, łączy w sobie cechy architektury harwardzkiej i architektury von Neumanna. Oddzielone zostały pamięci danych i rozkazów, lecz wykorzystują one wspólne magistrale danych i adresową. Przykładem rodziny w architekturze Harvardzkiej są 8 bitowe układy AVR. Zmodyfikowana architektura Harvardzka obecna jest w układach z rdzeniem ARM9. 3. Pamięci W mikrokontrolerach możemy wyróżnić kilka podstawowych typów pamięci. W zależności od zastosowania określić możemy pamięć programu zawierająca kod programu, tablice stałych, wektor przerwań. Posiadamy również pamięć danych, która przechowuje zmienne oraz stos
przechowujący adres powrotny przy obsłudze przerwań i wybrane przez programistę wartości (najczęściej przy obsłudze podprogramów/funkcji). Ze względu na budowę i architekturę wyróżnić możemy pamięci: EPROM przechowujące dane, które po wyłączeniu zasilania nie mogą ulec skasowaniu. Pamięci EPROM dzielimy ze względu na możliwości zapisu na: OTP (One Time Programable) w obudowach bez okienka kwarcowego, przez co możliwe jest tylko jednokrotne zaprogramowanie pamięci, EPROM (Erasable Programable ROM) z możliwością kasowania zawartości promieniami ultrafioletowymi i wprowadzania nowej zawartości za pomocą zewnętrznego programatora. Pamięci EEPROM odróżnieniu od pamięci EPROM może być kasowana tylko przy użyciu prądu elektrycznego. Liczba zapisów i kasowań jest ograniczona, w zależności od typu i producenta pamięci wynosi do 100,000 cykli. W przypadku ROM (Read Only Memory) pogramowanie zawartości pamięci następuje w procesie produkcyjnym i nie może być przeprowadzone przez użytkownika. FLASH (Bulk Erasable Non-Volatile Memory) pozalają na kasowanie zawartości i programowanie bezpośrednio w systemie mikroprocesorowym. Są udoskonaleniem pamięci EEPROM, w których poprzez zastosowanie buforowania zwiększono szybkość zapisu do pamięci. Jest to pamięć nieulotna. SRAM (Static Random Access Memory) czyli statyczne pamięci RAM. Są to pamięci o krótkich czasach dostępu, prostsze w obsłudze przez jednostkę centralną, ale droższe. Jest to pamięć ulotna. FRAM (Ferroelectric RAM) pamięci ferroelektryczne, nieulotne pamięci, które są dopiero wprowadzane na rynek. Zaletami są bardzo mały pobór energii, wysoka szybkość działania i duża trwałość (nieograniczona liczba cykli zapisu/odczytu), wadą natomiast duży rozmiar komórki. Standardowo, współczesne mikrokontrolery wyposażone są w kilka do kilkudziesięciu kb pamięci RAM, od kilku kb do kilkuset kb pamięci programu Flash oraz opcjonalnie od kilkuset B do kilku kb pamięci EEPROM. 4. Urządzenia peryferyjne i obsługa przerwań UART/USART - (Universal A/Synchronous Receiver and Transmitter), układ scalony używany do a/synchronicznego przekazywania i odbierania informacji, konwersja pomiędzy szeregową a równoległą formą transmisji, używany powszechnie z takimi standardami jak RS-232, RS-422 or RS-485 (różnica pojawia się jedynie w poziomach logicznych sygnału). Format danych oraz prędkośc transmisji są konfigurowane programowo, poziom sygnalizacji elektrycznej jak i same metody sygnalizacji obsługiwane są przez specjalny
zewnętrzny obwód sterujący. Używany zwykle do komunikacji pomiędzy mikrokontrolerem, komputerem (przez port szeregowy) lub innym urządzeniem np. drugim mikrokontrolerem. Bajt pamięci rozkładany jest na pojedyńcze bity i przesyłany do odbiornika praca synchroniczna - kolejne bity są przesyłane w takt zegara sterującego transmisją, praca asynchroniczna, odbiornik USART wykrywa początek ramki transmisyjnej, a następnie próbkuje sygnał wejściowy przez ustalony przez obie strony czas trwania bitu. I2C - (Inter-Integrated Circuit: pośredniczący pomiędzy układami scalonymi) wynaleziona przez Philipsa szeregowa, dwukierunkowa magistrala służąca do przesyłania danych w urządzeniach elektronicznych, umozliwia podłączenie peryferiów o wolnej prędkości do mikrokontrolerów, płyt głównych, telefonów oraz innych urządzeń. dwie, dwukierunkowe linie (pull up): dane - SDA, zegar - SCl; typowe napięcia +5V/+3,3V, możliwość stosowanie innych, logika dodatnia 7bitowa przestrzeń adresowa, 112 węzłów komunikacji 16 adresów rezerwowych powszechne prędkości 110 kbps lub low mode 10kbps, dla systemów wbudowanych 400 kbit/s Fast mode, 1 Mbit/s Fast mode plus i 3.4 Mbit/s High Speed mode, rozrózniamy węzły: Master (rozprowadza sygnał zegara i adresuje slavy) i Slave w dowolnej ilości, mozliwa zmiana ról, SPI - (Serial Peripheral Interface Bus) opatentowany przez Motorole szeregowy interfejs urządzeń peryferyjnych jeden z najczęściej używanych interfejsów komunikacyjnych pomiędzy systemami mikroprocesorowymi a układami peryferyjnymi takimi jak: przetworniki ADC/DAC, pamięci EEPROM, pamięci flash, karty MMC/SD/ itp. komunikacja full-duplex pomiędzy masterem i slavami cztery linie sygnałowe SCLK: Serial Clock (output from master); MOSI; SIMO: Master Output, Slave Input (output from master); MISO; SOMI: Master Input, Slave Output (output from slave); SS: Slave Select (active low, output from master).
Timer/Counter - cyfrowy licznik zliczający w przód/tył z daną ustawioną częstotliwością, wyzwalający pożądaną akcję, przerywający prace procesora gdy osiągnie pożądaną wartość. Porty równoległe - wejścia/wyjścia ogólnego przeznaczenia do sterowania zazwyczaj diodami LED lub obsługi przycisków, zwykle istnieje możliwość włączenia wewnętrznych rezystorów podciągających. ADC/DAC - (analog/digital converter) układ służący do zamiany sygnału analogowego (ciągłego) na reprezentację cyfrową. Działanie przeciwne do wyżej wymienionego wykonuje przetwornik cyfrowo-analogowy (DAC). W mikrokontrolerach dostępnych jest zwykle kilka przerwań zewnętrznych wyzwalanych stanem lub zboczem oraz przerwania pochodzące od wbudowanych peryferiów. Dzięki temu możliwe jest podjęcie odpowiedniej akcji np. po zakończeniu konwersji ADC lub odebraniu znaku przez UART. W momencie wystąpienia przerwania procesor skacze do adresu podanego w tabeli, aby obsłużyć przerwanie, pod adresem tym powinien znajdować się skok w inne miejsce w pamięci, w którym znajduje się procedura obsługi przerwania. Powrót wykonywany jest za pomocą specjalnej instrukcji RETI, która dodatkowo włącza z powrotem przerwania. 5. Programowanie (ładowanie programu) i bity konfiguracyjne Szeregowe w systemie (w przypadku rodziny AVR) - programowanie pamięci Flash za pomocą interfejsu SPI, mikrokontroler programowany jest w działającym urządzeniu docelowym, jest to tzw. ISP (In System Programming), wymagane są 3 linie (MISO, MOSI, SCK) oraz Reset i zasilanie. Programowanie za pomocą bootloadera - dostępne tylko w układach, które same mają możliwość modyfikacji programu. Program może byc przesyłany szeregowo za pomocą interfejsu UART lub USB w zależności od implementacji. Istnieją systemy, w których mikrokontroler ma możliwośc aktualizacji własnego oprogramowani przez łącze bezprzewodowe np. ZigBee. Rówoległe - rzadko stosowane w praktyce ze względu na wygode, jest metodą ratunku w przypadku zablokowania programowania szeregowego (w rodzinie AVR), JTAG - interfejs początkowo wykorzystywany w produkcji do sprawadzania poprawności montażu układów scalonych, z czasem producenci zaczęli wykorzystywać go także do programowania i debugowania układów mikroprocesorowych oraz układów FPGA.
Program i zawartość pamięci EEPROM może być zabezpieczona przed nieuprawnionym odczytem. Dokonać tego można zapisując odpowiednie Lock Bity w momencie, gdy miktrokontroler jest w trybie programowania. Oprócz tego, można skonfigurować odpowiednio inne parametry pracy układu np. źródła sygnału zegarowego, ustawienia kalibracyjne, stan watchdoga, dostępność interfejsów do programowania itp., w zależności od stosowanego układu możliwości są różne. 6. Programowanie (tworzenie kodu) Zazwyczaj kod tworzony jest w języku C, wraz z ewentualnymi wstawkami w Asemblerze. Cechy: zwykle brak systemu operacyjnego, bezpośredni dostęp do sprzętu, mała wydajność, konieczna kontrola zależności czasowych.