Jak rozpocząć pracę z mikrokontrolerami? Dominik Nowak, Kraków 7.12.2011
Plan prezentacji 1. Przygotowanie narzędzi i środowiska programistycznego 2. Pierwszy projekt (cross target łatwiejszy w zarządzaniu) 3. Drugi projekt (makefile) 4. Dobre nawyki w czasie pisania kodu 5. Podsumowanie
1. Przygotowanie narzędzi i środowiska programistycznego a) Ściągnąć i zainstalować WinAVR: http://sourceforge.net/projects/winavr/files/winavr/20100110/winavr-20100110-install.exe/download WinAVR: Pakiet narzędzi do pisania oprogramowania na mikrokontrolery AVR Zawiera kompilator C oraz C++ Zawiera biblioteki
1. Przygotowanie narzędzi i środowiska programistycznego b) Ściągnąć oraz zaistalować JRE (Java Runtime Environment) lub JDK (Java Development Kit) ze strony: http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u1-download-513651.html
1. Przygotowanie narzędzi i środowiska programistycznego c) Ściągnij Eclipse IDE for C/C++ Developers, wersja co najmniej 3.3: http://www.eclipse.org/downloads/ Eclipse IDE: Jedno z najpopularniejszych środowisk programistycznych
1. Przygotowanie narzędzi i środowiska programistycznego d) Ściągnij Eclipse AVR plugin: Uruchom Eclipse Help/instal New Software Add... Name: AVR Eclipse Plugin Location: http://avr-eclipse.sourceforge.net/wiki/index.php/plugin_download Instalujemy...
1. Przygotowanie narzędzi i środowiska programistycznego Wybieramy programator, np.: USBASP Strona projektu (sterowniki!!!): http://www.fischl.de/usbasp/ Najtańsze z USB: 25zł
2. Pierwszy projekt Schemat układu:
2. Pierwszy projekt Wybieramy: New/C poject AVR Cross Target Application oraz AVR-GCC Tolchain Tworzymy nowy plik źródłowy main.c
2. Pierwszy projekt Włączamy generację pliku.hex Nazwa_projektu Properties C/C++ Build Settings Tool Settings i zaznaczamy opcję Generate HEX file for Flash memory
2. Pierwszy projekt Teraz należy wyklikać ustawienia dla programatora: Properties AVR AVR Dude Programmer New Wypełniamy jak obok OK Wybieramy stworzoną konfigurację i OK
2. Pierwszy projekt Programujemy...
2. Pierwszy projekt Ustawiamy Fuse bity Properties AVR AVR Dude Fuses direct hex values start editor
2. Pierwszy projekt Niektóre mikrokontrolery Atmega mają interfejs JTAG oraz fuse bit: OCDEN (On Chip Debug Enable), który po ustawieniu umożliwia debugowanie z okna Eclipse (Debug perspective). Można stawiać wówczas w kodzie breakpoint'y i podglądać zmienne. Debugowanie takie jest możliwe jedynie po interfejsie JTAG!
2. Pierwszy projekt W celu przyśpieszenia uruchamiania projektu warto stworzyć bibliotekę do wypisywania na terminal różnych komunikatów, stanów urządzenia i wartości zmiennych. Należy zaopatrzyć się w przejściówkę RS232/USB... Oraz wgrać program terminala, polecane są: Tera Term Bray Terminal
2. Pierwszy projekt Funkcja uruchamiająca port szeregowy (Atmega 88)
2. Pierwszy projekt Funkcja wysyłająca paczkę danych:
2. Pierwszy projekt Funkcja do wysyłania napisów w kodzie ASCII na terminal
3. Drugi projekt - makefile Zakładamy nowy projekt w Eclipse: File/new/C project Wybieramy Makefile project i AVR-GCC Toolchain Wpisujemy nazwę, np.: avr_test Finish
3. Drugi projekt - makefile Do czego służy makefile? Wykorzystywany jest przez narzędzie make. Służy do zarządzania projektem składającym się z wielu plików źródłowych oraz zawiera m.in. instrukcje dla kompilatora i programatora. Obecnie odchodzi się od ręcznego rozwijania plików makefile na rzecz rozwiązania zaprezentowanego w pierwszym projekcie. Projekty z plikami Makefile są jednak nadal przydatne w przypadku uruchamiania np. kodu ściągniętego z sieci.
3. Drugi projekt - makefile Zdobywamy przykładowego makefile'a, którego będziemy edytować: W katalogu w którym zainstalowano WinAVR (domyślne C:\WinAVR-20100110) wchodzimy do folderu sample Przeciągamy plik Makefile z folderu sample do wcześniej założonego projektu W ukazującym się oknie wybieramy opcję Copy files i potwierdzamy przyciskiem OK
3. Drugi projekt - makefile Klikamy prawym przyciskiem myszy na nazwę projektu w lewym pasku: #include <avr/io.h> Wybieramy: new/source File { int main(void) DDRC = 0x3F; Wpisujemy nazwę: PORTC = 0x2A; main.c i wpisujemy to co na rysunku obok while(1){;} return 0; }
3. Drugi projekt - makefile Skąd kompilator wie co to DDRC? Plik (dla atmega8): avr/include/avr/iom8.h #define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr) + SFR_OFFSET) #define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr)) Czyli DDRC to wskaźnik na rejestr pod adresem 0x14, będący zmienną typu uint8_t
3. Drugi projekt - makefile Na prawym pasku wybieramy zakładkę Make Target Klikamy na nazwę projektu, wybieramy new i wypełniamy To samo dla clean oraz program
3. Drugi projekt - makefile Próbna kompilacja
3. Drugi projekt - makefile Modyfikacja pliku makefile: MCU = atmega8 F_CPU = 8000000 Powtórne wykonanie make all Podłączamy programator (PORT SPI) Klikamy make program...
3. Drugi projekt - makefile
4. Dobre nawyki w czasie pisania kodu Organizacja plików i modyfikacja pliku Makefile np. dodajemy bibliotekę obsługującą wyświetlacz LCD: Grupujemy pliki spełniające podobne funkcje w folderach Dodanie każdego nowego pliku do projektu wymaga modyfikacji pliku Makefile wg wzoru (dotyczy tylko podejścia z drugiego projektu!):
4. Dobre nawyki w czasie pisania kodu LCD_LIB_PATH =./lcd... SRC = $(TARGET).c SRC += $(addprefix $ (LCD_LIB_PATH)/, lcd_lib.c)... EXTRAINCDIRS = $(LCD_LIB_PATH)
4. Dobre nawyki w czasie pisania kodu Stworzenie pliku zawierającego definicje przyporządkowujące porty i piny do spełnianych przez nie funkcji lepsza przenośność kodu
5. Podsumowanie W prezentacji omówiono następujące zagadnienia: Przygotowanie i instalacja narzędzi Praca w środowisku programistycznym Eclpise Zakładanie i rozwijanie projektów Modyfikacja pliku Makefile Podstawy debugowania Dobre nawyki projektowe
Dziękuję za uwagę! Dominik Nowak, Kraków 7.12.2011