- Przygotowanie do programowania:
- Tworzenie nowego projektu za pomocą MPLAB-X:
- Zapoznanie się z rejestrami konfiguracji:
- Ustawianie bitów konfiguracyjnych w MPLAB-X:
- Programowanie PIC, aby migać diodą LED:
- Schemat obwodu i symulacja Proteusa:
To jest drugi samouczek z naszej serii samouczków PIC. W naszym poprzednim samouczku Pierwsze kroki z mikrokontrolerem PIC: Wprowadzenie do PIC i MPLABX, dowiedzieliśmy się podstawowych rzeczy o naszym mikrokontrolerze PIC, zainstalowaliśmy również wymagane oprogramowanie i zakupiliśmy nowy programator PicKit 3, z którego będziemy wkrótce korzystać. Teraz jesteśmy gotowi do rozpoczęcia naszego pierwszego programu migania diod LED przy użyciu PIC16F877A. Dowiemy się również o rejestrach konfiguracji w tym samouczku.
Ten samouczek zakłada, że zainstalowałeś wymagane oprogramowanie na swoim komputerze i znasz przyzwoite podstawy o MCU PIC. Jeśli nie, wróć do poprzedniego samouczka i zacznij od tego.
Przygotowanie do programowania:
Ponieważ zdecydowaliśmy się użyć PIC16F877A, z kompilatorem XC8 zacznijmy od ich arkusza danych. Polecam wszystkim pobranie arkusza danych PIC16F877A i podręcznika kompilatora XC8, ponieważ będziemy się do nich często odnosić w miarę postępów w naszym samouczku. Zawsze dobrze jest przeczytać kompletny arkusz danych dowolnego MCU, zanim zaczniemy go programować.
Teraz, zanim otworzymy MPLAB-X i zaczniemy programować, jest kilka podstawowych rzeczy, o których należy wiedzieć. W każdym razie, ponieważ jest to nasz pierwszy program, nie chcę przemawiać do was z mnóstwem teorii, ale zatrzymamy się tu i tam, gdy będziemy programować i wyjaśnię wam takie rzeczy. Jeśli nie masz wystarczająco dużo czasu na przeczytanie tego wszystkiego, po prostu rzuć okiem i wskocz do wideo u dołu strony.
Tworzenie nowego projektu za pomocą MPLAB-X:
Krok 1: Uruchom MPLAB-X IDE, które zainstalowaliśmy w poprzedniej klasie, po załadowaniu powinno wyglądać mniej więcej tak.
Krok 2: Kliknij Pliki -> Nowy projekt lub użyj skrótu Ctrl + Shift + N. Otrzymasz następujące POP-UP, z którego musisz wybrać Samodzielny projekt i kliknąć Dalej.
Krok 3: Teraz musimy wybrać nasze urządzenie do projektu. Wpisz więc jako PIC16F877A w sekcji rozwijanej Wybierz urządzenie . Gdy to zrobisz, powinno to wyglądać tak, a następnie kliknij Dalej.
Krok 4: Następna strona pozwoli nam wybrać narzędzie do naszego projektu. Byłby to PicKit 3 dla naszego projektu. Wybierz PicKit 3 i kliknij dalej
Krok 5: Następna strona poprosi o wybranie kompilatora, wybierz kompilator XC8 i kliknij Dalej.
Krok 6: Na tej stronie musimy nazwać nasz projekt i wybrać lokalizację, w której projekt ma zostać zapisany. Nazwałem ten projekt jako Blink i zapisałem na moim pulpicie. Możesz go nazwać i zapisać w dowolny sposób. Nasz projekt zostanie zapisany jako folder z rozszerzeniem .X, który może być bezpośrednio uruchomiony przez MAPLB-X. Po zakończeniu kliknij Zakończ.
Krok 7: To wszystko !!! Nasz projekt powstał. W lewym skrajnym oknie pojawi się nazwa projektu (miga tutaj), kliknij na nią, abyśmy mogli zobaczyć wszystkie znajdujące się w nim katalogi.
Aby rozpocząć programowanie, musimy dodać plik główny C, do naszego katalogu plików źródłowych. Aby to zrobić, po prostu kliknij prawym przyciskiem myszy plik źródłowy i wybierz Nowy -> Główny plik C, jak pokazano na poniższym obrazku.
Krok 8: Pojawi się następujące okno dialogowe, w którym należy podać nazwę pliku C. Podałem ponownie nazwę w Blink, ale wybór należy do Ciebie. Nazwij go w kolumnie Nazwa pliku i kliknij Zakończ.
Krok 9: Po utworzeniu głównego pliku C, IDE otworzy go dla nas z kilkoma domyślnymi kodami, jak pokazano poniżej.
Krok 10: To wszystko, teraz możemy rozpocząć programowanie naszego kodu w głównym pliku C. Domyślny kod nie będzie używany w naszych samouczkach. Więc usuńmy je całkowicie.
Zapoznanie się z rejestrami konfiguracji:
Przed przystąpieniem do programowania dowolnego Mikrokontrolera musimy wiedzieć o jego rejestrach konfiguracyjnych.
Więc czym są te rejestry konfiguracji, jak i dlaczego powinniśmy je ustawić?
Urządzenia PIC mają kilka lokalizacji, które zawierają bity konfiguracyjne lub bezpieczniki. Te bity określają podstawowe działanie urządzenia, takie jak tryb oscylatora, zegar watchdog, tryb programowania i ochrona kodu. Te bity muszą być ustawione poprawnie, aby kod mógł zostać uruchomiony, w przeciwnym razie mamy niedziałające urządzenie . Dlatego bardzo ważne jest, aby wiedzieć o tych rejestrach konfiguracji, zanim jeszcze zaczniemy korzystać z naszego programu Blink.
Aby skorzystać z tych rejestrów konfiguracyjnych, musimy przeczytać arkusz danych i zrozumieć, jakie są dostępne różne typy bitów konfiguracyjnych i jakie są ich funkcje. Te bity można ustawić lub zresetować w oparciu o nasze wymagania programistyczne przy użyciu pragmy konfiguracji.
Pragma ma następujące formy.
#pragma config setting = wartość-stanu #pragma config register = wartość
gdzie ustawienie jest deskryptorem ustawienia konfiguracyjnego, np. WDT, a stan jest tekstowym opisem żądanego stanu, np. WYŁ. Rozważ następujące przykłady.
#pragma config WDT = ON // włącz zegar watchdog #pragma config WDTPS = 0x1A // określ wartość postscale licznika czasu
ZRELAKSOWAĆ SIĘ!!….. RELAKS !!…. RELAKS !!…...
Wiem, że za bardzo weszło nam to do głowy i ustawienie tych bitów konfiguracyjnych może wydawać się nieco trudne dla początkującego !! Ale zdecydowanie nie jest w przypadku naszego MPLAB-X.
Ustawianie bitów konfiguracyjnych w MPLAB-X:
Firma Microchip znacznie ułatwiła ten męczący proces, wykorzystując graficzne reprezentacje różnych typów bitów konfiguracyjnych. Więc teraz, aby je ustawić, wystarczy wykonać poniższe czynności.
Krok 1: Kliknij Okno -> Widok pamięci PIC -> Bity konfiguracji. Jak pokazano niżej.
Krok 2: Powinno to otworzyć okno Bity konfiguracji na dole naszego IDE, jak pokazano poniżej. To miejsce, w którym możemy ustawić każdy z bitów konfiguracyjnych zgodnie z naszymi potrzebami. Wyjaśnię każdy element i jego cel, gdy będziemy przechodzić przez kolejne kroki.
Krok 3: Pierwszy bit to bit wyboru oscylatora.
PIC16F87XA może pracować w czterech różnych trybach oscylatora. Te cztery tryby można wybrać, programując dwa bity konfiguracyjne (FOSC1 i FOSC0):
- LP kryształ małej mocy
- Kryształ XT / rezonator
- Szybki kryształ / rezonator HS
- Rezystor / kondensator RC
W naszych projektach używamy Osc 20Mhz, dlatego musimy wybrać HS z listy rozwijanej.
Krok 4: Następnym bitem będzie nasz zegar watchdog Enable Bit.
Watchdog Timer to działający swobodnie oscylator RC na chipie, który nie wymaga żadnych zewnętrznych komponentów. Ten oscylator RC jest niezależny od oscylatora RC na pinie OSC1 / CLKI. Oznacza to, że WDT będzie działał nawet wtedy, gdy zegar na pinach OSC1 / CLKI i OSC2 / CLKO urządzenia został zatrzymany. Podczas normalnej pracy, przekroczenie limitu czasu WDT generuje reset urządzenia (reset zegarka Watchdog). Bit TO w rejestrze stanu zostanie wyczyszczony po przekroczeniu limitu czasu zegarka Watchdog. Jeśli licznik czasu nie zostanie wyczyszczony w naszym kodowaniu oprogramowania, cały MCU zostanie zresetowany po każdym przepełnieniu licznika czasu WDT. WDT można trwale wyłączyć, usuwając bit konfiguracji.
Nie używamy WDT w naszym programie, więc wyczyśćmy to, wybierając WYŁ. Z listy rozwijanej.
Krok 5: Następny bit będzie bitem timera włączania.
Power-up Timer zapewnia stały nominalny limit czasu 72 ms po włączeniu zasilania tylko z POR. Powerup Timer działa na wewnętrznym oscylatorze RC. Chip jest utrzymywany w trybie resetowania tak długo, jak aktywny jest PWRT. Opóźnienie czasowe PWRT umożliwia wzrost VDD do akceptowalnego poziomu. Bit konfiguracyjny służy do włączania lub wyłączania PWRT.
Nie będziemy potrzebować takich opóźnień w naszym programie, więc wyłączmy to również.
Krok 6: Następnym bitem będzie programowanie niskonapięciowe.
Bit LVP słowa konfiguracyjnego umożliwia programowanie ICSP niskiego napięcia. Ten tryb umożliwia programowanie mikrokontrolera przez ICSP przy użyciu źródła VDD w zakresie napięcia roboczego. Oznacza to tylko, że VPP nie musi być doprowadzane do VIHH, ale zamiast tego można je pozostawić przy normalnym napięciu roboczym. W tym trybie pin RB3 / PGM jest dedykowany do funkcji programowania i przestaje być pinem I / O ogólnego przeznaczenia. Podczas programowania VDD jest przyłożony do pinu MCLR. Aby wejść w tryb programowania, VDD musi być zastosowany do RB3 / PGM, pod warunkiem, że ustawiony jest bit LVP.
Wyłączmy LVP, abyśmy mogli używać RB3 jako pin I / O. Aby to zrobić, po prostu wyłącz tę opcję za pomocą pola rozwijanego.
Krok 7: Kolejne bity to EEPROM i bity ochrony pamięci programu. Jeśli ten bit jest włączony, po zaprogramowaniu MCU nikt nie będzie pobierał naszego programu ze sprzętu. Ale na razie zostawmy wszystkie trzy WYŁĄCZONE.
Po wykonaniu ustawień zgodnie z instrukcją okno dialogowe powinno wyglądać mniej więcej tak.
Krok 8: Teraz kliknij Generuj kod źródłowy do wyjścia, nasz kod zostanie wygenerowany, po prostu skopiuj go wraz z plikiem nagłówkowym i wklej w naszym pliku C Blink.c, jak pokazano poniżej.
To jest koniec naszej pracy konfiguracyjnej. Możemy mieć taką konfigurację dla wszystkich naszych projektów. Ale jeśli jesteś zainteresowany, możesz później się z nimi bawić.
Programowanie PIC, aby migać diodą LED:
W tym programie zamierzamy użyć naszego mikrokontrolera PIC do migania diody LED podłączonej do pinu I / O. Przyjrzyjmy się różnym pinom I / O dostępnym w naszym PIC16F877A.
Jak pokazano powyżej, PIC16F877 ma 5 podstawowych portów wejścia / wyjścia. Zazwyczaj są one oznaczone jako PORT A (RA), PORT B (RB), PORT C (RC), PORT D (RD) i PORT E (RE). Te porty są używane do interfejsów wejścia / wyjścia. W tym kontrolerze „PORT A” ma tylko 6 bitów szerokości (RA-0 do RA-5), „PORT B”, „PORT C”, „PORT D” ma tylko 8 bitów (RB-0 do RB-7, RC-0 do RC-7, RD-0 do RD-7), „PORT E” ma tylko 3 bity szerokości (RE-0 do RE-2).
Wszystkie te porty są dwukierunkowe. Kierunek portu jest kontrolowany za pomocą rejestrów TRIS (X) (TRIS A służy do ustawiania kierunku PORT-A, TRIS B służy do ustawiania kierunku dla PORT-B itp.). Ustawienie bitu TRIS (X) na „1” spowoduje ustawienie odpowiedniego bitu PORT (X) jako wejścia. Wyczyszczenie bitu „0” TRIS (X) ustawi odpowiedni bit PORT (X) jako wyjście.
W naszym projekcie musimy wykonać pin RB3 PORTU B jako wyjście, aby można było do niego podłączyć naszą diodę LED. Oto kod migania diody LED z mikrokontrolerem PIC:
#zawierać
Najpierw określiliśmy zewnętrzną częstotliwość kryształu za pomocą #define _XTAL_FREQ 20000000. Następnie w funkcji void main () poinstruowaliśmy nasz MCU, że użyjemy RB3 jako pinu wyjściowego (TRISB = 0X00;) . Wtedy wreszcie nieskończona podczas gdy pętla jest używany tak, że dioda miga trwa wiecznie. Aby mrugnąć diodą, wystarczy ją włączyć i wyłączyć z zauważalnym opóźnieniem.
Po zakończeniu kodowania zbuduj projekt za pomocą polecenia Uruchom -> Buduj główny projekt. To powinno skompilować twój program. Jeśli wszystko jest w porządku (tak jak powinno), konsola wyjściowa na dole ekranu pokaże komunikat BUDOWAŁ SUKCES, jak pokazano na poniższym obrazku.
Schemat obwodu i symulacja Proteusa:
Po zbudowaniu projektu i pomyślnym zakończeniu kompilacji plik HEX zostałby wygenerowany w tle naszego IDE. Ten plik HEX można znaleźć w poniższym katalogu
Może się to różnić dla Ciebie, jeśli zapisałeś w innym miejscu.
Teraz szybko otwórzmy Proteus, który zainstalowaliśmy wcześniej i stwórzmy schematy dla tego projektu. Nie będziemy wyjaśniać, jak to zrobić, ponieważ jest to poza zakresem tego projektu. Ale nie martw się, wyjaśniono to na poniższym filmie. Po wykonaniu instrukcji i zbudowaniu schematów powinno to wyglądać mniej więcej tak
Aby zasymulować wyjście, kliknij przycisk odtwarzania w lewym dolnym rogu ekranu po załadowaniu pliku Hex. Powinna migać dioda LED podłączona do RB3 MCU. Jeśli masz jakiś problem, obejrzyj wideo, jeśli nadal nie zostanie rozwiązany, skorzystaj z sekcji komentarzy, aby uzyskać pomoc.
Teraz wykonaliśmy nasz pierwszy projekt z mikrokontrolerem PIC i zweryfikowaliśmy dane wyjściowe za pomocą oprogramowania symulacyjnego. Idź i dostosuj program i obserwuj wyniki. Dopóki nie spotkamy się przy naszym kolejnym projekcie.
Och, czekaj !!
W naszym następnym projekcie nauczymy się, jak to uruchomić na rzeczywistym sprzęcie. W tym celu będziemy potrzebować następujących narzędzi, aby były gotowe. Do tego czasu SZCZĘŚLIWEGO UCZENIA SIĘ !!
- PicKit 3
- PIC16F877A IC
- 40 - pinowy uchwyt IC
- Płyta Perf
- 20Mhz Crystal OSC
- Żeńskie i męskie szpilki Bergstick
- Kondensator 33pf - 2
- Rezystor 680 omów
- LED dowolnego koloru
- Zestaw do lutowania.