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

Podobne dokumenty