30 kwietnia 2016

C jak człowiek

Felieton pod takim tytułem czytałem w zamierzchłych latach 90. w nieistniejącym już czasopiśmie „PC Kurier”. Autor pławił się w zachwytach nad językiem programowania C. Pozwolę sobie zacytować z pamięci jedno z tych uniesień:

„Litera C symbolizuje głowę ludzką. W miejscu gdzie powinna być twarz litera C ma pustą przestrzeń przez którą chłonie informację...”

Przyznam, że rozbawiły mnie wówczas te peany. Ja szczerze nienawidziłem tego języka. Nie podobały mi się te klamerki, hashe, gwiazdki. Składnia była wybitnie nieprzejrzysta i do tego okropny kompilator, który pokazywał błąd tam gdzie go akurat nie było. W tamtym czasie po krótkiej przygodzie z BASIC’em na komputerki 8-bitowe przesiadłem się na „dorosłe”, 16-bitowe komputery PC. I zacząłem programować w... Pascalu. Pascal to przejrzysta, czytelna składnia, znakomita diagnostyka błędów i błyskawiczna kompilacja. Próbowałem też pisać w C, ale jakoś tak bez przekonania – Pascal w porównaniu do C to dla mnie było niebo a ziemia. Doprawdy nie mogłem wtedy zrozumieć, dlaczego ten toporny C ma tylu zwolenników. W połowie lat 90. popularność zyskiwał system Windows, ale również na niego powstało znakomite środowisko programistyczne z Pascalem – Delphi. Mogłem nadal pisać programy w moim ulubionym języku Pascal (oczywiście zakupiłem licencję na ten program).

Przyszedł XXI wiek a wraz z nim telefony komórkowe, na które można było pisać programy, niestety tylko w Javie. Chcąc nie chcąc, musiałem się oswoić z tym klamerkowym zapisem (składnia Javy bazuje na języku C). Później pojawiły się urządzenia typu Pocket PC i platforma programistyczna Visual eMbedded C++, jeszcze później środowisko .NET Framework i język C#. Zdałem sobie wówczas sprawę, że znajomość składni C i obycie z tym pozornie nieprzejrzystym zapisem bardzo ułatwiła mi migrację do nowego środowiska. Zatem zamiast kurczowo trzymać się jednego poznanego języka, lepiej było poznać i trzymać się standardu, jakim jest C. Bowiem większość tworzonych nowych platform programistycznych bazuje na C-podobnej konwencji (np. ogromnie popularna platforma Arduino).

Co do tematu programowania mikrokontrolerów – kiedyś wydawało mi się to wiedzą tajemną, dostępną jedynie dla garstki specjalistów. Poszukując informacji w Internecie szybko znalazłem artykuły dotyczące procesorów 8051 i AVR oraz kursy BASCOM’a. Niejako na uboczu zdawała się istnieć garstka piszących w C. Jednak drążąc temat dowiedziałem się że istnieją również inne rodziny mikrokontrolerów – np. PIC, oraz inne narzędzia np. mikroPascal. Jednak w naszym kraju praktycznie nie były stosowane. Skąd w Polsce taka popularność BASCOM’a i AVR’ów? Myślę że spora w tym zasługa ogromnie opiniotwórczego miesięcznika EdW. Bo właśnie stąd młodzi adepci elektroniki czerpali wiedzę i umiejętności. I właśnie ta pozorna prostota programowania w BASCOM’ie spowodowała że przybyło dużo projektów z procesorami – nawet do przysłowiowego mrugania diodą zamiast dwu tranzystorów używane są ich tysiące...

Na początku swojej mikroprocesorowej drogi, po pobieżnym zaznajomieniu się z możliwościami środowiska i łatwością implementacji w BASCOM czy microPascal (Pascala nadal darzę sentymentem), zdecydowałem się jednak na... język C. W kodzie C, jak na dłoni, widziałem bezpośrednie przełożenie kolejnych instrukcji na konkretne operacje sprzętowe. Bardzo przydatna była również możliwość zastosowania pozornie karkołomnych, jednak znacznie upraszczających kod wynikowy, konstrukcji dostępnych w tym języku. Pisząc program na mikrokontroler musiałem się liczyć z jego bardzo ograniczonymi zasobami, ale właśnie w C miałem duże możliwości optymalizowania ich zużycia.

Niech się nikomu jednak nie wydaje, że składni języka C można się nauczyć po przeczytaniu czterech artykułów. Zdecydowanie polecam sprawić sobie jakąś książkę – ich oferta jest dość bogata. Co ciekawe, istnieją też bezpłatne podręczniki w języku polskim – wystarczy wpisać w przeglądarkę internetową frazę: „programowanie w języku C książka bezpłatna”.

Już na pierwszym ekranie wśród wyników pojawiają się 3 książki w formacie .pdf do pobrania – legalnie. Bardzo ważne są też ćwiczenia praktyczne. Do tego potrzebne jest środowisko lub sam kompilator. Obecnie wiele narzędzi można swobodnie używać bez opłat. Polecany jest pakiet Microsoft Visual C++. Istnieje też, przeportowany z systemu Linux, kompilator GCC wraz z środowiskiem Code::Blocks oraz leciwy, ale za to bardzo lekki pakiet Borland C++. Nawet gdy zamierza się programować tylko mikrokontrolery, warto mieć pod ręką „duży” kompilator C – chociażby po to, aby sprawdzić swoje wyrafinowane konstrukcje składniowe, czy będą działać zgodnie z zamierzeniami. Możliwości debugowania na mikrokontrolerze są bowiem dość ograniczone.

Do programowania mikrokontrolerów na platformie AVR przygotowano oczywiście komercyjne środowiska developerskie z C, ale o prawdziwej popularności tego języka zadecydowało istnienie znakomitego kompilatora AVR-GCC. W odróżnieniu od pakietów BASCOM czy mikroPascal kompilator ten jest dostępny całkowicie bezpłatnie, bez żadnych ograniczeń, dla wszystkich. Do tego nie ma on wygórowanych wymagań sprzętowych ani platformowych. Można pisać kod w notatniku i kompilować z linii poleceń. Można też zainstalować i skonfigurować środowisko zintegrowane jak Atmel Studio lub Eclipse. Zatem bez ponoszenia dużych kosztów można się zestandaryzować do C.

Naprawdę warto!


Powyższy artykuł ukazał się w czasopiśmie "Elektronika dla Wszystkich" w numerze 4/2016

1 kwietnia 2016

Armata wodno-rakietowa

To nieco kuriozalne "urządzenie" stylizowane na (ostatnio bardzo popularną) broń czarnoprochową, ale nie ma z nią nic wspólnego. Jest to bowiem armata ładowana odtylcowo z "ładunkiem zespolonym", w którym czynnikiem napędowym jest woda wyrzucana pod ciśnieniem powietrza z wnętrza pocisku ;-)
Armata - widok od strony ładowania
Armata powstała naprędce z tego co znalazłem w garażu, aby zaprezentować ją 1 kwietnia - w jedynym dniu w roku kiedy takie dziwactwa uchodzą na sucho (tzn. akurat armata jest całkiem mokra). Szczegóły budowy widoczne są na fotografiach a działanie na dołączonym filmie :-)
Korek do ładowania powietrza do pocisku armaty
"Projekt" ten został zainspirowany artykułem: Rakieta wodna

Jak to działa?

Aby się zbytnio nie mądrzyć zacytuję opis z w/w strony:

Prawo Pascala mówi, że jeżeli na płyn zamknięty w zbiorniku wywierane jest ciśnienie zewnętrzne, to, nie uwzględniając ciśnienia hydrostatycznego, ciśnienie wewnątrz zbiornika jest wszędzie jednakowe i równe ciśnieniu zewnętrznemu. Tak więc w całej objętości butelki, zarówno w obrębie wody, jak i powietrza, ciśnienie jest jednakowe. Sprężone powietrze dąży do obniżenia swojego ciśnienia, a co za tym idzie, do powiększenia swojej objętości. Dlatego wypycha ono z butelki korek, a następnie znajdującą się wewnątrz wodę. Woda posiada stosunkowo dużą gęstość, co wiąże się z podobną bezwładnością. W czasie wyrzucania wody do tyłu, powstaje więc siła ciągu o dużej wartości skierowana do przodu, co pociąga za sobą ruch butelki.
Armata tuż po wystrzale

Co trzeba poprawić:

  • dorobić zamek, bo butelka ma tendencję do wysuwania się z lufy podczas pompowania,
  • zastąpić pompkę kompresorem (w zasadzie do tego potrzebuję tylko kawałek wężyka i dwa zaciski).
Kompresor na pewno poprawi szybkostrzelność co może mieć kolosalne znaczenie na wypadek wymuszonej obrony przed "nachodźcami".


Zatem broń się kto może :-]


Na temat armaty rozpocząłem wątek na forum DIY portalu elektroda.pl