Wydział Fizyki i Informatyki Stosowanej Praca magisterska Marcin Korzystka kierunek studiów: informatyka stosowana specjalność: informatyka w nauce i technice Opracowanie mikroprocesorowego sterownika dozowania próbek gazowych dla chromatografii Opiekun: dr inż. Janusz Rosiek Kraków, marzec 2010
Oświadczam, świadomy(-a) odpowiedzialności karnej za poświadczenie nieprawdy, że niniejszą pracę dyplomową wykonałem(-am) osobiście i samodzielnie i nie korzystałem(-am) ze źródeł innych niż wymienione w pracy. 2
Kraków, 22 marzec 2010 Tematyka pracy magisterskiej i praktyki dyplomowej Marcin Korzystka, studenta V roku studiów kierunku informatyka stosowana, specjalności informatyka w nauce i technice Temat pracy magisterskiej: Opracowanie mikroprocesorowego sterownika dozowania próbek gazowych dla chromatografii Opiekun pracy: Recenzenci pracy: Miejsce praktyki dyplomowej: dr inż. Janusz Rosiek WFiIS AGH, Kraków Program pracy magisterskiej i praktyki dyplomowej 1. Omówienie realizacji pracy magisterskiej z opiekunem. 2. Zebranie i opracowanie literatury dotyczącej tematu pracy. 3. Praktyka dyplomowa: wybór i zapoznanie się z ideą mikroprocesora, przygotowanie oprogramowania, dyskusja i analiza powstałych problemów, sporządzenie sprawozdania z praktyki. 4. Kontynuacja projektowania oprogramowania dla powstałego urządzenia. 5. Testowanie powstałego urządzenia, omówienie jego cech i zatwierdzenie przez opiekuna. 6. Opracowanie redakcyjne pracy. Termin oddania w dziekanacie: 22 marzec 2010...... (podpis kierownika katedry) (podpis opiekuna)
Merytoryczna ocena pracy przez opiekuna: Końcowa ocena pracy przez opiekuna:... Data:... Podpis:... Merytoryczna ocena pracy przez recenzenta: Końcowa ocena pracy przez recenzenta:... Data:... Podpis:... Skala ocen: (6.0 celująca), 5.0 bardzo dobra, 4.5 plus dobra, 4.0 dobra, 3.5 plus dostateczna, 3.0 dostateczna, 2.0 niedostateczna 4
Spis treści Spis treści 5 Wprowadzenie 7 1 Chromatografia gazowa 9 1.1 Cel.................................... 9 1.1.1 Monitoring gazów atmosferycznych na świecie i w AGH.. 10 1.1.2 Zasada analizy......................... 11 1.1.3 Charakterystyka pomiarów terenowych............ 11 1.1.4 Uzasadnienie konieczności automatyzacji pomiarów..... 11 1.2 Układ mechaniczny próbnika..................... 12 1.2.1 Schemat układu próbnika................... 12 1.2.2 Wejście układu mechanicznego próbnika........... 13 2 Założenia 15 2.1 Sterowanie układu mechanicznego próbnika............. 15 2.2 Struktura danych sterujących..................... 16 2.3 Mały rozmiar i mały pobór prądu.................. 16 3 Opis wykorzystanych technologii 19 3.1 HARDWARE.............................. 19 3.1.1 Słowo wstępne......................... 19 3.1.2 AVR Atmega8535....................... 19 3.1.3 Zestaw uruchomieniowy AVT2550.............. 21 3.1.4 Programator.......................... 23 3.1.5 Układ zasilający zestaw AVT2550.............. 24 3.2 SOFTWARE.............................. 25 3.2.1 Środowisko programistyczne BASCOM-AVR........ 25 3.2.2 Podstawy programowania BASCOM............. 27 4 Konstrukcja oprogramowania 31 4.1 Założenia projektowe.......................... 31 4.2 Moduły programu i schemat ideowy programu............ 32 4.2.1 Moduł startowy - Start.................... 33 4.2.2 Moduł - Cykl zwykły..................... 38 4.2.3 Moduł - Ustawienia...................... 39 5
6 SPIS TREŚCI 4.2.4 Moduł - Start cyklu...................... 39 4.2.5 Moduł - Zapis EEPROM................... 40 4.2.6 Moduł - Ustawienia ogólne.................. 40 4.2.7 Moduł - Ustawienia czasu................... 40 4.2.8 Moduł - Zawory........................ 40 5 Podsumowanie 41 A Rysunki 45 B Listing 49 C Instrukcja użytkownika 65 C.1 Wstęp.................................. 65 C.2 Elementy składowe urządzenia.................... 66 C.2.1 Wyświetlacz LCD....................... 66 C.2.2 Klawiatura........................... 66 C.2.3 Wyjścia............................. 67 C.2.4 Zasilanie............................. 67 C.3 Obsługa urządzenia........................... 68 C.3.1 Ustawienie czasu........................ 68 C.3.2 Kontrola zaworów....................... 68 C.3.3 Wprowadzanie danych..................... 69 C.3.4 Zapis danych do EEPROM.................. 70 C.3.5 Uruchomienie cyklu...................... 70 C.3.6 Programowanie......................... 70 Spis rysunków 73 Spis tabel 74 Bibliografia 75
Wprowadzenie Świat elektroniki otacza nas coraz głębiej, dlatego mamy z nią do czynienia prawie na każdym kroku. Mikroprocesory, które stanowią obecnie ważną część w świecie elektroniki, są dziś powszechnie stosowane w najróżniejszych urządzeniach, nie tylko fabrycznych ale i domowych, jak również nawet i w zabawkach. Niska cena, łatwość programowania i dostępność wszelkich niezbędnych narzędzi powodują, że coraz chętniej sięgamy po układy oparte na mikroprocesorze. [3] Faktem jest, że za pomocą kilku dodatkowych elementów pozwalają zrealizować najróżniejsze projekty. [2] W literaturze można spotkać często określenia mikrokontroler, procesor, mikrokomputer jednoukładowy do określenia mikroprocesora. Praca ta jest próbą stworzenia urządzenia, które za pomocą mikroprocesora będzie sterował układem do kriogenicznego dozowania próbek gazowych w chromatografii gazowej. Utrzymana kolejność rozdziałów w niniejszej pracy obrazuje etapy powstawania tej pracy. W rozdziale pierwszym zawarty jest krótki opis chromatografii gazowej oraz przedstawiony jest wykorzystywany układ do kriogenicznego dozowania próbek gazowych. W rozdziale drugim przedstawione zostały założenia, które zostały nałożone na projekt. Zrozumienie tych założeń pozwala na sprecyzowanie użytych narzędzi. Rozdział trzeci opisuje te narzędzia, od strony Hardware i Software. W rozdziale czwartym przedstawiony został napisany program do obsługi mikroprocesora. Opis ten zawiera: schemat modułowy programu, wszystkie napisane i użyte funkcje. W ostatnim rozdziale znajduje się podsumowanie wykonanego projektu oraz przedstawione zostały możliwości dalszego rozbudowania go. Wynikiem tej pracy jest zaprogramowane elektroniczne urządzenie, które steruje zaworami układu do kriogenicznego dozowania próbek. W dodatku C znajduję się Instrukcja użytkownika do tego urządzenia oraz w dodatku B listing programu sterującego nim. 7
Rozdział 1 Chromatografia gazowa 1.1 Cel Celem prowadzonych analiz gazowych jest rozdzielenie złożonych mieszanin (gazów) oraz określenie jakościowego i ilościowego stanu składników tej mieszaniny. Proces ten przeprowadza się w specjalnie do tego zaprojektowanym urządzeniu zwanym chromatografem. Ogólny schemat chromatografu gazowego przedstawia rysunek 1.1. Rysunek 1.1: Schemat chromatografu gazowego; 1-zbiornik gazu nośnego, 2- regulator przepływu gazu, 3-dozownik, 4-kolumna, 5-termostat, 6-detektor, 7- przepływomierz, 8-komputer lub rejestrator 9
10 ROZDZIAŁ 1. CHROMATOGRAFIA GAZOWA 1.1.1 Monitoring gazów atmosferycznych na świecie i w AGH Obecnie istnieje organizacja World Meteorological Organization (WMO), która angażuje się w obserwacje i badania naukowe stacji i laboratoriów meteorologicznych oraz w różne programy naukowe i wspólne badania monitorujące gazy cieplarniane. Odpowiedzialny jest za to dział WMO World Data Centre for Greenhouse Gases (WDCGG). Systematycznie zbiera się informacje i analizuje się je dla następujących gazów: [7] 1. CO2 - Dwutlenek węgla Poziom gazu CO 2 wzrasta od czasu uprzemysłowienia gospodarek świata. Jest on gazem, który wnosi największy udział do globalnego ocieplenia atmosfery. W latach 1983-2002 wzrost ten szacowany jest na 1.6 ppm/rok. 2. CH4 - Metan CH4 jest drugim znaczącym gazem cieplarnianym. Jego wzrost notuje się od początku 19 wieku. W latach 1984-2002 globalne tempo wzrostu CH4 szacowane jest na 7 ppb/rok, jednakże w latach 80-tych tempo to zmniejszyło się. Poza tym notujemy znaczne zmniejszenie się tempa w kilku latach (1992 i 1996). Koncentracja gazu CH4 ma charakter sezonowy. W zimie występuje wysoka koncentracja tego gazu, latem natomiast jest niska. 3. N2 O - Podtlenek azotu Jest ważnym gazem cieplarnianym, jego poziom rośnie w skali globalnej. Z badań przeprowadzonych przez WDCGG wynika, że koncentracja tego gazu rośnie na obu półkulach ziemskich. 4. O3 - Ozon Ozon pełni ważną rolę w atmosferze kuli ziemskiej poprzez promieniowanie i chemiczne procesy zachodzące we współpracy z nim. Ozon absorbuje promieniowanie UV w stratosferze, krąży w atmosferze z zakumulowaną energią, również absorbuje promieniowanie IR w troposferze. 5. CO - Tlenek węgla Tlenek węgla nie jest gazem cieplarnianym, ale ma wpływ na koncentrację gazów cieplarnianych przez oddziaływanie na tlenek wodoru (OH). Jego koncentracja rośnie od połowy 19 wieku i wynosiła 98 ppb w 2002 roku. 6. NO i NO2 - Tlenek azotu i dwutlenek azotu Tlenek i dwutlenek azotu nie są gazami cieplarnianymi, ale oddziałują na
1.1. CEL 11 tlenek wodoru (OH), który kontroluje koncentracje metanu (CH4), tlenku węgla (CO) i węglowodorów (HCFCs). Przy obecności NOx, CO i węglowodorów w troposferze powstaje ozon (O3 ). 7. SO2 - Dwutlenek siarki Dwutlenek siarki nie jest gazem cieplarnianym, jest prekursorem atmosferycznego kwasu siarkowego (H2SO4 ) lub siarczanu aerozolu. Jest głównym źródłem kwaśnego deszczu. Informacje o koncentracji wyżej wymienionych gazów zbiera się w celu zbadania wpływu działalności ludzkiej na atmosferę ziemską, również bada się korelację miedzy tymi gazami. 1.1.2 Zasada analizy Chromatografia (z greckiego: chromatos=barwa + grapho=pisze) jest to metoda rozdzielania mieszanin w wyniku ich przepływu przez porowaty ośrodek wykazujący pewne powinowactwo do rozdzielanych składników. Metoda ta została opracowana na początku XX wieku przez prof. Michaiła Cwieta. Polega na wykorzystaniu różnic we współczynnikach podziału składników między fazą ruchomą i fazą nieruchomą, stosowana do celów analitycznych, przemysłowych, w badaniach strukturalnych związków chemicznych i badań fizykochemicznych. W chromatografii gazowej fazę ruchomą stanowi gaz, natomiast fazę nieruchomą stanowi ośrodek porowaty np. adsorbent, jonit, sito molekularne. [4] 1.1.3 Charakterystyka pomiarów terenowych Pomiarem terenowym dla chromatografii gazowej jest proces zebrania gazów w szklanych zbiornikach. Następnie wypełnione gazem zbiorniki można poddać dalszej analizie w chromatografie. Aby zebrać mieszaninę gazów w zbiorniku należy przeprowadzić operacje: 1. Przepuszczenia gazów przy włączonej pompie i dwóch otwartych zaworów otaczających zbiornik, 2. Wpuszczenie gazu do zbiornika przy włączonej pompie, otwartym zaworze od strony pompy, i zamkniętym zaworze z drugiej strony. 1.1.4 Uzasadnienie konieczności automatyzacji pomiarów Automatyzacja pomiarów terenowych pozwala na zebranie danych gazowych o każdym czasie, bez konieczności kontroli pomiaru przez pracownika. Pomiar taki
12 ROZDZIAŁ 1. CHROMATOGRAFIA GAZOWA może trwać 24 godziny, co też utrudnia przeprowadzenie badań. Tak więc, automatyzacja ułatwi proces zbierania danych i pozwoli na lepsze wykorzystanie układu dozowania próbek 1.2. 1.2 Układ mechaniczny próbnika Zaprezentowany układ na rysunku 1.2 spełnia rolę zbiornika próbek gazowych. Manipulując odpowiednio zaworami pompujemy do każdego zbiorniczka odpowiednią ilość gazu. Do tej pory układ ten był sterowany programem na komputerze klasy PC. Uniemożliwia to przeprowadzenie dłuższych badań w terenie. Układ sterujący powstały w tej pracy ma być w pełni przenośny, tak aby umożliwiał prace w terenie. 1.2.1 Schemat układu próbnika Układ zbudowany jest z 14 zaworów (od V1 do V14), sześciu szklanych zbiorników oraz pompy. Zasilany jest on poprzez zasilacz komputerowy (12 V). Schemat tego układu zaprezentowany jest na rysunku 1.2. Rysunek 1.2: Schemat mechaniczny; V1..V14-zawory, Pump-pompa, 1..6- zbiorniki Przykładowy cykl sterowania układem przedstawiony jest w tabeli 1.1. Jak widać, należy podać czas operacji, numer zaworu na którym ma zostać wykonana operacja oraz należy podać jaka operacja ma zostać wykonana (ON-OFF).
1.2. UKŁAD MECHANICZNY PRÓBNIKA 13 Czas Zawór Wartość Czas Zawór Wartość 17:00:00 0 At 08:00:00 0 ON 00:00:00 0 ON 08:00:01 1 ON 00:00:01 1 ON 08:00:02 10 ON 00:00:02 10 ON 08:01:00 10 OFF 00:01:00 10 OFF 08:01:01 7 ON 00:01:01 3 ON 08:01:15 6 ON 00:01:15 2 ON 08:21:15 7 OFF 00:21:15 3 OFF 08:24:15 6 OFF 00:24:15 2 OFF 08:24:16 1 OFF 00:24:16 1 OFF 08:24:17 0 OFF 00:24:17 0 OFF 12:00:00 0 ON 04:00:00 0 ON 12:00:01 1 ON 04:00:01 1 ON 12:00:02 10 ON 04:00:02 10 ON 12:01:00 10 OFF 04:01:00 10 OFF 12:01:01 9 ON 04:01:01 5 ON 12:01:15 8 ON 04:01:15 4 ON 12:21:15 9 OFF 04:21:15 5 OFF 12:24:15 8 OFF 04:24:15 4 OFF 12:24:16 1 OFF 04:24:16 1 OFF 12:24:17 0 STOP 04:24:17 0 OFF Tabela 1.1: Przykładowy cykl 1.2.2 Wejście układu mechanicznego próbnika Elementem wejścia tego układu jest zwykła wtyczka DB25 (znana jako wtyczka LPT lub port równoległy) pokazana na rysunku 1.3. Do niej podpina się urządzenie sterujące zaworami. Rysunek 1.3: Wejście układu - DB25. Do złącz tej wtyczki podpięte zostały zawory. Proces sterowania urządzenia polega na manipulowaniu sygnałem na odpowiednich złączach wejścia. Schemat połączenia Numer złącza -> Numer zaworu przedstawiony jest w tabeli 1.2.
14 ROZDZIAŁ 1. CHROMATOGRAFIA GAZOWA NR ZŁĄCZA NR ZAWORU 1 GND 4 3 5 POMPA 8 9 9 4 10 6 12 13 13 11 16 2 17 1 20 8 21 10 22 5 23 7 24 14 25 12 Tabela 1.2: Schemat połączenia - nr złącza->nr zaworu
Rozdział 2 Założenia Powstałe urządzenie ma za zadanie sterować układem mechanicznym do chromatografii gazowej przedstawionym w podrozdziale 1.2 i ma spełniać kilka podstawowych wymagań: sterowanie zaworami i pompą mały rozmiar możliwość wprowadzenia nowych danych możliwość pracy w terenie 2.1 Sterowanie układu mechanicznego próbnika Aby sterować układem do dozowania próbek gazowych z podrozdziału 1.2 należy na odpowiednie wyprowadzenia procesora podawać zwykłe sygnały TTL( zero logiczne lub jedynkę logiczną). Sygnał TTL jest niski (logiczne 0 ), gdy potencjał ma wartość od 0 V do 0,8 V w odniesieniu do masy, wysoki (logiczna 1 ) przy wartości potencjału między 2 V a 5 V. Wyprowadzenia portów mikroprocesora przedstawia tabela 2.1. Obszerny opis mikroprocesora znajduję się w rozdziale 3.1.2 15
16 ROZDZIAŁ 2. ZAŁOŻENIA Nr zaworu Port Pompa Portc.1 1 Porta.4 2 Porta.3 3 Portc.0 4 Portc.7 5 Portd.0 6 Porta.0 7 Portd.1 8 Porta.5 9 Portc.6 10 Porta.6 11 Porta.2 12 Portd.3 13 Porta.1 14 Portd.2 Tabela 2.1: Wyprowadzenia mikroprocesora. 2.2 Struktura danych sterujących Dane wprowadzane do urządzenia mają mieć taką samą postać, jaka jest używana w programie Autosampler na komputer PC. Pozwoli to na łatwe wprowadzenie danych bez potrzeby konwersji na inny format. Dane wprowadzane do programu mają postać: Godzina Minuta Sekunda NrZaworu Operacja 17 00 00 0 3 00 00 00 0 0.......... 00 00 02 10 2 Tabela 2.2: Postać danych. Gdzie: Godzina,Minuta,Sekunda - to czas operacji. NrZaworu - numer zaworu od 0 do 15 (0-pompa) Operacja - 3=start, 2=koniec, 1=ON, 0=OFF. 2.3 Mały rozmiar i mały pobór prądu Możliwość łatwego przeniesienia urządzenia i podłączenia go do układu dozowania próbek w dowolnym miejscu skłania do użycia układu elektronicznego opartego na mikroprocesorze oraz do użycia akumulatora żelowego. Akumulator żelowy to
2.3. MAŁY ROZMIAR I MAŁY POBÓR PRĄDU 17 rodzaj akumulatora kwasowo-ołowianego, z żelowym elektrolitem, który idealnie spełnia rolę zasilacza do przenośnego urządzenia. Jego główne cechy to: jest bezobsługowy, tzn. nie trzeba wymieniać elektrolitu, można go ustawić w różnych pozycjach, brak wycieków elektrolitu, odporność na temperaturę, uderzenia i wibracje Urządzenie pobiera prąd o wartości 0.03 [A]. Urządzenie powinno wytrzymać bez ładowania min. 48 godzin. W ten sposób można wyliczyć minimalną pojemność akumulatora: Q[Ah] = I[A] * t[h]. Pojemność taka wynosi 1,44 [Ah]. W rozdziale 3.1.5 przedstawiony jest układ zasilający urządzenie.
Rozdział 3 Opis wykorzystanych technologii 3.1 HARDWARE 3.1.1 Słowo wstępne W rozdziale tym przedstawione są elementy hardware które zostały użyte podczas wykonywania pracy. W sekcji AVR Atmega8535 znajduje się opis mikroprocesora. Nie jest to jednak szczegółowy opis tego procesora, ale jest wyszczególnieniem podstawowych elementów oraz elementów, na które należało zwrócić szczególną uwagę podczas pisania pracy. W sekcji Zestaw uruchomieniowy AVT2550 przedstawiony jest układ elektroniczny, którego integralną częścią jest wspomniany mikroprocesor. Przedstawiona jest budowa układu oraz możliwe pełnione funkcję przez układ. W sekcji Programator przedstawiony jest opis programatora oraz schemat procesu programowania mikroprocesora. W sekcji Układ zasilający zestaw AVT2550 przedstawiony został schemat podłączenia akumulatora żelowego oraz kontrolki do układu. W dokumencie stosowane są wymiennie nazwy mikrokontroler, procesor i mikroprocesor oznaczające ten sam układ scalony. 3.1.2 AVR Atmega8535 Mikroprocesor Atmega8535 jest wysoko wydajnym, o niskim poborze prądu, 8- bitowym procesorem z rodziny AVR. Budowa procesora oparta jest na architekturze RISC. Atmega8535 w swojej budowie posiada 3 rodzaje pamięci: Systemowa 8K bajtowa nieulotna pamięć FLASH. W niej znajduje się skompilowany program. Według dokumentacji zapis i odczyt tej pamięci może być wykonany 10,000 cykli. 19
20 ROZDZIAŁ 3. OPIS WYKORZYSTANYCH TECHNOLOGII 512 bajtowa pamięć EEPROM. Nieulotna pamięć, służy do przechowywania rzadko zmieniających się danych. 100,000 cykli zapisu i odczytu. 512 bajtowa pamięć RAM. Wewnętrzna pamięć do przechowywania stosu danych. Po wyłączeniu zasilania pamięć zostaje wyczyszczona. Jednostką centralną mikroprocesora jest jednostka arytmetyczno-logiczna (ALU), która wykonuje wszystkie operacje bitowe. Rysunek A.1 przedstawia blokowy schemat wewnętrzny użytego mikrokontrolera. W swojej budowie zawiera 40 wyprowadzeń, z których 32 są to uniwersalne wyprowadzenia IN/OUT. Opis wyprowadzeń znajduje się w tabeli 3.1. Natomiast na rysunku 3.1 przedstawione jest rozmieszczenie wyprowadzeń w mikrokontrolerze. Rysunek 3.1: Atmega8535 Ponadto w swojej budowie zawiera kilka bardzo ważnych i funkcjonalnych modułów: Interfejs ISP - umożliwia komunikację z innymi układami i systemami mikroprocesorowymi, pozwala również zaprogramować procesor bez konieczność wyjmowania kostki z podstawki. Sprzętowy UART - czyli układ umożliwiający transmisję danych z wykorzystaniem protokołu RS232. Dwa 8-bitowe liczniki.
3.1. HARDWARE 21 Vcc GND Port A(PA7..PA0) Port B(PB7..PB0) Port C(PC7..PC0) Port D(PD7..PD0) RESET XTAL1 XTAL2 AVCC AREF Napięcie zasialnia. Uziemienie. Port A służy jako analogowe wejścia do przetwornika AC/DC. Jeśli przetwornik AC/DC jest nieużywany to Port A służy jako 8-bitowe dwukierunkowe porty IN/OUT. Port B to 8-bitowe dwukierunkowe porty IN/OUT Port C to 8-bitowe dwukierunkowe porty IN/OUT Port D to 8-bitowe dwukierunkowe porty IN/OUT Wejście zerujące RESET. Wejście rezonatora kwarcowego Wyjście z rezonatora kwarcowego Jest napięciem zasilania dla Portu A i przetwornika AC/DC. Jest analogowym odniesieniem dla przetwornika AC/DC. Tabela 3.1: Wyprowadzenia mikroprocesora Jeden 16-bitowy licznik. Licznik czasu rzeczywistego z odrębnym oscylatorem (RTC). Cztery kanały PWM. 8-kanałowy, 10-bitowy przetwornik AC/DC. 3.1.3 Zestaw uruchomieniowy AVT2550 AVT 2550 jest układem dostępnym jako układ do samodzielnego złożenia udostępniany przez firmę AVT. Znany jest pod nazwą Pecel (Personal Computer for Electronicians). Budowa tego układu jest przedstawiona na rysunku A.2. W skład tego układu wchodzą następujące układy scalone: IC1 - mikroprocesor ATmega8535. IC2 - ULN2003, układ ten zawiera osiem driverów mocy. Służy do sterowania przekaźnikami, żarówkami, silnikami i innymi urządzeniami wykonawczymi. IC3 - jest to układ resetujący procesor w przypadku spadku napięcia zasilające poniżej pewnej wartość minimalnej, oraz zapewnia pewny start procesora po włączeniu do zasilania. IC4 - stabilizator napięcia +5VDC.
22 ROZDZIAŁ 3. OPIS WYKORZYSTANYCH TECHNOLOGII IC5 - odbiornik podczerwieni o częstotliwości pracy 36kHz IC6 - jest to układ scalony, pracujący jako wzorzec napięciowy. Na jego wyjściu VR występuje napięcie równe 2.5 [V], stabilne w funkcji temperatury i napięcia zasilającego IC7 - układ scalony stosowany do konwersji napięć portu RS-232 na standard TTL. Układ ten posiada również szesnasto-klawiszową klawiaturę, która służy do wprowadzania danych oraz do przechodzenia pomiędzy opcjami udostępnionymi przez program. Do komunikacji z użytkownikiem służy wmontowany wyświetlacz LCD (16*2). Ostatnimi elementami na płytce układu to zestaw złącz: CON1, CON2, CON3, CON4 - do tych złącz podłączono wszystkie aktywne wyprowadzenia procesora, czyli porty A,B,C i D. CON5 - złącze I2C. Umożliwia podłączenie wielu urządzeń współpracujących z szyną I2C. CON6 - złącze 1WIRE. Umożliwia podłączenie urządzeń współpracujących z szyną 1WIRE. CON7 - złącze, do którego doprowadzamy napięcie zasilające cały układ. CON8 - złącze ISP. Do niego podłączamy programator. Umożliwia ono zaprogramowanie procesora bez wyjmowania go z płytki. CON9 i CON10 - są wejściami i wyjściami bufora mocy ULN2803. CON11 - złącze alternatywnego zasilania procesora. CON12 - złącze umożliwiające podłączenie układu do złącza RS-232 komputera bądź innego urządzenia posiadający interfejs RS-232. CON13 - złącze, do którego możemy podłączyć odbiornik sygnału DCF77 nadawanego na falach długich. Po przylutowaniu wszystkich wymienionych wyżej elementów na drukowanej płytce otrzymałem w pełni funkcjonalny układ, który należy tylko zaprogramować. Opis programatora i schemat programowania przedstawiony został w rozdziale 3.1.4. Schemat płytki drukowanej przedstawiony jest na rysunku A.3.
3.1. HARDWARE 23 3.1.4 Programator AVT2550/P Programator ISP to bardzo prosty programator, składający się tylko z jednego układu scalonego 74LS244, służący do wprowadzenia programu do pamięci mikroprocesora. Dzięki złączu ISP programowanie procesora odbywa się bez konieczności wyciągania kostki procesora z płytki. Użyty programator jest kompatybilny z programatorem STK200 firmy Kanada, który jest obsługiwany w Bascom-AVR. Poniższy schemat 3.2 przedstawia idee podłączenia programatora[6]. Rysunek 3.2: Schemat ideowy programatora. Niżej pokazany jest uproszczony algorytm programowania mikroprocesorów firmy AVR poprzez interfejs ISP. 1. Podczas włączenia zasilania należy wymusić stan niski na wejściach RESET i SCK procesora. Nie wszystkie programatory (w tym opisywany) potrafią wykonać tę czynność i w takim przypadku należy, po wymuszeniu stanu niskiego na końcówce SCK, podać stan wysoki na RESET przez dwa cykle zegarowe. 2. Wysłać do procesora instrukcję zezwolenia na programowanie Programming Enable. Składnia tej instrukcji podana jest w tabeli niżej[5].
24 ROZDZIAŁ 3. OPIS WYKORZYSTANYCH TECHNOLOGII Instrukcja Format instrukcji Działanie Bajt 1 Bajt 2 Bajt 3 Bajt 4 Programming Enable 1010 1100 0101 0011 xxxx xxxx xxxx xxxx Zezwolenie na programowanie Chip Erase 1010 1100 100x xxxx xxxx xxxx xxxx xxxx Kasowanie obu pamięci Read Program Memory Write Program Memory Read EEPROM Memory Write EEPROM Memory 0010 H000 xxxx xxaa bbbb bbbb oooo oooo 0100 H000 xxx xxaa bbbb bbbb iiii iiii 1010 0000 xxxx xxxx xbbb bbbb oooo oooo Odczyt górnej lub dolnej (H) części danych spod adresu a:b Zapis górnej lub dolnej (H) części danych spod adresu a:b Odczyt z pamięci danych spod adresu b 1100 0000 xxxx xxxx xbbb bbbb iiii iiii Zapis do pamięci danych pod adres b Write Lock Bits 1010 1100 111x xabx xxxx xxxx xxxx xxxx Zapis bitów zabezpieczających A i B Read Signature Bits 0011 0000 xxxx xxxx xxxx xxbb oooo oooo Odczyt typu układu o spod adresu b a - wyższe bity adresu, b - niższe bity adresu, H=0 - niższy bajt, H=1 - wyższy bajt, o - odczyt danych, i - zapis danych, x - bez znaczenia, A - bit zabezpieczający 1, B - bit zabezpieczający 2. 3. Kolejna czynność to sprawdzenie poprawności transmisji. Czynność ta polega na odebraniu od procesora wartości bajtu Programming Enable. Jeżeli otrzymamy taką odpowiedź uznajemy, że transmisja jest prawidłowa i możemy przystąpić do kolejnych instrukcji. Jeżeli nie otrzymamy odpowiedzi od procesora po wykonaniu 32 prób wysłania instrukcji Programming Enable świadczy to, że nie można zsynchronizować układów. 4. Po nawiązaniu transmisji programator powinien wysłać do procesora kolejne instrukcje zgodne z wykonywanym aktualnie zadaniem. 3.1.5 Układ zasilający zestaw AVT2550 Zasilanie urządzenia odbywa się poprzez akumulator żelowy. Akumulator żelowy, jaki został użyty w tej pracy, jest produkcji firmy SSB CSB. Akumulator ten jest 12 [V], a jego pojemność jest równa 3 [Ah]. Do układu został dodatkowo podpięty moduł pokazujący stan naładowania akumulatora. Moduł ten zbudowany jest z diody Zenera, rezystora oraz diody świecącej (LED). Zaświecona dioda oznacza prawidłowo naładowany akumulator, natomiast brak sygnalizacji przez diodę oznacza, że akumulator jest rozładowany. Schemat podłączenia akumulatora i modułu do zestawu uruchomieniowego AVT2550 przedstawia rysunek 3.3. Rysunek 3.3: Schemat zasilania układu AVT2550.
3.2. SOFTWARE 25 3.2 SOFTWARE 3.2.1 Środowisko programistyczne BASCOM-AVR Bascom-AVR to środowisko programistyczne stworzone do programowania mikroprocesorów z rodziny AVR. W skład pakietu wchodzi kompilator języka BA- SCOM, symulator sprzętowy procesora, wbudowany edytor składni języka. Język opisu BASCOM jest dialektem (odmianą) języka BASIC. Jest on stosunkowo prostym językiem proceduralnym, w skład którego wchodzą: deklaracja zmiennych, instrukcje warunkowe, procedury, instrukcje pętli, więcej na ten temat można znaleźć w podrozdziale 3.2.2. Sam BASCOM-AVR posiada wiele użytecznych instrukcji, dodawanych i poprawianych w każdej nowszej wersji środowiska, które ułatwiają pisanie programu. Do pisania programu został użyty Bascom-AVR w wersji 1.11.9.1. Na rysunku 3.4 przedstawione jest główne okno tego środowiska. W oknie edytora zapisywane są polecenie BASCOMA, są one zapisywane w zwykłym pliku tekstowym o rozszerzeniu.bas. Rysunek 3.4: Okno główne. Przed rozpoczęciem pracy z Bascom-AVR, należy go odpowiednio skonfigurować. Najważniejsze jest wybranie procesora oraz programatora odpowiednio do posiadanego fizycznego sprzętu. Na rysunku 3.5 pokazane jest okno z konfiguracją wyboru procesora, natomiast na rysunku 3.6 pokazane jest okno z wyborem programatora. Mając tak skonfigurowane środowisko można przejść do kompilacji programu i wgrania go do procesora. Kompilacja odbywa się poprzez wciśnięcie Program- >Compile (F7 lub klawisz na pasku narzędziowym). Jeśli kompilacja przejdzie
26 ROZDZIAŁ 3. OPIS WYKORZYSTANYCH TECHNOLOGII Rysunek 3.5: Okno konfiguracji procesora. Rysunek 3.6: Okno konfiguracji programatora. bez żadnych błędów można program wgrać do procesora klikając na Program- >Send to Chip (F4). W tle, podczas kompilacji, plik programu.bas jest tłumaczony na szereg plików: 1..BIN - plik z programem dla mikrokontrolera wgrywany do pamięci FLASH, 2..DBG - plik dla potrzeb symulatora, 3..EEP - plik z danymi EEPROM, 4..HEX - plik z danymi EEPROM, 5..OBJ - wygenerowany kod asembler,
3.2. SOFTWARE 27 6..RPT - plik zawierający raport. 3.2.2 Podstawy programowania BASCOM W języku BASCOM BASIC zdefiniowano kilka typów danych przedstawionych w tabeli 3.2[1]: Typ Rozmiar Przechowywane wartości Bit 1/8 bajta Wartości 0 lub 1 Byte 1 bajt Liczby całkowite z zakresu od 0 do 255 Integer 2 bajty Liczby całkowite z zakresu od -32768 do 32767 Long 4 bajty Liczby całkowite z zakresu od -2ˆ32 do 2ˆ32-1 Word 2 bajty Liczbę całkowitą z zakresu od 0 do 65535 Single 4 bajty Dowolną liczbą stało lub zmiennoprzecinkową String max.254 bajty Przechowuje ciąg znaków o długości nie większej niż 254 znaki. Koniec tego ciągu jest oznaczany znakiem 0. Tabela 3.2: Typy danych Zmienne definiuje się za pomocą instrukcji DIM, podając typ zmiennej. Dim nazwa zmiennej As typ zmiennej Tablica zmiennych, tak jak w innych językach programowania, to zbiór ponumerowanych jednakowych elementów. Indeks tablicy liczy się zawsze od numeru 1. Aby zdefiniować tablice należy podać w nawiasie jej wielkość (rozmiar). Dim n a zwa t ablicy ( rozmiar ) As typ zmiennej Na zdefiniowanych zmiennych można wykonywać podstawowe operacje arytmetyczne takie jak dodawanie(+), odejmowanie(-), mnożenie(*), dzielenie(/), dzielenie całkowite(\) oraz potęgowanie(ˆ). Istnieje również możliwość porównywania zmiennych za pomocą operatorów logicznych (tab 3.2.2): Operator Funkcja Wyrażenie = Równość X = Y <> Nierówność X <>Y < Mniejszy X <Y > Większy X >Y <= Mniejszy lub równy X <= Y >= Większy lub równy X >= Y Tabela 3.3: Operatory logiczne Instrukcja FOR...NEXT
28 ROZDZIAŁ 3. OPIS WYKORZYSTANYCH TECHNOLOGII Jest to instrukcja pętli, za pomocą której można wykonać jakieś czynności określoną liczbę razy. Składnia tego polecenia jest następująca: FOR L i c z n i k = WartoscPoczatkowa TO WartoscKoncowa... wykonywane zadanie... NEXT Na początku do zmiennej Licznik zostanie wpisana WartoscPoczatkowa. Po wykonaniu jednego obiegu wartość zmiennej pomocniczej Licznik jest zwiększana o 1 i sprawdzany jest warunek czy aktualna wartość zmiennej Licznik osiągnął stan WartoscKoncowa. Instrukcja warunkowa IF...THEN...ELSE Instrukcja ta służy do sprawdzania określonego warunku i, na podstawie spełnienia lub nie tego warunku, wykonania odpowiedniego zadania. Składnia tego polecenia jest następująca. IF WarunekDoSpelnienia THEN... BLOK A... J e s l i warunek j e s t spełniony... zadanie w tym bloku z o s t a n i e wykonane ELSE... BLOK B... J e ś l i warunek j e s t n i e spełniony... zadanie w tym bloku z o s t a n i e wykonane END IF Jeśli warunek WarunekDoSpelnienia zostanie spełniony operacje z bloku A zostaną wykonane, w przeciwnym wypadku zostaną wykonane operacje z bloku B. W instrukcji tej można ominąć całkowicie blok B, pamiętając o zakończeniu instrukcji poleceniem END IF. Instrukcja DO...LOOP Najczęściej wykorzystywana pętla programowa w programie z listingu B. Zasada działania tej pętli jest bardzo prosta. Instrukcje umieszczone wewnątrz tej pętli wykonywane są nieskończenie długo. Można jednak stosować wyjścia z pętli na cztery różne sposoby stosując:
3.2. SOFTWARE 29 klauzule WHILE lub UNTIL, etykietę GOSUB, instrukcję EXIT DO. Najprostsza struktura instrukcji DO... LOOP jest następująca: DO... c i a ł o p ę t l i LOOP lub z warunkami zakończenia: DO WHILE / UNTIL ( badany warunek )... c i a ł o p ę t l i LOOP oraz DO... c i a ł o p ę t l i LOOP WHILE /UNTIL ( badany warunek ) Polecenie SELECT CASE Służy do wybrania dowolnie wielu możliwości ze względu na jedną zmienną. Struktura tego polecenia jest następująca: SELECT CASE d z i a l a n i e CASE 1 : i n s t r u k c j e dla pierwszego d z i a ł a n i a CASE 2 :... CASE N : i n s t r u k c j e dla n tego d z i a ł a n i a END SELECT
Rozdział 4 Konstrukcja oprogramowania W tej części przedstawiony jest program obsługujący wyżej opisany zestaw uruchomieniowy AVT 2550 (PECEL) opisany w rozdziale 3.1.3. Na początku wymienione są założenia, które należało przyjąć podczas pisania programu. W dalszej kolejności przedstawiony jest schemat ideowy programu, opis poszczególnych części programu, który zawiera opis wszystkich użytych i napisanych funkcji. Wszystkie zadeklarowane funkcję, prócz jednej KEY SCAN, są mojego autorstwa. W dodatku B znajduję się cały kod programu. 4.1 Założenia projektowe Program obsługujący mikrokontroler powinien zapewnić cztery podstawowe funkcjonalności: Sterowanie 14 zaworami i pompą. Wprowadzenie danych pomiarowych. Kontrola czasowa (ustalenie czasu startu programu). Możliwość zapętlenia się cyklu. Pierwsza wymieniona funkcjonalność jest zarówno podstawowym kryterium użyteczności programu. Sterowanie zaworami i pompą odbywa się poprzez ustawienie stanu wysokiego na odpowiednim pinie mikroprocesora. Wprowadzenie danych pomiarowych możliwe jest poprzez wykonanie odpowiedniej sekwencji klawiszy. 31
32 ROZDZIAŁ 4. KONSTRUKCJA OPROGRAMOWANIA Dane te są postaci przedstawionej w sekcji 2.2, natomiast operacja wprowadzania danych jest przedstawiona w Podręczniku użytkownika. Należy pamiętać, że możliwe jest wprowadzenie 64 operacji, a pierwszy numer operacji jest to czas startu całego cyklu. Ponadto, jeśli chcemy ustawić zapętlenie cyklu należy wstawić na odpowiednim numerze operacji czas równy 00:00:00. Program jest tak skonstruowany, że po pojawieniu się takiego czasu ustawi zmienne sterujące na domyślną wartość i przejdzie do ponownego wyliczania rozpoczęcia się cyklu. 4.2 Moduły programu i schemat ideowy programu Program można podzielić na części zwane modułami. Każdy moduł spełnia określone zadania. Ich wywołanie odbywa się poprzez interakcję użytkownika z układem. Moduły te można podzielić na moduły logiczne i moduły funkcjonalne, które odpowiednio grupują cały kod w logiczną całość i spełniają określone wyspecjalizowane funkcje. Schemat przedstawiony na rysunku 4.1 przedstawia schemat ideowy działania programu, jest on równoważny z zaprojektowanym menu programu. Puste bloki reprezentują moduły logiczne, natomiast bloki z zaznaczonym prawym-dolnym rogiem reprezentują moduły funkcjonalne. Rysunek 4.1: Schemat ideowy Przedstawione zostaną teraz wszystkie moduły pod względem funkcjonalnym i pod względem zapisu ich w kodzie tak, aby cały listing programu był jak najbardziej zrozumiały.
4.2. MODUŁY PROGRAMU I SCHEMAT IDEOWY PROGRAMU 33 4.2.1 Moduł startowy - Start Jest to część programu, w której znajdują się wszystkie deklaracje zmiennych i funkcji, oraz ustawienie danych określających użyty sprzęt. Na listingu 4.1 zaprezentowany kod ustawia: rodzaj mikroprocesora - $regfile Ustala się bibliotekę użytego mikrokontrolera. Dla Atmega8535 jest to biblioteka m8535.dat. częstotliwość oscylatora - $crystal Ustala się częstotliwość zewnętrznego oscylatora: 8Mhz. typ portów (wejście lub wyjście) oraz jego stany początkowe - Config portx rodzaj wyświetlacza LCD oraz piny, którym jest sterowany - Config Lcd oraz Config Lcdpin port, do którego podłączona jest klawiatura - Config Kbd włącza obsługę wbudowanego licznika wraz z jego skalowaniem - Config TimerX włącza przerwania - Enable Interrupts,Enable TimerX włącza obsługę przerwania - On TimerX FUNKCJA Odpowiednio po wykryciu przerwania na Timer1 i Timer2 wywoływane są funkcje Co1s i Co32ms 38 $ r e g f i l e = m8535. dat b i b l i o t e k a m i k r o k o n t r o l e r a 39 $ c r y s t a l = 8000000 c z e s t o t l i w o s c o s c y l a t o r a 40 41 k o n f i g u r a c j a portów m i k r o k o n t r o l e r a 42 Config Porta = Output u s t a w i e n i e portów j a k o w y j ś c i e 43 Porta = &B00000000 u s t a w i e n i e stanu n i s k i e g o na pinach 44 45 Ddrc = &B11111111 u ż y c i e r e j e s t r u DDRx 46 Portc = &B00000000 47 48 Ddrd = &B11111111 49 Portd = &B00000000 50 51 Config Lcd = 16 2 k o n f i g u r a c j a w y s w i e t l a c z a LCD 52 Config Lcdpin = Pin, Db4 = Portc. 4, Db5 = Portc. 5, Db6 = Portd. 7, Db7 = Porta. 7, E = Portc. 3, Rs = Portc. 2 k o n f i g u r a c j a portów w y s w i e t l a c z a LCD 53 Config Kbd = Portb, Delay = 100 k o n f i g u r a c j a k l a w i a t u r y 54
34 ROZDZIAŁ 4. KONSTRUKCJA OPROGRAMOWANIA 55 k o n f i g u r a c j a l i c z n i k a na z e g a r z e Timer1 i Timer0 56 Config Timer1 = Timer, P r e s c a l e = 256 57 Config Timer0 = Timer, P r e s c a l e = 1024 58 Enable I n t e r r u p t s : Enable Timer1 : Enable Timer0 włączenie przerwań 59 On Timer1 Co1s u s t a w i e n i e procedury o b s ł u g i p r z e r w a n i a z l i c z n i k a Timer1 60 On Timer0 Co32ms u s t a w i e n i e procedury o b s ł u g i p r z e r w a n i a z l i c z n i k a Timer0 Listing 4.1: ustawienia sprzętowe Listing 4.2 przedstawia funkcję do obsługi klawiatury. Wewnątrz tej funkcji wbudowana procedura GETKBD() zwraca numer wciśniętego klawisza, w klawiaturze matrycowej, podłączonej do portu mikrokontrolera. Zwraca liczbę 16, gdy nie naciśnięto żadnego klawisza. Następnie za pomocą procedury LOOKUP() i danych KEYOBARD DECODING1 dokonywana jest konwersja tak, aby była ona zgodna z posiadaną klawiaturą. Układ klawiszy dobrany jest tak, aby przypominał on klawiaturę numeryczną ze zwykłej klawiatury komputera PC. Tabela C.2.2 umieszczona w Podręczniku użytkownika przedstawia ten układ klawiatury. 887 Sub Key scan 888 Key = Getkbd ( ) 889 Key = Lookup ( key, Keyboard decoding1 ) 890 End Sub 891 892 Keyboard decoding1 : 893 Data 7, 4, 1, 0, 8, 5, 2, 10, 9, 6, 3, 11, 15, 14, 13, 12 Listing 4.2: Obsługa klawiatury Mając tak skonfigurowane ustawienia można przejść do budowy programu. Na listingu 4.3 umieszczono deklaracje wszystkich użytych zmiennych i funkcji. Szczegółowy ich opis znajduje się w dalszym opisie poszczególnych modułów. W ostatniej linii tego listingu (linia 151) znajduje się wywołanie głównej funkcji, która włącza menu główne programu i pozwala przejść do dalszych modułów (zgodnie ze schematem z rys. 4.1). Listing 4.4 przedstawia tą funkcję. 62 zdeklarowane procedury i f u n k c j e 63 D e c l a r e Sub Menu główna f u n k c j a programu 64 Declare Sub Key scan funkcja do o b s ł u g i klawiatury 65 D e c l a r e Sub Zaczynamy cykl f u n k c j a w ł ą c z a j ą c a pomiar 66 Declare Sub Podmenu menu o b s ł u g i głównych ustawień cyklu 67 Declare Sub Podmenu2 menu o b s ł u g i ustawień globalnych 68 D e c l a r e Sub Zmiana menu o b s ł u g i zaworów 69 Declare Sub Zmiana czasu zmienia czas o p e r a c j i na zaworze 70 D e c l a r e Sub C z y t a j c z a s konwersja c z asu 71 Declare Sub Zapis z a p i s u j e dane do pamiecie EEPROM 72 D e c l a r e Sub Wybor o d c z y t u j e z eeprom t a b e l e czasów i t a b e l e o p e r a c j i 73 Declare Sub Zawory odczytuje z eeprom i wyswietla po k o l e j i numery zaworow
4.2. MODUŁY PROGRAMU I SCHEMAT IDEOWY PROGRAMU 35 74 Declare Sub Menu3 menu o b s ł u g i włączania i wyłączania zaworów 75 D e c l a r e Sub O n o f f sprawdzenie stanu na pinach podłączonych do zaworów 76 D e c l a r e Sub Zmien czas u s t a w i e n i e czasu l o k a l n e g o 77 Declare Sub Opnazaw ( n1 As Byte ) zmienia stan zaworu n1 78 79 zdeklarowane zmienne 80 Dim Key As Byte numer w c i ś n i ę t e g o k l a w i s z a 81 Dim Menu change flag As Bit 1 zmiana f l a g i menu, 0 brak zmiany 82 Dim Menu number As Byte 1 cykl, 2 ustawienia 83 Dim Menu number2 As Byte numer wybranej o p c j i 84 Dim Menu string As S t r i n g 11 zmienna tekstowa do opisu menu 85 Dim Z e r u j As Bit 86 Dim Rozpocznij As Bit 1= rozpoczyna s i e cykl 87 Dim Liczbasekund As Long 88 Dim Temp2 As Long zmienna pomocnicza 89 Dim Tab czas ( 6 4 ) As Long t a b l i c a z a w i e r a w s z y s t k i e k o l e j n e c z a s y o p e r a c j i na zaworach 90 Dim Tab zaw ( 6 4 ) As Byte t a b l i c a z a w i e r a i n f o r m a c j e j a k i zawor z o s t a n i e obsluzony 91 Dim Tab operacja ( 6 4 ) As Byte t a b l i c a z a w i e r a i n d e k s o p e r a c j i na zaworach 92 Dim N As Byte zmienna przechowuje numer zaworu, który j e s t a k t u a l n i e o b s ł u g u j ą c y 93 Dim Temp As Byte zmienna pomocnicza 94 Dim S e t t i n g 1 As Byte zmienne wykorzystywane do o b s ł u g i 95 Dim S e t t i n g 2 As Byte w y l i c z a n i a c z asu 96 Dim S e t t i n g 3 As Byte 97 Dim Temp3 As Word 98 Dim Zegar As Bit 0= wyświetla zegar, 1=n i e wyświetla zegar na LCD 99 Dim Day As Byte i l o s c dni, rozpoczyna s i ę 0 100 Dim Godzina As Byte zmienna przechowuje a k t u a l n a g o d z i n e 101 Dim Minuta As Byte zmienna przechowuje a k t u a l n e minuty 102 Dim Sekunda As Byte zmienna przechowuje a k t u a l n a sekunde 103 zmienne użyte w l i c z n i k u do l i c z e n i a c zasu 104 Dim Sekjed As Byte, S e k d z i e s As Byte zmienn czasowe 105 Dim Minjed As Byte, Mindzies As Byte zmienne czasowe 106 Dim Godzjed As Byte, Godzdzies As Byte zmienne czasowe 107 Dim U s t a w g o d z i n a d z i e s As Byte 108 Dim U s t a w g o d z i n a j e d n As Byte 109 Dim U s t a w m i nuta d z ies As Byte 110 Dim Ustaw minuta jedn As Byte 111 Dim Ustaw godzine As Bit j e s l i ustawiono na 1 to przeprowadzana j e s t o p e r a c j a p r z y p i s a n i a zmiennych chwilowych do zmiennych czasowych 112 Dim Dday As Bit 113 Dim War pocz As Bit sprawdza warunek poczatkowy przy r o z p o c z e c i u c yklu 114 Dim C o f n i e c i e As Long c o f n i e c i e czasu o 86400 s 115 116 U s t a w i e n i e pomocnych nazw wyjściowych portów 117 Pompa A l i a s Portc. 1 118 Z1 A l i a s Porta. 4 119 Z2 A l i a s Porta. 3 120 Z3 A l i a s Portc. 0 121 Z4 A l i a s Portc. 7 122 Z5 A l i a s Portd. 0 123 Z6 A l i a s Porta. 0 124 Z7 A l i a s Portd. 1 125 Z8 A l i a s Porta. 5 126 Z9 A l i a s Portc. 6
36 ROZDZIAŁ 4. KONSTRUKCJA OPROGRAMOWANIA 127 Z10 A l i a s Porta. 6 128 Z11 A l i a s Porta. 2 129 Z12 A l i a s Portd. 3 130 Z13 A l i a s Porta. 1 131 Z14 A l i a s Portd. 2 132 133 u s t a w i e n i e zmiennych na w a r t o ś c i domyślne 134 Sekjed = 0 : S e k d z i e s = 0 : Minjed = 0 : Mindzies = 0 135 Godzjed = 0 : Godzdzies = 0 136 U s t a w g o d z i n a d z i e s = 0 : U s t a w g o d z i n a j e d n = 0 : U s t a w m i nuta d z i e s = 0 137 Ustaw minuta jedn = 0 138 Menu string = CYKL ZWYKLY 139 Menu number = 1 140 R o z p o c z n i j = 0 141 Z e r u j = 0 142 Key = 255 143 Zegar = 1 144 Ustaw godzine = 0 145 Dday = 0 146 War pocz = 0 147 C o f n i e c i e = 0 148 149 Cursor Off 150 wywołanie f u n k c j i głównej 151 Menu Listing 4.3: Deklaracja zmiennych i funkcji Wybór modułu polega na wykonaniu odpowiedniej sekwencji wciśnięcia klawiszy. Jak poruszać się po menu programu przedstawiono w Podręczniku użytkownika, który można znaleźć w dodaktu C. 153 ##################### MENU ############################################## 154 f u n k c j a o d p o w i e d z i a l n a za menu glowne 155 1 Cykl zwykly 156 2 Ustawienia 157 Sub Menu 158 Cls 159 Lcd MENU 160 L o w e r l i n e 161 Lcd Menu number ;. ; Menu string 162 R o z p o c z n i j = 0 163 164 R o z p o c z ę c i e p ę t l i DO... LOOP 165 Menu change flag = 0 166 Do 167 Key scan sprawdzenie czy z o s t a ł w c i ś n i ę t y k l a w i s z 168 I f Zegar = 1 Then 169 S e l e c t Case Key 170 Case 1 4 : w c i ś n i ę t y k l a w i s z UP 171 Menu change flag = 1 172 I n c r Menu number inkrementacja numeru menu 173 I f Menu number = 3 Then Menu number = 1 174 Case 1 3 : w c i ś n i ę t y k l a w i s z DOWN 175 Menu change flag = 1 176 Decr Menu number dekrementacja numeru menu 177 I f Menu number = 0 Then Menu number = 2 178 End S e l e c t
4.2. MODUŁY PROGRAMU I SCHEMAT IDEOWY PROGRAMU 37 179 I f Menu change flag = 1 Then 180 L o w e r l i n e 181 Lcd 182 L o w e r l i n e 183 Lcd Menu number ;. ; 184 S e l e c t Case Menu number 185 Case 1 : 186 Menu string = CYKL ZWYKLY 187 Lcd Menu string 188 Menu change flag = 0 189 Case 2 : 190 Menu string = USTAWIENIA 191 Lcd Menu string 192 Menu change flag = 0 193 End S e l e c t 194 End I f 195 I f Key = 12 Then w c i ś n i ę t y k l a w i s z ENTER 196 Zawory o d c z y t u j e numery zaworow z p a m i e c i e EEPROM 197 S e l e c t Case Menu number 198 Case 1 : Toggle Menu change flag2 199 Wybor o d c z y t u j e dane czasowe i numery o p e r a c j i z pamięci EEPROM 200 Podmenu 201 Case 2 : 202 Podmenu2 203 End S e l e c t 204 End I f 205 End I f 206 I f Key = 11 Then w c i ś n i ę t y k l a w i s z RIGHT 207 Zegar = 0 208 End I f 209 I f Key = 15 Then w c i ś n i ę t y k l a w i s z ESC 210 Zegar = 1 211 Menu change flag = 1 212 Cls 213 Lcd MENU 214 End I f 215 Loop 216 End Sub Listing 4.4: Funkcja MENU Ostatni etap przygotowania danych to zapis danych cyklu w pamięci EEPROM. Znajduje się on na początku pliku i rozpoczyna się poleceniem $EEPROM. Polecenie $EEPROMHEX służy do poinformowania kompilatora, że do zapisu danych w pamięci EEPROM ma zostać użyty format danych Intel Hex. Dane te podzielone są na trzy bloki, każdy po 64 liczb, tyle ile wynosi liczba możliwych do ustalenia operacji. Tab czas1 - to dane czasowe operacji, zapisane w sekundach jako liczby typu long. Tab zawory - to dane zawierające numer zaworu (od 0- pompa, 1-zawór nr.1 do 14-zawór nr.14). Tab operacja - to dane zawierające numer operacji (2-start, 0-zamknięcie, 1-otwarcie, 3-koniec). Są to dane startowe i nie jest konieczne programowanie pamięci EEPROM za
38 ROZDZIAŁ 4. KONSTRUKCJA OPROGRAMOWANIA pomocą programatora. Należy wtedy wprowadzić dane cyklu ręcznie według instrukcji opisanej w Podręczniku użytkownika C.3.3. 3 $eepromhex dane do z a p i s a n i a w EEPROMie 4 $eeprom 5 Data 0 pomijam pierwszy b a j t wpisujac 0 6 dane czasowe zapisaywane jako l i c z b a sekund, 7 zapisane sa jako typy l i c z b long (& long ) 8 Tab czas1 : 9 dane od 1 do 260=64 4 bajty 10 Data 5&, 1&, 2&, 4&, 5&, 7&, 9&, 14&, 16&, 17& 11 Data 20&, 21&, 22&, 26&, 28&, 29&, 30&, 39&, 45&, 47& 12 Data 60&, 61&, 62&, 68&, 70&, 75&, 79&, 85&, 90&, 120& 13 Data 6000&, 6001&, 6002&, 6060&, 6061&, 6075&, 7275&, 7455&, 7456&, 7457& 14 Data 9000&, 9001&, 9002&, 9060&, 9061&, 9075&, 10275&, 10455&, 10456&, 10457&, 15 Data 11457&, 11458&, 11459&, 11557&, 11558&, 11572&, 14572&, 11&, 12&, 13& 16 Data 14&, 15&, 16&, 17& 17 Tab zawory : 18 dane od 257 do 321=257+64 19 Data 0, 1, 14, 14, 3, 2, 3, 2, 1, 0 20 Data 0, 1, 14, 14, 5, 4, 5, 4, 1, 0 21 Data 0, 1, 14, 14, 7, 6, 7, 6, 1, 0 22 Data 0, 1, 14, 14, 9, 8, 9, 8, 1, 0 23 Data 0, 1, 14, 14, 11, 10, 11, 10, 1, 0 24 Data 0, 1, 14, 14, 13, 12, 13, 12, 1, 0 25 Data 0, 1, 13, 4 26 Tab operacja : 27 dane od 321 do 385=321+64 28 Data 3, 1, 1, 0, 1, 1, 0, 0, 0, 0 29 Data 1, 1, 1, 0, 1, 1, 2, 0, 0, 0 30 Data 1, 1, 1, 0, 1, 1, 0, 0, 0, 1 31 Data 1, 1, 1, 0, 1, 1, 0, 0, 0, 0 32 Data 1, 1, 1, 0, 1, 1, 0, 0, 0, 0 33 Data 1, 1, 1, 0, 1, 1, 0, 0, 0, 1 34 Data 0, 1, 1, 2 Listing 4.5: Pamięć EEPROM W tym miejscu można przejść do szczegółowego opisu funkcji. 4.2.2 Moduł - Cykl zwykły Moduł CYKL ZWYKŁY jest modułem logicznym, i jak nazwa wskazuje, odpowiedzialny jest za proces cyklu pracy urządzenia. Oprócz zmiany ustawień i włączenia cyklu, można dane cyklu zapisać do pamięci EEPROM. Grupuje on trzy wymienione niżej moduły w logiczną całość zgodnie z modułowym diagramem z rysunku 4.1. Funkcja PODMENU w kodzie programu jest odpowiednikiem tego modułu.
4.2. MODUŁY PROGRAMU I SCHEMAT IDEOWY PROGRAMU 39 4.2.3 Moduł - Ustawienia Moduł ten służy do wprowadzenia danych czasowych operacji na poszczególnych zaworach. Zgodnie z założeniami projektu dane te mają postać zaprezentowaną w podrozdziale 2.2. Ograniczeniem, wynikającym z rozmiaru pamięci mikrokontrolera, jest możliwość wprowadzenia do 64 pozycji w cyklu sterowania urządzenia. W kodzie programu do przechowywania danych cyklu służą trzy tablice, o rozmiarze 64, są to: Tab czas - tablica zawiera wszystkie czasy kolejnych operacji na zaworach Tab zaw - tablica zawiera informacje o zaworze, który zostanie obsłużony Tab operacja - tablica przechowuje kod operacji na odpowiednim zaworze W kodzie programu, funkcje tworzące ten moduł to: ZMIANA i ZMIANA CZASU oraz funkcja pomocnicza CZYTAJ CZAS, która odpowiedzialna jest za konwersję czasu. Konwersja jest konieczna gdyż czas zapisywany do pamięci mikrokontrolera jest podany w sekundach, natomiast użytkownikowi jest przedstawiony czas w formacie GG:MM:SS. Proces wprowadzania danych pokazany jest w Podręczniku użytkownika, rozdział C.3.3. 4.2.4 Moduł - Start cyklu W skład tego modułu wchodzą trzy funkcje. Pierwsza funkcja ZACZYNAMY CYKL() ustawia zmienne cyklu: N=2 Day=0 - dzień zero Rozpocznij=1 - rozpoczęcie cyklu i przechodzi do nieskończonej pętli. Warunkiem wyjścia z tej pętli jest wciśnięcie klawisza ESC na klawiaturze lub dojście do operacji zakończenia cyklu (operacja = 2). Dwie pozostałe funkcje Co1s i Co32ms odpowiedzialne są za odmierzanie czasu i jeśli zmienna ROZPOCZNIJ ma wartość 1 to wtedy wykonują się operacje zarządzające cyklem.
40 ROZDZIAŁ 4. KONSTRUKCJA OPROGRAMOWANIA 4.2.5 Moduł - Zapis EEPROM Moduł ten ma zadanie zapisu danych cyklu. Wszystkie dane z trzech tabel TAB CZAS, TAB ZAW, TAB OPERACJA są zapisywane do pamięci EEPROM. Zapis do tego typu pamięci umożliwia dostęp do danych nawet po wyłączeniu zasilania mikrokontrolera. Po ponownym uruchomieniu urządzenia do wspomnianych tablic wczytywane są dane z pamięci EEPROM. Do zapisu danych służy funkcja ZAPIS. 4.2.6 Moduł - Ustawienia ogólne Moduł ten jest modułem logicznym i grupuje dwa moduły funkcjonalne. W skład ustawień ogólnych urządzenia wchodzi ustawienie czasu oraz kontrola zaworów. 4.2.7 Moduł - Ustawienia czasu Aby cykl obsługi próbnika chromatografii gazowej został uruchomiony w odpowiednim czasie należy ustawić czas lokalny. Jest to operacja, którą należy wykonać za każdym razem, gdy włączony zostanie zestaw uruchomieniowy AVT 2550, w przeciwnym wypadku czas liczony jest od 00:00:00. Obsługa tego modułu należy do funkcji ZMIEN CZAS. W funkcji tej, sczytywane są wciśnięte liczby z klawiatury i zapisywane do zmiennych globalnych Ustaw godzina dzies, Ustaw godzina jedn, Ustaw minuta dzies, Ustaw minuta jedn. Zmienne te są używane przez funkcje Co32ms do obsługi licznika czasu. Instrukcja wprowadzenia czasu lokalnego znajduje się w Podręczniku użytkownika C.3.1. 4.2.8 Moduł - Zawory Moduł ten powstał dla ułatwienia testowania urządzenia. Za funkcjonalność tego modułu odpowiedzialne są funkcje MENU3, ON OFF oraz OPNAZAW(ZAW). Za pomocą tych funkcji można włączać i wyłączać każdy z zaworów oraz pompę. Polecenie TOGGLE użyte w funkcji zmienia stan pinu na przeciwny.
Rozdział 5 Podsumowanie Podsumowując, efektem tej pracy jest zaprogramowany zestaw uruchomieniowy AVT2550, którego zadaniem jest sterowanie układem zaworów do analizy powietrza. Program, który jest odpowiedzialny za sterowanie mikroprocesora został odpowiednio przetestowany i dostosowany do układu próbnika gazowego. Testy te pozwalają stwierdzić, że przygotowany układ spełnia postawione mu zadania, którymi są: obsługa 14 zaworów i pompy, możliwość wprowadzenia nowych danych cyklu, bez konieczności kompilacji programu, ręczne sterownie zaworami, zastosowanie w pomiarach terenowych, poprzez: mały rozmiar urządzenia, użycie alternatywnego zasilania jakim jest akumulator. Rozbudowa funkcjonalności programu jest możliwa, ale jest ograniczona z powodu limitu pinów na procesorze. Obecnie wykorzystano wszystkie możliwe wolne piny na procesorze. Wyjściem z tej sytuacji jest wykorzystanie rejestrów i logiki kombinacyjnej. Poza tym, problemem przy dalszej rozbudowie programu może stanowić wielkość pamięci FLASH (8 kb). Ponieważ objętość programu w pamięci mikroprocesora jest na poziomie 99% zajętości pamięci FLASH, sprawia to kłopoty przy próbie dalszej rozbudowy programu. Dlatego przy dalszej pracy nad 41