[PRZYKŁADY] Nowe peryferia w mikrokontrolerach Microchipa, czyli jak ponownie polubić 8-bitowce [1]
Uwaga! Wszystkie odcinki artykułu są dostępne pod adresem.
Dominacja 32-bitowych mikrokontrolerów stała się już faktem. Umysłami konstruktorów zawładnęły 32-bitowe jednostki centralne, rozbudowane peryferia, olbrzymie (jak na układy embeded) pojemności pamięci programu i RAM. A jak ktoś chce zastosować mniejszy układ, to do małych obudów wkłada się okrojoną 32-bitową jednostkę z niższym taktowaniem, mniejszą pamięcią, uboższymi peryferiami i za niższą cenę.
Z jednej strony to dobrze, bo raz poznane architektura i narzędzia można stosować w bardzo wielu zastosowaniach. Jednak z drugiej strony wykreowany brak alternatyw w zmonopolizowanym rynku może wywołać stagnację. Microchip – firma z olbrzymim potencjałem, która od zawsze szła swoją drogą, czasami pod prąd ogólnym tendencjom, wymyśliła sposób na drugą młodość 8-bitowych mikrokontrolerów rodziny PIC16F. Pomysł był prosty tak jak to tylko możliwe: bierzemy prosty sprawdzony rdzeń i dodajemy specjalne, zaawansowane układy peryferyjne.
Pierwsze pytanie jakie się nasuwa: to jakie to są te zaawansowane układy peryferyjne, że konstruktor rozważy wykorzystanie staruszka PIC16F zamiast na przykład nowoczesnego Cortex-M? Spróbuję odpowiedzieć na to pytanie w tym artykule.
PIC16LF1507 i MPLAB X Code Configurator
Nic tak dobrze nie ilustruje możliwości mikrokontrolera i jego układów peryferyjnych jak konkretne przykłady. Dlatego postanowiłem do ilustracji mojej tezy wykorzystać leżący w mojej szufladzie układ PIC16LF1507. Mikrokontroler ten został zbudowany zgodnie z wyżej przedstawiona ideą: do rdzenia PIC16F dołączono kilka bardzo interesujących układów peryferyjnych, które trudno jest spotkać w układach innych producentów. Mikrokontroler został umieszczony w podstawce na małej uniwersalnej płytce drukowanej (fotografia 1). Na płytce oprócz podstawki umieściłem złącze do podłączenia programatora debuggera PICKit3 i całość zasiliłem z napięcia +3,3V. Tu uwaga – większość mikrokontrolerów PIC16LF potrafi pracować z napięciem zasilania +5V. Niestety maksymalne napięcie zasilające PIC16LF1507 na wartość +4V i układ najlepiej zasilić napięciem +3,3V, bo przy +5V może się uszkodzić.
Fot. 1. Widok układu testowego
Do testów wykorzystamy standardowe, bezpłatne środowisko projektowe MPLAB X IDE, kompilator C MPLAB XC8 w wersji bezpłatnej bez optymalizacji kodu. Do programowania pamięci został zastosowany firmowy programator/debuger PICkit3.
Pakiet IDE MPLAB X ma możliwość uruchamiania wtyczek (plug-in). Jedną z takich wtyczek jest firmowy MPALB Code Configurator. Jest to jedno ze stosunkowo prostych narzędzi, które bardzo ułatwiają życie programistom. Jak wiadomo układy peryferyjne są konfigurowane i sterowane przez zapisywanie i odczytywanie rejestrów konfiguracyjnych umieszczonych w przestrzenia pamięci RAM. Im bardziej rozbudowany układ, tym więcej rejestrów. A więcej rejestrów oznacza więcej wysiłku potrzebnego do prawidłowego zaprogramowania. Programowanie rejestrów konfiguracyjnych to żmudna i niezbyt lubiana praca, ale od jej prawidłowego wykonania zależy poprawne działanie aplikacji. Code Configurator znakomicie pomaga w kompletnym skonfigurowaniu układów peryferyjnych mikrokontrolera. Oczywiście skonfigurowany układ trzeba potem programowo obsługiwać, ale to już zadanie dla programisty.
Najpierw pokażę, jak wykorzystać Code Configurator do skonfigurowania układu taktowania i zaprogramowania bezpieczników (fuse).
Konfigurator uruchamiamy z okna Tools -> Embeded (wcześniej musi zostać pobrany i zainstalowany). Po uruchomieniu z lewej strony ekranu MPLAB X IDE pojawi się okno MPLAB Code Configurator Resources podzielone na 2 części:
- Device Resources – PIC16LF1507 (rysunek 2),
- Project Resources.
W oknie Device Resources umieszczono listę symboli graficznych wszystkich układów peryferyjnych mikrokontrolera, a w oknie Project Resources układy peryferyjne wybrane z listy do konfigurowania.
Rys. 2. Okno Device Resources wtyczki Code Configurator
Konfiguracja taktowania mikrokontrolera
Taktowanie mikrokontrolera jest konfigurowane z zasobu System. Po kliknięci na ikonę System w okienku Project Resources pojawi się okienko Clock do ustawiania źródła oraz częstotliwości taktowania, a także okno do konfigurowania bitów konfiguracyjnych mikrokontrolera Generate Configuration Bits (fuse). W pierwszym kroku ustawiamy taktowanie mikrokontrolera. Standardowo jednostka może być taktowana przez wewnętrzny oscylator RC , lub przez zewnętrzny przebieg taktujący z osobnego oscylatora (rysunek 3). Co ciekawe producent nie przewidział taktowania z wewnętrznego oscylatora kwarcowego. Za to taktowanie z wewnętrznego HFINOSC oscylatora daje możliwość wyboru wielu częstotliwości z zakresu od 31kHz do 16MHz.
Rys. 3. Schemat systemu taktowania mikrokontrolera PIC16LF1507