Serwis Edukacyjny
Nauczycieli
w I-LO w Tarnowie

Do strony głównej I LO w Tarnowie

Materiały dla uczniów liceum

  Wyjście       Spis treści       Poprzedni       Następny  

©2018 mgr Jerzy Wałaszek
I LO w Tarnowie

Autor artykułu: mgr Jerzy Wałaszek
Konsultacje: Wojciech Grodowski, mgr inż. Janusz Wałaszek

 

 

Warsztat elektronika

Instalacja MPLAB X IDE

 

Do czego służy MPLAB X IDE

Ułóżmy mikrokontrolery wg rosnącej trudności ich programowania:
ARDUINO – nie jest to czysty mikrokontroler, lecz gotowy do zastosowania moduł z mikrokontrolerem na pokładzie. Jednak posiada wszystkie wejścia i wyjścia samego mikrokontrolera. Do programowania nie wymaga osobnego programatora, ponieważ zainstalowany loader obsługuje transmisję przez port USB. Łatwo się programuje, istnieją biblioteki do obsługi typowych urządzeń zewnętrznych, np. wyświetlaczy, czujników, itp.

AVR – są to bardzo popularne mikrokontrolery firmy ATMEL. Opracowano dla nich tysiące projektów. Do programowania wymagają programatorów, lecz programatory te są tanie. Rodzina ta nadaje się idealnie do nauki programowania mikrokontrolerów.

PIC – równie popularne mikrokontrolery co AVR. Produkuje je firma Microchip Technology. Panuje opinia, że są trudniejsze w programowaniu od AVR'ów, lecz uważam, że nie jest to do końca prawdą, lecz lepiej, aby za programowanie mikrokontrolerów PIC brali się bardziej zaawansowani użytkownicy. Dla mikrokontrolerów PIC również opracowano tysiące projektów. Ich możliwości są porównywalne z mikrokontrolerami AVR, a często nawet je przewyższają. Do programowania potrzebny jest programator (co najmniej PICKIT2), zwykle dosyć drogi.

Jeśli jesteś początkującym elektronikiem, zainwestuj w ARDUINO. Bardziej zaawansowani mogą zabrać się za AVR'y lub PIC'e. Istnieje również szybko rozwijająca się grupa mikrokontrolerów ARM, jednak nie polecam jej początkującym.

MPLAB X IDE jest kompletnym, profesjonalnym środowiskiem programowania, które służy do tworzenia programów dla mikrokontrolerów PIC. Jest to dokładny odpowiednik Atmel Studio dla mikrokontrolerów AVR. MPLAB X IDE pozwoli ci programować praktycznie wszystkie mikrokontrolery PIC w języku C i assembler (dla 32-bitowych PIC'ów dostępny jest również język C++). Jednak pełną moc osiąga się po wykupieniu pełnych licencji, co wiąże się z dosyć dużymi kosztami. Do przesyłania programów do mikrokontrolerów PIC musisz zakupić odpowiedni programator PICKIT2 lub PICKIT3 (koszt około 60...80 zł). Dedykowane programatory/debuggery MPLAB ICD są bardzo drogie (ponad 800zł) i wykorzysta je jedynie doświadczony elektronik. Można również zakupić tanie programatory K150 (około 30 zł, ale nie polecam ich), jednak nie współpracują one bezpośrednio z MPLAB X IDE i są pewne kłopoty z uruchomieniem ich pod obecnie używanym Windows 10 (na końcu artykułu podaję procedurę instalacji i używania tego programatora, ponieważ posiadam jeden egzemplarz).

Programator MPLAB ICD 3

najlepszy, ale drogi

Programator PICKIT 3

zalecany

Programator K150

niezalecany

 

 

Instalacja MPLAB X IDE dla Windows

Przejdź do witryny: http://www.microchip.com/mplab/mplab-x-ide i u spodu strony wyszukaj i kliknij zakładkę Downloads. Otworzy się nowa podstrona, na której dla systemu Windows znajdziesz instalator MPLAB X IDE (obecnie w wersji 3.35) oraz archiwum ZIP z dokumentacją w języku angielskim (w dokumentacji znajdziesz bardzo szczegółową instrukcję instalacji wszystkich elementów środowiska MPLAB X). Pobierz instalator na swój komputer (ponad 0,5GB!) i uruchom go (wymaga uprawnień administratora).

 

Okienko powitalne instalatora, kliknij przycisk Next.
Zgoda na warunki umowy licencyjnej.

Na dole zaznacz opcję:

I accept the agreement (zgadzam się na tę umowę)

i kliknij przycisk Next.

Wybór katalogu instalacji.

Jeśli nie masz powodu, nie zmieniaj katalogu standardowego.

Jednak pamiętaj, że oprogramowanie zajmie około 2GB.

Kliknij przycisk Next.

Wybór programów do instalacji.

Pozostaw wybrane obie opcje i kliknij przycisk Next.

Informacja o gotowości instalatora do instalacji MPLAB X IDE.

Kliknij przycisk Next.

Rozpoczyna się instalacja MPLAB X IDE.
MPLAB X IDE zostało zainstalowane.

Do pracy wymaga ono jeszcze kilku składników.

Opcja pierwsza dotyczy kompilatora C i asemblera.

Opcja druga dotyczy programowania 32-bitowych PIC'ów

Opcja trzecia dotyczy narzędzi konfiguracyjnych.

Zaznacz opcje i kliknij Finish.

Po instalacji MPLAB X IDE zostanie uruchomiona przeglądarka WWW ze stronami z witryny Microchip'a, na których znajdziesz składniki do instalacji.

Na stronie MPLAB XC Compilers znajdują się instalatory kompilatorów dla mikrokontrolerów PIC 8-bitów, 16-bitów i 32-bity. Pobierz je i uruchom. Poniżej przykład dla kompilatora MPLAB XC8 (dla PIC'ów 8-bitowych):

Okienko powitalne instalatora

Kliknij przycisk Next.

Zgoda na warunki umowy licencyjnej.

Na dole zaznacz opcję:

I accept the agreement (zgadzam się na tę umowę)

i kliknij przycisk Next.

Wybór rodzaju licencji

Zaznacz opcję Free (darmowa) i kliknij Next.

Wybór katalogu instalacyjnego.

Kliknij Next.

Opcje kompilatora.

Pozostaw tak, jak zaznaczone.

Kliknij Next.

Informacja o gotowości do instalacji.

Kliknij Next.

Rozpoczyna się instalacja.
Instalacja skończona.

Jeśli chcesz używać darmowej wersji kompilatora, kliknij Next.

Inaczej:

Pierwszy link pozwala dokonać zakupu licencji standard lub pro.

Drugi link włącza darmową, 60-cio dniową licencję pro.

Trzeci link pozwala aktywować kluczem licencje standard i pro.

 

Zakończenie instalacji.

Kliknij Finish.

W podobny sposób instalujesz pozostałe kompilatory. Dla celów tego artykułu najważniejszy jest kompilator XC8, ponieważ programowaniem PIC'ów 16- i 32-bitowych tutaj się nie zajmuję.

Gdy zainstalujesz potrzebne ci kompilatory, przewiń stronę WWW w dół. Znajdziesz tu łatki (ang. Latest Part Support Files), które dodadzą obsługę najnowszych mikrokontrolerów PIC. Zainstaluj je.

Test MPLAB X IDE

Po zainstalowaniu MPLAB X IDE zechcesz na pewno przetestować to środowisko. W tym celu musisz zaopatrzyć się w płytkę stykową, mikrokontroler PIC, przewody połączeniowe, opornik 4,7... 10k oraz programator PICKIT 2/3 (jeśli z programatorem PICKIT 3 zakupiłeś przystawkę ZIF, to podłącz ją do programatora, włóż do niej mikrokontroler, ustaw zworki wg instrukcji i pomiń poniższy fragment podrozdziału).

Liczba typów mikrokontrolerów PIC jest bardzo duża. Z jednej strony to dobrze, ponieważ możesz bardzo dokładnie dobrać właściwy mikrokontroler do swojego projektu. Z drugiej strony ta ilość jest przytłaczająca dla początkującego elektronika. Który mikrokontroler wybrać? Proponuję zacząć przygodę z PIC'ami od popularnego układu, który jest dobrze opisany w sieci. Jak poznasz zasady programowania jednego PIC'a, będziesz mógł wybrać sobie taki, jaki będzie ci potrzebny. Ja opieram się na mikrokontrolerach PIC12F629, PIC16F628A i PIC16F676 ponieważ są tanie, łatwe do zdobycia i nadają się doskonale do małych projektów. A podstawowym powodem jest to, iż kiedyś kupiłem większą ich ilość i muszę je do czegoś wykorzystać :).

Na potrzeby testu możesz zastosować dowolny, 8-bitowy mikrokontroler PIC. Musisz tylko wiedzieć, jak podłączyć do niego programator PICKIT 2/3.

Programator PICKIT 2/3 posiada 6 wyjść (wyjście nr 1 oznaczone jest na obudowie białym trójkatem):

VPP – napięcie programowania
MCLR – Master Clear, zerowanie
VDD – napięcie zasilania
VSS – GND, masa
ICSPDAT/PGD – we/wy danych programowania
ICSPCLK/PGC – zegar programowania szeregowego
LVP – Low Voltage Programming, programowanie niskim napięciem

Znaczenie poszczególnych linii sygnałowych jest następujące:

VPP/MCLR  –  tutaj pojawia się napięcie programujące, około 13V. Dodatkowo stan niski pozwala zresetować mikrokontroler. Linia ta powinna być połączona opornikiem 4,7...10k z napięciem zasilającym układ. Opornik pełni funkcję podciągającą (ang. pull-up).
VDD  –  linia powinna być podłączona do napięcia zasilającego mikrokontroler. Jeśli mikrokontroler nie jest zewnętrznie zasilany, to programator PICKIT wykrywa to badając napięcie tej linii. W takim przypadku programator PICKIT może dostarczyć odpowiednie napięcie zasilające, jednakże musisz pamiętać, że nie nadaje się ono do zasilania całego układu z mikrokontrolerem, ponieważ pozwala jedynie na pobór około 30mA prądu. Dlatego zaleca się, aby programowany układ posiadał niezależne, własne zasilanie. Jednak do testu wykorzystamy tę linię do zasilania mikrokontrolera, który sam nie pobiera dużego prądu.
VSS  –  masa elektryczna.
ICSPDAT/PGD  –  (ang. ICSP: In Circuit Serial Programming – programowanie szeregowe wewnątrz układu) tą linią przesyłane są dane pomiędzy programatorem a mikrokontrolerem.
ISDPCLK/PGC  –  ta linia przesyła impulsy zegarowe do mikrokontrolera, które synchronizują transmisję danych pomiędzy mikrokontrolerem a programatorem.
LVP  –  umożliwia programowanie mikrokontrolerów niskim napięciem. Tej linii nie będziemy używać.

Gdy zostały opisane sygnały z programatora, przejdźmy do typowego podłączenia tych sygnałów z mikrokontrolerem PIC. Zalecany jest następujący układ połączeń z mikrokontrolerem PIC (dla mikrokontrolera niebędącego w układzie, czyli tak jak u nas na płytce stykowej lub w gnieździe ZIF przystawki).

Numery nóżek mikrokontrolera PIC, do których należy doprowadzić sygnały z programatora znajdziesz w dokumentacji technicznej, która jest powszechnie dostępna w Internecie. Poniżej podaję układ wyprowadzeń dla używanych przeze mnie mikrokontrolerów PIC oraz ich układ połączeń na płytce stykowej:

Gdy zestawisz na płytce stykowej wszystkie połączenia, podłącz programator PICKIT 3 do portu USB i uruchom MPLAB X IDE. Z menu wybierz opcję:

 

File → New Project...

 

W odpowiedzi pojawi się kilka okienek dialogowych, które zbierają niezbędne informacje do utworzenia projektu.

Wybór rodzaju projektu.

Wybierz:

Microchip Embeded/Standalone Project

Kliknij przycisk Next.

Wybór typu mikrokontrolera.

Najpierw wybierz rodzinę,

a następnie konkretny typ mikrokontrolera

Kliknij Next.

Wybór układu uruchomieniowego

Nic tutaj nie zmieniaj.

Kliknij Next.

Wybór programatora.

Zaznacz PICkit3 i kliknij Next.

Wybór kompilatora.

Zaznacz XC8 i kliknij Next.

Wybór nazwy projektu i katalogu.

W pierwszym polu tekstowym wpisz nazwę projektu.

Kliknij Finish.

Projekt zostaje utworzony. Teraz musisz dodać do niego plik źródłowy programu. Z menu wybierz opcję:

 

File → New File...

 

Pojawią się okienka dialogowe:

Wybór rodzaju pliku.

Na liście Categories wybierz C.

Na liście File Types wybierz C Source File.

Kliknij Next.

Wybór nazwy pliku i położenia.

W polu File Name wpisz main.

Kliknij Finish.

W gałęzi Source Files pojawi się plik main.c. Kliknij go dwukrotnie lewym przyciskiem myszki, aby otworzyć go w edytorze. Następnie wpisz do edytora:

void main()
{
 while(1);
 return;
}

Z menu wybierz opcję:

 

Run → Build Main Project

 

Raport z kompilacji pojawi się w okienku Output na spodzie ekranu. W podsumowaniu powinieneś otrzymać coś takiego:

Memory Summary:
 Program space used 3h ( 3) of 800h words ( 0.1%)
 Data space used 2h ( 2) of E0h bytes ( 0.9%)
 EEPROM space used 0h ( 0) of 80h bytes ( 0.0%)
 Data stack space used 0h ( 0) of 50h bytes ( 0.0%)
 Configuration bits used 0h ( 0) of 1h word ( 0.0%)
 ID Location space used 0h ( 0) of 4h bytes ( 0.0%)

Teraz należy przesłać program do mikrokontrolera w celu sprawdzenia komunikacji. Najpierw ustawimy programatora PICKIT 3 tak, aby zasilał mikrokontroler. Funkcja ta jest standardowo wyłączona. Aby ją włączyć, w panelu Projects kliknij prawym przyciskiem myszki w nazwę swojego projektu, a następnie z menu kontekstowego wybierz opcję:

 

Set Configuration → Customize...

 

Pojawi się okienko dialogowe wyboru konfiguracji dla twojego projektu:

Na drzewku Categories rozwiń gałąź Conf:[default] i kliknij w PICkit 3. Otrzymasz dostęp do opcji związanych z programatorem.

Na liście Option categories ustaw Power (zasilanie).

Zaznacz opcję Power target circuit from PICkit3 (zasilaj układ docelowy z PICkit3).

Ustaw Voltage Level (poziom napięcia) na 3,5V – nie ustawiaj 5V, ponieważ programator mierzy napięcie na linii VDD i jeśli będzie niższe od ustawionego, to odmówi pracy. 5V nie osiągniesz przy zasilaniu programatora z USB.

Kliknij przycisk Apply, a następnie przycisk OK. Od teraz przy programowaniu mikrokontroler będzie zasilany z programatora. Sposób ten jednak nie nadaje się do zasilania układu docelowego, ponieważ programator może dostarczyć jedynie około 30mA prądu. Jeśli twój układ pobierałby więcej, to zakłóci proces programowania.

Kliknij zieloną strzałkę na pasku narzędziowym u góry ekranu. Program zostanie skompilowany, a następnie przesłany do mikrokontrolera i zweryfikowany. Jeśli wszystko jest w porządku, to powinieneś otrzymać taki mniej więcej komunikat w okienku Output:

Connecting to MPLAB PICkit 3...

Currently loaded firmware on PICkit 3
Firmware Suite Version.....01.43.35
Firmware type..............Midrange

Programmer to target power is enabled - VDD = 3,500000 volts.
Target device PIC16F628A found.
Device ID Revision = 8

The following memory area(s) will be programmed:
program memory: start address = 0x0, end address = 0x7ff

Device Erased...

Programming...
Programming/Verify complete

Instalacja zakończona, środowisko jest gotowe do programowania mikrokontrolerów PIC.

 

Instalacja MPLAB X IDE dla Linuxa Ubuntu

MPLAB X IDE pracuje w środowisku Javy, zatem można je również uruchomić na innych platformach niż Windows. Jednakże całość została napisana jako aplikacja 32-bitowa i w 64-bitowych systemach Linuxa wymaga doinstalowania bibliotek 32-bitowych. Zatem najpierw musisz sprawdzić, jaką wersje Linuxa posiadasz (jeśli jeszcze tego nie wiesz :) ). Uruchom terminal (naciskając Ctrl+Alt+T) i wpisz:
uname -m

Polecenie uname wyświetla różne pożyteczne informacje systemowe. Opcja -m daje nam informację o wersji systemu. Jeśli w wyświetlonym tekście pojawi się 64 (np. x86_64), to masz system 64-bitowy. Inaczej system jest 32 bitowy.

Jeśli masz system 64-bitowy, to sprawdzasz, czy wspiera on również architekturę 32-bitową. Wpisz w terminalu:

dpkg --print-foreign-architectures

Jeśli otrzymasz odpowiedź typu i386, to twój system obsługuje również architekturę 32-bitową. Inaczej wpisz w terminalu:

sudo apt-get update
sudo apt-get install ia32-libs

W każdym przypadku musisz doinstalować odpowiednie biblioteki. Wpisz w terminalu:

sudo apt-get install libc6:i386 libx11-6:i386 libxext6:i386 libstdc++6:i386 libexpat1:i386

Po zainstalowaniu bibliotek możesz przystąpić do właściwej instalacji MPLAB X. Przejdź do witryny: http://www.microchip.com/mplab/mplab-x-ide i u spodu strony wyszukaj i kliknij zakładkę Downloads. Zostanie otwarta zakładka, na której znajdziesz instalator dla systemu Linux. Pobierz go na swój komputer i otwórz za pomocą menedżera archiwów. Rozpakuj archiwum do katalogu tymczasowego. Wyświetl zawartość katalogu i otwórz go w terminalu. Wpisz (nazwa pliku instalatora może się różnić, jeśli będzie to nowsza wersja):

sudo ./MPLABX-v3.35-linux-installer.sh

Instalator najpierw sprawdzi integralność bibliotek 32- i 64-bitowych, a następnie rozpakuje i uruchomi właściwy program instalujący MPLAB X IDE w Linuxie.

Zostanie uruchomiona seria identycznych okienek dialogowych jak dla Windows, nie będę więc ich opisywał. W razie wątpliwości zobacz do poprzedniego podrozdziału.

Gdy instalacja się zakończy, pojawia się okienko z informacją, iż pożądane jest ponowne uruchomienie komputera, aby wprowadzone reguły dostępu do portów USB zaczęły być stosowane.

Instalację kończy okienko informujące, że MPLAB X IDE nie ma zainstalowanych kompilatorów XC. Pozostaw pierwszą opcję zaznaczoną i kliknij w przycisk Finish. Instalator zakończy działanie, po czym uruchomi przeglądarkę sieci na stronie WWW, z której będziesz mógł pobrać i zainstalować sobie odpowiednie kompilatory języka C. Gdyby się ta strona ci nie otwarła automatycznie, to jej adres jest następujący: http://www.microchip.com/mplab/compilers.

Pobierz pliki instalacyjne kompilatorów. Pobierz również uaktualnienia komponentów (linki znajdują się niżej na stronie). Otwórz w terminalu katalog, do którego pobrałeś instalatory. Nadaj plikom uprawnienia do uruchamiania:

chmod u+x xc*.run

Teraz po kolei uruchamiaj instalator kompilatora oraz uaktualnienie (wymaga uprawnień administratora):

sudo ./xc8-v1.38-full-install-linux-installer.run
sudo ./xc8-v1.38-part-support-linux-installer.run
...

Przebieg instalacji jest identyczny jak w Windows. Po zakończeniu uruchom ponownie Linuxa i przejdź do testu instalacji.

 

Instalacja programatora K150

W serwisie Allegro można kupić tanio (około 30 zł) programator PIC K150. Sam się na niego skusiłem. Okazuje się jednak, że nie współpracuje on z MPLAB X IDE (z wcześniejszymi wersjami tego środowiska też nie współpracuje). Nie oznacza to oczywiście, że nie da się z niego korzystać. Sposób jest dosyć prosty: po kompilacji programu powstaje w katalogu projektowym plik binarny o rozszerzeniu hex. Plik ten zawiera dane, które programator K150 potrafi odczytać i przesłać do mikrokontrolera. Zatem program tworzy się w MPLAB X IDE, kompiluje, lecz zapisuje za pomocą K150.

Oprogramowanie dla K150 działa dobrze w Windows XP. Niestety, jest to system już przestarzały i wychodzący z użycia. Poniżej opisuję instalację dla systemu Windows 10 (dla innych systemów Windows instalacji musisz poszukać w sieci).

Ściągnij na swój komputer archiwum: k150.zip.

Rozpakuj archiwum w dowolnym katalogu. Wewnątrz znajdziesz katalog k150, który z kolei zawiera dwa dalsze katalogi: driver oraz software. W katalogu driver znajduje się program PL2303_Prolific_DriverInstaller_v1417.exe, który instaluje sterownik USB komunikujący się z układem PL-2303 znajdującym się na płytce programatora. Uruchom ten program z uprawnieniami administratora (najpierw oczywiście całość przeskanuj programem antywirusowym! – wirusów nie ma, ale ostrożności nigdy za wiele). Instalacja jest bardzo prosta i sprowadza się właściwie do kliknięcia w przycisk Next w okienku dialogowym, a następnie w przycisk Finish w końcowym okienku.

Gdy zainstalujesz sterownik Prolific, podłącz programator K150 do portu USB.

Kliknij prawym przyciskiem myszki w przycisk Start na pasku zadań Windows i z menu kontekstowego wybierz opcję Menedżer urządzeń.

Na drzewku urządzeń rozwiń gałąź Porty (COM i LPT). Powinien się pojawić tekst: Prolific USB-to-serial Comm Port (COMx), gdzie x oznacza przydzielony numer portu:

Zapamiętaj ten numer. Powinien być jednocyfrowy. Jeśli został przydzielony numer dwucyfrowy, to kliknij w napis prawym przyciskiem myszki i z menu kontekstowego wybierz opcję Właściwości. W okienku dialogowym, które się pojawi, wybierz zakładkę Ustawienia portu, a następnie kliknij w przycisk Zaawansowane. Pojawi się nowe okienko dialogowe, w którym na spodzie będziesz mógł wybrać z listy numer portu komunikacyjnego. Np. ja wybrałem COM2, ponieważ taki miałem wolny:

Gdy zainstalujesz sterownik USB i ustawisz właściwy port COM, odłącz programator od gniazda USB i podłącz go ponownie, aby wprowadzone zmiany zaczęły obowiązywać

Z katalogu software uruchom program microbrn.exe. Przy pierwszym uruchomieniu zostanie zgłoszony błąd komunikacji z portem. Jest to normalne, ponieważ numer portu musisz ustawić ręcznie. Z menu wybierz opcję File  Programmer → K150. Następnie wybierz File  Port i wpisz i zatwierdź właściwy numer portu COM (u mnie 2):

Po tej operacji oprogramowanie będzie próbowało zresetować programator. Niestety, ta funkcja nie działa w Windows 10 i pojawi się okno z informacją o niepowodzeniu (nie przejmuj się tym i zamknij to okienko):

Po prawej stronie u dołu okna programu microbrn wybierz swój mikrokontroler PIC. U mnie jest to PIC16F628A:

Program pokaże ci, jak włożyć twój mikrokontroler w podstawkę ZIF. Jedynka jest po lewej stronie obok dźwigienki blokującej. Włóż mikrokontroler zgodnie z tymi wskazówkami. Małe żółte kółeczko na obudowie oznacza wyprowadzenie nr 1 mikrokontrolera. Na obudowie układu znajduje się w tym miejscu małe wgłębienie.

Teraz możesz już programować swój mikrokontroler. Najpierw opcją menu File → Load odczytujesz plik hex, który tworzy środowisko MPLABX IDE po kompilacji programu. Plik ten znajdziesz wewnątrz katalogu projektu w dist\default\production. Po wczytaniu pliku hex klikasz w przycisk Program i mikrokontroler zostanie zaprogramowany. Ważne jest, aby projekt i programator były ustawione na ten sam mikrokontroler.

Aby szybko przetestować działanie programatora bez pisania programu, kliknij w przycisk Read. Spowoduje to odczytanie zawartości mikrokontrolera i zawartość ta (pamięć ROM i EPROM) pojawi się w okienku.

To wszystko. Obsługę programatora K150 znajdziesz w jego instrukcji. Warto ją sobie przeczytać, ponieważ programator posiada wiele ciekawych funkcji.

 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2018 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl