sobota, 10 marca 2018

PIC32MM - szykujemy środowisko i ustawiamy zegar - instrukcja dla przedszkolaka.

Moja świeżo wypieczona płytka "developerska" dedykowana 32-bitowemu mikrokontrolerowi firmy Microchip - PIC32MM0256GPM048 jest gotowa do testów. Nie ukrywam , że projekt ten sprawił mi dużo satysfakcji. Artykuł będzie mini-tutorialem od zainstalowania środowiska po zaprogramowanie zegara i ustawienie zmiennych niezbędnych do prawidłowego startu naszego MCU. Wszystkie opisywane czynności robię krok po kroku w realu, więc nie wkradnie się żaden błąd możliwy do popełnienia gdybym opisywał to z głowy.

Zdaje sobie sprawę , że instalacja środowiska i skonfigurowanie poprawnie MCU dla początkujących może być dużą barierą do pokonania, dlatego postaram się to opisać w miarę prosto i przystępnie . A że sam jestem początkujący więc nie będzie z tym problemu :)

Spodziewam się, że głębsze zakolegowanie się z PIC32MM będzie przyjemnym doznaniem. Wersja GPM ma na pokładzie I2C, którego nieopacznie zabrakło w starszych wersjach GPL.

W tutorialu pójdę trochę na łatwiznę, zmienne startowe i zegar ustawię szybciorem za pomocą automatycznej konfiguracji w MCC (MPLAB Code Configurator). MCC generuje naprawdę fajny , zrozumiały i dobrze opisany kod .W przypadku MCU 16-bitowych konfiguracja była ciut prostsza niż w MCU 32-bitowych i można było pozwolić sobie tam na ręczne ustawianie parametrów startowych bez użycia wspomagaczy typu MCC.

Wypunktujmy zatem co będzie przedmiotem poniższego mini-tutoriala :

  • Instalacja środowiska MPLAB-X IDE (warto nadmienić, że bieżąca wersja 4.15 wspiera PICkit4) w systemie Linux Mint (mój preferowany system)
  • Instalacja kompilatora X32 (do procków 32-bitowych Microchipa)
  • Instalacja MCC (MPLAB Code Configurator)
  • Zaprogramowanie zegara i zmiennych startowych niezbędnych do uruchomienia MCU 

Zatem bez zbędnej pisaniny zabieramy się do roboty i realizujemy kolejne punkty.

Instalacja środowiska MPLAB-X IDE


Program ściągamy stąd :  MPLAB-X IDE (zakładka Downloads i wersja dla LINUX-a)

Program jest spakowany, rozpakowujemy go standardowym "rozpakowywaczem" linuxowym. Na obrazku poniżej plik spakowany i pod nim plik rozpakowany :


W dalszej części działamy na pliku rozpakowanym z rozszerzeniem *.sh.
Aby zainstalować plik musimy nadać mu specjalne uprawnienia, robimy to z konsoli LINUX-a.

Najpierw w konsoli musimy wskazać ścieżkę dostępu do naszego pliku. Standardowo plik będziemy mieli w katalogu Pobrane i tam rozpakowany.
Wskazujemy ścieżkę dostępu :

cd /home/nazwa katalogu użytkownika/Pobrane

 W następnym kroku nadajemy uprawnienia do rozpakowanego pliku :

sudo chmod u+x MPLABX-v4.15-linux-installer.sh 

Teraz możemy zainstalować rozpakowany plik a robimy to tak :


sudo ./ MPLABX-v4.15-linux-installer.sh (pamiętać tutaj o ./ przed nazwą pliku)

Jeśli mamy Linux 64 bit, może nam wyskoczyć komunikat o braku biblioteki 32 bit . Trzeba wtedy odwiedzić tę stronę  i uzupełnić brakujące biblioteki w/g podanej na w/w stronie instrukcji.  

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

Rusza okienkowa instalacja IDE, trwa to szybko i sprawnie.
Po instalacji resetujemy kompa. Skrót do programu pojawi się w Menu w zakładce systemowej Programowanie, wyciągamy go na pulpit i mamy taki efekt na tle zimy :) :



Instalacja kompilatora X32


Program ściągamy stąd :  kompilator XC-32   (zakładka Downloads i wersja dla LINUX-a) aktualna wersja kompilatora to MPLAB® XC32/32++ Compiler v2.05

Ściągniety plik kompilatora nie wymaga rozpakowywania.


Odpalamy konsolę LINUXA.
Wskazujemy ścieżkę do naszego pobranego pliku :

cd /home/nazwa katalogu użytkownika/Pobrane

nadajemy uprawnienia do  pliku:
 
sudo chmod u+x xc32-v2.05-full-install-linux-installer.run

instalujemy


sudo ./xc32-v2.05-full-install-linux-installer.run

rusza okienkowa instalacja kompilatora.



Instalacja MCC (MPLAB Code Configurator)

Odpalamy środowisko MPLAB-X IDE klikając na skrót na pulpicie.

Po uruchomieniu kasujemy okienko MPLAB Store . Jeśli to zrobimy przy drugim uruchomieniu nie będzie już nas męczyć i otrzymamy taki widok


Można sobie podziałać na START Page w ramach zabawy . Ja to okno usuwam z widoku.

Wybieramy z górnej belki zakładkę Tools a następnie Plugins. W wyskakującym okienku wybieramy zakładkę Available Plugins


Szukamy na liście MPLAB Code Configurator i zaznaczamy go. Na dole okienka po lewej stronie klikamy Install

Zainstalowany plugin pojawi nam się po restarcie w postaci dodatkowej ikonki MCC na belce środowiska.


No i zasadniczo część artystyczna dotycząca instalacji środowiska i niezbędnych do pracy komponentów mamy już za sobą. Uważam , że było łatwo, miło i przyjemnie. Możemy udać się na chwilę odpoczynku przed kontynuacją :)



Zaprogramowanie zegara i zmiennych startowych niezbędnych do uruchomienia MCU


Odpalamy MPLAB IDE. Tworzymy nowy projekt , klikamy w tym celu na drugą od lewej ikonkę (na górnej belce), po kliknięciu wyskoczy nam okienko jak na poniższym zdjęciu.

 
W okienku nic nie zmieniamy, klikamy Next. W kolejnym okienku  ustawiamy Family i Device tak jak na zdjęciu poniżej.



Po ustawieniu klikamy Next. Wyskakuje kolejne okienko gdzie możemy ustawić docelowy programator ja mam PICkit3  lub ustawić na Simulator , potem można to w prosty sposób zmieniać nie ma problemu.


Klikamy Next i przechodzimy do przedostatniego okienka w którym wybieramy kompilator. Mamy zainstalowany jedyny słuszny czyli XC32 i głowa od wyboru nas nie rozboli. Tu mała dygresja, często spotykam się z zarzutem, że kompilator jest płatny i kosztuje kilka tysięcy dolarów. Uprzejmie informuję , że kompilator jest domyślnie w wersji free i w tej wersji ma jedynie ograniczoną optymalizację kodu . Ale powiem tyle , że z tą optymalizacją to z grubsza sranie w banie. Z punktu widzenia hobbysty nie ma to kompletnie żadnego znaczenia i na pewno nie odczujemy tej niedogodności . A w świecie zawodowym. ktoś kto oparł swój biznes o produkty Microchipa  nie postrzega tego w kategorii wady, po prostu wrzuca w koszty , odlicza od podatku i zapomina o temacie, taka jest polityka producenta i tyle. Więc o co chodzi  , o marudzenie wąskiej grupy malkontentów z forum elektrody dla której ARM jest religią a STM bożkiem :)  ja to postrzegam jako kreowanie sztucznego problem. Jeśli komuś jednak strzeli do łba pomysł aby mieć koniecznie tę optymalizację bo inaczej będzie się źle czuł, to ma dwie drogi, jedna darmowa w postaci 60 dniowej bezpłatnej wejściówki lub druga płatna w cyklach miesięcznych po 24 EUR za miesiąc :




Warto jeszcze nadmienić , że kompilator XC32 ma również wersję  do języka C++.


Po zaznaczeniu jedynie słusznego kompilatora klikamy Next i przechodzimy do ostatniego okienka w którym wpisujemy nazwę projektu. Folder do przechowywania projektów MPLABXProjects, jest tworzony automatycznie przy instalacji IDE, więc tym nie musimy się martwić. Musimy tylko pamiętać, że do tego katalogu wrzucane są wszystkie nasze projekty.


Po wpisaniu nazwy projektu klikamy Finish.

Operacja się powiodła pacjent przeżył :) Mamy nasz pierwszy projekt.


Radości nie ma końca dopóty nie rozwiniemy projektu i nie zobaczymy kilka niezrozumiałych pustych katalogów w których bynajmniej nie znajdziemy pliku main.c. Radość przemienia się w konsternację co dalej, jak to ogarnąć jak zagadać z MCU, czy jest na to jakakolwiek nawet najmniejsza szansa ? Takie rozterki ma każdy kto zaczyna a w szczególności kto zaczyna po omacku a pod ręką brak tutoriala czy innej pomocy. Z pomocą przychodzi nam rycerz w złotej zbroi - MCC.




Jedziemy dalej.
Klikamy na ikonkę w kształcie odznaki policyjnej :) koloru chyba niebieskiego z napisem MCC, ikonka znajduje się na głównej górnej belce z prawej strony. Po kliknięciu wyskoczy nam okienko :


klikamy SAVE i po chwili otworzy nam się wspaniały świat konfiguracji naszego fajowego procka za pomocą narzędzia zwanego MCC.


W chwili skupienia popatrzmy sobie na to okienko, miłe dla oka niezbyt krzykliwe, takie w sam raz dla hobbysty :) Na pierwszym planie mamy otwarte okienko do ustawienia zegara. Jak dla mnie bomba, nic nie muszę grzebać i szukać, podane na tacy jak ta lala. Wszystko po krótkiej chwili jest zrozumiałe i do ogarnięcia i to jest ogromna zaleta świata mikrokontrolerów PIC.
Ja się cieszę bo lubię się cieszyć z rzeczy prostych :)

Dla porządku w okienku środkowym widzimy dwie zakładki jedna Easy Setup (domyślna) i druga Registers. W tej pierwszej mamy prostą konfigurację bez wysiłku umysłowego :) a w tej drugiej bardziej zaawansowaną i tu działamy na rejestrach . Rejestry są podane jak na tacy, możemy się  z nimi zaprzyjaźnić w prosty sposób.

Do taktowania naszego procka skorzystamy z wewnętrznego generatora RC nazwanego FRC Oscillator (Fast RC). Chcemy uzyskać maksymalne możliwe taktowanie.
Warto jest zerknąć sobie na schemat zegara w datasheecie. Datasheet jest lightowy, można się z nim zakolegować bez bólu, ma tylko 358 stron co np. przy opasłych manualach ARM-owych przy których można dostać zawrotu głowy  wygląda zachęcająco :)

W środkowym okienku Internal Oscillator, klikamy w "ptaszka" znajdującego się z lewej strony napisu FRC Postscaler. Lokalna funkcja w okienku przełącza się na opcję z konfiguracją PLL jak na obrazku poniżej :



teraz za pomocą ustawień Multiplier i Divider doprowadzamy do wartości 24 MHz w okienku SYSCLK i to jest nasza maksymalna częstotliwość taktowania procka możliwa do ustawienia w trybie FRC. Efekt powinien wyglądać jak na poniższym zdjęciu :


Opcję Use Oscillator Secondary odznaczamy bo nie korzystamy z tego.
Przewijamy środkowe okienko w dół i zerkamy co tam jeszcze jest i nic nie zmieniamy.
W zasadzie na tym kończy się operacja ustawiania zegara, prawda , że było proste.  Aby ustawione zmiany były zastosowane, trzeba je wygenerować w postaci odpowiednich plików, które zostaną załączone do naszego projektu. Robimy to klikając w zakładkę Generate w lewym okienku przy napisie Project Resources.

Na razie nie generujemy jeszcze plików. Rozglądam się co by jeszcze ustawić w celach dydaktycznych .....

Ponieważ mini-tutorial pisze się sprawnie i bez potknięć rozszerzymy minimalnie jego zakres o ustawienie kierunku pinów. Weźmiemy sobie ustawimy jeden pin np.RB9 jako wyjście (Output) a drugi pin RC7 jako wejście (Input). Ustawienia możemy zrobić na dwa sposoby, jeden to klikamy prawym klawiszem myszki w numer pinu na obrazku mikrokontrolera. Wyskakuje okienko w którym poprzez zapięcie kłódki wybieramy odpowiednią opcję. Prościej chyba się już nie da. Druga możliwość ustawienia kierunku pinu, to okienko na dole z lasem otwartych kłódek :)



Więcej opcji dotyczących pinów np podciągnięcie wejścia, ustawienie konkretnego stanu na wyjściu, wyłączenie trybu analogowego dla wyjść cyfrowych etc . uzyskamy klikając w zakładkę Pin Module , która znajduje się na górnej belce środkowego okna. Jeśli nie wiemy co jaki skrót oznacza to podeprzeć się pomocą do MCC wszystko jest tam ładnie opisane.

Dobra wieńczymy nasze działania w MCC za pomocą kliknięcia w zakładkę Generate i patrzymy co się stanie.
Po chwili zostają dodane do projektu nowe pliki a ich spis zobaczymy w dolnym okienku tam gdzie wcześniej był las kłódek.


Byłbym zapomniał :) Była mowa o jakiś zmiennych startowych niezbędnych do uruchomienia MCU, zmienne się same wygenerują w odpowiednim pliku . Zerkniemy sobie później w celach naukowych w ten zakątek . Czyli mieliśmy coś zrobić w zamierzeniach a to się samo zrobi , no ja cie .... jak tu nie pokochać PIC-e , na każdym kroku ułatwienia :)

Przełączamy się na widok projektu, w tym celu klikamy zakładkę Projects w lewym górnym okienku, pierwsza zakładka od lewej.
Rozwijamy katalogi projektu i otrzymujemy taki widok :


Cała nasza radosna twórczość w MCC wygenerowała pliki w katalogu MCC Generated Files, dostalismy również w gratisie plik main.c, którego w pustym projekcie brakowało.

Tu  mała dygresja, w taki sam prosty sposób możemy działać na bardzo bogatym ekosystemie mikrokontrolerów PIC 8-bitowych i 16-bitowych.

Dobra kończymy zabawę z MCC, wychodzimy z programu i zamykamy go.
Uruchamiamy ponownie MPLABX-IDE.

Rozwijamy sobie katalogi projektu, klikamy na main.c aby pokazał nam się w okienku edycji.
Teraz spróbujmy zrobić kompilację projektu. Nie programujemy na razie procka więc opcję PICkit 3 zamieniamy na Simulator.
W tym celu klikamy prawym klawiszem myszki na nazwę naszego projektu czyli PIC32MM_Start i rozwija się menu z którego wybieramy ostatnią opcję Properties. W wyskakującym okienku zaznaczamy Simulator i zatwierdzamy zmianę Aplly. Dezaktywują nam się ikonki do zaprogramowania pamięci Flash.


Aby uruchomić proces kompilacji klikamy na ikonkę młoteczka szewskiego.
Po 1 sekundzie kompilacja projektu się dokona i otrzymamy taki widok.


Należy wspomnieć , że ogromną zaletą środowiska MPLABX-IDE jest jego prostota i intuicyjność. Nie mamy tutaj wodotrysku ikonek od których można dostać oczopląsu.

Całą konfigurację zegara i ustawienie rejestrów sprzętowych zobaczymy w pliku mcc.c i mcc.h aby głębiej wniknąć w temat czyli co do czego służy należy wziąć w łapkę datasheet i sobie powolutku studiować aż pootwierają się klapki w mózgu i wszystko będzie jasne jak słońce. W plikach pin_manager.c i pin_manager.h zebrano wszystko co dotyczy ustawienia wszystkich portów i pinów.

Nie będę w tym tutorialu rozważał więcej tematów bo by się z tego książka zrobiła. Powolutku kolejnymi wpisami będę poznawać PIC32MM 

Na koniec ważna uwaga, każdy mikrokontroler PIC-a warto zacząć poznawać za pomocą "magicznego" pliku nagłówkowego w którym wszystkie rejestry są opisane strukturami i prostymi definicjami.

Poszukajmy tego pliku dla naszego PIC32MM0256GPM048. W projekcie odwołujemy się do tego magicznego pliku za pomocą uniwersalnego nagłówka :
#include <xc.h> czyli de fakto nie musimy znać nawet jego nazwy.

Są dwie metody znalezienia magicznego pliku nagłówkowego, grzebanie w katalogu kompilatora XC32 , plik znajdziemy wtedy w ścieżce systemowej Linuxa : /opt/microchip/xc32/v2.05/pic32mx/include/proc/p32mm0256gpm048.h
Ja byłem cwany i znając nazwę pliku wpisałem w konsoli Linuxa : locate nazwa pliku i już miałem ścieżkę :)

Druga metoda :
Otwieramy plik pin_manager.c z naszego projektu w MPLABX-IDE, odszukujemy np. napis TRISA (ustawienie kierunku pinów na porcie A) klikamy na nim prawym klawiszem myszki. Rozwija się menu z którego wybieramy opcję Navigate --> Go to Declaration/Definition, po wybraniu opcji i kliknięciu ,automatycznie otworzy się nasz poszukiwany magiczny plik nagłówkowy i przekieruje nas do sekcji gdzie zdefiniowany jest TRISA. 
Poniżej wycinek z pliku tej sekcji.


Szczególnie ciekawa jest budowa unii , która zawiera w sobie strukturę. O takiej konstrukcji pisałem już artykulik jakiś czas temu, można z niego w prosty sposób zrozumieć jak to działa.
Wykorzystując tę konstrukcję jeśli chcemy zmienić kierunek jednego pinu np.RA0 na wyjście, to w programie wpiszemy sobie tak TRISAbits.TRISA0 = 0; (0 - Output / 1 - Input). Dla przykładu w świecie AVR tożsamy zapis wyglądałby tak : DDRA |= (1<<PA0) ;  . Jeśli chcemy ustawić stan wysoki na wyjściu RA0 napiszemy tak PORTAbits.RA0 = 0; W AVR tożsamy zapis wygląda tak PORTA |=(1<<PA0); Jeśli chcemy podtrzymać konwencję jak w AVR nie ma problemu możemy pisać tak samo.

Posługiwanie się magicznym plikiem nagłówkowym bardzo upraszcza i uprzyjemnia programowanie .

Dla tych którzy nie znają specyfiki, mikrokontrolerów PIC a chcieli by ją bezboleśnie poznać polecam książkę Pawła Borkowskiego "Mikrokontrolery PIC w praktycznych zastosowaniach" jest dostępny również ebook.



Jest to bardzo fajna książka, napisana lekkim i humorystycznym językiem.

Dobrze kończę już ten mini-tutifruti bo czekają mnie kolejne mini wyzwania m.in uruchomienie wyświetlacza na mojej płytce developerskiej do PIC32MM.
Muszę do tego jakiś soft napisać bo nie wszystko samo się napisze :)

Jestem wdzięczny Microchipowi , że wyprodukował tak sympatyczny mikrokontroler jak PIC32MM z serii GPM , który dostarcza mi od samego początku pozytywnych doznań transcendentalnych :). Programowanie tego mikrokontrolera jest czystą przyjemnością.


Pozdrawiam
picmajster.blog@gmail.com 

Linki :

2 komentarze:

  1. http://microchipdeveloper.com/install:mplabx-lin64 w ubuntu 17.10 64bit trzeba doinstalować biblioteki

    OdpowiedzUsuń
  2. Dziękuję za tę uzupełniającą informację. Przedstawiona w artykule instalacja opiera się o Linux Mint 64 bity i w przypadku tego systemu nie trzeba nic dodatkowo instalować tylko to co podano w artykule.

    Pozdrawiam
    PICmajster

    OdpowiedzUsuń