Cechą charakterystyczną PIC jest wysoka precyzja generatora wewnętrznego RC. Co implikuje fakt, że w większości przypadków kwarc zewnętrzny jest tutaj zbędny. Dlatego nie znajdziemy go na naszej płytce Curiosity. W tutorialu pokażę jak w najprostszy dostępny sposób możemy skonfigurować zegar wewnętrzny RC a zajmie nam to dosłownie moment. Ja najczęściej wykorzystuję maksymalny dostępny pułap częstotliwości oferowany przez generator RC czyli 24 MHz. Zatem na koń szable w dłoń.
Uruchamiamy środowisko MPLABX-IDE. Naszym celem jest skonfigurowanie projektu do pracy z zegarem wewnętrznym RC na 24 MHz. Klikamy drugą od lewej ikonkę New Project. Wyskakuje nam okienko jak poniżej w którym klikamy tylko Next :
W kolejnym okienku dokonujemy wyboru naszego mikrokontrolera jaki mamy na płytce. A jest to PIC32MM0256GPM064.
Klikamy Next i w kolejnym okienku dokonujemy wyboru programatora. W tym miejscu musimy podłączyć kablem USB do PC naszą płytkę Curiosity z PIC32MM. Po chwili dołączony zostanie do spisu wybór zaznaczony na poniższym zdjęciu :
Zaznaczamy ten wybór i Next.
W kolejnym okienku wybieramy kompilator XC32 w najwyższej zainstalowanej wersji i klikamy Next :
Wyskoczy ostatnie okienko gdzie wpisujemy nazwę naszego projektu pic32mm_tutorial_part_2 i klikamy Finish.
Utworzyliśmy pusty projekt , który będzie podstawą do dalszego działania. Utworzony projekt zobaczymy na lewej górnej belce , mam tam kilka innych projektów ale to nas nie interesuje :
Teraz uruchomimy magiczne narzędzie MCC (Mplab Code Configurator). Ikonkę znajdziemy na górnej belce z prawej strony, ikonka koloru niebieskiego z białym napisem MCC. Po chwili ciszy wyskoczy nam okienko zatytułowane Save MCC Configuration File, klikamy Save.
Zapisany plik konfiguracyjny MyConfig.mc3 będzie dostępny w katalogu Important Files projektu jakby co.
Po chwili naszym oczom pokaże się główny widok panelu MCC i wygląda to jak poniżej :
Po chwili naszym oczom pokaże się główny widok panelu MCC i wygląda to jak poniżej :
Widzimy na pierwszym planie podane jak na tacy okienko do prostego ustawienia zegara. Jak ktoś miał do czynienia z CubeMX firmy STM i pierwszy raz zobaczył tam sekcję zegara do konfiguracji to pewnie włos mu się zjeżył na głowie. Po co się narażać na takie traumy skoro na PIC32MM mamy wszystko bezstresowo :)
Jako standardowe źródło zegara ustawiony jest FRC Oscillator, czyli szybki generator wewnętrzny RC 8 MHz. Aby ustawić zegar wewnętrzny na nominalną wartość 24MHz musimy użyć pętli PLL. W tym celu klikamy w "ptaszka" przy napisie FRC Postcaller i wyskoczy nam zaptaszkowany napis PLL enable. Poniżej tego napisu zobaczymy dwa okienka Multipier i Divider. Ustawiamy tutaj tak : Multipier = 3:1 i Divider = 1:1 (jeśli nie używamy USB bo tu USBCLK będzie 12MHz). Jeśli ustawimy Multipier = 12:1 i Divider = 4:1 (przy tych ustawieniach można używać USB bo USBCLK = 48MHz) też otrzymamy zegar 24 MHz ale w tym przypadku zegar peryferyjny PBCLK będzie chodził nam wolniej ,w/g moich obserwacji o połowę czyli 12 MHz . Co odkryłem organoleptycznie przy okazji konfigurowania Timera . Nasze ustawienia zegara powinny wyglądać jak poniżej :
W okienku SYSCLK widzimy wartość 24 MHz i to nas informuje , że zegar systemowy zostanie ustawiony na taką właśnie wartość. Wszystkie peryferia posługują się jednym zegarem i nie trzeba ich oddzielnie konfigurować dla każdego użytego peryferium tak jak w ARM-ach. Ale jednocześnie jest możliwość prostego odpięcia praktycznie każdego peryferium od zegara tak aby drastycznie zmniejszyć pobór prądu w przypadku kiedy nam na tym szczególnie zależy.
Zegar mamy już ustawiony, teraz jeszcze tylko dwie czynności , które standardowo robię w okienku konfiguracyjnym zegara.
1. zmieniam ustawienie w okienku Clock Output Pin Configuration na opcję OSCO pin operates as a normal I/O. Ustawienie to zmienia funkcję pinu RA3 z wyjścia generującego zegar na zwykły pin I/O. Jeśli tego nie zrobimy to w przypadku użycia pinu RA3 będziemy niepotrzebnie się denerwować , że pin ten nie chce z nami współpracować.
2. kasuję "ptaszka" w opcji Use Secondary Oscillator, nie używam więc się niech nie pulta w ustawieniach.
Ostatecznie nasze okienko konfiguracyjne zegara powinno wyglądać jak poniżej :
Jeśli chcemy sobie zerknąć jakie ustawienia są w poszczególnych rejestrach sekcji zegara to klikamy w zakładkę Registers.
Aby nasze ustawienia przenieść automatycznie do projektu klikamy w zakładkę Generate , która znajduje się w lewym górnym okienku opisanym jako Project Resources. Po chwili pliki konfiguracyjne wygenerowane przez MCC zostaną dodane do naszego projektu. Aby zobaczyć zmiany w projekcie zamykamy MCC klikając raz w ikonkę (odznaka policyjna z napisem MCC) na górnej belce narzędziowej. Ekran zmieni nam się jak poniżej :
O matko a gdzie nasz projekt ??? zeżarło go czy co ? Oj tam oj tam po co te nerwy. Klikamy w zakładkę Projects i naszym oczom pokaże się widok jak poniżej :
Wszystko czytelne i gotowe do dalszej pracy. Ustawienie zegara i przygotowanie szablonu projektu trwało dosłownie chwilę no i czego chcieć więcej do szczęścia :) Od samego początku PIC 16bit i 32bit urzekły mnie prostotą i tym "czymś" czego w żadnych innych mikrokontrolerach jeszcze nie znalazłem :)
Pozdrawiam
picmajster.blog@gmail.com
Linki :
To prawda że na FRC ustawienie na 96 MHz i podział na 4 powoduje że PBCLK pracuje z 12MHz, bo przy tych parametrach UART zawsze ma 2x mniejszą prędkość niż wynika z wyliczeń
OdpowiedzUsuńTak to jest taki niuans o istnieniu , którego trzeba sobie zdawać sprawę . Generalna zasada jeśli Divider będzie 1:1 to mamy pewność , że PBCLK będzie taktowany tak jak core. W pozostałych przypadkach MCC trochę nas tu bajeruje , że PBCLK = SYSCLK bo w rzeczywistości tak nie jest.
OdpowiedzUsuń