PAULMON2 jest darmowym programowym monitorem - IME
Transkrypt
PAULMON2 jest darmowym programowym monitorem - IME
OPROGRAMOWANIE APARATURY POMIAROWEJ OPROGRAMOWANIE APARATURY P Programowa obsługa klawiatury PC AT oraz odbiór informacji z pilota TV w kodzie RC-5 Laboratorium 1. Cel ćwiczenia Celem ćwiczenia jest zapoznanie studentów w sposób praktyczny z odbiorem informacji z standardowego pilota telewizyjnego nadającego w kodzie RC-5 (odbiór informacji z pilota telewizyjnego realizowany jest programowo poprzez czujnik sygnału podczerwonego), programową obsługą klawiatury PC AT oraz pokazanie darmowych narzędzi służących do uruchamiania systemów mikroprocesorowych na przykładzie programu monitora PAULMON2. Wykorzystywana w ćwiczeniu makieta umożliwia również obsługę wyświetlacza LCD 2. Programowa obsługa wyświetlacza LCD Interfejs sterownika wyświetlacza LCD składa się z ośmiu linii danych D0..D7 oraz trzech linii sterujących: R/W, RS oraz E. Sterownik wyświetlacza LCD posiada dwa rodzaje pamięci RAM. Pamięć ekranu (DD RAM) zawiera kody znaków aktualnie wyświetlanych na polu odczytowym. Wyświetlenie znaku na odpowiedniej pozycji pola odczytowego wyświetlacza LCD polega więc na wpisaniu jego kodu do pamięci DD RAM. Kody poszczególnych znaków podano w tabeli 4 (dodatek A). Linia R/W informuje sterownik wyświetlacza o pożądanym kierunku przepływu informacji, tj. zapisie do sterownika (R/W = 0) lub odczycie ze sterownika(R/W = 1). Na podstawie stanu linii RS sterownik dokonuje interpretacji samej informacji przy zapisie (R/W = 0) jako: rozkaz do wykonania (RS = 0), kod znaku do wyświetlenia (RS = 1), natomiast przy odczycie (R/W = 1) wystawia na szynę danych: bajt w którym najstarszy bit informuje o zajętości sterownika, a pozostałe o aktualnym adresie w pamięci DDRAM lub CGRAM (RS = 0), kod znaku z pamięci DD RAM lub CG RAM (RS = 1). Wyświetlacz LCD widziany jest jako komórki zewnętrznej pamięci danych. Zatem jego obsługa od strony programowej realizowana jest z wykorzystaniem instrukcji właściwych dla zapisu/odczytu zewnętrznej pamięci danych mikrokontrolera. Linie R/W i RS podłączone są bezpośrednio do linii A1 i A0 szyny adresowej systemu mikroprocesorowego. Sterowanie nimi odbywa się zatem przez odpowiednie ustawienie dwóch najmłodszych bitów adresu podczas operacji zapisu/odczytu zewnętrznej pamięci danych mikrokontrolera (patrz punkt 6.2). Linia E sterowana jest automatycznie w sposób sprzętowy i ustawienie jej odpowiedniego stanu nie wymaga ingerencji programowej. W tabeli 6 (dodatek A) przedstawiono rozkazy dostępne przy sterowaniu wyświetlaczem LCD. Do poprawnej pracy wyświetlacza wymagane jest co najmniej ustawienie: parametrów pracy (ang. Function Set), sterowania wyświetlaniem (ang. Display on/off Control) i trybu wprowadzania znaków (ang. Entry Mode Set). Znaczenie poszczególnych bitów wymienionych rozkazów znajduje się również w tabeli 6. Przed wysłaniem jakiejkolwiek informacji do sterownika wyświetlacza, należy sprawdzić jego gotowość do jej przyjęcia przez odczytu informacji ze sterownika (przy RS = 0 i R/W = 1) tak długo, aż najstarszy bit oznaczony BF nie przyjmie wartości 0. Na rys. 6 (dodatek A) pokazano graficznie adresy odpowiadające poszczególnym pozycjom na polu odczytowym dla wyświetlacza 2x16. Znak, którego kod zostanie wysłany do sterownika, pojawi się zawsze na pozycji określonej aktualną zawartością licznika adresu AC sterownika wyświetlacza, a następnie adres ten zostanie zwiększony lub zmniejszony w zależności od ustawienia bitu I/D rozkazu ustalającego tryb wprowadzania znaków (ang. Entry Mode Set). Bieżąca wartość licznika adresów AC sterownika wyświetlacza określa również pozycję, na której znajduje się kursor o ile został on włączony przez ustawienie odpowiedniego bit. Dlatego określenia „adres pozycji znaku”, „adres kursora” i „adres DD RAM” są jednoznaczne. W celu zmiany zawartości licznika adresu AC, a jednocześnie przemieszczenia kursora na odpowiednią pozycję pola odczytowego wyświetlacza, należy użyć funkcji ustawiającej adres kursora (ang. Set DDRAM address). 1 Pamięć generatora znaków (CG RAM) przechowuje matryce 8 znaków (w pamięci przechowującej tablice kodów znaków odpowiadają im adresy 00H..0FH; patrz tabela 4, dodatek A), które można dowolnie zaprogramować. Każda matryca składa się z 8 bajtów. Format zapisu przedstawiono w tabeli 1. Tabela 1. Format zapisu znaków użytkownika Adres CG RAM Dane Znak dwójkowo dwójkowo n n n 0 0 0 0 0 0 0 0 0 0 0 n n n 0 0 1 0 0 0 0 1 1 1 0 n n n 0 1 0 0 0 0 1 0 0 0 1 n n n 0 1 1 0 0 0 1 0 0 0 1 n n n 1 0 0 0 0 0 1 0 0 0 1 n n n 1 0 1 0 0 0 0 1 0 1 0 n n n 1 1 0 0 0 0 1 1 0 1 1 n n n 1 1 1 0 0 0 0 0 0 0 0 nnn - określa numer jednego z ośmiu znaków użytkownika W celu zaprogramowania powyższego znaku pod adresem 01H w tablicy kodów znaków, należy wysłać rozkaz ustawiający adres pamięci CG RAM na wybraną wartość, a następnie sukcesywnie przesyłać kolejne dane określające wzorce linii znaku. W celu wyświetlenia tak zaprojektowanego znaku należy zapisać do pamięci DD RAM sterownika wyświetlacza jego kod (w rozpatrywanym przykładzie wynosi on 01H). Wysłanie rozkazu ustawiającego adres pamięci CG RAM powoduje, że każda następna operacja zapisu lub odczytu przy RS = 1 będzie odnosiła się do wspomnianej pamięci. Jednocześnie adres po każdej takiej operacji będzie automatycznie inkrementowany. Identycznie następstwa dotyczą wysłania rozkazu ustawiającego adres pamięci DD RAM, dlatego po ewentualnym procesie programowania znaku (czyli odnoszenia się do pamięci CG RAM),a przed procesem wysyłania kodów znaków do wyświetlenia, należy wysłać rozkaz ustawiający odpowiedni adres w pamięci DD RAM. 3. Odbiór informacji z pilota TV nadającego w kodzie RC5 Kodowanie RC5 jest popularnym sposobem formatowania cyfrowych sekwencji sterujących dla urządzeń audio-wideo, definiując sposób transmisji bitów, czasy, rozmiar ramki, a także znaczenie poszczególnych bitów. Kod RC5 umożliwia przekazanie 64 rozkazów do 32 różnych urządzeń (każde urządzenie ma przypisany właściwy dla swojego typu adres i reaguje tylko na przeznaczone dla niego rozkazy). Można też traktować rozkazy i adresy jako wspólny zbiór komunikatów, co umożliwia przesłanie do jednego urządzenia 2048 poleceń. Twórca systemu RC5 (firma Philips) przyporządkował na stałe część adresów wybranym grupom urządzeń (tabela 2), jak również część rozkazów wybranym poleceniom (tabela 3). Tabela 2. Adresu urządzeń sterowanych kodem RC5 Adres (dziesiętnie) 00 01 02 05 06 16 17 18 19 20 22 07, 11, 13, 15, 24, 25, 27÷31 Urządzenie Odbiornik telewizyjny 1 Odbiornik telewizyjny 2 Teletekst Magnetowid 1 Magnetowid 2 Przedwzmacniacz audio 1 Radioodbiornik Magnetofon Przedwzmacniacz audio 2 Odtwarzacz CD Tuner Satelitarny Adresy zwykle niewykorzystane, które można przydzielić samodzielnie skonstruowanym urządzeniom Urządzenia fabryczne zawierają zazwyczaj wyspecjalizowane układy do nadawania np. SAA3010 i odbioru np. SAA3049, które współpracują z pozostałymi blokami urządzenia. Ze względu na stosunkowo małą szybkość transmisji, odbiór ramki informacyjnej nadawanej w kodzie RC5 można przeprowadzić programowo z wykorzystaniem detektora promieniowania podczerwonego i mikrokontrolera. 2 Tabela 3. Numery rozkazów w kodzie RC5 (telewizor) Numer (dziesiętnie) 00÷09 12 13 14 16 17 18 19 20 21 22 23 24 25 26 27 Polecenie Cyfry od 0 do 9, numery kanałów TV Stand by (wyłączenie telewizora z zapamiętaniem ustawionych parametrów Mute (wyciszenie dźwięku) Normalizacja Zwiększenie głośności Zmniejszenie głośności Zwiększenie jaskrawości Zmniejszenie jaskrawości Zwiększenie nasycenia Zmniejszenie nasycenia Zwiększenie poziomu tonów niskich Zmniejszenie poziomu tonów niskich Zwiększenie poziomu tonów wysokich Zmniejszenie poziomu tonów wysokich Balans w prawo Balans w lewo 3.1. Nadawanie i odbiór informacji Przesyłanie sygnału przy użyciu fali świetlnej w zakresie podczerwieni stosowane w pilotach TV i jego odbiór przedstawiono schematycznie na rys.1. Sygnał prostokątny o zadanej częstotliwości steruje bramką tranzystora sukcesywnie zapalając i gasząc diodę emitującą światło w zakresie podczerwieni. Układ odbiornika posiada filtr, który wychwytuje tylko sygnał o zadanej częstotliwości. Dzięki wbudowanemu demodulatorowi wykrycie transmisji sygnału powoduje przełączenie wyjścia odbiornika w stan niski. Brak sygnału ustawia wyjście odbiornika w stan wysoki. +5V +5V Rys.1. Schematyczne zobrazowanie nadawania i odbioru informacji przez pilot telewizyjny Każdy bit ramki informacyjnej nadawany jest w tzw. kodzie bifazowym (nazywanym również kodem Manchester), co przedstawiono na rys.2. Kodowanie bifazowe polega na zmianie fazy sygnału na przeciwny w połowie czasu trwania bitu. Jeśli transmitowany bit ma wartość logiczną 1, to w pierwszej połowie czasu jego trwania wyjście odbiornika podczerwieni przyjmuje stan wysoki, natomiast w drugiej połowie – stan niski. Podobnie przy transmisji bitu o wartości logicznej 0; w pierwszej połowie czasu na wyjściu odbiornika jest stan niski, w drugiej – stan wysoki. a) b) nadajnik odbiornik 32 okresy 32 okresy 32 okresy 32 okresy Rys.2. Sposób nadawania informacji logicznej w kodzie bifazowym: a) jedynki, b) zera W pilotach nadających w kodzie RC5 czas trwania pojedynczego bitu wynosi 64 okresy sygnału sterującego pracą nadajnika1. Ze względu na kodowanie bifazowe, stan wyjścia zmienia się na przeciwny po 32 okresach. Dzięki określeniu wszystkich czasów w standardzie w powiązaniu z częstotliwością sygnału sterującego pracą nadajnika, możliwa jest praca w jednym pomieszczeniu kilku nadajników kodu RC5 o różnych częstotliwościach. 1 3 3.2. Ramka informacyjna Wciśnięcie dowolnego klawisza na pilocie TV powoduje wygenerowanie 14-bitowej ramki informacyjnej pokazanej schematycznie na rys.3, która przesyłana jest szeregowo do odbiornika podczerwieni. Dwa pierwsze bity S są bitami startu i zawsze mają wartość 1. Następny bit T jest nazywany bitem kontrolnym lub przełączania. Jego wartość zmienia się po każdorazowym wciśnięciu i zwolnieniu przycisku. Zatem przytrzymanie przycisku powoduje wygenerowanie ciągu identycznych ramek (w odstępach czasu równych czasowi trwania 50 bitów), w których bit T ma stale taką samą wartość 2. Pięć kolejnych bitów A0÷A4 określa adres urządzenia, dla którego przeznaczony jest rozkaz zakodowany na sześciu następnych bitach C0÷C5. 1 1 0 1 1 0 1 0 0 1 0 1 1 0 S S T A A A A A C C C C C C 14 bitów Rys.3. Przykładowa ramka informacyjna w kodzie RC5 64 bity 50 bitów 14 bitów Rys.4. Sukcesywne wysyłanie tej samej ramki informacyjnej 3.3. Programowy odbiór ramki informacyjnej W makiecie dydaktycznej odbiór sygnału z pilota TV odbywa się z wykorzystaniem odbiornika podczerwieni TFMS5360. Układ posiada w swojej strukturze wszystkie elementy potrzebne do odebrania zmodulowanego sygnału, wzmocnienia go i demodulacji, otrzymując na wyjściu podłączonym do wejścia INT1 mikrokontrolera ciąg impulsów prostokątnych (rys.3) gotowych do dalszej obróbki i analizy. Tabela 4. Czasy związane z nadawaniem ramki informacyjnej w kodzie RC5 (częstotliwość fali nośnej 36kHz) Opis Okres sygnału Czas trwania jednego bitu Czas trwania ramki informacyjnej Czas trwania przerwy pomiędzy ramkami Obliczenie Czas 27,777 [μs] 1,778 [ms] 24,889 [ms] 88,889 [ms] 64 · 27,777 [μs] 14 · 1,778 [ms] 50 · 1,778 [ms] Najprostszy sposób poprawnego odczytu ramki informacyjnej wymaga wykrycia jej początku i interpretacji wartości poszczególnych bitów. Można tego dokonać sugerując się informacjami podanymi na rys.5. 1,75 bita 3,112 ms S=1 S=1 1 bit 1,778 ms T=0 1 bit 1,778 ms S=1 1 bit 1,778 ms S=1 1 bit 1,778 ms T=0 Rys.5. Przykładowy sposób odczytu bitów ramki informacyjnej nadawanej w kodzie RC5 Przy braku transmisji ramki informacyjnej linia wyjściowa odbiornika podczerwieni (a tym samym linia INT1 mikrokontrolera, do której podłączone jest wyjście odbiornika podczerwieni w niniejszej makiecie dydaktycznej) znajduje się w stanie wysokim. Pierwszy transmitowany bit ramki ma wartość logiczną 1, dlatego wykrycie zmiany ze stanu wysokiego na niski daje informację, że właśnie znajdujemy się w połowie nadawania Dzięki bitowi T możliwe jest rozróżnienie, czy odebrana ramka została wygenerowana przez kolejne wciśnięcie tego samego przycisku, czy też jest wynikiem przytrzymania przycisku przez dłuższy okres czasu. 2 4 1,75 bita 3,112 ms S=1 S=1 1/2 bita 0,889 ms 1/2 bita 0,889 ms 1/2 bita 0,889 ms 1/2 bita 0,889 ms 1/2 bita 0,889 ms 1/2 bita 0,889 ms 1/2 bita 0,889 ms 1/2 bita 0,889 ms pierwszego bitu startowego ramki. W celu poprawnego odczytania wartości kolejnych bitów należy sprawdzać stan linii INT1 w pierwszej połowie czasu trwania każdego kolejnego bitu, gdyż wtedy stan linii INT1 odpowiada wartości przesyłanego bitu informacji. W tym celu po wykryciu zmiany z stanu wysokiego na niski przy pierwszym bicie startowym, a tym samym wykryciu początku ramki, należy odmierzyć czas równy 1,75 bitu, jeśli kolejny bit startowy jest pomijany (patrz rys.5) lub 0,75 bitu - jeśli nie jest. Odmierzając teraz kolejno czasy równe 1 bitowi i sukcesywnie odczytując stan linii INT1, możliwy jest odczyt wartości dalszych bitów ramki. Podczas nadawania ramki informacyjnej może dojść do zasłonięcia diody emitującej promieniowanie podczerwone w pilocie. Stosując sposób odbioru przedstawiony na rys.5 nie ma możliwości stwierdzenia, czy transmisja ramki została przerwana, co może spowodować błędną interpretację odebranej informacji. Aby się ustrzec przed opisaną sytuacją, konieczne jest próbkowanie linii INT1 zarówno w czasie trwania pierwszej, jaki i drugiej połowy bitu (rys.6). Jeśli dwa odczytane stany mają wartości przeciwne to znaczy, że ramka informacyjna jest wciąż nadawana, a odczytana wartość bitu jest poprawna. T=0 S=1 S=1 T=0 Rys.6. Ulepszony sposób odczytu bitów ramki informacyjnej nadawanej w kodzie RC5 Również może dojść do sytuacji, w której odbiór ramki rozpoczęto nie od pierwszego, lecz od któregoś z dalszych bitów traktując go jako bit startu. Dlatego po stwierdzeniu zmiany stanu linii INT1 z wysokiego na niski zaleca się odmierzenie czasu większego od długości jednej ramki a krótszego niż czas równy połowie długości czasu trwania przerwy pomiędzy ramkami. W ten sposób niezależnie od tego, w jakiej chwili czasowej rozpoczęliśmy analizę ramki po odmierzeniu tego czasu znajdziemy się w przerwie pomiędzy ramkami (rys. 7). Po tym czasie należy ponownie oczekiwać na zmianę stanu linii INT1 z wysokiego na niski, a więc na początek nowej ramki, co zapewni poprawny jej odczyt. 25 bitów 25 bitów Rys.7. Ulepszony sposób rozpoczęcia odczytu ramki informacyjnej nadawanej w kodzie RC5 4. Klawiatura PC AT Klawiatura PC AT podłączana jest do urządzeń przy wykorzystaniu czteroprzewodowego interfejsu. Tylko dwie z tych linii (linia danych i linia zegarowa) służą do przesyłania informacji pomiędzy klawiatura a urządzeniem nadrzędnym (ang. host). Pozostałe dwie są liniami zasilającymi. Jak można się zorientować po występowaniu linii zegarowej, przesyłanie informacji odbywa się synchronicznie Podłączenie linii odpowiedzialnych za przesyłanie informacji do systemu mikroprocesorowego makiety pokazano na schemacie elektrycznym. Sama klawiatura zawiera macierz klawiszy monitorowaną prze wewnętrzny procesor. Wykrycie wciśnięcia klawisza, jego przytrzymania lub puszczenia powoduje wysłanie informacji nazywanej kodem skaningowym (ang. scan codes). Rozróżniane są dwa typy kodów skaningowych: wysyłanych przy wciśnięciu lub przytrzymaniu klawisza (ang. make codes) oraz wysyłane przy zwolnieniu klawisza (ang. break codes). Kody skaningowe wysyłane z klawiatury do urządzenia nadrzędnego reprezentują tylko numer wciśniętego klawisza, natomiast nie reprezentują znaku, który jest na nim przedstawiony. Dlatego w ogólności kody skaningowe i kody ASCII odpowiadające poszczególnym znakom są różne. Urządzenie nadrzędne zmuszone jest więc do dekodowania odebranych kodów skaningowych. Kody skaningowe przypisane poszczególnym klawiszom pokazano na rys.8. 5 Rys.8. Kody skaningowe klawiatury PC AT O ile przedstawione na rys.6 kody są wysyłane przy wciśnięciu lub przytrzymaniu klawisza, to przy jego zwolnieniu wysyłany jest również ten sam kod jednak poprzedzony wartością F0h. Pokazuje to poniższy przykład. Kod wysyłany przy wciśnięciu Kod przy zwolnieniu Wciśnięty klawisz lub przytrzymaniu klawisza klawisza A 1Ch F0h, 1Ch Prawy Ctrl E0h, 14h F0h, E0h, 14h Wysyłane kody skaningowe nie są buforowane w klawiaturze, dlatego w przypadku wciśnięcia więcej niż jednego klawisza, wysyłany jest kod ostatniego z wciśniętych klawiszy. Zwolnienia ostatnio wciśniętego klawisza i jednoczesne dalsze przytrzymywanie klawiszy wciśniętych wcześniej nie powoduje wysyłania ich kodów skaningowych. 4.1. Odbiór kodów skaningowych z klawiatury Klawiatura może przesyłać dane do urządzenia nadrzędnego tylko wtedy, gdy zarówno linia danych, jak również linia zegarowa znajdują się w stanie logicznej jedynki. Transmisja danych odbywa się z wykorzystaniem 11 bitowej ramki (rys.9) składającej się z bitu startu, 8 bitów danych, bitu parzystości i bitu stopu. linia zegarowa linia danych bit startu 0 1 2 3 4 5 6 7 P bit stopu Rys.9. Protokół przesyłania informacji z klawiatury do urządzenia nadrzędnego Wartość bitu startu i stopu jest zawsze stała i wynosi odpowiednio 0 oraz 1. Bity danych przesyłane są od najmniej znaczącego do najbardziej znaczącego. Przebieg na linii zegarowej generuje zawsze klawiatura. Jego częstotliwość waha się w granicach od 20 do 30 kHz. W protokole transmisyjnym zakłada się, że stan linii danych jest ustabilizowany, gdy sygnał zegarowy przyjmuje stan niski, dlatego stan każdego bitu powinien być odczytywany właśnie w tym przedziale czasowym. Linia zegarowa podłączona jest do wejścia INT0 mikrokontrolera, dlatego wykrycie opadającego zbocza na niej może być realizowane z wykorzystaniem systemu przerwań mikrokontrolera. Bit parzystości określa tzw. parzystość typu odd. Oznacza to, że jeśli w przesłanym bajcie informacyjnym jest parzysta liczba jedynek, to bit ten przyjmuje wartość 1. 4.2. Przesyłanie rozkazów do klawiatury Proces przesyłania rozkazów z urządzenia nadrzędnego do klawiatury inicjowany jest przez wymuszenie stanu niskiego na linii danych. Aby zapobiec nadawaniu w tym samym czasie informacji z klawiatury do urządzenia nadrzędnego, powszechnie przed wymuszeniem stanu niskiego na linii danych wymusza się również stan niski na linii zegarowej na czas nie krótszy niż 60s (rys.10). Po wymuszeniu stanu niskiego na linii danych przez urządzenie nadrzędne, klawiatura maksymalnie po czasie 10ms rozpoczyna generowanie sygnału zegarowego. Stan linii danych jest odczytywany przez klawiaturę przy opadającym zboczu sygnału zegarowego, dlatego po wykryciu pierwszego opadającego zbocza na linii zegarowej należy ustawić na linii danych stan odpowiadający pierwszemu (najmłodszemu) bitowi przesyłanego 6 bajta. Zostanie on odczytany przez klawiaturę przy następnym opadającym zboczu. W ten sam sposób należy postąpić z kolejnymi siedmioma bitami danej i bitem parzystości. min 60s max 10ms linia zegarowa bit startu linia danych 0 1 2 3 4 5 6 7 bit stopu P ack Rys.10. Protokół przesyłania informacji z urządzenia nadrzędnego do klawiatury; grubszą linią zaznaczono fragmenty, kiedy stan danej linii wymusza urządzenie nadrzędne. Po wysłaniu tej informacji urządzenie nadrzędne powinno zwolnić linię danych poprzez wystawienia na niej logicznej jedynki. W kolejnym cyklu zegarowym klawiatura potwierdza przyjęcie danych przez wymuszenie na linii danych stanu niskiego, a następnie zwalnia linię wymuszając stan wysoki. Jeśli linia danych nie zostanie zwolniona po wysłaniu 10 bita (bita parzystości), to klawiatura nie zaprzestaje generowania sygnału zegarowego, aż do spełnienia tego warunku. urządzenie nadrzedne min 60s linia zegarowa bit startu linia danych 0 1 2 3 4 5 6 7 P bit stopu klawiatura max 10ms linia zegarowa linia danych ack Rys.11. Protokół przesyłania informacji z urządzenia nadrzędnego do klawiatury; podział na przebiegi generowane przez klawiaturę i urządzenie nadrzędne. Urządzenie nadrzędne może wysyłać do klawiatury różnego rodzaju polecenia. Poniżej podano kilka z nich. FDh EEh F3h FFh Ustawia stan diod LED w klawiaturze. Polecenie to jest używane do zapalania i gaszenia diod LED oznaczonych nazwami: Caps Lock, Num Lock i Scroll Lock. Po wysłaniu tego polecenia klawiatura odpowiada bajtem potwierdzającym (wartość FAh) i czeka na następny bajt określający status diod LED. Poszczególnym diodom są odpowiednio przyporządkowane bity b 2, b1 i b0 wysyłanego bajta. Echo. Po wysłaniu tego polecenia klawiatura przesyła w odpowiedzi tą samą wartość (EEh). Ustawia wartość opóźnienia (czas uznania klawisza za stale naciskany) i częstość repetycji (powtórzenia wysłania kodu stale naciskanego klawisza na sekundę) przy wciskaniu danego klawiszy. Klawiatura odpowiada bajtem potwierdzającym (FAh), wstrzymuje przeglądanie klawiszy i oczekuje na jeden bajt parametru. Poszczególnym bitom przesyłanego bajta przypisane jest następujące znaczenia: b7 = 0, b6 i b5 określają opóźnienie w milisekundach według zależności: (1+b6b5)250 b4,...,b0 określają częstość repetycji, gdzie okres powtórzeń w sekundach można określić na podstawie wzoru: (8+b2b1b0) 2b4b3 0,00417 Żądanie inicjalizacji i wewnętrznego testu klawiatury. Klawiatura po odebraniu tego polecenia wysyła bajt potwierdzający (FAh) i oczekuje na ustawienie linii danych i zegarowej w stan wysoki na okres nie krótszy niż 500s. 7 5. Działanie makiety pod kontrolą programu monitora PAULMON2 jest darmowym programowym monitorem instalowanym w systemach bazujących na mikrokontrolerach rodziny MCS-51. Umieszczenie opisywanego monitora w pamięci ROM mikrokontrolera pozwala na wczytywanie programów do pamięci RAM i wykonywanie ich, co jest znacznie wygodniejsze i szybsze, niż przeprogramowywanie pamięci EPROM. Do komunikacji z programem monitora można wykorzystać dowolny program pozwalający na komunikację za pomocą złącza RS-232, np. HyperTerminal. Po uruchomieniu niniejszego programu na komputerze PC, oraz po wciśnięciu klawisza resetu makiety, monitor wysyła następujący komunikat: Welcome to PAULMON2 v2.1, by Paul Stoffregen See PAULMON2.DOC, PAULMON2.EQU and PAULMON2.HDR for more information. Program Name List Single-Step Memory Editor (VT100) Location 1000 1400 1800 Type External command External command External command a następnie pojawia się znak zachęty PAULMON2 Loc:2000 > _ Wartość 2000 określa adres, na jaki wskazuje wewnętrzny wskaźnik monitora. Jego znajomość jest użyteczna przy wywoływaniu komend operujących na pamięci systemu. Poniżej zostaną przedstawione wybrane komendy monitora. Wielkość liter przy wprowadzaniu poleceń nie ma znaczenia. 5.1. D (ang. Download) – ładowanie programu Polecenie to pozwala na załadowanie do pamięci RAM systemu mikroprocesorowego pliku z programem w formacie Intel Hex. W formacie tym zawarte są informacje o adresie, pod który mają być zapisywane kolejne bajty przesyłanego programu, zatem wewnętrzny wskaźnik pamięci monitora nie jest brany pod uwagę. Załadowanie programu polega na wciśnięciu klawisza [D], co powoduje wyświetlenie następującej informacji PAULMON2 Loc:2000 > Download Begin ascii transfer of Intel hex file, or ESC to abort Teraz należy z menu Transfer programu TyperTerminal wybrać Wyślij plik tekstowy..., a w otwartym oknie wskazać miejsce położenia pliku *.hex. Zatwierdzenie wyboru powoduje rozpoczęcie przesyłania danych. Za każdym razem, kiedy monitor odbierze pojedynczą linię z ładowanego pliku *.hex, na ekranie zostaje wyświetlona kropka. Jeśli z jakiś powodów konieczne jest przerwanie ładowania programu należy wtedy wcisnąć klawisz [Esc]. Po zakończeniu ładowania pliku z programem lub gdy ładowanie zostanie przerwane na życzenie użytkownika, na ekranie pojawia się podsumowanie. ................................................................................ ....................................................... Download completed Summary: 135 lines received 2084 bytes received 2084 bytes written No errors detected Jeśli po wykonaniu polecenia wczytania pliku w informacji podsumowującej monitora raportowane są błędy o braku możliwości zapisu Summary: 246 lines received 3834 bytes received 630 bytes written Errors: 8 3204 bytes unable to write to oznacza, że plik HEX został odebrany poprawnie, jednak obszar pamięci wyspecyfikowany w kolejnych rekordach zawartych w pliku jest tylko do odczytu. W przypadku odebrania przez monitor danych o niepoprawnym formacie zostanie wyświetlone podsumowanie podobne do poniższego. Summary: 3 lines received 62 bytes received 62 bytes written Errors: 1 bad checksums 2 unexpected begin of line 17 unexpected hex digits 2 unexpected non hex digits 5.2. J (ang. Jump) – skocz pod określony adres w pamięci Polecenie to pozwala na przejście do wykonywania wczytanego wcześniej programu użytkownika. Po wciśnięciu klawisza [J] pojawi się napis PAULMON2 Loc:2000 > Jump to memory location Jump to memory location (2000), or ESC to quit: _ W tym momencie należy wprowadzić wartość adresu, od którego został umieszczony program. Po wpisaniu ostatniego (czwartego) znaku na ekranie pojawi się napis running program: _ informując o rozpoczęciu wykonywania programu użytkownika. Przed przejściem pod wyspecyfikowany adres program monitora odkłada na stosie wartość 0000H, zatem programy, które kończą się instrukcją RET powodują ponowne wywołanie programu monitora. Jeśli program działa w nieskończonej pętli, to jedyną możliwością powrotu do programu monitora jest reset mikrokontrolera. 6. Wskazówki do ćwiczenia Wszystkie niezbędne informacje odnośnie układów wykorzystanych w makiecie znajdują się w dodatkach dołączonych do instrukcji: dodatek A: wyświetlacz ciekłokrystaliczny. 6.1. Konfiguracja przestrzeni adresowej makiety monitor EPROM program RAM: dane RAM: obszar wspólny dla programu i danych: 0000h1FFFh, 2000hF7FFh, 0000hF7FFh, 2000hF7FFh. 6.2. Adresy układów peryferyjnych wyświetlacz LCD FE00h, F 1 1 E 1 1 1 1 0 1 0 0 RS – linia sterująca RS sterownika wyświetlacza R/W – linia sterująca R/W sterownika wyświetlacza 9 0 0 0 0 0 X R/W RS hex bin 7. Literatura Rydzewski A.: „Mikrokomputery jednoukładowe”. WNT, Warszawa 1992. Starecki T.: „Mikrokontrolery jednoukładowe rodziny 51”. NOZOMI, Warszawa 1996. Starecki T.: „Mikrokontrolery 8051 w praktyce”. BTC, Warszawa 2003. Majewski, Kardach K.: „Mikrokontrolery jednoukładowe 8051. Programowanie w języku C w przykładach”. Oficyna Wydawnicza Politechniki Wrocławskiej, Wrocław 1995. [5] Kernighan W., Ritchie D.M.: „ANSI C”. WNT, Warszawa 1992. [6] Lach M.: „Biblioteka mikroprocesorowych procedur standardowych”. Elektronika Praktyczna 1/2/4/7/ 1997, 5/ 1998. [7] Hadam P.: „Podstawy projektowania systemów mikroprocesorowych, cześć 9”. Elektronika Praktyczna 11/2003. [8] Piotrowski S.: „Klawiatury”. klan, luty 1988. [9] Ziembicki J.: „Moduły wyświetlaczy znakowych LCD ze sterownikami VLSI”. Radioelektronik 5/ 1994. [10] Beach M.: „C51 Primer”, Hitex (UK) Ltd. www.esacademy.com/automation/docs/c51primer/c51prim.htm [1] [2] [3] [4] 10 A B C DB9 J1 S1 1 GND 1 6 2 7 3 8 4 9 5 C6 1uF 6 C4 1uF 1 3 13 8 14 7 GND D1 1N4148 R1 4k7 GND C3 10uF/16V RESET VCC MAX232 C1+ C1- R1 IN R2 IN T1 OUT T2 OUT V- U8 C1 33pF GND 2 C2+ C2- R1 OUT R2 OUT T1 IN T2 IN V+ 12MHz Y1 4 5 12 9 11 10 2 VCC 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 19 18 C2 33pF GND 2 C5 1uF C7 1uF 80C32 P3.0/RXD0 P3.1/TXD0 P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P1.0/T2 P1.1/T2EX P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST X1 X2 U1 ALE PSEN P3.6/WR P3.7/RD EA (A8)P2.0 (A9)P2.1 (A10)P2.2 (A11)P2.3 (A12)P2.4 (A13)P2.5 (A14)P2.6 (A15)P2.7 (AD0)P0.0 (AD1)P0.1 (AD2)P0.2 (AD3)P0.3 (AD4)P0.4 (AD5)P0.5 (AD6)P0.6 (AD7)P0.7 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 3 30 GND 29 16 17 31 21 22 23 24 25 26 27 28 39 38 37 36 35 34 33 32 3 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 1 4 GND DC IN J3 A15 A14 A13 A12 A11 A10 A9 R3 10k VCC GND 11 1 2 3 4 5 6 7 8 9 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 19 18 17 16 15 14 13 12 4 IO 0 IO 1 IO 2 IO 3 IO 4 IO 5 IO 6 IO 7 4 5 3 C9 100nF GND VCC VCC A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 GAL16V8-25LC(20) IN 0/CLK IN 1 IN 2 IN 3 IN 4 IN 5 IN 6 IN 7 IN 8 IN 9/OE U6 J2 DIN41524 R2 10k 1 2 3 4 5 6 7 8 9 11 74HCT573 LE OE D0 D1 D2 D3 D4 D5 D6 D7 U2 2 D 1 12 13 14 15 16 17 18 19 C10 100nF LCD E OEROM OERAM CSRAM1 CSRAM2 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 C11 100nF 27 22 20 10 9 8 7 6 5 4 3 25 24 21 23 2 26 1 4,7uF C12 100nF 5 I/O 0 I/O 1 I/O 2 I/O 3 I/O 4 I/O 5 I/O 6 I/O 7 C8 R4 330R VCC 62C256 R/W OE CE A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 U3 5 C13 100nF GND C14 100nF AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 U9 TFMS5360 11 12 13 15 16 17 18 19 OUT VCC GND 3 2 1 C15 100nF A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 6 6 27 22 20 10 9 8 7 6 5 4 3 25 24 21 23 2 26 1 GND P1 4k7 R5 18k VCC 62C256 R/W OE CE A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 U4 I/O 0 I/O 1 I/O 2 I/O 3 I/O 4 I/O 5 I/O 6 I/O 7 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 7 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 20 22 10 9 8 7 6 5 4 3 25 24 21 23 2 26 27 1 27C512 E G/VPP A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 U5 WYŚWIETLACZ LCD U7 LCD DISPLAY 11 12 13 15 16 17 18 19 VO Date: File: A3 Size Title 3 RS R/W E 4 5 6 DQ1 DQ2 DQ3 DQ4 DQ5 DQ6 DQ7 DQ8 11 12 13 15 16 17 18 19 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 8 7 8 14-Feb-2007 Sheet of D:\Moje dokumenty\OAP\Instrukcje\Makieta Drawn RC5\KlawPC By: RC5 LCD.ddb Revision Makieta dydaktyczna: klawiatura PC i odbiornik RC5 Number A0 A1 DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 7 8 9 10 11 12 13 14 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 A B C D