ZESPÓŁ SZKÓŁ MECHANICZNO-ELEKTRYCZNYCH im... Technikum Telekomunikacyjne Specjalność:. PRACA DYPLOMOWA Zaprojektuj i wykonaj stanowisko laboratoryjne do programowania mikrokontrolera SWt-. Promotor: mgr inż. Wykonał:., 2005
Spis treści SPIS TREŚCI Spis Treści 2 1. Cel pracy 3 2. Mikrokontroler 4 2.1. Budowa zewnętrzna mikrokontrolera AT90S2313 5 2.2. Architektura wewnętrzna mikrokontrolera AT90S2313 7 3. Programator 12 3.1. Budowa sprzętowa programatora 13 3.2. Podłączenie programatora do jednostki centralnej komputera PC 14 4. Program BASCOM -AVR (DEMO) Version 1.11.6.8. 16 4.1. Instalacja programu BASCOM-AVR 17 4.2. Obsługa i użytkowanie programu BASCOM -AVR 20 4.2.1. Najważniejsze opcje programu BASCOM-AVR 21 4.2.2. Użytkowanie interfejsu symulatora (AVR Simulator) 22 4.2.3. Interfejs programowania (AVR ISP STK Programmer) 23 4.3. Kody błędów 24 5. Programowanie 30 5.1. Elementy tworzenia programów w języku BASIC 30 5.1.1. Typy danych 32 5.1.2. Zmienne 32 5.1.3. Tablice 33 5.1.4. Instrukcja pętli 34 5.1.5. Instrukcja warunkowa 34 5.2. Przykłady programów 35 5.2.1. Generator piezoelektryczny 35 5.2.2. Wyświetlacz alfanumeryczny LCD 35 5.2.3. Zegar cyfrowy z wykorzystaniem wyświetlacza LCD 37 6. Wnioski 40 7. Załączniki 41
Spis treści 8. Literatura 42 9. Spis rysunków i tabel 43
1. Cel pracy 3 1. Cel pracy Moja praca dyplomowa zatytułowana Zaprojektuj i wykonaj stanowisko laboratoryjne do programowania mikrokontrolera, ma charakter dydaktyczny. Będzie opracowana z myślą o następnych pokoleniach uczniów i ich edukacji w dziedzinie programowania elementów mikroprocesorowych. Moją prace rozpocznę od podstawowych zasad technologii mikroprocesorowej. Postaram się wyczerpująco i przystępnie omówić temat zagadnienia. Opiszę budowę i działanie wykonanego jako pracy praktycznej programatora do układu AT90S2313 będącego bardzo funkcjonalnym w dzisiejszych czasach układem programowalnym, a zarazem sterującym. Programator może być wykorzystywany w podstawowym i praktycznym nauczaniu sterowania urządzeniami elektronicznymi za pomocom techniki mikroprocesorowej. Zważając na obecny rozwój technologii komputerowej i mechanicznej, a co za tym idzie rozbudowy urządzeń automatycznych o nowe podzespoły sterowane elektronicznie. Ogólnie upowszechniającej się robotyce i wzrastającej wraz nią komfortu naszego życia. Technika mikroprocesorowa i podstawy programowania układów sterujących i nadzorujących dla technika elektronika lub informatyka staję się istotną umiejętnością w przyszłej pracy zawodowej. Umiejętność posługiwania się elementami programowalnymi przydaje się nie tylko w zawansowanych przedsięwzięciach, ale jak wspomniałem we wzrastającym standardzie życia. Obecny człowiek powinien potrafić nie tylko posługiwać się językiem obcym, ale i komputerem, który jest maszyną zaprogramowaną i posiadającą nie jeden układ programowalny, ale sporą ich ilość. Tak też celem mojej pracy nie musi być koniecznie dydaktyka szkolna. Może posłużyć ona także powierzchownemu zaznajomieniu się z zasadą działania elementów składowych otaczających nas urządzeń elektronicznych.
2. Mikrokontroler 4 2. Mikrokontroler Mikrokontroler jest to układ cyfrowy z wyspecjalizowanym mikroprocesorem (procesorem) i niezbędnymi urządzeniami zawartymi w jednym układzie scalonym czyniącym go układem autonomicznym (do pracy nie są koniecznie wymagane urządzenia zewnętrzne takie jak np. kontrolery magistral, kontrolery przerwań, generatory sygnałów). szyna adresowa szyna danych jednostka centralna szyna sterująca program ROM dane RAM urządzenia peryferyjne Rys. 2.1. Blokowa budowa mikrokontrolera Z rys. 2.1. widać, że mikrokontroler jest układem scalonym, w którego skład wchodzą podstawowe elementy kompletnego komputera takie jak: pamięć, jednostka centralna, urządzenia peryferyjne. Mikrokontroler komunikuje się z otoczeniem za pośrednictwem wewnętrznych urządzeń peryferyjnych. Jedną z najważniejszych cech jednostki centralnej mikrokontrolera jest szerokość szyny danych. Może być ona 8-bitowa, 16-bitowa lub 32-bitowa. Na podstawie jej szerokości określa się typ mikrokontrolera. Mikrokontrolery znajdują zastosowanie praktycznie we wszystkich nowoczesnych urządzeniach. Często są także używane przez amatorów do budowy niewielkich układów na własne potrzeby, inne używane są przez firmy do budowania urządzeń służących do kontroli, pomiaru itp. Jeszcze inne stosowane są w poważnych aplikacjach przez wojsko, służby bezpieczeństwa, banki, służby medyczne. Jednym słowem mikrokontroler staje się częścią naszego życia.
2.1. Budowa zewnętrzna mikrokontrolera AT90S2313 5 2.1. Budowa zewnętrzna mikrokontrolera AT90S2313 Najlepiej zacząć omawianie budowy zewnętrznej od liczby nóżek i ich przeznaczenia. Mikrokontroler AT90S2313 jest niedużym dwudziesto nóżkowym układem scalonym (rys. 2.3.) W klasycznych układach scalonych funkcje wszystkich wyprowadzeń są ściśle określone, natomiast w mikroprocesorach jest inaczej. Charakterystyczna cechą jest tu obecność końcówek uniwersalnych. Opisywany układ ma takich uniwersalnych wyprowadzeń 15 (PD0-PD6, PB0-PB7). Każde z nich może być zarówno wejściem jak i wyjściem, a zależy to od programisty. 1. Końcówki zasilające (VCC, GND). Mikrokontroler można zasilać napięciem w granicach 2,7-6V wahającej się w zależności od modelu. Aby wykluczyć ryzyko błędnego działania układu, linie zasilające powinny być odsprzęgnięte pojemnością. Minimum to 10µF jak na rys. 2.4. ale lepiej zastosować szeregowo połączone kondensatory elektrolityczny 10-100µF i ceramiczny 100nF. 2. Obwody zerowania (RESET). Praktycznie wszystkie mikrokontrolery posiadają końcówkę RESET. Służy ona na przykład do prawidłowego rozpoczęcia pracy po włączeniu zasilania. Pozwala także wyzerować układ, czyli w każdej chwili rozpocząć działanie programu od nowa. W podstawowych aplikacjach układu nie potrzebne jest podłączanie jakichkolwiek elementów. 3. Do pełnego omówienia podstawowej aplikacji działania układu pozostają nam nóżki (5,4) XTAL1 i XTAL2, rys. 2.2. Końcówki te są wejściem i wyjściem wewnętrznego układu generatora. Do końcówek dostarczany jest sygnał zegarowy w celu synchronizacji wszystkich wewnętrznych bloków funkcyjnych. Impulsy są pozyskiwane z generatora kwarcowego o częstotliwościach wahających się w zależności od zastosowanego modelu 0-10MHz. Rys. 2.2. Podłączenie generatora kwarcowego Wyróżnia się trzy stany pracy generatorów, (różnią się one między sobą zasadą) im większa generowana częstotliwość tym większy pobór mocy przez układ, ale i większa wydajność obliczeniowa.
2.1. Budowa zewnętrzna mikrokontrolera AT90S2313 6 - LP generowanie niskich częstotliwości - XT generowanie średnich częstotliwości - HS generowanie wysokich częstotliwości Rys. 2.3. Rozmieszczenie i znaczenie nóżek mikrokontrolera AT90S2313 Rys. 2.4. Typowa aplikacja działania mikrokontrolera AT90S2313 Rys. 2.5. Precyzyjne wymiary układu scalonego AT90S2313
2.2. Architektura wewnętrzna mikrokontrolera AT90S2313 7 2.2. Architektura wewnętrzna mikrokontrolera AT90S2313 Opisywany mikrokontroler AT90S2313 posiadający 20 nóżek, oprócz portów wejścia/wyjścia, ma wewnątrz wiele skomplikowanych obwodów. Wszystkie te obwody wraz z połączeniami można prześledzić na schemacie blokowym rys. 2.6. 1. ALU (Arithmetic Logic Unit), czyli jednostka arytmetyczno-logiczna. To właściwie mózg opisywanego mikrokontrolera. Tu przeprowadza się obliczenia i inne operacje, najczęściej właśnie z wykorzystaniem liczb ośmiobitowych. 2. Mikroprocesor został wyposażony w tak zwany UART (Asynchronous Receiver and Transmitter) pozwalający w prosty sposób zrealizować programiście transmisję w popularnym standardzie RS-232C. Oznacza to, że mikrokontroler może współpracować z komputerem PC lub innymi urządzeniami przez port szeregowy. Port szeregowy UART kontaktuje się ze światem zewnętrznym za pomocą dwóch wyprowadzeń: wejścia odbiornika (RXD) i wyjścia odbiornika (TXD). UART jest interfejsem asynchronicznym. 3. Mikrokontroler będący niewątpliwie układem cyfrowym ma na swoim pokładzie element analogowy, którym jest komparator. Komparator porównuje napięcia podane na jego dwa wejścia oznaczone na rys. 2.2. (AIN0, AIN1), ale nie zmienia to istoty, że końcówki mogą być wej/wyj. Odczyt komparatora odbywa się programowo. 4. Watchdog to licznik z osobistym generatorem. Ten licznik i generator pracują zupełnie niezależnie od generatora kwarcowego dołączonego do XTAL1 i XTAL2. Gdy licznik zliczy do końca i zacznie od nowa spowoduje reset procesora i rozpocznie działanie programu od początku. Prawidłowo działający program w regularnych odstępach czasu powoduje wyzerowanie licznika watchdog a, a w związku z tym reset procesora nie nastąpi. Może się jednak stać, że pod wpływem warunków zewnętrznych program przestanie działać poprawnie tzn. procesor może wpaść w tak zwaną martwą pętlę i przestać spełniać zadanej roli. Taka awaria spowoduje błędne działanie urządzenia, ale i licznik watchdoga nie będzie zerowany, więc po krótkim czasie rzędu milisekund nastąpi reset procesora, a program zacznie działanie od początku. 5. Pamięć FLASH to pamięć programu, rys.2.7. AT90S2313 ma 2 kilobajty, czyli 2048 bajtów pamięci programu. Rzeczywistości zorganizowana jest ona jako 1024 słów 16-bitowych. Za pomocą kompilatora i programatora właśnie ta pamięć zostanie zapełniona programem nadzorującym i sterującym mikrokontrolerem. Pamięć FLASH można wedle potrzeby kasować
2.2. Architektura wewnętrzna mikrokontrolera AT90S2313 8 i zapisywać od nowa poprawionym lub innym programem. Pamięć ta może być kasowana i programowana co najmniej 1000 razy. Rys. 2.6. Wewnętrzna budowa blokowa mikrokontrolera AT90S2313
2.2. Architektura wewnętrzna mikrokontrolera AT90S2313 9 Najważniejszą jednak właściwością pamięci FLASH jest to, że podczas pracy układu zawartość pozostaje stała, a wyłączenie zasilania nie ma wpływu na jej zwartość. Rys. 2.7. Przestrzeń adresowa pamięci programu - FLASH Pamięć RAM to pamięć operacyjna (danych), jej struktura pokazana jest na rys.2.8. Omawiany mikrokontroler posiada 128 bajtów tej pamięci. RAM jest aktywnie wykorzystywany podczas pracy układu, w tego typu pamięci przechowywane są dane i wyniki operacji potrzebne do bezproblemowej pracy mikrokontrolera. Wszystko odbywa się za pomocą kodu binarnego (dwójkowego) zorganizowanego w ośmiobitowe słowa (bajty). Pamięć RAM można zapisywać i odczytywać dowolną liczbę razy i nie ma tutaj limitu cyklów zapisu. Zapisane dane w tego typu pamięci bezpowrotnie giną po wyłączeniu zasilania. Programując mikroprocesor z pomocą BASCOM-a nie trzeba troszczyć się o pamięć RAM i jej zawartość. BASCOM sam określa sposób jej użytkowania. A następnie podczas pracy dba o to program znajdujący się w pamięci programu. Rys. 2.8. Struktura adresowa pamięci danych - RAM Pamięć pomocnicza EEPROM, rys.2.9. Opisywany układ posiada 128 bajtów tej pamięci zorganizowanej w 128 słów po 8 bitów w każdym. Pamięć ta jest czymś pośrednim pomiędzy pamięcią programu i RAM-em. Istnieje możliwość zaprogramowania pamięć EEPROM z zewnątrz czyli za pomocą komputera, podobnie jak pamięci FLASH.
2.2. Architektura wewnętrzna mikrokontrolera AT90S2313 10 Co bardzo ważne, program podczas działania może zmienić dane znajdujące się w rejestrach EEPROM-u. Zapis tej pamięci trwa o wiele dłużej niż zapis RAM-u, a także jest ograniczona ilość cyklów zapisu do 100 000 razy (co przy aktywnym wykorzystaniu tak jak np. pamięci danych nie jest wcale tak dużo). Rys. 2.9. Przestrzeń adresowa pamięci pomocniczej - EEPROM W mikrokontrolerze AT90S2313 oprócz pamięci FLASH, RAM i EEPROM znajdują się również rejestry co widać na rys. 2.6. 32 rejestry robocze ogólnego przeznaczenia (general purpose working registers), który współpracuje bezpośrednio z ALU i pozwala łatwo przeprowadzać obliczenia i inne operacje. Rejestr jest po to gdyż na zwykłej pamięci RAM nie można przeprowadzić operacji obliczeniowych. Liczbę z RAMu trzeba przenieść do rejestru roboczego i dopiero poddać dalszej obróbce. Co jeszcze można zauważyć na rys. 2.6., to że w pamięci znajduje się jeszcze miejsce na 64 rejestry wej/wyj. Za pomocą tych rejestrów możliwe jest sterowanie i odczytywanie stanu wszelkich urządzeń dodatkowych. Te urządzenia są widziane przez procesor podobnie jak pamięć RAM, można do nich wysyłać dane jak i je odczytywać. Architekturę mikroprocesorów rdzeniowych można sklasyfikować według typu: mapy pamięci oraz listy instrukcji. Układ, którym zająłem się w mojej pracy ze względu na mapę pamięci ma architekturę typu harwardzkiego. Oznacza to że działanie układu opiera się na użyciu dwóch oddzielnych szyn dla danych i rozkazów, dzięki czemu w trakcie pobierania argumentów wykonywanej właśnie instrukcji można równocześnie zacząć pobieranie następnego słowa rozkazowego. Skraca to cykl rozkazowy i zwiększa szybkość pracy. Obszary adresowe pamięci danych i programu są rozdzielone. Pociąga to za sobą niejednoznaczność adresów, ponieważ pod tym samym adresem jednostka centralna widzi pamięć RAM i ROM. W tym przypadku stosuje się inne rozkazy dla pamięci programu i inne dla pamięci danych. Wadą tego rozwiązania jest utrudniony przepływ danych z pamięci programu do obszaru pamięci operacyjnej, co uniemożliwia stosowanie jednej z podstawowych technik programistycznych.
2.2. Architektura wewnętrzna mikrokontrolera AT90S2313 11 Ze względu na listę instrukcji mikrokontroler AT90S2313 posiada architekturę RSC, (rys 2.10.) Mówi to o zredukowanej liście instrukcji, a odznacza się następującymi cechami: - Procesor jest zbudowany zgodnie z architekturą harwardzką. - Procesor wykorzystuje przetwarzanie potokowe (pipeling) w celu zwiększenia szybkości wykonywania programu. - Zbiór realizowanych instrukcji jest ograniczony i spełnia warunki ortogalności (symetrii). W przetwarzaniu potokowym jednostka centralna dysponuje pobranymi na zapas instrukcjami, które będą kierowane do współbieżnego wykonania w jej poszczególnych jednostkach wykonawczych. Instrukcje pobierane z pamięci programu do kolejki w cyklu opuszczają ją w takiej samej kolejności i są kierowane do poszczególnych układów wykonawczych. Ortogonalność zbioru instrukcji radykalnie upraszcza budowę układu sterowania, który może realizować cykl wykonania każdego rozkazu według identycznego algorytmu. Stąd prostszy układ sterowania może pracować szybciej, dlatego cykl rozkazowy ulega skróceniu. Klasyczna architektura RISC jest stosowana w mikrokontrolerach rzadko. Najczęściej można znaleźć tylko elementy tej architektury, ale ortogonalność instrukcji nie jest pełna. Rys. 2.10. Schemat blokowy procesora rdzeniowego mikrokontrolera AT90S2313 opartego o architekturę RISC
3. Programator 12 3. Programator Mikrokontroler AT90S2313 może być zaprogramowany przynajmniej na dwa sposoby. To znaczy ostateczny program może być wprowadzony z komputera PC do pamięci Programu FLASH procesora w różny sposób. Dane mogą być wprowadzone równolegle, po osiem bitów, albo szeregowo, bit po bicie. Zajmę się metodą szeregową polegającą na wykorzystaniu tak zwanego łącza SPI (Serial Peripheral Interface). Interfejs SPI służy do dwukierunkowej (full-duplex), synchronicznej i jak wspomniałem szeregowej transmisji danych pomiędzy mikrokontrolerem, a zewnętrznymi układami peryferyjnymi. Jest to interfejs trójżyłowy: składa się z dwóch linii synchronicznie przesyłających dane w przeciwnych kierunkach i linii z sygnałem zegarowym synchronizującym ten transfer. NADRZĘDNY PODRZĘDNY MSBit LSBit MSBit LSBit Pakiet 8 bitów MISO MOSI Pakiet 8 bitów MOSI MISO Generator SCK SCK sygnału zegarowego VCC GND Rys.3.1. Przykład podłączenia interfejsu SPI Na rys. 3.1. pokazałem sposób połączenia interfejsu SPI pomiędzy układem narzędziowym i układem podrzędnym, gdzie pin MISO jest wejściem danych, pin MOSI wyjściem danych, a pin SCK źródłem sygnału zegarowego dla układów. Sygnały danych i zegara są przesyłane oddzielnymi jednokierunkowymi liniami. Sygnał zegara nie jest ciągły, nadawany jest jedynie w czasie trwania transmisji. Kiedy układ nadrzędny nadaje dane na linii MOSI do układu podrzędnego, to układ podrzędny odpowiada, wysyłając do układu nadrzędnego dane na linii MISO. Implikuje to dwukierunkową transmisję z jednoczesnym wysyłaniem i odbieraniem danych, synchronizowanym tym samym sygnałem zegarowym, przez oba układy. Do wysłania bajtu i jego odebrania wystarczy osiem impulsów zegarowych na linii SCK.
3.1. Budowa sprzętowa programatora 13 3.1. Budowa sprzętowa programatora Cała inteligencja programatora została skupiona w części softwer owej, a programator sprzętowy został maksymalnie uproszczony i zawiera niewielką ilość elementów. Jego budowa oparta jest na podstawowej aplikacji działania procesora, uzupełnionej o układy stabilizujące napięcie zasilania i sygnały sterujące procesem programowania. Mikrokontroler, a w tym przypadku i programator musi być zasilany stałym napięciem +5V. Zasilanie to możemy pobierać z zasilacza sieciowego ale łatwiej jest wziąć je z pecetowego poru joysticka (tzw. GAME PORTU). Napięcie zasilania jest odseparowane i filtrowane przez równolegle połączenie do źródła kondensatorów elektrolitycznego i ceramicznego o pojemnościach 100µF. Układ scalony SN74LS244 jest jedynym aktywnym podzespołem tego układu, który dopasowuje i reguluje poziom sygnałów doprowadzanych z komputera do mikrokontrolera jak i odwrotnie. Piny pod zworkę JP1 mają za zadanie odłączenia rezonatora kwarcowego w przypadku programowania procesora 8-pinowgo AT90S2343. Programator, bliżej płytka obwodu drukowanego wykonana została na laminacie jednostronnym. Schemat programatora umieściłem na rys. 3.3., a w tab. 3.2. widnieje wykaz elementów potrzebnych do budowy niniejszego urządzenia. ELEMENT SYMBOL WARTOŚĆ Układ scalony IC1 SN74LS244 Rezystor R1 100kΩ Kondensator C1 1µF Kondensator C2,C9,C10 100nF Kondensator C3,C4,C6,C7,C12,C13 33pF Kondensator-elektrolit C5,C8,C11 100µF/10V Rezonator kwarcowy Q1 4MHz Podstawka CON4 20 PIN Podstawka CON5 8 PIN Listwa Pinów JP1 2x1 Złącze LPT CON2 DB25M Złącze GAME PORT CON6 Tab. 3.2. Wykaz elementów potrzebnych do budowy programatora
3.1. Budowa sprzętowa programatora 14 Rys. 3.3. Schemat ideowy programatora
3.2. Podłączenie programatora do jednostki centralnej komputera PC 15 3.2. Podłączenie programatora do jednostki centralnej komputera PC Programator komunikuje się z komputerem PC za pomocą portu szeregowego LPT (port drukarki) blokowy schemat tego połączenia przedstawiam na rys.3.4. KOMPUTER PC KOMUNIKACJA ZASILANIE PROGRAMATOR AT90S2313 Rys. 3.4. Schemat blokowy podłączenia programatora do komputera PC Elementem łączącym port LPT w komputerze z układem programatora jest 11 żyłowy przewód (szelka). Warstwę zewnętrzną przewodu stanowi tworzywo sztuczne w postaci miękkiej. Rys. 3.5. Schemat I/O portu równoległego. Równoległy port drukarki, zwany powszechnie interfejsem Centronics, pokazany na rys. 3.5. został zaprojektowany specjalnie z myślą o jednokierunkowej transmisji danych do drukarki, stąd oprócz ośmiu linii danych obecne są również dedykowane linie sygnałów zwrotnych informujących. Z czasem port drukarkowy doczekał się wersji dwukierunkowej, będącej dziś standardem. Jest to, obecny w każdym pececie, port ECP (Enhanced Capabilities Port), opisany standardem IEEE 1284. Specyfikacja ECP dopuszcza dołączenie do jednego portu kilku urządzeń ze złączami przejściowymi. Maksymalna długość kabla Centronics to 8 metrów, jednak tak długie połączenie musi być wykonane kablem o bardzo dobrej jakości. Typowa długość kabla to 1,5 metra. Teoretyczna szybkość transmisji portu ECP może sięgać 2 MB/s, jednak w praktyce jest to 150-800 kb/s. Tradycyjnie stosowanym złączem jest żeńskie, 25-stykowe gniazdo po stronie peceta.
3.2. Podłączenie programatora do jednostki centralnej komputera PC 16 PIN Znaczenie Rysunek 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +5v Joystick A, Button 1 Joystick A, X Axis Gnd Gnd Joystick A, Y Axis Joystick A, Button 2 +5v +5v Joystick B, Button 1 Joystick B, X Axis Gnd Joystick B, Y Axis Joystick B, Button 2 +5v Tab. 3.6. Opis I/O interfejsu joysticka PC Omawiany programator jak już powiedziałem jest zasilany napięciem +5V pobieranym bezpośrednio z portu joysticka. Gameport nie jest standardowo umieszczony na płycie głównej, rys.3.6. Jest elementem karty dźwiękowej. Interfejs analogowego joysticka PC zawiera cztery przetworniki analogowo-cyfrowe, umożliwiające pomiar oporności zawartych w manipulatorze potencjometrów oraz linie sygnałowe czterech przycisków. To samo gniazdo jest równocześnie złączem interfejsu MIDI, służącego do komunikacji z instrumentami muzycznymi. MIDI jest interfejsem szeregowym z pętlą prądową, umożliwiającym łączenie w łańcuch do 15 urządzeń. Maksymalna długość segmentu kabla to ok. 18 m.
4. Program BASCOM-AVR (DEMO) Version 1.11.6.8. 17 4. Program BASCOM-AVR (DEMO) Version 1.11.6.8. Program BASCOM-AVR jest softwerem mającym zastosowanie w programowaniu mikroprocesorów firmy ATMEL. Program demonstracyjny w tym przypadku nie ma żadnych ograniczeń, gdyż jego autoryzacja polega na ograniczeniu kodu kompilowanego programu do 2KB, a jak wiadomo omawiany przeze mnie mikrokontroler AT90S2313 jedynie tylko tyle posiada dostępnej pamięci. Pakiet bo tak można nazwać ten program zawiera w sobie wiele podprogramów pomocnych przy programowaniu i późniejszym użytkowaniu mikrokontrolera. W jego skład wchodzi główny moduł czyli kompilator języka Bascom, symulator, terminal, narzędzia pomocne przy współpracy z wyświetlaczem LCD. Program BASCOM-AVR przy pomocy odpowiedniego programatora sprzętowego może obsługiwać układy scalone wymienione w tab. 4.1. TYP POJEMNOŚC PAMIĘCI FLASH POJEMNOŚĆ PAMIĘCI EEPROM 90S2313 2 KB 128 bajtów 90S2323 2 KB 128 bajtów 90S2333 2 KB 128 bajtów 90S2343 2 KB 128 bajtów 90S4414 4 KB 256 bajtów 90S4433 4 KB 256 bajtów 90S4434 4 KB 256 bajtów 90S8515 5 KB 512 bajtów 90S8535 5 KB 512 bajtów MEGA603 64 KB 2KB MEGA103 128 KB 4KB ATINY22 2 KB 128 bajtów M161 16 KB 512 bajtów M163 16 KB 512 bajtów M323 32 KB 1024 bajtów ATINY12 1 KB 64 bajtów ATINY15 1 KB 64 bajtów M8 8 KB 512 bajtów M16 16 KB 1024 bajtów M64 64 KB 2048 bajtów M128 128 KB 4 KB Tab. 4.1. Układy scalone obsługiwane przez program BASCOM-AVR (DEMO)
4.1. Instalacja programu BASCOM-AVR 18 4.1. Instalacja programu BASCOM-AVR Instalacja programu BASCOM-AVR niczym nie różni się od instalacji innych programów w środowisku Windows. Przed rozpoczęciem instalacji warto sprawdzić czy na dysku twardym znajduje się wystarczająco dużo miejsca na instalowany program, a następnie przystąpić do instalacji. 1) Odnaleźć program instalacyjny o nazwie setup.exe na załączonej do pracy płycie CD. A następnie uruchomić aplikację. 2) Na ekranie monitora powinno pojawić się okno. Prosi ono o zamknięcie wszystkich innych, aktualnie działających aplikacji, przypomina o szczegółach zawartych w regulaminie dotyczących rozpowszechnianiu programu. Aby przejść dalej klikamy NEXT 3) Po tej operacji ukazuje się okno. Przedstawia ono treść regulaminu, którym opatrzony jest program i zasady użytkowania wersji BASCOM-AVR (DEMO) Version 1.11.6.8. Po przeczytaniu niniejszych paragrafów należy kliknąć przycisk NEXT.
4.1. Instalacja programu BASCOM-AVR 18 4) Następne okno pomaga nam umieścić instalowany pakiet w odpowiadającym nam miejscu na naszym komputerze. Aby to wykonać należy kliknąć przycisk BROWSE, a następnie wybrać odpowiadające miejsce na twardym dysku. Po wykonaniu tej operacji klikamy przycisk NEXT. 5) W tym okienku wyświetlana jest ścieżka do katalogu w którym zostaną skopiowane ustawienia i pliki pomocne do prawidłowego i bezproblemowego odinstalowania programu. W celu kontynuowania instalacji zaznaczamy opcje YES i klikamy NEXT. 6) Instalator pyta za pomocą kolejnego okienka pod jaką nazwą ma być umieszczony program BASCOM-AVR w MENU START po wybraniu i wpisaniu stosownej nazwy dla użytkownika klikamy przycisk NEXT.
4.1. Instalacja programu BASCOM-AVR 19 7) Ostateczne potwierdzenie chęci zainstalowania naszego programu. Jeżeli jesteśmy zdecydowani klikamy NEXT, a jeśli nie i chcemy poprawić poprzednie konfiguracje klikamy BACK. 8) Okno informuje nas o postępie kopiowania plików programu na nasz twardy dysk w wyznaczone wcześniej miejsce. 9) Okno to oznajmia nam o pomyślnym zakończeniu instalacji. Aby już kompletnie zakończyć instalację nie pozostaje nam nic innego jak kliknąć przycisk FINISH. Po ukończeniu instalacji i powróceniu do poziomu pulpitu Windowsa warto uruchomić ponownie komputer dla pewności i poprawnego działa zainstalowanej aplikacji.
4.2. Obsługa i użytkowanie programu BASCOM-AVR 20 4.2. Obsługa i użytkowanie programu BASCOM-AVR Program po zainstalowaniu znajduje się pod wybraną nazwą w MENU START. Po uruchomieniu aplikacji wszystkie najważniejsze rzeczy potrzebne do zaprogramowania można wykonać z poziomu głównego okna, bez zagłębiania się w paski narzędzi. Program BASCOM-AVR jest typową aplikacją działającą pod Windows, więc jego obsługa nie powinna nastręczyć trudności, a większość poleceń w pasku menu jest taka sama jak w innych programach Windows. Jak widać procedury w języku BASCOM pisze się na białej formatce, a po zakończeniu obowiązkowo sprawdza i kompiluje na język zrozumiały dla mikrokontrolera (kod maszynowy). Wykorzystywany przez BASCOM dialekt BASIC'a ma niewiele wspólnego z BASIC'iem, który być może pamiętany jest z epoki komputerów 8 bitowych. Jest to nowoczesny język programowania, w pełni strukturalny i wyposażony w dziesiątki dodatkowych poleceń specyficznych dla techniki mikroprocesorowej. Pisząc program, najpierw tworzy się program źródłowy. Ma on rozszerzenie.bas, ale jest to najzwyklejszy plik tekstowy, zazwyczaj zawierający dużą liczbę komentarzy. Ten program źródłowy powstaje za pomocą edytora na komputerze PC w języku BASIC. Programator po skompilowaniu utworzy też pliki o rozszerzeniach.hex potrzebne przez niektóre programatory, EEP z danymi do zapisu w pamięci EEPROM. Dla potrzeb symulatorów kompilator stworzy pliki DBG i OBJ. Komplet uzupełni plik tekstowy raportu z rozszerzeniem.rpt, a w przypadku wystąpienia jakichś błędów także plik.err z informacją o błędach kompilacji. Rys. 4.2. Główne okno programu BASCOM-AVR
4.2. Obsługa i użytkowanie programu BASCOM-AVR 21 Aby program współpracował z programatorem sprzętowym należy ustawić to w opcjach, rys.4.3. W tym celu klikamy na pasek OPTIONS, a następnie PROGRAMMER, po czym ukazuje się nam okienko. Gdzie w opcji PROGRAMMER musimy wybrać rodzaj programatora. Wybieramy STK200/STK300 PROGRAMMER i zatwierdzamy OK. Rys. 4.3. Okno ustawień typu programatora sprzętowego 4.2.1. Najważniejsze opcje programu BASCOM-AVR Jak już wspomniałem programowanie mikrokontrolera można przeprowadzić bez zagłębiania się w paski narzędzi, za pomocom poniższych przycisków. Nowa formatka do pisania procedur w języku BASCOM. Otwiera napisane programy jedynie z rozszerzeniem.bas Kompiluje i jednocześnie sprawdza program źródłowy, w razie wystąpienia jakiegoś błędu w kodzie programu wyświetla błąd w głównym oknie programu BASCOM-AVR. Symuluje środowisko, w którym będzie działał program źródłowy i pokazuje jego działanie krok po kroku. Za pomocom tego przycisku wchodzimy do opcji programowani mikroprocesorów. Wyjście z programu BASCOM-AVR
4.2. Obsługa i użytkowanie programu BASCOM-AVR 22 4.2.2. Użytkowanie interfejsu symulatora (AVR Simulator) Napisanie programu jest proste, problemy zaczynają się dopiero podczas usuwania z niego nieuniknionych błędów. Jest to, czynność niezwykle pracochłonna, polegająca na programowaniu procesora, umieszczaniu go w układzie, sprawdzaniu poprawności działania systemu, poprawianie odnalezionych błędów, ponownym programowaniu procesora i tak dalej, BASCOM pozwala znacznie przyspieszyć mozolną czynność testowania programów. W pakiecie BASCOM zawarty jest symulator programowy, umożliwiający częściowe przetestowanie napisanego programu bez konieczności programowania procesora ani dołączania jakichkolwiek urządzeń peryferyjnych do komputera, rys.4.4. Za pomocą tego symulatora możemy sprawdzić efekty współdziałania procesora z wyświetlaczami alfanumerycznymi LCD i wyświetlaczami siedmiosegmentowymi, obejrzeć stany wyjść wszystkich portów, a także wymusić na nich określone stany logiczne. Dostępne są edytory służące podporządkowaniu obsłudze urządzeń peryferyjnych określonych wyjść procesora. Za pomocą odpowiednich przycisków możemy także symulować występowanie przerwań, a także pracę timerów. Symulacja sprzętowa wymaga połączenia komputera z badanym układem za pomocą układu elektronicznego. Symulacja może odbywać się w trybie ciągłym jak też krok po kroku ustala się to w odpowiednich opcjach programu, może także być rozpoczęta i zakończona w dowolnej chwili. Rys. 4.4. Opis okna symulatora
4.2. Obsługa i użytkowanie programu BASCOM-AVR 23 4.2.3. Interfejs programowania (AVR ISP STK Programmer) Opcja programowania stanowi centralną i niezbędną część aplikacji BASCOM-AVR. Za jej pomocą wybieramy rodzaj układu do zaprogramowania, kasujemy, odczytujemy zawartość pamięci mikroprocesorów itp. Program sterujący programatorem, rys.4.5. można wywołać za pomocą kliknięcia na odpowiednią ikonę w głównym oknie programu jak i za pośrednictwem klawisza F4. Rys. 4.5. Opis okna programu obsługującego programator
4.3. Kody błędów 24 4.3. Kody błędów Poniższa lista błędów może pojawić się podczas sprawdzania składni lub kompilacji naszego programu źródłowego. Pomoże nam ona znaleźć popełniony błąd w napisanym programie. Kod Opis 1 Nieznana instrukcja 2 Nieznana struktura instrukcji EXIT 3 Spodziewano się WHILE 4 Brak miejsca w pamięci IRAM na zmienną typu Bit 5 Brak miejsca na zmienne typu Bit 6 Spodziewana. (kropka) w nazwie pliku. 7 Spodziewana instrukcja IF..THEN 8 Pliku źródłowego nie odnaleziono 9 Maksymalnie można użyć 128 instrukcji ALIAS 10 Nieznany typ wyświetlacza 11 Spodziewano się INPUT, OUTPUT, 0 lub 1 12 Nieznany parametr instrukcji CONFIG 13 Ta stała już jest zdefiniowana 14 Bajty mogą być tylko w IRAM 15 Błędny typ danych 16 Nieznana definicja 17 Spodziewano się 9 parametrów 18 Zmienne bitowe umieszczone mogą być tylko w pamięci SRAM lub IRAM 19 Spodziewano się określenia długości zmiennej typu String 20 Nieznany typ danych 21 Brak wolnej pamięci IRAM 22 Brak wolnej pamięci SRAM 23 Brak wolnej pamięci XRAM 24 Brak wolnej pamięci EEPROM 25 Ta zmienna już jest zdefiniowana 26 Spodziewano się AS 27 Spodziewano się parametru 28 Spodziewano się IF..THEN 29 Spodziewano się SELECT..CASE 30 Zmienne bitowe są zmiennymi globalnymi, nie można ich usuwać 31 Błędny typ danych
4.3. Kody błędów 25 32 Niezdefiniowana zmienna 33 Zmienne globalne nie mogą być usuwane 34 Błędna ilość parametrów 35 Spodziewano się 3 parametrów 36 Spodziewano się THEN 37 Błędny operator relacji 38 Nie można wykonać tej operacji dla zmiennych bitowych 39 Spodziewano się FOR 40 Ta zmienna nie może być parametrem instrukcji RESET 41 Ta zmienna nie może być parametrem instrukcji SET 42 Spodziewano się liczby jako parametru 43 Pliku nie odnaleziono 44 Spodziewano się 2 zmiennych 45 Spodziewano się DO 46 Błędne przypisanie 47 Spodziewano się UNTIL 50 Liczba nie mieści się w zmiennej Integer 51 Liczba nie mieści się w zmiennej Word 52 Liczba nie mieści się w zmiennej Long 60 Ta etykieta już istnieje 61 Etykiety nie znaleziono 62 Najpierw SUB lub FUNCTION 63 Parametrem funkcji ABS() może być liczba typu Integer lub Long 64 Spodziewany, (przecinek) 65 Urządzenie nie zostało otwarte 66 Urządzenie już jest otwarte 68 Spodziewano się numeru kanału 70 Ta szybkość transmisji nie może być użyta 71 Typ przekazanych parametrów nie jest zgodny z zadeklarowanym 72 Getclass error. Jest to błąd wewnętrzny. 73 Używanie PRINT w połączeniu z tą funkcją jeszcze nie działa 74 Spodziewano się 3 parametrów 80 Kod nie mieści się w pamięci tego układu 81 Użyj funkcji HEX() zamiast PRINTHEX 82 Użyj funkcji HEX() zamiast LCDHEX 85 Nieznane źródło przerwania
4.3. Kody błędów 26 86 Błędny parametr w instrukcji CONFIG TIMER 87 Nazwa podana jako parametr instrukcji ALIAS już jest używana 88 Spodziewano się 0 lub 1 89 Liczba musi zawierać się w przedziale 1-4 90 Ten adres jest za duży 91 Spodziewano się INPUT, OUTPUT, BINARY lub RANDOM 92 Spodziewano się LEFT lub RIGHT 93 Niezdefiniowana zmienna 94 Podano zbyt dużo bitów 95 Spodziewano się FALLING albo RISING 96 Stopień podziału preskalera musi być jednym z podanych: 1, 8, 64, 256 lub 1024 97 Procedura lub funkcja musi być wcześniej zadeklarowana przez DECLARE 98 Spodziewano się SET lub RESET 99 Spodziewano się nazwy typu 100 Zmienne tablicowe nie mogą być umieszczone w pamięci IRAM 101 Nie mogę znaleźć takiej nazwy sprzętowego rejestru 102 Błąd w wewnętrznej procedurze 103 Spodziewano się = (znak równości) 104 LoadReg error 105 StoreBit error 106 Nieznany rejestr 107 LoadnumValue error 108 Nieznana dyrektywa w pliku definicji rejestrów 109 Spodziewano się znaku = w pseudoinstrukcji.equ, w dołączanym pliku 110 Nie znaleziono pliku do dołączenia 111 Procedura lub funkcja nie została zadeklarowana przez DECLARE 112 Spodziewano się nazwy procedury lub funkcji 113 Ta procedura jest już zadeklarowana 114 Zmienne lokalne mogą być definiowane tylko w treści procedury lub funkcji 115 Spodziewano się numeru kanału 116 Błędny plik rejestrów 117 Nieznane źródło przerwania 200 Pliku definicji.def nie odnaleziono 201 Low Pointer register expected 202 Nie odnaleziono pseudoinstrukcji.equ, prawdopodobnie ta funkcja nie jest obsługiwana przez wybrany procesor
4.3. Kody błędów 27 203 Błąd w instrukcji LD lub LDD 204 Błąd w instrukcji ST lub STD 205 Spodziewano się } (klamra zamykająca) 206 Podanej biblioteki nie odnaleziono 207 Biblioteka została już zarejestrowana 210 Nie znaleziono definicji tego bitu 211 Nie znaleziono zewnętrznej procedury 212 Spodziewano się LOW LEVEL, RISING lub FALLING 213 Spodziewano się ciągu znaków 214 Długość zmiennej String w pamięci XRAM wynosi 0 215 Nieznany skrót mnemoniczny 216 Stała nie została zdefiniowana 217 Zmienne typu BIT lub Boolean nie mogą być łączone w tablice. 218 Rejestr musi być z zakresu R16-R31 219 Przerwania INT0-INT3 są zawsze wyzwalane niskim poziomem logicznym w procesorach MEGA AVR. 220 Skok do przodu poza dozwolonym zakresem 221 Skok do tyłu poza dozwolonym zakresem 222 Błędny znak 223 Spodziewano się * (gwiazdki) 224 Indeks spoza zakresu 225 Nawiasy nie mogą występować w opisach stałych 226 Spodziewano się stałej numerycznej lub znakowej 227 Adres początkowy pamięci SRAM jest większy niż jej adres końcowy 228 Linie DATA musza być umieszczone poza programem, po instrukcji END 229 Spodziewano się END SUB lub END FUNCTION 230 Nie możesz zapisywać do rejestru wejściowego końcówek portu (PINx) 231 Spodziewano się TO 232 Ta funkcja nie jest obsługiwana w tym procesorze 233 Instrukcja READ nie działa z danymi umieszczonymi w pamięci EEPROM 234 Spodziewano się instrukcji otwarcia bloku komentarza: ') 235 Spodziewano się instrukcji zamknięcia bloku komentarza: '( 236 Liczba nie mieści się w zmiennej typu Byte 238 Ta zmienna nie jest zmienną tablicową 239 Invalid code sequence because of AVR hardware bug 240 Spodziewano się END FUNCTION
4.3. Kody błędów 28 241 Spodziewano się END SUB 242 Wystąpił brak zgodności zmiennych 243 Numer bitu wykracza poza liczbę dopuszczalną dla tej zmiennej 244 Nie możesz używać wskaźnika Y 245 Zmienne tablicowe nie mogą być w pamięci IRAM 246 Brak miejsca na definicje w pliku.def 247 Spodziewano się kropki 248 Powinien być użyty argument BYVAL w tej deklaracji 249 Procedura obsługi przerwania jest już zdefiniowana 250 Spodziewano się GOSUB 251 Ta etykieta musi być nazwana SECTIC 252 Spodziewano się zmiennej Integer lub Word 253 Ta zmienna nie może być w pamięci ERAM 254 Spodziewana zmienna 255 Spodziewano się Z lub Z+ 256 Spodziewano się zmiennej typu Single 257 Spodziewano się "" 258 Spodziewano się SRAM 259 Zmienne typu Byte nie mogą przyjmować wartości ujemnych 260 Ciąg znaków nie zmieści się w tej zmiennej typu String 261 Spodziewano się tablicy 262 Spodziewano się ON lub OFF 263 Indeks tablicy poza zakresem 264 Zamiast tego użyj ECHO OFF i ECHO ON 265 Spodziewano się offsetu w rozkazie LDD lub STD. Np. Z+1 266 Spodziewano się TIMER0, TIMER1 lub TIMER2 267 Spodziewano się stałej liczbowej 268 Parametr musi zawierać się w granicach 0-3 269 Spodziewano się END SELECT 270 Ten adres już jest zajęty 322 Ten typ danych nie jest obsługiwany przez tą instrukcję 232 Etykieta posiada zbyt dużo znaków 234 Ten układ nie jest obsługiwany przez bibliotekę I2C w trybie Slave 325 Stopień podziału preskalera musi wynosić: 1, 8, 32, 128, 256 lub 1024 326 Spodziewano się #ENDIF 327 Maksymalna wielkość to 255
4.3. Kody błędów 29 328 Nie działa z programowym układem UART 999 Wersje DEMO lub BETA generują kod tylko do 2 KB Często zdarza się, że kompilator raportuje błąd File not found, który jest zwykle spowodowany przez błędne określenie parametrów instrukcji - zwłaszcza CONFIG. Warto wspomnieć omawiając kody błędów o bardzo przydatnej funkcji pakietu BASCOM-AVR, a mianowicie o tym że podczas sprawdzania kompilator w dolnej części głównego okna podaje powyższy, jeden z popełnionych błędów, a zaraz po nim linię w której natrafił na tą oto nieprawidłowość w kodzie programu. Pomocą może być też umieszczona po tych wskazówkach instrukcja dotycząca korekty błędu.
5. Programowanie 30 5. Programowanie Na pewno każdy z nas słyszał o jakimś języku programowania: C++, Asembler, Turbo Pascal, Delhi, Java, Basic, a także HTML itp. Nie różnią się one bardzo od siebie, tak jak języki, którymi posługują się ludzie. Ktoś kiedyś porównał języki programistyczne do dialektów i gwar, jakie panują w języku ludzkim. Jeżeli zrozumiemy i opanujemy tworzenie programów w jednym z to drugi nastręczy na pewno nam mniej kłopotów. Programowanie mikrokontrolerów jest ściśle związana z architekturą samego procesora i jego sprzętowego otoczenia. Cykl tworzenia oprogramowania dla mikrokontrolera jest zbliżony do cyklu tworzenia oprogramowania dla komputerów osobistych. Cykl ten obejmuje trzy fazy: Napisanie kodu źródłowego. Przetłumaczenie kodu źródłowego na kod maszynowy danego mikrokontrolera. Uruchomienie programu w systemie docelowym. Każdy program główny rozpoczyna się słowem DO, a kończy END między tymi wyrazami zawarta jest najważniejsza część programu. Ma ona strukturę algorytmu i wedle potrzeb programisty może być zapętlona, warunkowana i przerywana, co pokazane jest obrazowo na rys. 5.1. Start Niekończąca się pętla Inicjacja Przerwania Zadania krytyczne czasowo Zadania niekrytyczne czasowo Rys. 5.1. Struktura blokowa programu 5.1. Elementy tworzenia programu w języku BASIC Do programowania mikrokontrolera AT90S2313 będę wykorzystywać język BASCOM oparty na dialekcie języka BASIC. Jest to odmiana ukierunkowana na programowanie procesorów jednoukładowych takich jak nasz. Język BASCOM jest językiem niskiego stopnia, łatwość nauki
5. Programowanie 30 wspomaga to, że poszczególne słowa zapożyczone są z języka angielskiego. W BASCOMIE nie ma ściśle określonej struktury pliku źródłowego przygotowywanego programu, lecz dla większej jego przejrzystości pisany program można podzielić na bloki. Przykład rozplanowania programu podaję poniżej. Dyrektywy dla kompilatora $REGFILE = "m8def.dat" $CRYSTAL = 8000000 informuje kompilator o pliku dyrektyw wykorzystywanego mikrokontrolera informuje kompilator o częstotliwości oscylatora taktującego mikrokontroler 'Instrukcje konfiguracji peryferiów oraz urządzeń zewnętrznych Config Watchdog = 2048 konfiguracja Watchdoga Config TimerO = Timer, Prescale = 1024 konfiguracja TimerO Config Portc = Output konfiguracja portu C 'Deklaracje nagłówków funkcji oraz procedur Declare Sub Inkrementuj (Liczb As Byte) deklaracja procedury Inkrementuj Declare Function Dodaj (C As Integer,D As Integer) As Integer deklaracja funkcji Dodaj 'definicje zmiennych, stałych i aliasów Dim Liczba As Byte definicja zmiennej typu Byte Dim A As Integer, B As Integer definicje zmiennych typu Integer Dim Wynik As Integer definicja zmiennej typu Integer Const X = 5 definicja stałej X W Alias A definicja aliasu, W wskazuje na zmienną A 'program główny A = 100 przypisanie zmiennej A wartości 100 B = 80 przypisanie zmiennej B wartości 80 Liczba = 5 przypisanie zmiennej Liczba wartości 5 Call Inkrementuj(Liczba) wywołanie procedury Inkrementuj Print Liczba wyświetlenie wartości zmiennej liczba (wartość 6) Wynik = Dodaj (A, B) Print Wynik... End wywołanie funkcji Dodaj wyświetlenie wartości zmiennej wynik (wartość 180) Koniec programu głównego 'Definicje wcześniej zadeklarowanych funkcji oraz procedur Sub Inkrementuj (Liczb As Byte) Treść procedury inkrementującej wartość parametru Liczb Incr Liczb inkrementacja zmiennej Liczb End Sub koniec procedury Function Dodaj(C As Integer, D As Integer) As Integer Treść funkcji dodającej wartości parametrów C i D
5.1. Elementy tworzenia programu w języku BASIC 32 Dodaj = C + D End Function instrukcja dodaje wartości parametrów C i D koniec funkcji 'w tej części programu mogą znajdować się podprogramy, 'podprogramy oraz tablice stałych. Powyższy listing jest jedynie przykładem rozplanowania dowolnego programu i jego układu. Pamiętajmy o tym, że po napisaniu programu nieuniknione jest jego sprawdzenie w poszukiwaniu błędów, wyrazisty układ pomaga w ich odnalezieniu. Dobrym nawykiem osoby piszącej program powinno stać się umieszczanie komentarzy, na końcu każdej linii po znaku ( ). 5.1.1. Typy danych Każda ze zmiennych posiada określony typ, związany z treścią przechowywanych w niej danych. W języku BASCOM BASIC zdefiniowano kilka podstawowych typów: Bit 1/8 bajta Bit może przyjmować tylko dwie wartości: 0 i 1. Byte 1 bajt Bajt może przechowywać dowolną dodatnią liczbę całkowitą z zakresu od 0 do 255. Integer 2 bajty Typ Integer może przechowywać dowolną liczbę całkowitą z zakresu 32768 do +32767. Long 4 bajty Typ Long może przechowywać dowolną liczbę całkowitą z zakresu -2^32 do 2^32-1 Word 2 bajty Typ Word może przechowywać dowolną dodatnią liczbę całkowitą z zakresu od 0 do 65535. Single 4 bajty Typ Single może przechowywać dowolną liczbę stało lub zmiennoprzecinkową. Typ String przechowuje dowolny ciąg znaków o długości String max. 254 bajty nie większej niż 254 znaki. Ciąg ten zakończony jest zawsze znakiem 0. Każdy znak to jeden bajt. Tak więc tekst o długości 10 znaków zajmuje 11 bajtów. Tab.5.2. Tabela przedstawiająca typy danych z ich właściwościami 5.1.2. Zmienne Zmienna jest częścią programu pamiętającym dane. Zmiennej przyporządkowany jest dany obszar pamięci nadawany przez programistę przy użyciu typów danych. Przykład przypisań zmiennym wartości: X = 5 zmienna X jest typu Byte Y = 2.5 zmienna Y jest typu Single Z = mikro zmienna Z jest typu String
5.1. Elementy tworzenia programu w języku BASIC 33 Każda zmienna przed użyciem w programie powinna zostać wcześniej zdefiniowana. Robi się po to, aby kompilator mógł określić ilość miejsca dla tej zmiennej. Zmienne definiuje się instrukcją Dim o następującej składni: Dim nazwa [(rozmiar)]as typ gdzie: nazwa nazwa identyfikująca zmienną, rozmiar parametr zmiennych tablicowych liczba elementów tablicy, typ typ zmiennej 5.1.3. Tablice Tablica to zbiór ponumerowanych jednakowych elementów. Każdy element tablicy posiada swój własny indeks (numer) jednoznacznie identyfikujący go. Zmiana jednego elementu tablicy nie wpływa, zatem na resztę elementów przechowywanych w tablicy. Indeks tablicy jest liczbą całkowitą (bez znaku) i musi się zawierać w przedziale od 1 do 65535. Pierwszy element tablicy ma zawsze numer 1. Przykład: Dim a(10) As Byte definiujemy tablicę a z dziesięcioma elementami typu Byte Dim Index As Byte definicja zmiennej Indem typu Byte, która będzie wskazywać elementy tablicy Index = 4 przypisanie zmiennej indem wartości 4 A(1) = 1 przypisanie do pierwszego elementu tablicy wartości 1 A(Index) = 3 przypisanie do czwartego elementu tablicy wartości 3 numer, elementu wskazuje zmienna Indem A(Indem+2) = 4 przypisanie do szóstego (4+2) elementu tablicy A wartości 4-numer elementu jest obliczany LCD A(1) wyświetl na LCD wartość elementu 1 tablicy LCD A(Index) wyświetl na LCD wartość elementu 4 tablicy LCD A(Indem+2) wyświetl na LCD wartość elementu 6 tablicy
5.1. Elementy tworzenia programu w języku BASIC 34 5.1.4. Instrukcja pętli Przy pisaniu programu trudno się raczej obejść bez instrukcji, które muszą być powtarzane. Do tworzenia takich powtórzeń stosuje się pętle np. For...Next. W tej instrukcji powtórzenie jest wykonywane określoną ilość razy. Składnia instrukcji For...Next jest następująca: For zmienna = liczba_pocz To liczba_kon [Step krok] Instrukcje... Next [zmienna] gdzie: zmienna - zmienna numeryczna, będąca licznikiem przejść pętli (wskaźnikiem pętli), liczba_pocz - liczba początkowa licznika pętli, liczba_kon - liczba końcowa licznika pętli, krok - krok zmiany wartości licznika pętli po osiągnięciu instrukcji Next, instrukcje - ciąg instrukcji. 5.1.5. Instrukcja warunku Instrukcja warunkowa jest wykorzystywana do uzależnienia dalszego ciągu wykonywania programu od innego warunku logicznego lub wartości. Dzięki tym instrukcjom można wybierać które z sekwencji ma być wykonana. Przykładem instrukcji warunkowej może być If...Then. Składnia instrukcji If...Then jest następująca: If wyrazeniel Then ciag_instrukcji_a [Elseif wyrazenie2 Then ciag_instrukcji_b] [Else ciag_instrukcji_c] End If gdzie: wyrazeniel, wyrazenie2 - wyrażenia określające warunki logiczne, ciag_instrukcji a - ciąg instrukcji wykonywanych, gdy spełniony jest warunek określony przez wyrazeniel, ciag_instrukcji b - ciąg instrukcji wykonywanych, gdy spełniony jest warunek określony przez wyrażenie2, ciag_instrukcji_c - ciąg instrukcji wykonywanych, gdy niespełniony jest warunek określony przez wyrażenie1 oraz wyrażenie2
5.1. Elementy tworzenia programu w języku BASIC 35 5.2. Przykładowe programy 5.2.1. Generator piezoelektryczny Za pomocą przypadkowej membrany piezo możemy wykonać prosty sygnalizator. Schemat podłączenia membrany do mikrokontrolera pokazałem na rys. 5.3. a program sterujący poniżej. Rys. 5.3. Podłączenie membrany piezo do mikrokontrolera Kod źródłowy pokazuje jak należy zaprogramować układ aby wykorzystał membranę piezoelektryczną. $regfile = "2313DEF.dat" $crystal = 3500000 Config Portb = 255 Portb = &B11111111 Config Portd = &1111100 Portd = &B1011111 Do Sound Portd.5, 10000000, 1000 Waitus 1000 Loop End 'wszystkie końcówki jako 'wyjścia 'parametry sygnału 'czas wstrzymania 'koniec programu 5.2.2. Wyświetlacz alfanumeryczny LCD Sterowanie wyświetlaczami alfanumerycznymi LCD ze sterownikiem HD44780 jest w BASCOMIE bardzo łatwe. Układ HD44780 powoduje to, że użytkownik nie musi martwić się o poszczególne punkty wyświetlacza - wysyła tylko do modułu rozkazy Do ich obsługi przewidziano wiele instrukcji, których użycie zilustruję w przykładzie.
5.1. Elementy tworzenia programu w języku BASIC 36 Zalecane jest połączenie wyświetlacza LCD o organizacji 2x16 znaków z wyprowadzeniami mikrokontrolera tak jak na rys.5.4. Ten sposób połączenia nazywany jest Pin Mode. Wyświetlacz może być dołączony do dowolnych wyprowadzeń mikrokontrolera, gdyż odpowiednie jego linie będą konfigurowane w programie. Oznaczenia wyprowadzeń wyświetlacza mają następujące znaczenie: GND minus zasilania VCC plus zasilania Vo regulacja kontrastu RS wybór rejestru R/W zapis/odczyt rejestrów wyświetlacza EN sygnał zezwalający D0 DD7 linie danych Linia sygnału R/W nie jest wykorzystywana i jest na stałe dołączona do masy, co powoduje, że jest możliwy tylko zapis do rejestrów wyświetlacza. Rys.5.4. Schemat dołączenia wyświetlacza alfanumerycznego LCD do mikrokontrolera
5.1. Elementy tworzenia programu w języku BASIC 37 Kod źródłowy poniżej pokazuje działanie procedur sterujących wyświetlaczem. $regfile = "2313DEF.dat" $crystal = 3500000 Cls Do Cls Lcd TEKST Wait 2 Cls LCD TEKST 2 Wait 2 Loop End czyszczenie ekranu rozpoczęcie pętli napisz tekst czeka 2000ms koniec pętli koniec programu 5.2.3. Zegar cyfrowy z wykorzystaniem wyświetlacza LCD W tej części pracy przedstawiam wykorzystanie mikrokontrolera do budowy precyzyjnego zegara wyświetlającego ustawioną godzinę w formacie (g:mm:ss). Do odmierzania równych odcinków czasu wykorzystano przerwania od przepełnienia 16-bitowego licznika Timer1. W zegarze możliwe jest ustawienie dwoma przyciskami czasu (godzin oraz minut).do dokładnego odmierzania precyzyjnych odcinków czasu wystarczają dokładność oraz stabilność częstotliwości sygnału taktującego zapewniające rezonatory kwarcowe. Na rys.5.5. poniżej przedstawiam schemat podłączenia wyświetlacza i przycisków do mikrokontrolera, a także źródło programu wsadowego. Rys.5.5. Schemat połączeniowy do realizacji zegara cyfrowego
5.1. Elementy tworzenia programu w języku BASIC 38 $regfile = "2313DEF.dat" $crystal = 3500000 Program źródłowy do zegara cyfrowego Config Pind.0 = Input Config Pind.1 = Input Config Timer1 = Timer, Prescale = 256 Declare Sub Wysw_czas czas na On Timer1 Odmierz_1s Dim Sekundy As Byte Dim Minuty As Byte Dim Godziny As Byte Dim Nowa_w As Byte Dim Wart_bcd As Byte S1 Alias Pind.0 S2 Alias Pind.1 'konfiguracja przycisków 'konfiguracja Timer1 'jako Timer 'procedura wyświetlająca 'LCD 'przepełnienie Timer1 o 'etykiecie Odmierz_1s 'deklaracje zmiennych 'przypisanie przyciskom 'sterującym nazw S1,S2 Enable Interrupts Enable Timer1 Counter1 = 51553.40234375 Set Nowa_w Set Portd.0 Set Portd.1 Do Call Wysw_czas If S1 = 0 Then S1 to Waitms 25 If S1 = 0 Then Incr Minuty Sekundy = 0 If Minuty = 60 Then Minuty = 0 End If Set Nowa_w Call Wysw_czas Waitms 200 End If End If If S2 = 0 Then Waitms 25 If S2 = 0 Then Incr Godziny If Godziny = 24 Then 'wartość początkowa wpisana 'do Timer1 (opóźnienie) 'zezwolenie na wyświetlenie 'dołączenie do linii PD0,PD1 'rezystora podciągającego 'pętla główna programu 'wywołanie procedury 'Wysw_czas 'jeśli przyciśnięty przycisk 'sprawdzenie czy przycisk S1 'jest dalej przyciśnięty 'zezwolenie na wyświetlenie 'czasu 'wywołanie procedury 'Wysw_czas 'jeśli przyciśnięty przycisk 'S2 to 'sprawdzenie czy przycisk S2 'dalej przyciśnięty jak tak to
5.1. Elementy tworzenia programu w języku BASIC 39 Godziny = 0 End If Set Nowa_w Call Wysw_czas Waitms 200 End If End If Loop End Sub Wysw_czas If Nowa_w = 1 Then Cls Wart_bcd = Makebcd(godziny) Lcd Bcd(wart_bcd) ; ":" Wart_bcd = Makebcd(minuty) Lcd Bcd(wart_bcd) ; ":" Wart_bcd = Makebcd(sekundy) Lcd Bcd(wart_bcd) ; ":" Reset Nowa_w End If End Sub Wysw_czas Odmierz_1s: Counter1 = Counter1 + 51553.40234375 Incr Sekundy Set Nowa_w If Sekundy = 60then Sekundy = 0 'koniec instrukcji 'warunkowej 'koniec programu 'procedura wyświetlająca 'czas 'podprogram obsługi 'przerwania 'jeśli sekundy=60 to wyzeruj Incr Minuty 'i zwiększ minuty o 1 'wartość If Minuty = 60then 'jeśli minuty=60 to wyzeruj Minuty = 0 'jeśli minuty=60 to wyzeruj Incr Godziny 'i zwiększ godziny o 1 'wartość If Godziny = 24 Then 'jeśli godziny=24 to Godziny = 0 'zerowanie godziny End If End If End If Return 'powrót z przerwania