Przeskocz do treści

Testowanie programatora

29 października, 2011

Pierwszy program

Zakładając, że mamy już uruchomiony i przetestowany programator wraz z kablem LPT, możemy przejść do najważniejszego i krytycznego punktu naszego zapoznania z mikroprocesorami. W celu przetestowania czy wszystkie komponenty dobrze ze sobą współpracują, co oznacza dla nas możliwość nauki programowania PIC-ów, wgramy do procesora prosty program testowy, którego zadaniem będzie włączenie diod LED podłączonych do wyjść mikrokontrolera.

Sprawa wygląda na prostą, ale nie możemy pominąć kilku ważnych kroków i po prostu skompilować byle jaki plik z rozszerzeniem .asm. Zanim jednak o tym musimy zapoznać się ze środowiskiem, w którym od dzisiaj będziemy tworzyć. Ja osobiście wybrałem sobie pakiet MPLAB microchipu ze względu na cenę (całkowicie darmowy), dobrą współpracę przy tworzeniu projektów w asemblerze i możliwość zintegrowania z kompilatorem C.

 MPLAB IDE, nasze środowisko programistyczne

Czym jest MPLAB? Jest to złożone środowisko, które umożliwi nam kompilację (zamianę) kodu napisanego w miarę logicznym dla człowieka asemblerze na kod zupełnie nie logiczny w hexie, który za to jest bardzo lubiany przez mikrokontrolery. Pakiet ten zapewnia również możliwość testowania programy, debuggowania błędów itp. Aktualnie używam go jedynie do kompilacji, dlatego reszty jego możliwości jeszcze nie poznawałem 😉 .

Czas rozpocząć procedurę testowania. W tym celu ściągamy MPLAB IDE ze strony producenta. Następnie instalujemy i uruchamiamy. Po otwarciu programu i krótkich oględzinach szukamy zakładki Project i klikamy Project wizard. Wybieramy programowany mikrokontroler. W naszym przypadku jest to PIC16F84. Kolejne okno służy do wyboru zdeklarowanego kompilatora. Automatycznie powinien być włączony kompilator asemblera z pakietu MPLAB, dlatego nie powinniśmy aktualnie nic tutaj zmieniać. Jeżeli jest wybrany inny kompilator z okienka rozwijanego wybieramy Microchip MPASM Toolsuite, a trochę niżej zaznaczamy MPASM Asembler. Dalsze procedury to miejsce zapisu naszego projektu i pliki, które chcemy do niego dołączyć. Dodanie plików nagłówkowych do projektu nie jest tutaj wymagane. Kompilator sam wybierze odpowiedni plik znajdujący się w jego folderze. Musimy tylko znać jego nazwę, żeby dodać go w programie (p16f84a.inc). Podsumowując Project => Project Wizard => Dalej => wybór mikrokontrolera => wybór kompilatora (automatycznie asembler) => miejsce zapisu => pliki dodatkowe => gotowe!

 Pliki konfiguracyjne

Zanim wkleimy program testowy należy nadmienić o kilku ważnych sprawach. W zależności od tego jakiego PIC-a programujemy należy dołączyć odpowiedni plik nagłówkowy (wyjaśnienie później). Na wstępie programu musimy podać konfiguracje fuse bitów. Dzięki temu w programie nie będzie żadnych niespodzianek. Ważne jest ustawienie sposobu taktowania. W PIC-ach mamy kilka możliwych ustawień w zależności od procesora. Dla nas ważne jest rozróżnienie dwóch sposobów (reszta jest użyteczna w specjalnych zastosowaniach np. niski pobór prądu itp.). Pierwszy to taktowanie za pomocą rezystora i kondensatora (RC). Jest to najprostsze i najmniej dokładne rozwiązanie. Użyteczne do testowania mrugania diod, ustawień portów wyjścia itp. Jeżeli korzystasz z tego sposobu koniecznie ustaw w podany sposób fusebit odpowiedzialny za taktowanie. Druga opcja to ta najpopularniejsza czyli kwarc, ewentualnie kwarc plus dwa kondensatory o małej pojemności. Te właśnie opcja jest standardowo wybrana w podanym programie. W przypadku używania kwarcu do taktowania procesora nie musimy nic zmieniać

Ważna sprawą jest również wyłączenie watchdoga. W prostym programie jego działanie mogłoby nie dać złych efektów. Niestety przeoczenie jego wyłączenia może przymusić do długich rozważań na temat  „co jeszcze może tu nie działać?”. Jego nie wyłączenie objawia się cyklicznym resetowaniem programu. Dla przykładu: na początku programu definiuję sobie zmienną i przypisuje jej wartość 1. Następnie program przechodzi to pętli głównej, gdzie zmienna jest zwiększana o jeden i wyświetlana w postaci binarnej. Wszystko powinno działać, program kompiluje się bez problem. Po wgraniu wsadu procesor zaczyna liczyć, ale zamiast doliczyć do określonej wartości, resetuje się program i Pic liczy od początku.

Sporo się nagłowiłem dlaczego nie mogę zrealizować licznika zdarzeń. Jest to co prawda zniechęcające, ale każdy początkujący przechodzi przez tego typu zapory prostych i banalnych problemów, nad którymi mógłby myśleć i myśleć. Podsumowując WDT_OFF to bit, który wyłączy watchdoga, dzięki czemu program nie będzie resetował się nagle nie wiadomo skąd i dlaczego. Oczywiście kiedyś w końcu dojdziemy do programów, w których watchdog będzie niezbędny i będziemy musieli go włączyć. Jednak w takim przypadku będziemy wiedzieli o jego działaniu i kontrolowali je, a nie jak w przypadku przytoczonego programu liczącego wciśnięci przycisku.

 Plik nagłówkowy, czyli jak ułatwić sobie życie (programowanie)

Temat bitów konfiguracyjnych uważam za wyczerpany. W razie pytań komentarze są dostępne. Jeżeli będę znał odpowiedź, czy rozwiązanie podanego problemu z chęcią odpowiem. Wracając do pierwszego programu to oprócz ustawnie fusebitów posiada on również procedurę dołączenia pliku nagłówkowego o nazwie p16f84a.inc . Jest to plik dostępny w folderze używanego kompilatora (). Zawiera on nazwy rejestrów, czy bitów do których sa przypisane adresy występujące w danym procesorze. Bez obaw możemy podejrzeć ten plik otwierając go w okonie projektu MPLAB. Robimy to otwierając listę project i add files to project. W wybranym oknie wyszukujemy lokalizację, w której znajdują się pliki nagłówkowe (device) wybranych procesorów i wybieramy interesujący nas plik.

Oczywiście moglibyśmy napisać program bez tych procedur, ale po co komplikować sobie i tak niełatwe programowanie w asemblerze (ale przyjemne). Plik taki zamiast ludzkich nazw jak PORTB, STATUS zawierałby same adresy. Wymusza to przymus zapamiętania kilkunastu takich podstawowych adresów. Utrudnia to czytanie programu i umożliwia pomyłkę, dlatego znacznie lepszym rozwiązaniem jest przypisywanie adresom nazw. W asemblerze do PIC-ów robimy to używając procedur equ np.:

Jak widzimy nasz plik nagłówkowy p16f84a.inc składa się z wielu takich procedur przypisań. Dzięki temu nie musimy na początku każdego programu wklejać litanii przypisania nazw do adresów. Wpisujemy linijkę kodu i kompilator cała tą listę odczytuje ze wskazanej lokacji. Trzeba również pamiętać o odpowiednim doborze pliku nagłówkowego do wybranego procesora. Nie użyjemy przecież pliku p16f84a.inc do programowania pic16f682, ponieważ posiada on inną strukturę adresów, więcej rejestrów itp.

 Podsumowanie działań

Na skróty podsumowanie co robimy, aby otrzymać plik wynikowy w hexie.

– Ściągamy i instalujemy MPLAB

– Tworzymy nowy projekt oparty o kompilator asemblera

– Wklejamy lub piszemy program testowy

– Wybieramy opcję build it all (kompiluj wszystko)

Jeżeli nie wyskoczyły żadne błędy przy kompilacji i cieszymy się z dużego zielonego napisu Build succes możemy nareszcie odpalić programator Oshon. Upewniamy się czy wszystko jest poprawnie podłączone (kabel LPT, zasilanie) i w menu programu najeżdżamy na open i dalej klikamy open hex file. W okonie, które się pojawiło szukamy lokalizacji naszego projektu. Tam czeka na nas świeżutki plik o nazwie programtestowy.hex (chyba, że nazwałeś go inaczej) dwukrotne klikniecie załatwi sprawę. Jeszcze tylko szukamy ikonki chip programmed i możemy oglądać zapalone diody podłączone do odpowiednich wyjść mikroprocesora.

 W razie problemów

Dwa pierwsze problemy jakie mogą Cię spotkać zostały opisane wyżej. Jeżeli programator działa poprawnie (patrz poprzedni wpis) musimy upewnić się czy procesor jest odpowiednio połączony tzn. masa na nóżce , +5V na nóżce i ewentualny +5v na nóżce MCLR. Podłączenie tego napięcia wymaga komentarza. Chodzi o to, że podczas programowania wymaga ono wyższego napięcia, a podczas pracy potrzebuje tylko tych 5V. Musimy zrobić to tak, żeby to wszystko współgrało. Najlepiej jest podłączyć zasilanie (5V) przez diodę spolaryzowana przewodząco. Na MCLR będziemy mieli wtedy 4,4V, ale nie wpłynie to na złe działanie mikroprocesora. W momencie gdy na MCLR pojawi się podwyższone napięcie resetu dioda zostanie spolaryzowana zaporowo, ponieważ na jej anodzie będziemy mieli 5v, a na katodzie te podwyższone 13,2V. Dla przypomnienia katoda to to miejsce, gdzie dioda ma pasek. Najlepiej wyjaśni to jednak rysunek.

W przypadku, gdy nadal coś nie działa jesteśmy zdani na własną inwencję. Czasami warto trochę samemu pomyśleć, żeby potem pamiętać czego nie robić i utrwalić sobie błędy. Jeżeli nie masz już pomysłu co może być nie tak przedstaw swój problem w komentarzach. Jeśli nie ja to może kto inny będzie w stanie pomóc.

 Słowo końcowe

Zakładając, że wszystko poszło dobrze mamy już pewność co do programatora i układu, w którym działa PIC. Możemy przejść do nauki. Następny wpis to opis działania programu testowego, który został tutaj przedstawiony.

W niedalekiej przyszłości planuje dopisać pobieżny opis poruszania się po pakiecie MPLAB IDE.

From → Programatory

Dodaj komentarz

Dodaj komentarz