Spis rzeczy - Republika WWW
Transkrypt
Spis rzeczy - Republika WWW
1 PROJEKT I BUDOWA ADAPTERA MYSZY PS/2 do RS232C w ARCHITEKTURZE AVR8. Paweł Łukasz Janicki Spis rozdziałów: 1. Wprowadzenie. 2. Przedstawienie wymagań na produkt. 3. Platforma rozwojowa. 4. Architektura AVR8 . 5. Wstępne zagadnienia projektowe. 6. Elementy sprzętowe. 7. Oprogramowania mikrokontrolera. 8. Testowanie 9. Wyniki. 10. Załączniki Streszczenie Niniejszy artykuł prowadzi czytelnika przez kolejne etapy realizacji konkretnej aplikacji mikrokontrolera klasy AVR8 rozpoczynając od przedstawienia wymagań, wyboru platformy rozwojowej a skończywszy na budowie prototypu. Z pewnością pomoże postawić pierwsze kroki osobom zainteresowanym samodzielnymi konstrukcjami. Szczególną uwagą obdarzono przedstawienie procesu realizacji włączając w to sposób pozyskania i wykorzystania środowiska rozwojowego. 1. Wprowadzenie Współczesne mikrokontrolery dysponują zdumiewającym potencjałem, którego wykorzystanie jest dzięki dostępnym narzędziom CASE jest stosunkowo łatwe i wygodne. Szeroki zakres możliwości mikrokontrolerów wynika m.in. z zaawansowania technologii wytwarzania układów scalonych, która uzależnia koszt produkcji egzemplarza bardziej od długości serii niż liczby elementów tworzących produkowany układ. Dąży się do maksymalizacji obszaru zastosowań mikrokontrolera poprzez integrację wielu urządzeń peryferyjnych jak kontrolery popularnych interfejsów, przetworniki A/C i C/A a nade wszystko pamięci programu i RAM jako niezbędnych elementów każdego systemu komputerowego. Nierzadko spotyka się wbudowane programatory wewnętrznej pamięci programu, które uwalniają programistę od konieczności zakupu odpowiedniego programatora. Jeśli po raz pierwszy postawieni jesteśmy przed zadaniem budowy własnej aplikacji mikrokontrolera i nie posiadamy możliwości zasięgnięcia pomocy osoby doświadczonej, to narażamy się na ryzyko zaniechania realizacji pomysłu nie będąc w stanie przeznaczyć dostatecznej ilości czasu na odnalezienie rozwiązań nieuniknionych problemów. Z własnego wyboru znalazłem się w podobnej sytuacji, z której udało mi się wyjść zwycięsko. Przedstawię więc wszystkie czynności jakie należało podjąć aby posiadając jedynie świadomość, że mikrokontrolery są procesorami ze zintegrowaną niewielką pamięcią i układami we/wy nabrać wiedzy wystarczającej do realizacji własnych konstrukcji. . Artykuł zakłada, że czytelnik posiada znajomość programowania w języku asemblera dowolnej architektury procesora, ponieważ artykuł nie będzie wyjaśniał podstawowych pojęć i wyjaśniał działania niektórych elementów. Bazą do prowadzonych relacji jest zadanie konstrukcji adaptera myszy PS/2 do RS232C prezentujące przebieg wszystkich najważniejszych zadań. 2 2. Przedstawienie wymagań na produkt. Pierwszym etapem realizacji jest określenie wymagań stanowiące podstawę dalszych prac, które w kolejnych etapach będą stopniowo realizowane. Realizowanym projektem jest budowa adaptera umożliwiającego pracę myszy PS/2 na porcie RS232C komputera. Poniższy rysunek poglądowo prezentuje działanie adaptera. Microsoft Serial Mouse Protocol RS232 Komputer ADAPTER PS/2 IBM PS/2 Mouse Protocol Mysz PS/2 Ilustracja 1: Poglądowe zastosowanie projektowanego adaptera Od adaptera wymaga się czynienia za dość następującym wymaganiom: 1. Adapter z komputerem współpracuje poprzez interfejs RS232C, a z myszą PS/2 poprzez interfejs myszy IBM PS/2. 2. Adapter od strony komputera widziany jest jako mysz pracująca w standardzie Microsoft Serial Mouse. Od strony myszy PS/2 adapter jest postrzegany jako komputer IBM PS/2. 3. Adapter umożliwi przekazanie podstawowej funkcjonalności myszy Microsoft Serial Mouse tj. przekazanie informacji o przemieszczeniu na płaszczyźnie oraz stanu wciśnięcia klawiszy lewego i prawego. Częstotliwość raportowania nie powinna być niższa jak 40 raportów na sekundę. W celu realizacji należy wykorzystać następujące dokumenty referencyjne pozwalające na uzyskanie niezbędnych bardziej szczegółowych informacji: - Standard interfejsu RS232C. - Standard interfejsu IBM PS/2. - Standard protokołu Microsoft Serial Mouse. - Standard protokołu myszy IBM PS/2. W kartach katalogowych kontrolerów myszy „mouse controllers” pracujących na odpowiednich interfejsach znajdują się kompletne informacje o protokołach myszy. Niestety zawierają one tylko częściowe informacje o interfejsach dlatego w tym przypadku należy się posiłkować zasobami sieci Internet. 3 3. Platforma rozwojowa. Przyjęto zastosowanie mikrokontrolera firmy ATMEL, którego jądro zbudowane zostało w architekturze AVR8 będącej nowoczesną architekturą harwardzką RISC. Architektura ta charakteryzuje się wyjątkową przejrzystością i prostotą w stosunku do bardzo popularnej choć dość wiekowej Intel 8031. Wraz z wyborem mikrokontrolera należy zaopatrzyć się w komplet niezbędnych elementów sprzętowo programowych do rozwoju oprogramowania dla mikrokontrolera. Firma ATMEL udostępnia darmowo pełnowartościowe zintegrowane środowisko rozwojowe pracujące w systemach operacyjnych Microsoft Windows9x/NT o nazwie „AVR Studio”. Środowisko zapewnia asembler, linker, debugger, program obsługujący programatory, od wersji 4 symulator działania mikrokontrolera. Wszelkie czynności związane z wytworzeniem oprogramowania i pewien zakres testów jest już możliwy bez posiadania jakiegokolwiek sprzętu. Programowanie w języku C/C++ w tym środowisku staje się możliwe dzięki instalacji darmowego pakietu innego dostawcy „WinAVR”. Niezbędnym elementem jest sprzętowa przystawka umożliwiająca programowanie mikrokontrolera. W Internecie dostępnych jest wiele ofert sprzedaży mniej lub bardziej zaawansowanych urządzeń. Jednym z tańszych rozwiązań jest samodzielne zmontowanie urządzenia z zakupionego zestawu do samodzielnego montażu. W niniejszym projekcie wykorzystano propozycję programatora jaka został przedstawiona prze firmę ATMEL zbudowanego na najprostszym produkowanym przez nią mikrokontrolerze AVR8 AT90S1200. Schemat i opis słowny dostępne są ze stron sklepu internetowego www.nikomp.com.pl przy pozycji „Zestaw 326-K Profesjonalny programator AVR-ISP”. Ważną cechą tego programatora jest nieodpłatna dostępność nie tylko schematów uzupełnionych opisem ale i obrazów pamięci zastosowanego mikrokontrolera. Tych jednak należy szukać na innych stronach ja np. http://www.serasidis.gr/circuits/avr_isp/avr_isp.htm. Przy tej okazji warto wspomnieć o pojawiającym się paradoksie: otóż oczywistym jest, że posiadając mikrokontroler istnieje możliwość jego zaprogramowania tylko poprzez programator. Jednakże chcąc samodzielnie zbudować proponowany programator z własnych elementów należy uprzednio zaprogramować mikrokontroler AT90S1200 będący zasadniczym jego elementem. Jak to zrobić? Typowy problem odpowiedzi na pytanie „co było pierwsze: jajo czy kura?”. Oczywiście oferowane przez sklepy zestawy do samodzielnego montażu zawierają już zaprogramowane urządzenie. Rozwiązaniem dla powyższego problemu może być programator pracujący na porcie równoległym STK200/300, który do w swej budowy używa kilkunastu rezystorów, diody półprzewodnikowej i układu 74125 zawierającego sterowane bufory cyfrowe („Zestaw 405K”). Jedynym problemem jest brak wsparcia ze strony zintegrowanego środowiska rozwojowego „AVR Studio” i należy poszukiwać innych narzędzi do obsługi programatora. Ostatnim elementem jaki należy wybrać jest konkretny model mikrokontrolera z rodziny AVR8. Do celów rozwojowych warto zakupić bogato wyposażony układ ponieważ w początkowych fazach projektu trudno dokładnie określić potrzeby funkcjonalności wymagane od mikrokontrolera, za to jest to możliwe po zakończeniu projektu oprogramowania. Do budowy prototypu wykorzystany zostanie układ serii Atmega. Najlepszą dostępność rynkową w chwili rozwijania projektu miał układ Atmel Atmega8 i to na nim bazować będą dalsze etapy projektu. Do celów produkcyjnych warto zastosować najtańsze rozwiązanie, jednak tak daleko artykuł ten z wielu powodów nie sięga. Atmega jest rodziną mikrokontrolerów nie obsługiwanych przez wspomnianą oryginalną dystrybucje programatora AVR ISP opartego na AT90S1200. W celu programowania tych układów należy dokonać aktualizacji sprzętowo programowej 4 programatora zaopatrując się w mikrokontroler Atmel AT90S2313 i programując dostępnym w serwisie http://www.serasidis.gr obrazem pamięci o wersji 3.2. Po zaprogramowaniu należy podmienić układy. Może się zdarzyć, że zamianie ulegną wyprowadzenia programatora MISO i MOSI z winy nieco innego mapowania wyjść w zaktualizowanej wersji firmware. Warto zaopatrzyć się w płytkę testową, która umożliwia łatwe łączenie wyprowadzeń elementów poprzez ich wciśnięcie w otwór połączeniowy. Znika konieczność stosowania lutownicy i ryzyko ich uszkodzenia z powodu przegrzania. Dodatkowo należy przygotować zestaw przewodów połączeniowych niezbędnych do budowy dodatkowych połączeń. Elementom sprzętowym należy także zapewnić zasilanie. Zarówno programator jaki i Atmega8 wymagają zasilania napięciem ok. 5V. Jako źródło zasilania w projekcie wykorzystuje się baterię czterech akumulatorów NiCd o nominalnym napięciu wyjściowym 4.8V wraz z ładowarką. Rozsądniejszym wyborem jest zastosowanie akumulatorów NiMh ze względu na brak tzw. ”efektu pamięciowego” powodującego przedwczesne zmniejszenie nominalnej pojemności akumulatora z powodu niepełnego rozładowania oraz mniejszą uciążliwość dla środowiska. Oto zestawienie najważniejszych elementów, które wchodzą w skład platformy rozwojowej do realizacji projektu: - Komputer klasy IBM PC z systemem operacyjnym Microsoft Windows 9x/NT - Środowisko rozwojowe „AVR Studio 4”. - Programator ATMEL AVR-ISP v3.2 - Mikrokontroler ATMEL Atmega8 - Płytka testowa. Kiedy już obrana została platforma rozwojowa, należy się zapoznać szczegółowo z jej budową i działaniem. Podstawowym zagadnieniem jest szczegółowe poznanie architektury mikrokontrolera poprze lekturę karty katalogowej. Następnie należy poeksperymentować praktycznie pisząc proste programy w asemblerze i przyglądać się na symulatorze. Kiedy już to ostanie opanowane można użyć załączonego do „AVR Studio” programu obsługi programatora „AVRProg” i zaprogramować mikrokontroler. 5 4. Zarys architektury mikrokontrolera Realizacja projektu zawsze odbywa się w konkretnej architekturze. Im lepsza znajomość architektury tym mniejsza szansa na popełnienie błędów w programowaniu i przyśpieszenie eliminacji tych nieuniknionych. Rozdział omawia pobieżnie architekturę jądra AVR. W celu maksymalizowania wydajności i współbieżności, AVR stosuje architekturę harwardzką – z osobnymi pamięciami i szynami dla programu i danych. Instrukcje zawarte w pamięci programu są wykonywane poprzez potokowanie pojedynczego poziomu. Podczas gdy wykonuje się jedna instrukcja, następna ulega wyprzedzonemu pobraniu z pamięci programu. Ta koncepcja pozwala instrukcjom kończyć wykonanie w pojedynczym cyklu zegarowym. Pamięć programu jest pamięcią Flash podlegającą przeprogramowaniu wewnątrz systemu. (ang. In-System Reprogrammable). Oznacza to możliwość programowania mikrokontrolera w środowisku w którym został docelowo zainstalowany, bez wyjmowania go z układu i umieszczenia w programatorze. 8-bitowa szyna danych Pamięć programu flash Licznik rozkazów Status i sterowanie Jednostka przerwań Rejestr instrukcji 32x8-bitowe rejestry Jednostka SPI Dekoder instrukcji ALU Czasomierz watchdog Komparator analogowy linie sterujące SRAM danych EEPROM Moduł we/wy 1 Moduł we/wy 2 ... Linie we/wy Moduł we/wy n Ilustracja 2: Diagram blokowy architektury mikrokontrolera AVR Plik Rejestrów o szybkim dostępie zawiera 32 x 8-bitowych rejestrów ogólnego przeznaczenia z czasem dostępu jednego cyklu zegara oznaczonych od R0 do R31. Pozwala to jednostce arytmetyczno logicznej (ang. ALU – Arithmetic Logic Unit) na działanie w jednym cyklu. Podczas typowego działania ALU dwa operandy są wysyłane z Pliku Rejestrów, wykonywane jest działanie po czym wynik jest zapisany z powrotem w Pliku Rejestrów – wszystko jednym cyklu zegara. Każdy z rejestrów ma przypisany adres Pamięci 6 danych SRAM. Mapowanie Pliku rejestrów następuje na pierwsze 32 komórki Pamięci danych 0x00 – 0x1F. Sześć z 32 rejestrów może zostać użyta jako trzy 16-bitowe wskaźniki adresowania pośredniego dla przestrzeni danych. Tymi rejestrami o rozszerzonej funkcjonalności są 16 bitowe rejestry X (R27:R26), Y (R29:R28) i Z (R31:R30). ALU wspiera działania arytmetycznie i logiczne pomiędzy rejestrami lub pomiędzy stałą i rejestrem. Operacje z jednym rejestrem mogą być także wykonywane przez ALU. Po operacji arytmetycznej aktualizowany jest rejestr stanu aby odzwierciedlić informacje o wyniku działania. Sterowanie wykonaniem programu odbywa się przez skoki warunkowe i bezwarunkowe i instrukcje wywołań, zdolne do bezpośredniego zaadresowania całej przestrzeni adresowej. Większość instrukcji posiada format pojedynczego 16-bitowego słowa. Każdy adres pamięci programu dotyczy 16- lub 32-bitowej instrukcji. Podczas przerwań i wywołań procedur, adres powrotu licznika rozkazów jest zachowywany na stosie. Stos jest umieszczony w SRAM a jego rozmiar jest ograniczony tylko przez całkowity rozmiar SRAM oraz poziom jej wykorzystania. Wszystkie programy użytkownika musza zainicjować wskaźnik stosu SP (ang. Stack Pointer) w procedurze resetu. SP jest dostępny do zapisu/odczytu w przestrzeni wejścia/wyjścia I/O (ang. Input/Output). . Elastyczny moduł przerwań posiada własne rejestry sterujące w przestrzeni I/O z dodatkowym globalnym bitem włączenia przerwań w rejestrze statusu. Wszystkie przerwania posiadają oddzielny wektor w tablicy wektorów przerwań. Przerwania posiadają priorytety zgodnie z ich pozycją w tablicy wektorów przerwań. Im niższy adres wektora tym wyższy priorytet. Przestrzeń pamięci I/O zawiera 64 adresy dla funkcji peryferiów CPU. Dostęp do pamięci I/O może być bezpośredni lub jako lokacje przestrzeni danych następujące po pliku rejestrów, 0x20-0x5F. Jednostka arytmetyczno-logiczna Wysoko wydajna AVR ALU operuje w bezpośrednim połączeniu ze wszystkimi 32 rejestrami ogólnego przeznaczenia. W jednym cyklu zegara wykonywane są operacje arytmetyczne pomiędzy rejestrami ogólnego przeznaczenia lub pomiędzy rejestrem i wartością natychmiastową. Działania ALU są podzielone na trzy główne kategorie – arytmetyczne, logiczne i funkcje bitowe. Pewne impementacje architektury dostarczają także potężnego wsparcie ze strony jednostki mnożącej pozwalającej na mnożenie w formatach zarówno z i bez znaku oraz ułamkowym. Rejestr statusu Rejestr statusu zwiera informacje o wyniku ostatniego wykonanej instrukcji arytmetycznej. Ta informacja może być wykorzystana do zmiany przebiegu sterowania w celu wykonania operacji warunkowych. Rejestr statusu nie jest automatycznie zachowywany podczas wejścia do procedury obsługi przerwania i przywracany podczas jej opuszczania. Czynność ta musi zostać zrealizowana programowo. Komplet informacji o architekturze dostępny jest w karcie katalogowej mikrokontrolera. 7 5. Wstępne zagadnienia projektowe – standardy pokrótce. . Mysz szeregowa Mysz szeregowa pracująca w standardzie Microsoft Serial Mouse posiada asynchroniczny transmiter szeregowy pracujący z przepustowością 1200 b/s z 9 bitową ramką w postaci 7 bitów danych i 1 bit startu, 1 bit stopu. Mysz reaguje na zmianę poziomu linii RTS na interfejsie komputera z niskiego na wysoki, która jest interpretowana jako sygnał reset urządzenia. Mysz zasilana jest przez linie DTR i DCE +12V oraz RD –12V. Informacje o zmianie stanu urządzenia przesyłane są w postaci raportu składającego się z trzech 7bitowych słów. Po sygnale reset wysyłany jest ciąg identyfikacyjny myszy składający się z zakodowanej w 7-bitowym kodzie ASCII wielkiej litery „M” oraz pustego raportu (brak przesunięcia, brak wciśniętych przycisków). Transmisja raportu odbywa się tylko w przypadku wykrycia zmiany położenia na płaszczyźnie lub zmiany stanu klawiszy. Mysz IBM PS/2 Standardowa mysz PS/2 posiada synchroniczny transceiver PS/2 wraz generatorem podstawy czasu do synchronizacji transmisji. Transmisja przychodząca jest inicjowana przez system komputerowy posiadający transcieiver bez generatora podstawy czasu. Inicjacja polega na zatrzymaniu ewentualnej transmisji myszy i żądanie generacji impulsów synchronizujących. Myszy standardu IBM PS/2 podobnie jaki i szeregowa przesyła do systemu komputerowego raport, którego treść pozwala na określenie wielkości przesunięcia urządzenia na płaszczyźnie jakie nastąpiło w okresie rejestracji i stanu trzech klawiszy. Transmisja raportu może być inicjowana przez mysz PS/2 w wybranych okolicznościach, których zbiór definiowany jest aktywnym trybem pracy. Wybrane parametry protokołów transmisji Parametr Mysz szeregowa Microsoft Przepustowość łącza (b/s) 1200 Wielkość ramki (b) 9 Przepustowość łącza (ramek/s) 133 Wielkość raportu (b) 3x7b Szybkość raportowania do 44 (raportów/s) Mysz IBM PS/2 10 000 - 16 667 11 909 - 1 515 3x8b ustalana spośród:10, 20, 40, 60, 80, 100, 200 Format raportu myszy standardu PS/2 i Microsoft Serial Mouse. Bajt 1 2 3 Bit 0 1 2 3 4 5 6 7 0-7 0-7 Raport myszy PS/2 Opis stan lewego klawisza, 1 - wciśnięty stan prawego klawisza, 1 - wciśnięty stan środkowego klawisza, 1 - wciśnięty rezerwa znak pola X, 1 - minus znak pola Y, 1 - minus X – nadmiar pola X, 1 – wystąpił nadmiar X – nadmiar pola Y, 1 wystąpił nadmiar moduł przesunięcia X moduł przesunięcia Y Raport myszy Microsoft Serial Mouse Bit Opis 0 X6 1 X7 2 Y6’ 3 Y7’ 4 stan prawego klawisza, 1 - wciśnięty 5 stan lewego klawisza, 1 - wciśnięty 6 1 2 0-6 X 3 0-6 Y’ ‘ – wartość zapisana w kodzie uzupełnieniowym do 2 Bajt 1 8 6. Projekt elementów sprzętowych. Mikrokontroler Atmega pracuje w standardzie zgodnym z TTL, toteż konieczna jest konstrukcja układu adaptującego pozwalającego współpracować z interfejsem RS232C komputera, który interpretuje poziom napięcia z zakresu od –25 do – 3V jako logiczną 1, z kolei przedział od 3 do 25V jako logiczne 0. Interfejs PS/2 pracuje z poziomami zgodnymi ze standardem TTL. Schemat ideowy adaptera przedstawiony został na poniższej ilustracji. Linia zegara interfejsu PS/2 (SCK) została podłączona do końcówki przerwania zewnętrznego, skojarzonej z portem we/wy. Zapewni to możliwość szybkiego reagowania na konieczność wystawienia, bądź próbkowania stanu logicznego linii danych (Data) sygnalizowaną przez zbocze opadające linii zegarowej. Dodatkowe elementy zapewniają dostosowanie poziomów napięć portu RS232C do poziomów TTL na, których pracują wyjścia mikrokontrolera. Jako, źródło napięcia ujemnego wykorzystano sygnał Rx. Adapter prowadzi tylko transmisję danych do systemu komputerowego. Do prowadzenia transmisji wykorzystywany jest sprzętowy uniwersalny transmiter szeregowy skojarzony z portem. Transmisja na porcie PS/2 będzie realizowana programowo. Zasilanie układu stanowi napięcie stałe Vcc = 5V +- 10%. Vcc Złącze żeńskie DB9 Tx (2) Vcc BC558B Złącze żeńskie MiniDIN Vcc (4) Vcc (7) Rx (3) 4.7k Data (1) 4.7k TXD/PD1 (3) RTS (7) 4.7k PD4 (6) SCK (5) INT0/PD2 (4) Reset (1) GND (5) GND (3) GND (8) Atmega8 GND GND Ilustracja 3: Schemat ideowy adaptera 9 7. Projekt oprogramowania Transmisja szeregowa na porcie RS232C będzie realizowana poprzez sprzętowy transmiter szeregowy (USART) z 2 bajtowym buforem nadawczym. Dane do bufora nadawczego znajdującego się w przestrzeni we/wy będą przesyłane synchronicznie odpowiednim rozkazem po uprzednim sprawdzeniu niepełności bufora poprzez odpytywanie stanu flagi UDRE rejestru UCSRA. Transmisja szeregowa na porcie PS/2 została zrealizowana w sposób asynchroniczny buforowany w przypadku odbioru danych oraz synchroniczny nie buforowany w przypadku nadawania. Dzięki temu, że czas transmisji ramki poprzez interfejs PS/2 jest ponad 6 razy krótszy niż na RS232C toteż w czasie nadawania do komputera jednego bajta raportu adapter może odebrać kompletny 3-bajtowy raport od myszy i dokonać niezbędnej konwersji. Dzięki tej zależności można wszelkie operacje odbioru na interfejsie PS/2 realizować w pełni synchronicznie. Emulacja odbiornika została tak skonstruowana aby umożliwić działanie w środowisku wielozadaniowym. Własność ta jest w obecnym projekcie wykorzystywania do umożliwienia przejścia mikrokontrolera w stan uśpienia Sleep odpowiadający skutkami wykonaniu rozkazy HLT w komputerach IBM PC. Docelowo przejście w stan uśpienia powinno oznaczać oddanie sterowani do OS na czas do wystąpienia określonego zdarzenia. Architekturę oprogramowania z grubsza przedstawia poniższa ilustracja 4. Reset Moduł nadawczo odbiorczy PS/2 Sprzętowy USART USART Data Register program główny USART Control & Status Register INT0 wyślij bajt interfejs zajęty interfejs dostępny Tryb Sleep bufor pusty wyjmij bajt z bufora bufor niepusty podprogram obsługi przerwania bufor przepływ sterowania przepływ danych Ilustracja 4: Przepływy danych i sterowania. Po resecie sterowanie przekazane jest do programu głównego odpowiedzialnego za zainicjowanie konfiguracji mikrokontrolera oraz myszy PS/2 poprzez wysłanie odpowiedniej sekwencji rozkazów. Następnie program wpada pętlę realizująca następującą sekwencję czynności: odebranie z bufora wejściowego interfejsu PS/2 trzech bajtów raportu myszy PS/2, dokonanie konwersji na trzy 7-bitowe bajty raportu myszy szeregowej i wysłanie owych danych za pośrednictwem USART. Funkcja wyślij bajt w pierwszej kolejności sprawdza dostępność interfejsu. Sprawdzenie odbywa się przy wykorzystaniu mechanizmu sekcji krytycznej. Jeśli interfejs jest nieużywany nastąpi synchroniczne nadanie zadanego bajta. Jeśli interfejs jest zajęty mikrokontroler przejdzie do trybu uśpienia z uprzednim zapamiętaniem przyczyny oddania sterowania przez funkcję „wyślij bajt”. 10 Funkcja „wyjmij bajt z bufora” powoduje wyciągnięcie najdłużej oczekującego w buforze bajta, który został odebrany od myszy. Wyjęcie bajta z bufora odbywa się z zastosowaniem sekcji krytycznej. W przypadku gdy bufor jest pusty następuje przejście do trybu uśpienia z uprzednim zapamiętaniem przyczyny oddania sterowania. Bufor jest zlokalizowany w pamięci SRAM mikrokontrolera. Jest to bufor cykliczny. System nie dokonuje kontroli przepełnienia się bufora. Procedura obsługi przerwania jest wywoływana w momencie gdy na linią zegarowej zaobserwowany zostanie zbocze opadające, oznaczające nadchodzącą transmisję pojedynczego bita linią Data. Jej zadaniem jest przeprowadzenie odbioru ramki zgodnie z protokołem PS/2 oraz przekazanie sterowania do funkcji, która oddała sterowanie. 8. Testowanie W niniejszym projekcie zastosowano dwie techniki debugowania programu: poprzez symulację działania w programie „AVR Studio” oraz poprzez wysyłanie informacji przez mikrokontroler na ekran terminala komputera nasłuchujący na porcie szeregowym RS232C. Drugie rozwiązanie warto stosować gdy błędy pojawiają się po dłuższym czasie działania mikrokontrolera, lub nieregularnie. Wówczas w newralgicznych miejscach wstawia się instrukcje powodujące wysłanie ustalonych znaków. Stworzono program, który dokonuje zrzutu zawartości wszystkich rejestrów, wybranego obszaru pamięci SRAM. Wynik jego działania prezentuje Ilustracja. Pierwsza linia zawiera wysłany ciąg identyfikacyjny myszy szeregowej Microsoft Mouse nadawany w momencie inicjalizacji. Druga linia to zawartość pliku rejestrów. Zawartość rejestrów jest wypisana w kolejności od r0 do r31 w ośmiu grupach po cztery pary liczb heksadecymalnych. Zawartość rejestru r0 = 02h, r1 = 01, ... . Następne linie to obraz bloku 7x16B rozpoczynającego adresem 100h w postaci wartości heksadecymalnych i znaków ASCII. Niezgodność reprezentacji hex i ASCII występuje w bloku pod adresem 110h z tego powodu, że zlokalizowany jest tam 10-bajtowy obszar roboczy programu wyświetlającego obraz pamięci. Ilustracja 5: Przykładowy obraz zawartości pliku rejestrów i bloku pamięci SRAM. Gdy wyeliminowano wszystkie znane błędy, przetestowano prototyp adaptera poprzez podłączenie za jego pośrednictwem do komputera PC myszy PS/2. Adapter zostaje po restarcie komputera rozpoznany jako Mysz szeregowa Microsoft. Tak podłączone urządzenie wskazujące przez kilka godzin użytkowano jako sterowanie w grach komputerowych a także jako podczas pisania niniejszego artykułu. 11 9. Rezultaty Realizacja adaptera w pełni spełnia postawione wymagania. Parametry adaptera: Ozn. Opis Vcc Napięcie zasilania Iop Prąd pracy Fosc Częstotliwość taktowania Tsd Opóźnienie próbkowania opadającego na linii SCK Ilustracja 6: Prototyp adaptera od wystąpienia Min. Typ. Max. 4.5 5 5.5 4.5 1 zbocza 29 Jedn. V mA MHz us Każdy projekt jego początkującemu realizatorowi przysporzy wielkiej liczby problemów związanych z nieoczekiwanym zachowaniem się programu, co wynika z początkowej niedokładnej znajomości architektury stosowanego mikrokontrolera. Każde urządzenia posiada specyficzne procedury realizacji danej czynności. Przykładowo zapis na określoną pozycję rejestru wartości 1 powoduje ustawienie tego bitu rejestru lecz wyjątkiem jest rejestr GIFR odpowiedzialny za przechowywanie flag przerwań zewnętrznych, tutaj zerowanie bitu odbywa się prze zapis wartości jeden. Usprawnienia: Niniejsza wersja prototypowa nie wykorzystuje mechanizmów zwiększających niezawodność jak czasomierz Watchdog ani przejścia w tryb oszczędzania energii. Choć nie stwierdzono pomimo długotrwałego użytkowania zawieszenia się urządzenia a i pobór prądu dzięki zastosowaniu najniższej możliwej wewnętrznie generowanej częstotliwości taktującej pozostaje na niskim poziomie to jednak stosowanie wspomnianych technik w tego rodzaju aplikacji jest wskazane. 12 10. Załączniki. • projekt programu AVRStudio 4 (AVRStudio Project.zip) • karta katalogowa mikrokontrolera ATMEL Atmega8 (doc2486.pdf) • standard interfejsu PS/2 o em83049.pdf “EMC 83049 Keyboard Encoder“ o em84502.pdf “EMC EM84502 PS/2 Mouse Controller” • standard interfejsu RC232C o “EIA RS-232-C Serial Interface” http://huntvac.com/tech_libr/rs-232-c.htm • protokół myszy PS/2 o “The PS/2 Mouse/Keyboard Protocol” http://www.computerengineering.org/ps2protocol/ o em84502.pdf “EMC EM84502 PS/2 Mouse Controller” • protokół myszy szeregowej Microsoft serial Mouse. o “EMC EM83807 All-in-one Plug & Play 3-button serial mouse controller” o “PC mouse info” http://users.tkk.fi/~then/mytexts/mouse.html • karta katalogowa “Profesjonalny programator AVR ISP” (K-326a.gif) • karta katalogowa „Automatyczny programator AVR-ISP” (K-405a.gif) Copyrights 2007 Paul L. Janicki