Podstawy mikrokontrolerów PIC. Bity konfiguracyjne.

Podstawy mikrokontrolerów PIC. Bity konfiguracyjne.

Projektowanie elektroniki wymaga nie lada umiejętności przewidywania problemów na różnych stadiach rozwoju urządzenia. Bardzo ważną kwestią jest sposób oprogramowania mikrokontrolera i sprzęgniętych z nim modułów.

W tym artykule zajmiemy się wybranymi bitami konfiguracji w układach PIC firmy Microchip.

Czym są bity konfiguracyjne?

Każdy mikrokontroler ma swoją pamięć, której modyfikacja umożliwia nam:

  1. Konfigurowanie peryferiów;
  2. Zapisywanie obliczeń;
  3. Przechowywanie tymczasowych danych;
  4. Przechowywanie stałych wyrażeń;
  5. Konfigurowanie zachowania urządzenia po włączeniu.

W mikrokontrolerze mamy do czynienia z różnymi typami pamięci – spotkamy tam Static RAM,  Flash, a czasami także EEPROM. Każdy typ pamięci ma swoją specyficzną rolę.

Bity konfiguracyjne są zapisane w pamięci nieulotnej, co jest pokazane na poniższym obrazku. Oznacza to, że podczas każdego startu układu te dane są już gotowe, przez co mikrokontroler ustawia od razu pewne rzeczy tak, jak zaplanował to programista.

pic1

Poszczególne bity konfiguracji składają się w słowa (tak jest w mikrokontrolerze PIC16F1509, który posłuży tutaj jako przykład). Konfigurujemy je raz, ale ich rola jest na tyle ważna, że można je porównać do znaków drogowych – normalnie nie przykuwają zbytnio naszej uwagi – ale ochraniają nas przed niebezpiecznymi sytuacjami w ruchu drogowym. Dokładnie podobnie jest z bitami konfiguracyjnymi.

Przykładowe zadanie

Załóżmy, że naszym celem na początku jest minimalna konfiguracja mikrokontrolera do pracy. Jak już wspomniałem – zajmować będziemy się układem o oznaczeniu PIC16F1509[1]:

  • 14 KB flash;
  • 512 B RAM;
  • 5 MIPS;
  • 5-bitowy DAC i 10-bitowy ADC.

Na początek przyjrzyjmy się, jakie bity konfiguracji ma nasz układ:

Wycinek z noty katalogowej.

Wycinek z noty katalogowej.

Na pierwszy rzut oka całość może wydawać się nic nieznaczącym kłębkiem danych. Wyjaśnię znaczenie najważniejszych bitów, reszta zawarta jest w dokumentacji w punkcie 4[1, str. 39].

MCLRE:

Bit ten odpowiada za reset mikrokontrolera. W przypadku ustawienia tego bitu jako 1, odpowiadający pin będzie funkcjonować jako wejście reset mikrokontrolera i będzie pracować z wbudowanym rezystorem podciągającym. Jednakże jeżeli bit będzie zerem, wyprowadzenie będzie do naszej dyspozycji (także to, czy używać będziemy rezystora podciągającego). Jest tylko jeden haczyk – w wielu mikrokontrolerach PIC (jeżeli nie we wszystkich) pin po oddaniu do dyspozycji programisty może służyć tylko jako WEJŚCIE.

WDTE:

Bity układu watchdog, który ma za zadanie zabezpieczyć układ przed zawieszeniem się (wpadnięciem w nieprzewidzianą pętlę nieskończoną). Dlaczego ten bit jest tak ważny? Otóż jeżeli niepoprawnie ustawimy watchdoga (albo wcale) to nasz układ będzie działał niestabilnie.

Domyślnie watchdog jest aktywowany, więc jeżeli nie będziemy go czyścić (a raczej wartości jego zliczeń), to układ będzie nam się resetował. Aby wyłączyć watchdog, należy zapisać dwa bity WDTE jako 0 (o różnych sposobach szybkiej konfiguracji bitów z poziomu środowiska programistycznego przeczytacie dalej).

FOSC:

Bity konfiguracji oscylatora są chyba jedną z najważniejszych rzeczy, jeżeli chodzi o działanie układu. Pozwalają nam na wybór generatora sygnału taktującego procesor i wewnętrzne peryferia. Do wyboru mamy:

  • zewnętrzny zegar,
  • zewnętrzny rezonator,
  • zewnętrzny obwód pseudorezonansowy,
  • wewnętrzny - kalibrowany blok oscylatora.

Jeżeli dopiero zaczynasz tworzyć swoje pierwsze aplikacje dla mikrokontrolerów PIC, polecam wewnętrzny oscylator.

Pora przyjrzeć się kolejnemu słowu konfiguracji [1,  str. 41]:

Wycinek z dokumentacji.

Wycinek z dokumentacji.

Tym razem najbardziej znaczącym bitem dla nas jest:

LVP:

Bit ten umożliwia zmianę trybu programowania w tryb programowania niskimi napięciami. Jednakże nie polecam tego trybu przy programowaniu prostych układów. Spowodował u mnie błędy w działaniu programu. Tryb ten nie jest przystosowany do działania z debugerem [2].

Co z pozostałymi bitami?

Ustawienie reszty bitów nie jest tak ważne, ponieważ nie mają one takiej wielkiej roli jak te przedstawione wcześniej. Przydać mogą się one przy używaniu bardziej zaawansowanych opcji (jeżeli w Twojej aplikacji istnieje problem powolnego narastania napięcia zasilania, może zainteresować Cię bit PWRTE – odpowiadający za włączenie procesora po zasileniu).

Docelowe sposoby programowania bitów konfiguracji

Wszystko tak naprawdę można załatwić kilkoma instrukcjami preprocesora. Składnia jest następująca (przedstawiony przykład dla języka C):

Słowo config umożliwia preprocesorowi zapisanie odpowiedniego bitu/bitów konfiguracji. Poszczególne wartości użyte do programowania można zobaczyć w środowisku Microchip.

Aby tego dokonać, w otworzonym projekcie należy w pasku menu wybrać “Window->PIC Memory Views->Configuration bits”. To, co wyświetli program, jest zależne od mikrokontrolera, który używany jest w danym projekcie. Całość umożliwia automatyczne wygenerowanie ustawień po kliknięciu przycisku “Generate Source Code To Output”.

Moja przykładowa konfiguracja (BOREN nie został tutaj opisany):

 Bibliografia:

[1] http://ww1.microchip.com/downloads/en/DeviceDoc/40001609D.pdf
[2] http://microchip.wikidot.com/icd3:low-voltage-programming

Artykuł zgłoszony do VII edycji konkursu (po)wakacyjnego!
Nagrody ufundował sponsor główny:

satland

 oraz sponsorzy:

and-techavthelion

ebookpointstrefakursów

bity, konfiguracja, microchip, pic

Trwa ładowanie komentarzy...