Nowy rok to nowe zabawki, chciałoby się powiedzieć. W każdym razie zainspirowany dyskusją, którą prowadziliśmy w Google+ w związku ze zmianą właściciela marki Atmel i przyszłością rodziny AVR, sięgnąłem po niedrogą płytkę prototypową firmy STMicroelectronics, zawierającą mikrokontroler tegoż producenta, z rdzeniem w architekturze ARM. Wybór – całkowicie przypadkowy, bo chodziło o najtańszą ofertę w serwisie aukcyjnym – padł na Nucleo L152RE. Dane dotyczące platformy i tego konkretnego modelu znajdziecie na stronie producenta, więc nie będę ich tutaj powielał (dbajmy o ten nasz biedny internet). Tam też znajdziecie serię instruktaży wideo, pokazujących, jak zacząć pracę z płytkami Nucleo i jak ją z powodzeniem kontynuować. Tutaj zatem będzie krótko, na zachętę.
Zacznę od końca. Jestem pod ogromnym wrażeniem tej platformy. Bo tak:
- żeby pisać programy i ładować je do układu nie jest potrzebne żadne oprogramowanie instalowane na naszym komputerze – wystarczy w miarę świeża przeglądarka WWW i połączenie z internetem;
- żeby podłączyć płytkę Nucleo do komputera, potrzebujemy port USB; w systemie Windows potrzebne są jeszcze sterowniki – znajdziemy je na stronie producenta, zalinkowanej wcześniej;
- co do programowania, powinniśmy znać język C/C++ i – rzecz jasna – topologię wyprowadzeń płytki, nazwy jej elementów zaimplementowane w bibliotece dla C/C++ itp.
Bierzemy zatem naszą płytkę Nucleo, podłączamy do komputera, instalujemy sterowniki (jeśli to konieczne, aktualizujemy firmware – patrz: linki na stronie producenta) i oczom naszym ukazuje się napęd USB o nazwie "NUCLEO".
Wchodzimy teraz – za pomocą przeglądarki ;-) – na stronę mbed.org (lub od razu developer.mbed.org), czytamy sobie zawarte tam informacje (niecierpliwi mogą ten krok pominąć, aczkolwiek...), zakładamy konto, łączymy je sobie z twitterem, githubem i z czym tam jeszcze chcemy (możemy też nie łączyć) i zaglądamy na nasz dysk USB "NUCLEO". Znajdziemy tam plik "mbed.htm". Przeciągamy go "na przeglądarkę" – zostaniemy przekierowani na stronę, która pozwoli nam dodać posiadaną i podłączoną do komputera płytkę prototypową do naszego konta (czyli powiązać płytkę z kontem). Pozwalamy na to i od tego momentu możemy spokojnie używać online'owego IDE z kompilatorem, produkującym kod wynikowy specjalnie dla naszego mikrokontrolera i naszej płytki :-) W serwisie mbed.org znajdziemy również bardzo przydatną, praktycznie niezbędną w dalszej pracy charakterystykę wspieranych platform (strona poświęcona mojej płytce).
Program, po skompilowaniu, wysyłany jest na nasz komputer w postaci binarnego wsadu. Kopiujemy (lub przenosimy) ten wsad do naszego dysku "NUCLEO" i... gotowe! Mikrokontroler zaprogramowany! Dociekliwi zauważą, że po odświeżeniu dysk "NUCLEO" zawiera tylko plik "mbed.htm", wsad zniknął :-)
Prawda, że cudownie proste?
Dla zabawy i porównania z Arduino pozwoliłem sobie przeportować na Nucleo przykładowy program, wyświetlający tablicę kodów ASCII w oknie terminala portu szeregowego PC. Ale to nie było żadne wyzwanie (działa jak w Arduino), zatem komputer PC zastąpiłem moim modułem sterownika LCD z komunikacją przez port szeregowy. Owszem, Nucleo ma wadę – jak praktycznie każdy ARM, pracuje w logice 3,3V, więc w celu wymiany danych z urządzeniami pracującymi w logice 5V (TTL) musimy użyć konwertera poziomów (lub konwersji poziomów logicznych w ogólności).
Kod źródłowy programu zaprezentowany został poniżej.
- Kod:
Myślę, że płytki z serii Nucleo mogą być całkiem niezłą alternatywą dla Arduino, również Arduino Due (tam też jest ARM). Mam nadzieję, że przyszłość przyniesie wiele ciekawych inspiracji i projektów zrealizowanych z wykorzystaniem tej platformy (chodzi tu głównie o mnie ;-))
A co to za język ten C/C++ ? Czyżby to jakaś nowość w świecie języków programowania?
OdpowiedzUsuńO, to bardzo dobre pytanie - już odpowiadam. Otóż geneza pisania w różnych opracowaniach "C/C++" jest, jak się domyślam, prosta. Twórcy - bo obecnie można już tak to ująć - języka C++ od początku (od Bjarne) nie narzucili jednoznacznego stylu programowania w tym języku (jest to język obiektowy, ale programista nie jest zobowiązany do ubierania swojego programu w klasy i tworzenia obiektów), pozwolili jednak wykorzystywać dobrodziejstwa C++ w programach o strukturze zbliżonej do klasycznego C (ANSI C itp.), dbając o wsteczną kompatybilność, czy też chcąc pozyskać sobie przychylność programistów piszących dotychczas w C. Znam kilku koderów, którzy do obsługi operacji wejścia-wyjścia preferują klasyczne funkcje znane im z stdio.h itp. (choć już dawno przepisane i zmodyfikowane, ale jednak) mimo, że program tworzą w pełni obiektowy. Idąc dalej, kod źródłowy programów dla Arduino czy choćby Nucleo ma często strukturę programu w języku C, mimo, że znakomita większość bibliotek dla Arduino jest obiektowa.
UsuńTak więc używam - ja i wielu innych publikujących teksty o programowaniu - zlepka "C/C++", żeby podkreślić płynne połączenie programowania obiektowego (C++) i strukturalnego (C) w danym projekcie.
Mam nadzieję, że moje wyjaśnienia nie są zbyt zawiłe i były pomocne.
Dziękuję za wyjaśnienie. Chociaż nie od dziś programuję w C++, a co za tym idzie również w C, muszę przyznać że nie podchodziłem do takiego zapisu w ten sposób, a wręcz taki zapis raził mnie w oczy. W programowaniu mikrokontrolerów "problem" pisania proceduralnego wykorzystując język C++, a więc język obiektowy, mocno się rozmywa. Właściwie ludzie często nie mają pojęcia, że ich środowisko wykorzystuje język C++, jak to jest chociażby we frameworku Arduino. Tutaj często mówi się, również w publikacjach drukowanych, o jakimś tajemniczym, nienazwanym języku, który jest podobny do C. U początkujących użytkowników Arduino może to powodować spore zamieszanie i strach przed przesiadką na czysty C.
UsuńTak, też w przypadku publikacji związanych z Arduino spotkałem się ze sformułowaniami typu "język podobny do C" – całkowicie niepotrzebna asekuracja moim zdaniem.
UsuńBardzo fajnie napisane. Jestem pod wrażeniem i pozdrawiam.
OdpowiedzUsuńDziękuję i również pozdrawiam!
Usuń