sobota, 9 kwietnia 2016

Nauka Arduino


W poprzednim poście wymieniłem rzeczy moim zdaniem wystarczające do rozpoczęcia przygody z Arduino. Zapomniałem dodać jednej - 1m2 wolnego biurka do swobodnego rozłożenia się z elektronicznym majdanem. Móc wrócić do projektu w każdej wolnej chwili lub w przypływie nagłego olśnienia jest sprawą absolutnie kluczową.

Nie wspominam o komputerze, Internecie, i kablu USB - to ma każdy. Czytam o przewagach Linuksa w programowaniu mikrokontrolerów - może i prawda. U mnie do zabawy z Arduino musi wystarczyć  Windows xp, komórka i tablet z Androidem.

Oprogramowanie do Arduino.

Oczywiście Arduino IDE. Oczywiste??? Nie do końca.
Po pierwsze są dwa! Odkryłem przypadkiem arduino.cc  i aduino.org.
Darujmy sobie dyskusję o wyższości świąt. Używam arduino.org bo trafiłem na niego najsampierw.
Ale mam zainstalowane obydwa.
Właśnie instalacja
Najpierw zainstalowałem standardowo instalerem. Błąd.
Po pierwsze nie pozwala odpalić drugiego arduino.cc - mały problem. Instaluje się gdzie chce i rozrzuca pliki robocze po całym komputerze - duży problem. Zainstalowałem z ZIP i problem zniknął a do tego mam ładnie poukładane katalogi w jednym miejscu i obydwa IDE pracujące bez problemów.
A co z Atmel Studio 7. Mam oczywiście i to z Arduino Extension . Mam  i ....nie używam. Bo po co. Do napisania prostego tekstu wystarczy mi prosty Notatnik. A Arduino IDE jest proste i działa. I na razie tak zostanie.

Wspominając dawne czasy koniecznie chciałem zobaczyć jaki kod wynikowy w asemblerze generuje Arduino IDE. I na ile jest to kod "optymalny".

Dostałem coś takiego i .... po 100 linijkach analizy kodu zrezygnowałem. Przecież to nie moje zmartwienie - ma działać a jak zabraknie mi miejsca w pamięci jednego UNO dostawię obok drugie lub przejdę na MEGA lub DUE. 

Biblioteki - tak to jest problem. Traktując platformę Arduino jako bazę dla elektronicznych i programistycznych modułów pozwalających na błyskawiczne tworzenie działających systemów będziemy używać bibliotek. Wielu bibliotek, dziesiątek a może i setek bibliotek.
Ja mam dodatkowy problem - używam dwóch komputerów. Jeden - stara toshiba  z XP na stałe dedykowana jest do pracy z Arduino i na niej odpalam wszystkie programy wgrywane do UNO.
Drugi komputer ogólnego przeznaczenia zasysa wiedzę, służy do analiz kodu, wykrywania błędów kompilacji itd. By to działało oba komputery muszą pracować z jednakowym zestawem bibliotek. I jest z tym problem. Pal sześć gdy program na jednym się kompiluje a na drugim nie ba zapomniałem dograć jakiejś biblioteki. Gorzej gdy mam różne wersje tej samej biblioteki na obu komputerach i tu działa a tam nie! Jeszcze gorzej jest gdy wgram tak samo nazywające się biblioteki ale pochodzące z różnych źródeł. Wtedy nic już nie działa i nie wiadomo dlaczego!
A jeszcze problemy z bibliotekami, które są tworzone lub modyfikowane przez ludzi ale nie zostały do końca przetestowane i zawierają błędy. A używanie tych samych zasobów sprzętowych przez różne biblioteki i wynikające stąd błędne działania jednej lub drugiej.
Biblioteki to problem - ale bez nich praca z Arduino traci sens więc trzeba z tym jakoś żyć.
To trochę jak z Windowsem czy szerzej - z życiem. System Arduino jest otwarty na ludzi i można z nim zrobić wszystko. Ale ceną jaką płaci się za wolność jest utrata bezpieczeństwa, pewności działania. Kto lubi stabilność wybierze IPada kto swobodę - Androida. No i bezpieczeństwo kosztuje i to sporo.
Więc jest jak jest i trzeba bardzo uważać jakie biblioteki się używa i co wgrywa się do systemu.


Barierą do rozpoczęcia przygody z mikroprocesorami była nieznajomość C. Czytając niektóre listingi artystów języka C można nabawić się kompleksów podobnych do tych przy próbie analizy rejestru wewnętrznego SPCR czy ADMUX Atmegi328. Ale Arduino jest tak naprawdę pierwszym kompletnym systemem procesorowym pozwalającym na eksperymentowanie z oprogramowaniem napisanym w C bez jego znajomości!

Nauka programowania UNO a w zasadzie Atmega328 w języku C dzięki Arduino IDE zabiera kilka godzin. Kilka następnych dni to ciągłe zapominanie o średniku na końcu linii, brak lub nadmiarowość klamer } zamykających procedury, pomijanie // przy komentarzu, bark lub źle zadeklarowane zmienne. A potem już z górki.

Nie oznacza to oczywiście że po tygodniu czy dwóch nabędzie się umiejętności programowania w C. Ale działając metodą CTRL+C CTRL+V można napisać całkiem spore i złożone programy bez wywoływania czerwonych napisów kompilatora o błędach kompilacji. I naprawdę można sterować złożonymi procedurami wewnętrznymi procesora Atmega328 bez znajomości funkcji i działania choćby jednego rejestru wewnętrznego czy bitu sterującego jego pracą. Nie ma się czym chwalić ale liczniki, timery, przerwania, wewnętrzne i zewnętrzne zegary i bity i bajty znaczników sterujących całą praca procesora są mi wciążz całkowicie obce. Nie mówiąc już o złożonych procedurach języka C. A mimo to można zmusić UNO do obsługi praktycznie każdego czujnika, wysterowania  elementów wykonawczych czy rozpisać zależności funkcjonalno- czasowe zadanych procedur i programów.
Chciałbym zachęcić każdego, kto rozważa czy warto wchodzić w tak mało poważną architekturę jak Arduino z praktycznie zerową wiedzą elektroniczno-informatyczną. Moim zdaniem jeśli zaczynać przygodę z mikroprocesorami to tylko od tego. A że Panowie Programiści będą  uśmiechać się widząc listingi miszcza programów w C a Prawdziwi Elektronicy wydymać wargi na widok schematów obrazkowych połączeń . Trudno Arduino i C jest dla wszystkich - nawet dla mnie :).

Pierwszy "poważny" program komunikujący się z telefonem siecią Ethernet i obsługujący wszystkie posiadane czujniki i elementy wykonawcze, zajmujący prawie 30 kB pamięci programu "pisałem" i uruchamiałem przez tydzień nie znając praktycznie ani procesora ani języka C. Dwadzieścia lat temu coś takiego pochłonęłoby kilka miesięcy codziennej pracy i to bez żadnej gwarancji poprawnego działania całości.
Oczywiście znaczna część tego kodu jest nadmiarowa - podobnie jak funkcje Worda, których w większości nigdy nie użyjemy - ale dla mnie programowanie bibliotekami to jedyna dziś skuteczna droga by nie zagubić się w gąszczu nowoczesności oferowanej przez współczesne procesory.

Jest jeszcze coś.
Analizując zagadnienia w trakcie dołączania kolejnych peryferii czy bibliotek dochodzę do wniosku, że każdy napotkany przez mnie problem związany z Arduino już ktoś, gdzieś, kiedyś zauważył i (najczęściej) skutecznie rozwiązał. Dziesiątki (a może setki tysięcy) fanów tej platformy na całym świecie i nieskrępowany, dzięki Internetowi, dostęp do ich wiedzy stanowi o sile i potężnych możliwościach tej skromnej przecież platformy procesorowej.
Arduino to naprawdę elektroniczne klocki LEGO. Mając do dyspozycji tysiące różnych pasujących do siebie elementów sprzętowych i programowych jesteśmy w stanie zestawić każdą dowolną funkcjonalność w rekordowo krótkim czasie i po niezwykle atrakcyjnej cenie. Czego chcieć więcej?


cdn...........




Brak komentarzy:

Publikowanie komentarza