PRAKTYCZNE NAUCZANIE SYSTEMÓW WBUDOWANYCH Z WYKORZYSTANIEM PLATFORMY ARDUINO



Podobne dokumenty
ZASTOSOWANIE PLATFORM CYFROWYCH ARDUINO I RASPBERRY PI W NAUCZANIU STEROWANIA OBIEKTEM PNEUMATYCZNYM

o Instalacja środowiska programistycznego (18) o Blink (18) o Zasilanie (21) o Złącza zasilania (22) o Wejścia analogowe (22) o Złącza cyfrowe (22)

Arduino dla początkujących. Kolejny krok Autor: Simon Monk. Spis treści

STM32Butterfly2. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

Szkolenia specjalistyczne

KATEDRA SYSTEMÓW MULTIMEDIALNYCH SEMINARIUM MULTIMEDIALNE SYSTEMY MEDYCZNE

PODSUMOWANIE DOŚWIADCZEŃ NAUCZANIA PROGRAMOWANIA MIKROKONTROLERÓW 8-BITOWYCH AVR W ŚRODOWISKU AVRSTUDIO

Język C. Wykład 9: Mikrokontrolery cz.2. Łukasz Gaweł Chemia C pokój 307

Programowanie mikrokontrolerów AVR

LITEcompLPC1114. Zestaw ewaluacyjny z mikrokontrolerem LPC1114 (Cortex-M0) Sponsorzy:

SigmaDSP - zestaw uruchomieniowy dla procesora ADAU1701. SigmaDSP - zestaw uruchomieniowy dla procesora ADAU1701.

Kurs programowania mikrokontrolerów ARM z rodziny Cortex-M3

Laboratorium Procesorów Sygnałowych

Komunikacja w mikrokontrolerach Laboratorium

Systemy Wbudowane. Arduino, AVR. Arduino. Arduino. Arduino. Oprogramowanie. Mikrokontroler. Mikrokontroler Platforma Arduino. Arduino IDE: Arduino C:

ADuCino 360. Zestaw uruchomieniowy dla mikrokontrolerów ADuCM360/361

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Ćwiczenie 5 Zegar czasu rzeczywistego na mikrokontrolerze AT90S8515

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

Wbudowane układy komunikacyjne cz. 1 Wykład 10

Instytut Teleinformatyki

Systemy wbudowane. Wprowadzenie. Struktura. Mikrokontrolery AVR. Wprowadzenie do programowania w C

1. Wprowadzenie Programowanie mikrokontrolerów Sprzęt i oprogramowanie... 33

Zestaw Startowy EvB. Więcej informacji na stronie:

Zestaw uruchomieniowy z mikrokontrolerem LPC1114 i wbudowanym programatorem ISP

LABORATORIUM - ELEKTRONIKA Układy mikroprocesorowe cz.2

PROJECT OF FM TUNER WITH GESTURE CONTROL PROJEKT TUNERA FM STEROWANEGO GESTAMI

dokument DOK wersja 1.0

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

1.Wstęp. 2.Generowanie systemu w EDK

ZL15AVR. Zestaw uruchomieniowy dla mikrokontrolerów ATmega32

Mikroprocesory i Mikrosterowniki

STM32 Butterfly. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

Kurs Elektroniki. Część 5 - Mikrokontrolery. 1/26

Expandery wejść MCP23S17 oraz MCP23017

Projekt MARM. Dokumentacja projektu. Łukasz Wolniak. Stacja pogodowa

Schemat blokowy architektury AVR

ZL28ARM. Zestaw uruchomieniowy dla mikrokontrolerów AT91SAM7XC

Rozdział 2. Programowanie Arduino i kodowanie społecznościowe (29)

Przegląd rozwiązań z oferty firmy 4D Systems

2. Architektura mikrokontrolerów PIC16F8x... 13

Szczegółowy opis przedmiotu zamówienia. Część 1 - Laboratoryjny zestaw prototypowy

1.2. Architektura rdzenia ARM Cortex-M3...16

ZL29ARM. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

Obługa czujników do robota śledzącego linie. Michał Wendland czerwca 2011

Niektóre piny mogą pełnić różne role, zależnie od aktualnej wartości sygnałów sterujących.

Instytut Teleinformatyki

Embedded Solutions Automaticon Efektywne pomiary i sterowanie przy użyciu systemu wbudowanego MicroDAQ

2. Code Composer Studio v4 zintegrowane środowisko projektowe... 41

AVREVB1. Zestaw uruchomieniowy dla mikrokontrolerów AVR. Zestawy uruchomieniowe

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Politechnika Śląska w Gliwicach

Zgrana para - NerO i CleO

ZL16AVR. Zestaw uruchomieniowy dla mikrokontrolerów ATmega8/48/88/168

WYKŁAD 5. Zestaw DSP60EX. Zestaw DSP60EX

ZL27ARM. Zestaw uruchomieniowy dla mikrokontrolerów STM32F103

Płytka uruchomieniowa AVR oparta o układ ATMega16/ATMega32. Instrukcja Obsługi. SKN Chip Kacper Cyrocki Page 1

KAmduino UNO. Płytka rozwojowa z mikrokontrolerem ATmega328P, kompatybilna z Arduino UNO

UNO R3 Starter Kit do nauki programowania mikroprocesorów AVR

KAmduino UNO. Rev Źródło:

Mikrokontrolery AVR Wprowadzenie

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

Zaliczenie Termin zaliczenia: Sala IE 415 Termin poprawkowy: > (informacja na stronie:

ZL25ARM. Płyta bazowa dla modułów diparm z mikrokontrolerami STR912. [rdzeń ARM966E-S]

ZL8AVR. Płyta bazowa dla modułów dipavr

ZL15AVR. Zestaw uruchomieniowy dla mikrokontrolerów ATmega32

Materiały. Języki programowania II (Java+AVR-GCC) Literatura

Mikrokontrolery AVR techniczne aspekty programowania

ZL5PIC. Zestaw uruchomieniowy dla mikrokontrolerów PIC16F887

Mikroprocesory i Mikrosterowniki

Systemy wbudowane. Paweł Pełczyński

Moduł prototypowy X3-DIL64 z procesorem ATxmega128A3U-AU

ZL30ARM. Zestaw uruchomieniowy dla mikrokontrolerów STM32F103

Płyta ewaluacyjna z mikrokontrolerem Atmega32. Autor Dariusz Wika

ZL9ARM płytka bazowa dla modułów diparm z mikrokontrolerami LPC213x/214x

PROGRAMOWANIE I ARDUINO W SZKOLE

SYSTEMY CZASU RZECZYWISTEGO (SCR)

MIKROKONTROLERY AVR JĘZYK C WYDAWNICTWO ATNEL PODSTAWY PROGRAMOWANIA. Miros aw Kardaś. Szczecin Mojej Żonie Kasi

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Spis treści. Wykaz ważniejszych skrótów Wprowadzenie Rdzeń Cortex-M Rodzina mikrokontrolerów XMC

Narzędzia uruchomieniowe dla systemów Embedded firmy Total Phase

Spis treści. Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego

Programowanie mikrokontrolerów AVR z rodziny ATmega.

ZL9AVR. Płyta bazowa dla modułów ZL7AVR (ATmega128) i ZL1ETH (RTL8019)

E-TRONIX Sterownik Uniwersalny SU 1.2

Mikroprocesory i Mikrosterowniki Laboratorium

Programator procesorów rodziny AVR AVR-T910

Opracował: Jan Front


Politechnika Białostocka

MODUŁ UNIWERSALNY UNIV 3

Instrukcja programowania płytek edycji 2014

1. Tworzenie nowego projektu.

KA-NUCLEO-UniExp. Wielofunkcyjny ekspander dla NUCLEO i Arduino z Bluetooth, MEMS 3DoF, LED-RGB i czujnikiem temperatury

LABORATORIUM UKŁADÓW PROGRAMOWALNYCH. PROCESORY OSADZONE kod kursu: ETD 7211 SEMESTR ZIMOWY 2017

nr katalogowy/ okres gwarancji ilość nr katalogowy/ okres gwarancji ilość nr katalogowy/ okres gwarancji ilość nr katalogowy/ okres gwarancji ilość

ISP ADAPTER. Instrukcja obsługi rev.1.1. Copyright 2009 SIBIT

Projektowanie z użyciem procesora programowego Nios II

ZL2AVR. Zestaw uruchomieniowy z mikrokontrolerem ATmega8

WPROWADZENIE Mikrosterownik mikrokontrolery

Transkrypt:

Dorota Rabczuk Akademia Morska w Gdyni PRAKTYCZNE NAUCZANIE SYSTEMÓW WBUDOWANYCH Z WYKORZYSTANIEM PLATFORMY ARDUINO Artykuł stanowi podsumowanie doświadczeń dydaktycznych w dziedzinie praktycznego nauczania systemów wbudowanych z wykorzystaniem platformy Arduino. Nauczanie zostało podzielone na dwa etapy poświęcone: 1) poznaniu rejestrów mikrokontrolera i konfigurowaniu portów i interfejsów na podstawie bezpośrednich wpisów do rejestrów; 2) wykorzystaniu magistral komunikacyjnych UART, SPI, I2c, 1-wire, Ethernet oraz samodzielnemu pisaniu bibliotek do transmisji danych po wybranych magistralach. W fazie uruchamiania projektu zastąpiono proste środowisko Arduino środowiskiem AtmelStudio, wyposażonym w możliwość debuggowania programu, integrując z nim przydatne biblioteki Arduino. Słowa kluczowe: systemy wbudowane, mikrokontrolery, programowanie, język C/C++. WSTĘP Szybki rozwój w dziedzinie systemów wbudowanych implikuje pojawianie się na rynku platform z dostosowanym sprzętem i kompletem bibliotek pozwalających w łatwy sposób złożyć działający układ, nawet jeśli konstruktor nie ma pełnej wiedzy na temat wykorzystywanych podzespołów. Jednak nieznajomość programowania w języku C i zasad pracy mikrokontrolera uniemożliwi konstruktorowi wprowadzenie jakichkolwiek modyfikacji w gotowe rozwiązania celem ich przystosowania do potrzeb użytkownika. Platforma sprzętowa i programowa przydatna w praktycznym nauczaniu mikrokontrolerów i systemów wbudowanych powinna zapewnić możliwość nauczania na wielu poziomach [1]: od prostej obsługi wejść i wyjść przez wpisy do rejestrów, pisanie własnych bibliotek dla magistral komunikacyjnych do wykorzystania gotowych bibliotek w zaawansowanych aplikacjach z rozbudowanymi urządzeniami zewnętrznymi. Wybrano dwie uzupełniające się platformy: Arduino i Raspberry Pi, które są zorientowane na inne obszary wykorzystania, dzięki czemu mogą zapewnić hierarchiczność w nauczaniu. Platforma Arduino bazuje na systemie wejść/wyjść (GPIOs) i nadaje się przede wszystkim do zadań związanych z bezpośrednim sterowaniem i szybkim odczytem stanów środowiska zewnętrznego, podczas gdy platforma Raspberry Pi bazująca na Linuxie znajduje zastosowanie przede wszystkim w interfejsach użytkownika (monitor, głośnik) oraz cyfrowym przetwarzaniu sygnałów.

D. Rabczuk, Praktyczne nauczanie systemów wbudowanych z wykorzystaniem platformy Arduino 123 1. CHARAKTERYSTYKA PLATFORMY ARDUINO W ASPEKCIE WYKORZYSTANIA W LABORATORIUM SYSTEMÓW WBUDOWANYCH Platforma Arduino dostarcza zarówno sprzęt z szeroką gamą sensorów, jak i narzędzia programistyczne do realizacji projektów na zasadzie dostępności kodu (open source) [1]. Rodzina układów ewaluacyjnych Arduino jest wyposażona w mikrokontrolery 8-bitowe Atmel z zasilaniem 5 V: Atmega32U4, ATMega 168, ATMega328 lub ATMega2560. Wyjątek w rodzinie Arduino stanowi płytka Arduino Due, na której zamontowano 32-bitowy 3V3-woltowy procesor Atmel SAM3X8E ARM Cortex-M3. Płytki bazowe udostępniają wejścia i wyjścia cyfrowe i analogowe (do przetwarzania ADC oraz DAC) oraz interfejsy komunikacyjne, do których można podłączyć płytki rozszerzeń (extension boards). Złącza płyty głównej są tak dopasowane, że umożliwiają podpięcie płytek rozszerzeń bez konieczności lutowania. Dla płyt bazowych przygotowano kilka nakładek (shields): moduł Ethernet, moduł łączności radiowej, moduł bezprzewodowej sieci radiowej Xbee, driver obciążeń indukcyjnych, np. silników krokowych. Płytki rozszerzeń z rozmaitymi czujnikami są dostarczane przez różnych producentów, zachowując kompatybilność wyprowadzeń z macierzystą płytą Arduino. Częścią softwarową platformy Arduino jest środowisko IDE (Integrated Development Environment) do tworzenia i ładowania programów. Środowisko wspiera języki programistyczne C/C++, ładowanie skompilowanego programu odbywa się z udziałem programu rezydentnego bootloader po magistrali szeregowej UART lub USB. Ze względu na rozmaitość gotowych do użycia płytek rozszerzeń dostarczanych łącznie z bibliotekami platforma Arduino stanowi narzędzie do łatwego tworzenia projektów z dziedziny mikroprocesorowego nadzoru czujników i sterowania urządzeniami po różnych magistralach, w tym Ethernet oraz drogą radiową. Kod programu napisany w języku C lub C++ jest w środowisku Arduino kompilowany za pomocą avr-gcc do pliku obiektowego, który następnie jest linkowany z bibliotekami Arduino. W rezultacie powstaje plik Intel hex, który zostaje wpisany do pamięci programu mikrokontrolera za pośrednictwem bootloadera, który już wcześniej się tam znajdował. Środowisko Arduino automatycznie generuje prototypy wszystkich użytych funkcji, w tym funkcji setup() i loop(), które w trakcie kompilacji są łączone w funkcję main() wg zasady: main() setup(); while(1) loop();. Rozbudowane biblioteki środowiska Arduino są wygodne w użyciu i zapewniają łatwe oprogramowanie różnych urządzeń zewnętrznych na wielu magistralach: I2C, SPI, UART, 1-wire, Ethernet, CAN, jednak brak możliwości debuggowania programu w trybie symulacji i w czasie rzeczywistym utrudnia uruchamianie programów. Brak narzędzi w środowisku Arduino można uzupełnić, przenosząc projekt utworzony w Arduino IDE do środowiska Atmel Studio 6. W tym celu należy wyszukać wśród wielu plików tworzonych podczas kompilacji w środowisku Arduino IDE plik zbioru prekompilowanych bibliotek core.a i przenieść go do katalogu nowo tworzonego projektu w Atmel Studio. Ponadto trzeba skopiować kod projektu z Arduino IDE

124 ZESZYTY NAUKOWE AKADEMII MORSKIEJ W GDYNI, nr 90, grudzień 2015 do Atmel Studio nie należy korzystać z kodu źródłowego Arduino *.pde, lecz pobrać plik *.cpp z katalogu wynikowego kompilacji, ponieważ zawiera on prototypy używanych funkcji. W efekcie można skorzystać z profesjonalnych narzędzi do debuggowania programu w czasie rzeczywistym z opcjami pracy krokowej i punktów docelowych (breakpoint). Platforma Raspberry Pi wykorzystuje procesory ARM7, 9 lub 11 lub w najnowszej wersji procesor ARM Cortex-A7 900 MHz, z 1 GB pamięci RAM. Procesory te posiadają moce obliczeniowe predysponujące je do obliczeń DSP. Płyty bazowe Raspberry Pi są wyposażone w linie GPIOs, porty USB, HDMI, Ethernet, slot kart micro SD, interfejsy ekranu DSI oraz kamery CSI. W systemach wbudowanych najlepiej sprawdza się połączenie możliwości platform Arduino i Raspberry Pi. Na rynku dostępna jest płyta Arduino w postaci rozszerzenia do płyty Raspberry Pi. W projekcie wykorzystującym obie platformy Rasberry Pi powinno zajmować się wizualizacją, przetwarzaniem obrazu i innych złożonych algorytmów, podczas gdy Arduino powinno być odpowiedzialne za sterowanie urządzeniami na różnych magistralach i szybką reakcję na zmiany, np. unikanie zagrożeń w środowisku zewnętrznym. W początkowym etapie nauczania dobrze jest skorzystać z płytki ewaluacyjnej Arduino Esplora, wyposażonej w 8-bitowy 5 V mikrokontroler Atmel ATMega32u4 o 32 kb pamięci programu flash (w tym 4 kb zajmuje bootloader), 2,5 kb pamięci ulotnej SRAM, 1 kb nieulotnej pamięci EEPROM, z taktowaniem kwarcowym 16 MHz. Płytka jest wygodna do użycia w laboratorium, ponieważ posiada szereg urządzeń zewnętrznych, od których tradycyjnie rozpoczyna się nauczanie systemów wbudowanych: diodę LED i diodę RGB, cztery przyciski samopowrotne, joystick analogowy z centralnym przyciskiem, przetwornik ADC, na którego wejście można podać sygnał z jednego z zamontowanych na płycie czujników: potencjometru, mikrofonu, czujnika temperatury lub czujnika światła, akcelerometr 3-osiowy (w warunkach laboratoryjnych można wykorzystać do pomiaru kąta odchylenia od poziomu), buzzer, interfejs myszy i klawiatury po USB oraz gniazdo do podłączenia wyświetlacza z funkcją dotykową. Bogate wyposażenie płytki Arduino Esplora bardzo upraszcza organizację nauczania praktycznego w laboratorium w porównaniu z płytkami ewaluacyjnymi, na których znajduje się tylko procesor ze źródłem zasilania i taktowania, a urządzenia zewnętrzne trzeba podłączać na płytkach uniwersalnych lub lutować. Początkowy etap nauczania systemów wbudowanych wymaga odwoływania się do rejestrów mikrokontrolera w celu podania ich przeznaczenia i wykonywanych na nich konfiguracji pracy układów peryferyjnych. Do najczęściej używanych należą rejestry obsługujące linie wejścia i wyjścia (GPIOs), które są zgrupowane w porty A, B, itd. każdy po 8 linii. Każdy bit rejestru jest odpowiedzialny za zarządzanie jedną linią wejściowo/wyjściową. Ustawienia wstępne dla linii GPIO wymagają wyboru kierunku dla linii (wejście lub wyjście) i ewentualnie podwieszenia linii wejściowych. W sumie każda linia in/out jest konfigurowana przez trzy bity leżące w trzech rejestrach: kierunkowym DDR (Direction Register), sterującym PORT oraz wejściowym PIN. Rejestr PIN odzwierciedla stany fizyczne

D. Rabczuk, Praktyczne nauczanie systemów wbudowanych z wykorzystaniem platformy Arduino 125 na liniach wejściowych, dlatego jest stosowany wyłącznie w trybie odczytu. Zarządzanie urządzeniami peryferyjnymi (timery, interfejsy komunikacyjne) oraz funkcjami (wyjątki, przerwania) jest również możliwe przez bezpośrednie wpisy do rejestrów mikrokontrolera. Nauczanie programowania przez wpisy do rejestrów (tab. 1) wymaga wprawy w stosowaniu operacji arytmetyki binarnej tj.: koniunkcji &, alternatywy, negacji ~, sumy modulo 2 ^, obrotu w prawo >> i lewo <<. Każdy bit liczby daje się łatwo skojarzyć z jedną linią portu, jeśli liczby są zapisywane w systemie hex (szestnastkowym) lub binarnym. Konfigurowanie przez wpisy do rejestrów daje możliwość bezpośredniego wpływu na pracę mikrokontrolera na niskim poziomie. Tabela 1. Porównanie konfiguracji linii portów przez bezpośredni wpis do rejestrów oraz przy wykorzystaniu funkcji bibliotecznych Table 1. Comparison of port configuration by direct writing to configuration registers to the usage of port library functions Wpis do rejestru Wykorzystanie funkcji bibliotecznych Pin 2 na porcie D konfigurowany jako wejście podwieszone wewnętrznie (Pin 2 internally pulled up) pin 2 = PORTD, 2 DDRD = DDRD & 0xFB; PORTD = PORTD 0x04; pinmode(2, INPUT_PULLUP); pinmode(2, INPUT_PULLUP); Pin 2 na porcie D konfigurowany jako wejście w stanie wielkiej impedancji (Pin 2 as high-z input) pin 2 = PORTD, 2 DDRD = DDRD & 0xFB; PORTD = PORTD & 0xFB; pinmode(2, INPUT); Pin 5 na porcie B konfigurowany jako wyjście (Pin 13 as output) pin 13 = PORTB, 5 DDRB = DDRB 0x20; pinmode(13, OUTPUT); PIN 5 na porcie B sterowany naprzemiennie zerem i jedynką (Pin 13 driven alternately 0 and 1) pin 13 = PORTB, 5 void loop PORTB = PORTB 0x20; PORTB = PORTB & 0xDF; void loop digitalwrite(13, HIGH); digitalwrite(13, LOW);

126 ZESZYTY NAUKOWE AKADEMII MORSKIEJ W GDYNI, nr 90, grudzień 2015 Środowisko Atmel Studio ułatwia zrozumienie procesów zachodzących podczas wykonywania programu poprzez wizualizację stanu rejestrów mikrokontrolera. Debuggowanie można prowadzić w trybie symulacji (bez podłączania mikrokontrolera) lub w czasie rzeczywistym (program wgrany w mikrokontroler jest wykonywany krokowo pod nadzorem środowiska). 2. SAMODZIELNE TWORZENIE BIBLIOTEK KOMUNIKACYJNYCH Po nabyciu podstawowej praktycznej wiedzy o posługiwaniu się rejestrami mikrokontrolera należy przejść do drugiego poziomu nauczania praktycznego wykorzystania magistral komunikacyjnych, ze szczególnym zwróceniem uwagi na magistrale typowe dla mikrokontrolera, obsługiwane w trybie softwarowym (SPI, I2C, UART, 1-wire) oraz hardwarowym (Ethernet, USB). W środowisku Arduino dostępne są biblioteki do obsługi magistral komunikacyjnych, można też przystosować biblioteki pobrane z innych źródeł. Z dydaktycznego punktu widzenia studenci powinni napisać samodzielnie przynajmniej jedną bibliotekę dla wybranej magistrali, co wymaga wnikliwego przyjrzenia się sekwencjom komunikacyjnym i równocześnie stanowi ćwiczenie z języka C/C++ dla mikrokontrolerów. Biblioteka napisana samodzielnie często jest prostsza i szybciej wykonuje polecenia komunikacyjne, ponieważ ma mniej zabezpieczeń. Przykładem mogą być autorskie biblioteki dla magistral 1-wire, SPI oraz I2C w tabelach 2, 3 oraz 4, będące przedmiotem ćwiczeń laboratoryjnych (w Arduino prototypy generowane automatycznie). Biblioteka dla magistrali SPI jest prosta ze względu na charakter transmisji po tej magistrali, po której ruch bitów jest dookólny i odbywa się za pośrednictwem rejestrów przesuwnych przez oba urządzenia: master i slave uczestniczące w transmisji. Biblioteka magistrali SPI składa się z jednej procedury wspólnej dla nadawania odbioru każdemu nadaniu bitu po linii MOSI towarzyszy odbiór bitu po linii MISO tej magistrali w zamkniętym kółku. Wykorzystanie procedury komunikacyjnej dla SPI (tab. 3) wymaga wcześniejszego skonfigurowania interfejsu SPI w mikrokontrolerze.

D. Rabczuk, Praktyczne nauczanie systemów wbudowanych z wykorzystaniem platformy Arduino 127 Tabela 2. Biblioteka komunikacyjna dla magistrali 1-wire Table 2. Communication library for 1-wire interface // pin 2 = PORTD, 2 linia magistrali 1-wire #include<util/delay.h> void reset (void) delaymicroseconds(5); digitalwrite(2, LOW); delaymicroseconds(500); delaymicroseconds(60); pinmode(2, INPUT_PULLUP); if(digitalread(2)) ; //brak urzadzenia else ; //jest urzadzenie delaymicroseconds(500); void impuls0 (void) delaymicroseconds(5); digitalwrite(2, LOW); delaymicroseconds(80); delaymicroseconds(10); void impuls1(void) digitalwrite(2, LOW); delaymicroseconds(10); delaymicroseconds(80); void nadaj (char A) for(int i=0; i<8; i++) if(a & 0x01) impuls1(); else impuls0(); A=A>>1; char odbierz (void) char B=0; for(int i=0; i<8; i++) B=B>>1; delaymicroseconds(5); digitalwrite(2, LOW); delaymicroseconds(2); pinmode(2, INPUT_PULLUP); delaymicroseconds(9); if(digitalread(2)) B = 0b10000000; else B &= 0b01111111; delaymicroseconds(80); return B; Tabela 3. Biblioteka komunikacyjna dla magistrali SPI Table 3. Communication library for SPI interface int spi_transfer (int address, int transmitb) int receiveb; digitalwrite(ss, HIGH); / / lub digitalwrite(ss, LOW); w zależności od polaryzacji SPDR = address; while (!(SPSR && (1<<SPIF))); SPDR = transmitb; while (!(SPSR && (1<<SPIF))); receiveb = SPDR; digitalwrite(ss, LOW); return receiveb; // lub digitalwrite(ss, HIGH); w zależności od polaryzacji

128 ZESZYTY NAUKOWE AKADEMII MORSKIEJ W GDYNI, nr 90, grudzień 2015 Biblioteka dla magistrali I2C (tab. 4) została napisana dla komunikacji realizowanej w 100% programowo, bez odwoływania się do interfejsu I2C, może być zatem wykorzystana również na mikrokontrolerach nieposiadających takiego interfejsu. Tabela 4. Biblioteka komunikacyjna dla magistrali I2C Table 4. Communication library for I2C interface //pin 18 = PORTC, 4 SDA //pin 19 = PORTC, 5 SCL #define myscl 19 #define mysda 18 void impuls_scl () void I2C_start (void) digitalwrite(mysda, LOW); void I2C_stop (void) digitalwrite(mysda, LOW); void I2C_transmitB (char data) for (int i=0; i<8; i++) if (data&0b10000000) else digitalwrite(mysda, LOW); impuls_scl(); data=data<<1; pinmode(mysda, INPUT_PULLUP); if(digitalread(mysda)) ; else; pinmode(mysda, OUTPUT); char I2C_receiveB (bool ack) char received=0; pinmode(mysda, INPUT_PULLUP); for (int i=0; i<8; i++) received = received <<1; if (digitalread(mysda)) received = 0b00000001; else received &= 0b11111110; pinmode(mysda, OUTPUT); if (ack) digitalwrite(mysda, LOW); else impuls_scl(); return received;

D. Rabczuk, Praktyczne nauczanie systemów wbudowanych z wykorzystaniem platformy Arduino 129 PODSUMOWANIE Rozwiązania proponowane w artykule zapewniające efektywność nauczania praktycznego systemów wbudowanych zostały z dobrym skutkiem sprawdzone w trakcie zajęć ze studentami. Rozmaitość urządzeń zewnętrznych, które można podłączyć na magistralach komunikacyjnych, daje możliwość zindywidualizowania projektów studenckich i gwarancję, że każdy student będzie zaangażowany w swój projekt, zyskując pożyteczną praktykę inżynierską. LITERATURA 1. Jamieson P., Arduino for Teaching Embedded Systems. Are Computer Scientists and Engineering Educators Missing the Boat? Proceedings FECS 10 Conference on Frontiers in Education, Las Vegas 2010. 2. Rabczuk D., Podsumowanie doświadczeń nauczania programowania mikrokontrolerów 8-bitowych AVR w środowisku AVRStudio, Zeszyty Naukowe Akademii Morskiej w Gdyni, 2011, nr 70. PRACTICAL TEACHING OF EMBEDDED SYSTEMS ON THE BASIS OF ARDUINO PLATFORM Summary The article is aimed at summarizing author s experience in practical teaching of embedded systems using Arduino platform. The teaching process is divided into two levels: first level is devoted to getting experience in programming by direct entry to configuration and port registers of the microcontroller, the 2-nd level is devoted to using communication busses UART, SPI, I2C, 1-wire, Ethernet and writing own libraries to hold communication on these busses. While putting things in operation the simple Arduino platform is changed to more sophisticated AtmelStudio platform with capability of debugging the project (Arduino libraries are integrated in it). Keywords: embedded systems, microcontrollers, programming, C/C++ languages.