Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska AMiW ATmega i Arduino Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Mikrokontrolery AVR AVR – ang. Advanced Virtual RISC Twórcami są Alf Egil Bogen, Vegard Wollan RISC Architektura AVR została opracowana przez dwóch studentów w Norweskim Instytucie Technologii (NTH) a następnie dopracowana i rozwinięta w Atmel Norway, siostrzanej firmie Atmel Podział architektur RISC (ang. Reduced Instruction Set Computer) CISC (ang. Complex Instruction Set Computer) AVR mikrokontroler – architektura RISC – złożone instrukcje realizowane są przy pomocy zestawu prostych Pojedynczy cykl zewnętrznego zegara dla podstawowych instrukcji 32 rejestry robocze – wszystkie rejestry są bezpośrednio połączone z ALU 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Architektura AVR RISC Pojedynczy cykl instrukcji: 8 MHz = 8 MIPS Duża liczba rejestrów ogólnego przeznaczenia (32) Każdy rejestr akumulatorem 3 pary rejestrów indeksowych Rejestry i IO są mapowane w pamięci SRAM 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR The AVR is a Harvard architecture CPU Architektura Harwardzka (ang. Harvard Architecture) Architektura komputerowa, która fizycznie wykorzystuje oddzielne magistrale dla instrukcji i danych CPU może czytać instrukcje i dane w tym samym czasie i tym samym przyspiesza operacje wykonywania kodu Architektura von Neumanna (ang. Von Neumann Architecture) CPU może czytać z pamięci instrukcje lub dane sekwencyjnie - wspólna magistrala 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Architektura Harwardzka 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR On Chip Debugger Two Wire Interface 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Port 01-2014 Zygmunt Kubiak
Konfiguracja wejścia Mikrokontrolery AVR DDRx = 0 PINx 01-2014 Zygmunt Kubiak
Konfiguracja wejścia z pullup Mikrokontrolery AVR Konfiguracja wejścia z pullup DDRx = 0 ATmega328 VZ= +5V PORTx=1 Arduino: digitalWrite(SW, HIGH); pinMode(SW, INPUT_PULLUP); PINx 01-2014 Zygmunt Kubiak
Konfiguracja wyjścia Mikrokontrolery AVR DDRx = 1 PORTx 01-2014 Zygmunt Kubiak
PWM - ang. Pulse With Modulation Mikrokontrolery AVR PWM - ang. Pulse With Modulation 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Arduino Powstało w 2005 r. w Instytucie Projektowania Interakcji we włoskim mieście Ivrea – projekt stworzyli Massimo Banzi z instytutu w Ivrea oraz David Cuartielles z uniwersytetu wMalmö w Szwecji Opracowali mikrosterownik z myślą o projektach studentów sztuki i projektowania. Główne założenia to niska cena i łatwa w użyciu platforma David Mellis, student profesora Banziego, stworzył oprogramowanie Nazwa Arduino – na pamiątkę lokalnego baru w Ivrea, chętnie odwiedzanego przez kadrę i studentów instytutu 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Arduino Jedna z pierwszych wersji – Arduino Diecimila („dzięsięć tysięcy” po włosku) 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Arduino Nowsza wersja, jedna z najbardziej popularnych – Arduino Duemilanove („dwa tysiące dziewięć” po włosku) Oferuje automatyczne przełączanie źródła zasilania pomiędzy portem USB a zasilaniem zewnętrznym 13 „pinów” cyfrowych wejść/ wyjść, w tym 6 PWM dla realizacji analogowych wyjść 6 „pinów” wejść analogowych Interfejs USB – realizacja transmisji asynchronicznej oraz ładowanie i uruchamianie programu Do lutego 2009 r. mikrokontroler ATmega168, później ATmega328 16 kB lub 32 kB dla programu oraz 1 kB lub 2 kB dla danych Arduino bootloader 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Arduino Nowsza wersja, jedna z najbardziej popularnych – Arduino Duemilanove („dwa tysiące dziewięć” po włosku) 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Arduino Arduino Lily 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Arduino Arduino Mega 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Arduino Arduino Nano 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Arduino Arduino Mini 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Arduino Arduino Due 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Arduino Aktualnie, najbardziej popularna wersja – Arduino Uno („jeden” po włosku) 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Arduino Aktualnie, najbardziej popularna wersja – Arduino Uno („jeden” po włosku) 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Arduino Arduino Uno z nakładką Ethernet 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Arduino Najnowsze opracowanie Uno – Arduino Uno R3 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Arduino Najnowsze opracowanie Uno – Arduino Uno R3 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Arduino Uno Mikrokontroler Atmega328 14 cyfrowych wejść / wyjść 6 wyjść może być używanych jako wyjścia PWM 6 wejść analogowych Rezonator kwarcowy 16 MHz W Uno, zamiast FTDI (interfejs USB stosowany we wcześniejszych wersjach Arduino) zastosowano mikrokontroler ATmega16U2 (w wersji R2 ATmega8U2) R2 zawiera rezystor podciągający linię HBW (ATmega8U2) do masy co ułatwia tryb DFU (ang. Device Firmware Update – spec. prot. USB) 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Arduino Uno Najnowsze opracowanie – Arduino Uno R3 R3 – dodano piny SDA i SCL, które są blisko AREF i dwa nowe piny umieszczone blisko IOREF co upraszcza ekranowanie sygnałów magistrali. W umożliwi to współpracę z nakładkami zasilanymi z 5V i 3,3V R3 – sprawniejszy RESET R3 – powrót do ATmega16U2 jako interfejsu USB R3 – zalecane napięcie zasilania 7 – 12 V (limit 6 – 20 V) Pamięć Flash – 32 KB (0,5 KB) Pamięć SRAM – 2 KB Pamięć EEPROM – 1 KB 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Arduino Uno ATmega 168/328 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Język referencyjny Programy Arduino można podzielić na trzy główne części: struktury, wartości (zmienne i stałe) oraz funkcje Struktura setup () loop () Struktury sterowania if if … else for switch case while do … while break continue return goto 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Struktura Dalsza składnia ; (średnik) {} (nawiasy klamrowe) // (komentarz w jednej linii) /*/ (komentarz wieloliniowy) #define #include Operatory arytmetyczne = (operator przypisania) + (dodawanie) - (odejmowanie) * (mnożenie) / (dzielenie) % (modulo) 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Struktura Operatory porównania == (równy) != (różny) < (mniejszy) > (mnożenie) <= (mniejszy lub równy) >= (większy lub równy) Operatory logiczne && (i) || (lub) ! (nie) Operatory wskaźnikowe * (operator adresowania pośredniego (wyłuskania – ang. dereference operator)) & (operator adresu (odniesienia- ang. reference operator)) 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Struktura Operatory bitowe & (bitowe i) | (bitowe lub) ^ (bitowe XOR) ~ (bitowe nie) << (przesunięcie bitów w lewo) >> (przesunięcie bitów w prawo) Operatory złożone ++ (inkrementacja) -- (dekrementacja) += (złożone przypisanie) -= (złożone przypisanie) *= (złożone przypisanie) /= (złożone przypisanie) &= (złożone przypisanie bitowe) |= (złożone przypisanie bitowe) 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Zmienne Stałe HIGH | LOW INPUT | OUTPUT | INPUT_PULLUP LED_BUILTIN true | false integer constants floating point constants Typy danych void boolean char unsigned char byte int unsigned int word long unsigned long short float double string - (char array) String - (object) array 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Zmienne Konwersje char() byte() int() word() long() float() Zakres zmiennych i kwalifikatory Variable scope static volatile const Narzędzia sizeof() 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Funkcje Cyfrowe we/wy pinMode() digitalWrite() digitalRead() Analogowe we/wy analogReference() analogRead() analogWrite() - (PWM) Tylko Due analogReadResolution() analogWriteResolution() Zaawansowane we/wy tone() noTone() shiftOut() shiftIn() pulseIn() 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Funkcje Czasowe millis() micros() delay() delayMicroseconds() Matematyczne min() max() abs() constrain() map() pow() sqrt() Trygonometryczne sin() cos() tan() 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Funkcje Liczby pseudolosowe randomSeed() random() Bity i Bajty lowByte() highByte() bitRead() bitWrite() bitSet() bitClear() bit() Przerwania zewnętrzne interrupts() noInterrupts() 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Funkcje Komunikacja Serial Stream USB (tylko Due i Leonardo) Keyboard Mouse Przerwania zewnętrzne interrupts() noInterrupts() Więcej? http://arduino.cc/en/Reference/Libraries 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Środowisko 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Ładowanie szkicu 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Wybór modułu 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Wybór portu 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Aplikacja Blink 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Aplikacja Blink 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Aplikacja Blink 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Aplikacja Blink - modyfikacja 01-2014 Zygmunt Kubiak
Arduino programowanie Mikrokontrolery AVR Arduino programowanie Aplikacja Blink - modyfikacja 01-2014 Zygmunt Kubiak
Mikrokontrolery AVR Arduino narzędzia Fritzing http://fritzing.org/download/ 01-2014 Zygmunt Kubiak
Dziękuję Zygmunt Kubiak 09-2006