Mikrokontroler Platforma Systemy Wbudowane IDE:, AVR mgr inż. Marek Wilkus Wydział Inżynierii Metali i Informatyki Przemysłowej AGH Kraków Mikrokontroler AVR Uno Środowisko Terminal Uruchamianie http://home.agh.edu.pl/~mwilkus 1 C: i inne urządzenia: Podstawowe techniki programowania mikrokontrolerów, Budowa programu, Sterowanie wyjściami, Wejścia/wyjścia cyfrowe podłączenie urządzeń zewnętrznych, Urządzenia wewnętrzne, Komunikacja, Przerwania. Rozszerzanie wejść/wyjść, Sterowanie urządzeniami, Multipleksowanie, Port szeregowy, Konwersja protokołów. 3 Oprogramowanie Mikrokontroler IDE: System mikroprocesorowy w postaci jednego układu scalonego. Zintegrowane: http://www.arduino.cc Fritzing: http://fritzing.org KiCAD: http://www.kicad-pcb.org WinAVR: http://winavr.sourceforge.net/ CPU RAM Pamięć programu Urządzenia I/O Dodatkowe urządzenia Użycie jednego układu: oszczędność miejsca, energii, łatwa rozbudowa i programowanie systemu. UnoArduSim: 4 https://www.sites.google.com/site/unoardusim/ 5 6
1970... Uniwersalne bloki sterujące. Jeden moduł, cechy późniejszych mikrokontrolerów. 1971 Texas Instruments TMS1000 Pierwszy mikrokontroler Wewnętrzne źródło częstotliwości Programowanie: Mask-ROM Bardzo wysokie ceny 1976 Intel 8048 (MCS-48): Programowanie jak EPROM 1kB ROM 18B RAM Początek serii MCS-48 Programowanie: lub Mask-ROM. i późniejszych 51. 7 1975-85 PIC: Układ hybrydowy, Łatwe programowanie, także in-system, Programowanie w BASIC. Wciąż produkowane. Programowanie jak EPROM, 1993 Pamięć EEPROM. Różnorodność modeli. Programowanie: Assembler C Komercyjne narzędzia. Wciąż rozwijane. 9 Platforma programistyczna dla systemów wbudowanych. Open Hardware (z wyjątkami). Pojedynczy moduł. Mikrokontroler AVR. Wbudowany interfejs mikrokontroler-komputer. Programowanie: Głównie C. Środowisko: IDE. Duża pamięć programu (4-51kB) Wiele urządzeń wewnętrznych Różnorodność modeli: od ATTiny do AVR3 Pamięć Flash dla programu Pamięć Flash dla użytkownika Niska cena Łatwe programowanie: 10 1995-97 Atmel AVR: 8 198x - BASIC Stamp miniaturyzacja, niska cena, łatwe zastosowania hobbystyczne. Assembler Assembler Basic (BASCOM) C Obecność platform np.. Otwarte narzędzia deweloperskie. Wciąż rozwijane. 11 1
Uno AVR Mikrokontroler: AVR ATMega38 16MHz. 3kB pamięci Flash na program (31kB dostępne - bootloader) kb RAM 1kB EEPROM GPIO: 14 pinów (6 PWM) 6 wejść analogowych Interfejs : USB-RS3. Programowanie przez USB. Zasilanie: 5V, własna stabilizacja. 8-bitowy, jednoukładowy mikrokontroler RISC. Pamięć programu: Flash, Pamięć operacyjna: Statyczny RAM, Dodatkowa pamięć Flash dla programów użytkownika, Wyprowadzenia wielofunkcyjne, Wbudowane interfejsy i przetworniki, BOR, WDT, Możliwość pracy z wewnętrznym oscylatorem, Programowanie ISP (In-System Programming), 13 14 AVR: Co otrzymujemy? 1 6 6 AVR: Co możemy podłączyć? timery 8-bitowe timer 16-bitowy liczniki kanałów PWM kanałów ADC, 10-bitowe przerwania z GPIO 3 8-bitowe porty GPIO, 6 kanałów PWM, USART, także z własnym timingiem, Wejścia ADC, Wejścia zliczające, Wejścia komparatora analogowego, SPI, IC, JTAG debugowanie. 15 16 C Informacje Noty katalogowe i instrukcje: Eliminuje konieczność ustawiania wbudowanych urządzeń przez konfigurację rejestrów sterujących. Ułatwia budowę programu. Znacznie przyspiesza testowanie i prototypowanie. Zabezpiecza przed problemami z konfiguracją wstępną (Fuse-bity). http://www.atmel.com http://www.atmel.com/devices/atmega38.aspx : http://www.arduino.cc/ http://arduino.cc/en/reference/ http://ep.com.pl - Kurs (PL) Niższa niż w przypadku czystego C wydajność i większy rozmiar kodu. Toleruje techniki marnujące pamięć operacyjną. Podręczniki: 17 Monk S. - dla początkujących Podstawy i szkice Helion 014. Evans B. - Beginning programming - Apress 011. 18
Informacje Manual Co jest niezbędne? Uno Parametry układu: Czy układ będzie spełniał zadanie w projekcie? Warunki pracy układu: Zasilanie. Moc wyjściowa. Warunki środowiskowe. Wydajność. Czy parametry używanych urządzeń są wystarczające? Programowanie: Mapa rejestrów i praca z urządzeniami. 19 0 Projekt na IDE programowanie. 1. Jakie urządzenia mają być obsługiwane? Wejście Wyjście Debug Sprawdzenie kodu. Czy urządzenia wymagają specjalnego sterowania? Jakiego? (: max 0mA/pin) 3. Projekt konstrukcji. 4. 5. 6. 7. Załadowanie do Monitor portu terminal Nowy plik Nie stosować danych binarnych!! Otwórz/zapisz Założenia programu, podstawowe parametry I/O, urządzeń, definicje I/O. Konstrukcja. Program weryfikujący konstrukcję. Właściwy program. Testowanie, poprawki. Informacje kompilatora 1 Użyty wirtualny port szeregowy Podstawowe techniki Podstawowe techniki Dyrektywa preprocesora #define: volatile nie buforuje zmiennej w rejestrach: volatile int stan; #define nazwa wartość Podczas kompilacji wystąpienia nazwy zostaną zastąpione wartością. Np. Zamieni występowanie ledpin na 13. W przypadku zmiany konstrukcji zmiana jednej linii kodu. 3 Gdy zmienna ta zostanie zmieniona poza programem (np. w trakcje procedury przerwania) zostanie użyta jej aktualna wartość. 4
Podstawowe typy danych Budowa programu boolean wartość logiczna (prawda/fałsz), zajmuje 1 bajt danych. char, unsigned char = byte (0..55). int, unsigned int = word (0..^16-1). Zmiennoprzecinkowe: float (4B), double (8B). string jako tablica char'ów. #define ledpin 13 5 6 Budowa programu #define ledpin LED Wymagany rezystor obniżający prąd. Vcc=5V Typowy LED 3mm: IF=0mA, VF=V 13 void main() setup(); while(1) loop(); serialevent(); R= Vcc-VF IF (5-) / 0.0 = 150 Ω 7 8 Zmienne i funkcje Zmienne i funkcje, wejścia unsigned int #define resetpin 11 unsigned int k = 0; if (!digitalread(resetpin)) delay(100); 9 30
Zmienne i funkcje, wejścia #define resetpin 11 if (!digitalread(resetpin)) delay(100); unsigned int k = 0; #define resetpin 11 unsigned int k = 0; Zmienne i funkcje, wejścia HIGH LOW if (!digitalread(resetpin)) delay(100); 31 3 Przerwania #define resetpin volatile unsigned int void reset() Przerwania #define resetpin volatile unsigned int void reset() attachinterrupt(0,reset,low); attachinterrupt(0,reset,low); Przerwanie Pin 0 1 3 delay(); Serial.Read()...! 33 34 Port szeregowy komunikacja Port szeregowy komunikacja Serial.begin(9600); Serial.begin(9600); Serial.print("TO JEST TEST\n"); Serial.print("TO JEST TEST\n"); unsigned int k = 111; unsigned int k = 111; Serial.println(k); Serial.println(k,DEC); Serial.println(k,HEX); Serial.println(k,BIN); Serial.Write(k); Serial.println(k); Serial.println(k,DEC); Serial.println(k,HEX); Serial.println(k,BIN); TO JEST TEST 111 111 6F 11001111 O Koniec. Serial.Write(k); Serial.println( /nkoniec. ); 35 Serial.println( /nkoniec. ); 36
Port szeregowy komunikacja Odbieranie danych: Port szeregowy komunikacja Odbieranie danych: Tryb automatyczny: char bajt=0; if (Serial.available() > 0) bajt = Serial.read(); Serial.print("Bajt: "); Serial.println(bajt, DEC); char bajt=0; if (Serial.available() > 0) bajt = Serial.read(); Serial.print("Bajt: "); Serial.println(bajt, DEC); void serialevent()... 37 Dziękuję. 39 Tryb automatyczny: void serialevent()... To NIE jest przerwanie!!! 38