Język C Wykład 9: Mikrokontrolery cz.1 Łukasz Gaweł Chemia C pokój 307 lukasz.gawel@pg.edu.pl
Trochę teorii..
Mikrokontroler (dawniej mikrokomputer jednoukładowy) jest to układ scalony z wyspecjalizowanym mikroprocesorem (CPU) zdolny do autonomicznej pracy w systemach kontrolno-pomiarowych. Posiada własną pamięć (RAM), pamięć programu (FRAM, MRAM, ROM, Flash) oraz układ do komunikacji z otoczeniem. Zastosowanie: Sprzęty gospodarstwa domowego; Motoryzacja; Aparaty fotograficzne; Rejestratory danych pomiarowych; Układy automatyki; Sprzęt medyczny, telekomunikacyjny itd..; I dużo, dużo więcej
Najważniejsi producenci mikrokontrolerów Atmel- AVR, ATTiny, ATmega32 Philips- ARM Microchip Technology- PIC ST Microelectronics- ST(X), np. ST6 Hitachi- Renesas Intel
Architektura mikrokontrolera Szerokość szyny danych (32-bit, 16-bit, 8-bit) określa liczbę linii danych (równolegle przesyłanych bitów), natomiast częstotliwość- maksymalną szybkość transmisji danych (CPU) Realizuje ciąg rozkazów zapisanych w pamięci programu, na danych pochodzących z pamięci bądź urządzeń peryferyjnych Służy do przekazywania adresów fizycznych z których CPU wykonuje odczyty i zapisy danych Służy do przekazywania sygnałów z CPU, jaki rodzaj operacji ma wykonać układ współpracujący (pamięć i peryferia) Pełka R., Mikrokontrolery architektura, programowanie, zastosowania
Jednostka centralna (procesor rdzeniowy) cechy: Synchroniczność- wszystkie operacje wykonywane w rytm sygnału zegarowego, Sekwencyjność- stan wyjść zależy nie tylko od stanu wejść, lecz również poprzednich stanów tego układu, Posiada własną pamięć- do przechowywania argumentów rozkazów niezbędnych do wykonania na nich określonych operacji. W zależności od typu, mikrokontroler wyposażony jest w różne typy wbudowanej pamięci wewnętrznej: pamięć RAM (ang. Random Access Memory) pamięć ROM (ang. Read-Only Memory) pamięć EPROM (ang. Erasable Programmable ROM) pamięć OTP (ang. One Time Programmable) pamięć EEPROM (ang. Electrically Erasable PROM) pamięć FLASH (ang. bulk erasable non-volatile memory)
Najważniejsze przykładowe informacje z kart charakterystyki mikrokontrolera (ATmega8): CPU: 8-bitowy RISC FLASH: 8K, programowalna, nieulotna pamięć programu SRAM: 1K, zmienne, stos, itp. EEPROM: 0.5K, nieulotna Timer/licznik/PWM x3 10-bit ADC x6, Analog Comparator SPI, USART, TWI 23 programowalne cyfrowe linie IO 19 przerwań sprzętowych (w tym 2 zewnętrzne) ISP: proste programowanie Zegar: max 16 MHz - prawie 16 mln instrukcji/s Wewnętrzny zegar 1-8 MHz
Mikrokontrolery- porty wejść/wyjść Port mikrokontrolera- zbiór nóżek mikroprocesora, gdzie każda odpowiada jednemu bitowi w rejestrze sterującym, dzięki czemu jesteśmy w stanie sterować podłączonymi komponentami W zależności od wpisów w rejestrze sterującym może pełnić funkcję: Sterującą- gdy jest skonfigurowany jako wyjście Zbierającą dane- gdy jest skonfigurowany jako wejście Odcinającą- gdy jest skonfigurowany jako wejście o wysokiej impedancji Domyślnie każda nóżka jest skonfigurowana jako wejście! Najczęściej występują porty A-D *W celu zdefiniowania właściwości portów zawsze należy sięgnąć po dokumentację techniczną mikrokontrolera! Mogą one różnić się parametrami (np. obciążenie prądowe oraz funkcje specjalistyczne)!
Mikrokontrolery- porty wejść/wyjść Opis nóżek mikrokontrolera (w uproszczeniu): PB0- PB7, PC0- PC4, PD0-PD7- porty wejścia/wyjścia z możliwością dołączania rezystorów Ponadto: Zasilające (VCC- plus, GND-masa- minus) Zerujące (domyślnie- stan wysoki 1) Podłączenia z programatorem *W celu zdefiniowania właściwości portów zawsze należy sięgnąć po dokumentację techniczną mikrokontrolera! Mogą one różnić się parametrami (np. obciążenie prądowe oraz funkcje specjalistyczne)!
Mikrokontrolery- porty wejść/wyjść Rejestry sterujące: DDRx- rejestr określający kierunek przesyłania danych (1-wyjście, 0-wyjście) x- numer pinu od 0 do 7 (przy 8-pinowych mikrokontrolerach) PORTx- rejestr danych portu- zawiera wartość wystawianą na port (1- stan wysoki, 0- stan niski) PINx- rejestr wejściowy portu (pozwala odczytać wartość na określonym pinie)
Co niezbędne do rozpoczęcia pracy z μc? Zaprojektowanie schematu! Mikrokontroler (koszt rzędu kilkunastu zł) Płytka stykowa lub zestaw uruchomieniowy Elementy elektroniczne, którymi chcemy sterować Programator (wykonany samodzielnie, bądź zakup za kilkadziesiąt zł) Komputer z niezbędnym oprogramowaniem (darmowym!)
Przykładowy schemat podłączeń mikrokontrolera ATmega8 (minimum) Wykorzystany schemat pochodzi ze strony: http://mikrokontrolery.blogspot.com
Programator Zawsze można programator zbudować samodzielnie, w internecie jest mnóstwo dostępnych schematów
Programator Najpopularniejszym złączem wykorzystywanym przez programatory do komunikacji z mikrokontrolerami (patrz żółte kropki na schemacie mikrokontrolera) jest złącze KANDA
Języki programowania mikrokontrolerów Język C- uniwersalny, prosty w obsłudze, popularny, dobra optymalizacja, darmowe środowiska programistyczne i kompilatory, największa baza gotowych programów, Assembler- trudny w opanowaniu, skomplikowany kod źródłowy dla nawet prostych operacji, niezwykle przydatny gdy chodzi o optymalizację pamięci zużywanej przez program, Bascom- mniej popularny, ograniczony jedynie do mikrokontrolerów AVR, do obsługi prostych projektów, płatne środowisko pracy, wolniejszy niż dwa powyższe, mikroc, mikrobasic, mikropascal- płatne, coraz mniej popularne.
Środowiska programistyczne ATMEL Studio- oryginalne, wielofunkcyjne stanowisko do programowania w języku Assembler oraz C/C++, obsługuje rodzinę mikrokontrolerów AVR, ARM, można symulować działanie mikrokontrolera WinAVR + kompilator C (gnu gcc*)- pakiet narzędzi niezbędnych do pracy z mikrokontrolerami, nieco starsze, większa gama mikrokontrolerów, lżejszy niż powyższy Mniej popularne: AVR Studio, PonyProg2000 * Dla dociekliwych parametry gnu gcc: http://gcc.gnu.org/onlinedocs/gcc-4.2.3/gcc/
Kompilator języka C dla platformy AVR Najpopularniejszy zestaw narzędzi dla tej platformy bazuje na porcie kompilatora gcc: avr-gcc i dla systemu Windows nosi nazwę WinAVR http://winavr.sourceforge.net/ W skład pakietu wchodzi: kompilator C/C++, zestaw plików nagłówkowych dla wszystkich mikrokontrolerów AVR, program make, powłoka bash wraz z podstawowymi narzędziami, edytor Programmer s Notepad 2, program AVRdude* do programowania pamięci mikrokontrolerów *AVR Downloader/Uploader
Środowiska obsługujące programatory AVRDude- mało przyjazny użytkownikowi, należy wprowadzać komendy z poziomu wiersza poleceń, jednakże są dostępne nakładki, dzięki którym wgrywanie programów staje się czytelniejsze MkAvrCalculator- czytelny, łatwy sposób sprawdzenia połączenia pomiędzy mikrokontrolerem a PC, obsługuje różne typy programatorów stk500v1-2, USBasp itp., wersja darmowa ograniczona do najpopularniejszych mikrokontrolerów, prosty sposób odczytu i zapisu programów z i do mikrokontrolera inne
Edytory Programmers Notepad- zawarty w pakiecie WinAVR, posiada wgrane niezbędne dane do kompilowania programów przeznaczonych do mikrokontrolerów, oraz do współpracy z programatorem Każdy inny przeznaczony do języka C Bardziej zaawansowane narzędzia: AVR Studio Eclipse CDT Visual Studio Express
Pierwsze kroki
Na początek schemat Włącznik Układ, którym będziemy sterować Programator Niezbędne minimalne połączenia, by mikrokontroler pracował prawidłowo Wykorzystany schemat pochodzi ze strony: http://mikrokontrolery.blogspot.com
Połączenie w rzeczywistości
MkAvrCalculator Sprawdzenie poprawnego podłączenia programatora i mikrokontrolera Wybór użytego programatora Wybór użytego portu programatora Sprawdzenie podłączonego μc Wyświetla nazwę i sygnaturę podłączonego μc
MkAvrCalculator- błędy nowicjusza Prawdopodobnie błąd sterownika programatora Prawdopodobnie błąd podłączenia do złych pinów Niewłaściwy dobór programatora
Pierwszy program (omówienie niektórych komend) Częstotliwość zegara procesora μc (należy sprawdzić z kartą techniczną μc) Dodaje plik nagłówkowy zawierający deklaracje rejestrów IO. Zapewnia komunikację μc z urządzeniami Definiuje porty użyte do komunikacji z urządzeniami zewnętrznymi Ustawia port PB0 oraz PB1 jako port wyjściowy Ustawia stan wysoki na wyjściu sterującym PB0 (dioda się nie świeci) Wykorzystano edytor Programmers Notepad
I to wszystko? Wystarczy skompilować i gotowe? Mikrokontroler już steruje układem? Niestety nie
Konfiguracja kompilatora (pliku Make) By móc skompilować wcześniej napisany program, należy zmodyfikować plik kompilatora Make, a następnie umieścić ten plik w tym samym folderze, co plik z napisanym programem Plik kompilatora edytujemy za pomocą programu mfile (z pakietu WinAVR)
Konfiguracja pliku Make- podstawowe zmiany Zmiana nazwy pliku make
Konfiguracja pliku Make- podstawowe zmiany Zmiana nazwy pliku make Wybór typu mikrokontrolera
Konfiguracja pliku Make- podstawowe zmiany Zmiana nazwy pliku make Wybór typu mikrokontrolera Rodzaj używanego programatora Uwaga! Brak programatora USBasp w liście rozwijanej*
Konfiguracja pliku Make- podstawowe zmiany Zmiana nazwy pliku make Wybór typu mikrokontrolera Rodzaj używanego programatora Uwaga! Brak programatora USBasp w liście rozwijanej* Typ portu do którego podłączony jest programator Zmiana możliwości edycji pliku make w oknie dialogowym (bez zaznaczenia tej edycji nie jesteśmy w stanie go samodzielnie edytować)
Konfiguracja pliku Make- podstawowe zmiany Rodzaj używanego programatora Uwaga! Brak programatora USBasp w liście rozwijanej* By zmienić typ programatora na USBasp Należy w oknie dialogowym odszukać ścieżkę AVRDUDE_PROGRAMMER i wpisać ręcznie USBasp Tak skonfigurowany plik Make zapisujemy w folderze zawierającym wcześniej napisany program. Jeżeli używamy tego samego programatora i mikrokontrolera, można ten plik powielać
Kompilacja programu W celu kompilacji utworzonego programu w programie Programmers Notepad korzystamy z funkcji Po czym otrzymujemy stosowny komunikat o powodzeniu kompilacji W efekcie zostały utworzone: main.hex binarny kod programu, który zostanie załadowany do mikrokontrolera main.elf program wraz z informacjami dla debuggera main.lss skompilowany program w wersji czytelnej (assembler)
Wprowadzenie programu do mikrokontrolera W tym celu należy posłużyć się również Programmers Notepad Po pozytywnym zaprogramowaniu mikrokontrolera otrzymamy odpowiedź
Pierwsze problemy jakie można napotkać Problem ze sterownikami programatora- tyczy się to głównie starszych programatorów, dla których nie ma wersji sterowników dla wersji 64- bit (niestety czasami tyczy się to również nowszych programatorów). W tym przypadku nie ma możliwości wykorzystania i wykrycia μc. Problem z niewłaściwym podpięciem programatora do mikrokontrolera- wystarczy podpiąć jeden niewłaściwy pin, byśmy nie mogli połączyć się z μc, zatem uwaga jest bardzo ważna! Nauka podstawowych wejść/wyjść jest niezbędna Niewłaściwy wybór programatora, bądź rodzaju mikrokontrolera w Mfile! Będzie skutkować niepoprawną próbą zaprogramowania Błędy programowe, ukierunkowanie niewłaściwych portów Większość rozwiązań można znaleźć na forach dyskusyjnych
Przydatne książki oraz linki Francuz T., Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji, wyd. Helion Kardaś M. Mikrokontrolery AVR Język C Podstawy programowania wyd. II, wyd. obsługa Eclipse http://ktc.wieik.pk.edu.pl/kurs_avr/avr_programowanie.pdf - ogólnodostępny pdf opisujący funkcje AVRDude oraz modułów wykorzystywanych przy funkcji #include http://forum.atnel.pl forum firmy ATNEL, dostawcy m.in. USB- AspCable i MkAVRCalculator, liczne rozwiązania problemów, dostępne gotowe programy etc. https://www.forbot.pl/ - kolejne forum o tematyce robotyki Liczne kursy online, które pozwolą wam zacząć przygodę z μc: http://mikrokontrolery.blogspot.com http://mirekk36.blogspot.com/p/spis-tresci.html