Instrukcje do zajęć laboratoryjnych cz.I
Transcription
Instrukcje do zajęć laboratoryjnych cz.I
Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki Instrukcje do zajęć laboratoryjnych Laboratorium z przedmiotu: Systemy wbudowane Kod: ES2C202 202 Elektrotechnika – studia stacjonarne II stopnia, sem. II specjalność Automatyka Przemysłowa i Technika Mikroprocesorowa Opracował dr inż. Rafał Kociszewski Białystok 2014 Program szczegółowy laboratorium – 30 godz. Zajęcia wprowadzające 1. Podstawy programowania mikrokontrolera LPC2148 (1 godz.) (2 godz.) 2. Wykorzystanie interfejsu SPI do komunikacji z graficznym wyświetlaczem LCD. 3. Komunikacja z wykorzystaniem interfejsu USB. (4 godz.) (2 godz.) 4. Bezprzewodowa transmisja danych z wykorzystaniem modułu Bluetooth. (4 godz.) 5. Implementacja systemu rozpoznawania kolorów. (6 godz.) 6. Komunikacja z odbiornikiem GPS. (4 godz.) 7. Implementacja systemu operacyjnego czasu rzeczywistego na mikrokontrolerze LPC2148. 8. Podstawy programowania mikrokontrolerów PSoC. Zaliczenie zajęć. (2 godz.) (6 godz.) (1 godz.) Literatura: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Ashby R.: Designer's Guide to the Cypress PSoC, Newnes, 2005. Augustyn J.: Projektowanie systemów wbudowanych na przykładzie SAM7S z rdzeniem ARM7TDMI. Wyd. IGSMiE PAN, Kraków 2007. Barry R.: Using the FreeRTOS Real Time Kernel - a Practical Guide - Standard Edition Borkowski P.: AVR & ARM7. Programowanie mikrokontrolerów dla każdego. Wyd. Helion 2010. Bryndza L.: LPC2000 Mikrokontrolery z rdzeniem ARM7. Wyd. BTC 2007. Majewski J.: Programowanie mikrokontrolerów LPC2000 w języku C pierwsze kroki. Wyd. BTC 2010. Martin T.: The insider’s guide to the Philips ARM7-based microcontrollers. Hitex 2005. Massa A. J.: Embedded software development with eCOS. Prentice Hall 2003. Melot N.: Study of an operating system: FreeRTOS. Mielczarek W.: USB. Uniwersalny interfejs szeregowy. Helion 2005. Morawski Ł.: Dydaktyczny system uruchomieniowy do testowania aplikacji na mikrokontroler PSoC. Praca dyplomowa, Politechnika Białostocka, Białystok 2014. Narkiewicz J.: GPS i inne satelitarne systemy nawigacyjne. WKiŁ 2007. Stawski E.: Mikrokontrolery LPC2000 w przykładach. Wyd. BTC 2009. BTM220_DataSheet.pdf LPC 214x – User manual. Philips Semiconductors 2004. LPC214x USB simplified – API approach to HID class. NXP B.V. 2008 (AN10736). PCD8544 – 48x84 pixels matrix LCD controller/driver. Philips Semiconductors 1999. 2 Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki Instrukcja do zajęć laboratoryjnych Numer ćwiczenia: 1 Temat: Podstawy programowania mikrokontrolera LPC2148 Laboratorium z przedmiotu: Systemy wbudowane Kod: ES2C 202 202 Elektrotechnika – studia stacjonarne II stopnia, sem. II specjalność Automatyka Przemysłowa i Technika Mikroprocesorowa Opracował dr inż. Rafał Kociszewski Białystok 2014 3 1. Cel ćwiczenia • • • Zapoznanie się z zestawem uruchomieniowym z mikrokontrolerem LPC2148. Poznanie zasad tworzenia projektu w środowisku programowym Keil uVision. Wykonanie prostych operacji na uniwersalnych portach I/O w zakresie sterowania diodami LED oraz obsługi prostej klawiatury. 2. Wprowadzenie Zestaw uruchomieniowy stosowany w laboratorium składa się z uniwersalnej płyty bazowej (ZL9ARM) – rysunek 1 oraz modułu dipARM (ZL10ARM) – rysunek 2 zawierającego 32-bitowy mikrokontroler LPC2148 z rdzeniem ARM7TDMI-S. Moduł ten umieszczony w gniazdach płyty stanowi platformę sprzętową służącą do testowania aplikacji przygotowywanych na mikrokontroler LPC2148. Rys. 1. Wygląd płyty bazowej ZL9ARM oraz jej schemat blokowy (źródło: dokumentacja ZL9ARM; www.kamami.pl)) Rys. 2. Wygląd modułu dipARM z mikrokontrolerem LPC2148 (źródło: dokumentacja ZL10ARM, www.kamami.pl) 4 Podstawowe właściwości ZL9ARM: gniazdo do modułu dipARM z mikrokontrolerem LPC213x/214x, gniazdo USB, złącze karty MMC, gniazdo do dołączenia konwertera UART ↔ USB, gniazdo alfanumerycznego wyświetlacza LCD o organizacji 2x16 znaków (tryb 4bitowy), dwa interfejsy RS232, złącze programowania/debuggowania JTAG złącza z wyprowadzonymi liniami portów mikrokontrolera, 8 diod LED, 4 przyciski, przyciski zerowania i przerwania INT1, potencjometryczny zadajnik napięcia wejściowego dla przetwornika A/C, termistor NTC dołączony do wejścia przetwornika A/C, wzmacniacz audio o mocy 600mW (z regulacją głośności), przetwornik piezoakustyczny, zasilanie: USB lub zasilacz sieciowy 9...12 VDC/VAC, stabilizatory napięcia: 3,3 i 5 V, Cechy mikrokontrolera LPC2148: 32-bitowy rdzeń ARM7TDMI-S, taktowanie sygnałem zegarowym o częstotliwości do 60MHz (dzięki wbudowanej pętli PLL), 512kB programowanej w systemie pamięci programu Flash, 32kB pamięci RAM, USB 2.0, 2 interfejsy UART, 2 interfejsy I2C, 2 interfejsy SPI, dwa 8-kanałowe 10-bitowe przetworniki AC, 10-bitowy przetwornik CA, do 45 linii I/O kompatybilnych z logiką 3,3 V oraz 5 V, możliwość programowania w systemie poprzez interfejs RS232, wbudowany kontroler przerwań, sprzętowy zegar RTC, watchdog, timery o zaawansowanych możliwościach (w tym generacja PWM), system zarządzania pobieraną energią. 2.1. Obsługa linii (portów) I/0 mikrokontrolera LPC2148 Mikrokontroler LPC2148 ma dwa 32-bitowe porty I/O (wejścia-wyjścia) P0 i P1, przy czym port P1 ma wyprowadzone tylko 16 najbardziej znaczących bitów (P1.16...P1.32). Wszystkie porty są dwukierunkowe i mają maksymalną wydajność prądową o wartości 45mA. Każdy z pinów ma przypisaną od jednej do czterech funkcji alternatywnych. Przykładowo linia P0.0 jest oznaczona: P0.0/TXD0/PWM1. Można ją zatem skonfigurować jako: uniwersalną linię 5 I/O, wyjście TxD interfejsu UART0 albo wyjście sygnału PWM. Za wybór jednej z tych funkcji odpowiadają dwa bity w rejestrze PINSEL0, 1 i 2. Na poniższym rysunku jest przedstawiony sposób wyboru funkcji linii P0.0. GPIO P0.0 00 TxD0 01 PWM1 10 zabronione 10 P0.0/TxD0/PWM1 RESET:0x00000000 PINSEL0 1 0 PINSEL0 Oznaczenie Stany 1:0 P0.0 00 GPIO Port 0.0 01 TxD0 (UART0) 10 PWM1 11 zabronione Opis Rys. 3. Rejestry PINSEL0, PINSEL1, PINSEL2 umożliwiają wybór funkcji wyprowadzeń LPC2148. każde dwa bity rejestru zawierają kombinację bitów określających przeznaczenie wyprowadzenia Linie portów P0.2, P0.3, P0.11 i P0.14 dla zapewnienia kompatybilności z interfejsem I2C mają wyjścia typu otwarty dren i nie są w pełni dwukierunkowe, dlatego w niektórych przypadkach wymagają podłączenia zewnętrznych rezystorów (tzw. podciągających) o wartości kilkunastu kΩ do plusa napięcia zasilającego. Jeżeli linie portu są skonfigurowane jako wejściowe, port P0 nie ma rezystorów podciągających, natomiast port P1 jest wyposażony w wewnętrzne rezystory o wartości 60...300 kΩ. Podczas zerowania mikrokontrolera także zawartość rejestrów PINSEL jest zerowana. Oznacza to, że po włączeniu zasilania i po każdym zerowaniu wszystkie linie I/O działają jako port ogólnego przeznaczenia. W trybie GPIO konfiguracja każdej linii I/O jest zależna od stanu bitów w poniższych rejestrach: • Rejestr IO0DIR (port P0) i IO1DIR (port P1) umożliwiają wybór kierunku pracy wybranej linii I/O. Ustawienie bitu w tym rejestrze powoduje, że odpowiadająca mu linia I/O pełni rolę wyjścia, natomiast jego wyzerowanie powoduje, że wybrana linia pełni rolę wejścia. • Rejestr IO0PIN oraz IO1PIN umożliwia odczytanie oraz ustawienie stanu wybranej linii I/O. W przypadku, gdy wybrany pin skonfigurowany jest jako wejściowy odczyt tego rejestru jest bezpośrednim odzwierciedleniem stanu sygnałów elektrycznych panujących na tym pinie, natomiast, gdy wybrana linia skonfigurowana jest jako wyjściowa, odczytanie tego rejestru powoduje jednocześnie odczytanie stanu wewnętrznych przerzutników portu i odzwierciedla stan w jakim znajduje się wybrana linia wyjściowa. Zapis do tego rejestru w przypadku gdy wybrana linia skonfigurowana jest jako 6 wyjściowa powoduje wystawienie stanów logicznych odzwierciedlających stan rejestru na odpowiednich pinach mikrokontrolera. • Rejestr IO0SET oraz IO1SET umożliwia ustawienie wybranych linii I/O w stan wysoki („1”) bez zmiany stanu pozostałych linii. • Rejestr IO0CLR oraz IO1CLR umożliwia ustawienie wybranych linii I/O w stan niski („0”) bez zmiany stanu pozostałych linii. Wpisanie 1 na wybranym bicie powoduje wyzerowanie odpowiadającego bitu w porcie I/O. Sterowanie portami I/O mikrokontrolera jest realizowane następująco: aby odczytać zawartość linii wystarczy skonfigurować wybraną linię jako wejściową za pomocą rejestru kierunku IOxDIR, a następnie odczytać stan wybranej linii z rejestru IOxPIN. Natomiast jeżeli chcemy ustawić wybrane linie w odpowiedni stan wystarczy za pomocą rejestru IOxDIR ustawić wybrane linie jako wyjściowe i za pośrednictwem par rejestrów IOxSET, IOxCLR lub IOxPIN ustawić odpowiednie bity. Zastosowanie rejestrów IOxSET i IOxCLR jest bardzo wygodne ponieważ możemy ustawić/skasować wybrane bity portu bez wcześniejszego ich odczytywania. W przypadku, gdy chcemy zmienić całą zawartość danego portu, wygodniej będzie skorzystać z rejestru IOxPIN, który od razu ustawi cały port zgodnie z zawartością rejestru. P0.0 IO0PIN IO0CLR IO0SET PORT P0 IO0DIR Rys. 4. Każda linia I/O jest sterowana za pomocą bitów ulokowanych w czterech rejestrach 7 Funkcje pełnione przez poszczególne linie portu P0 są zebrane w poniższej tabeli. Konfiguracja portu P1 jest łatwiejsza, ponieważ jedyną funkcją alternatywną, jaką pełni ten port jest interfejs debugowania (DEBUG) i śledzenia (TRACE), które nie będą wykorzystywane podczas zajęć w laboratorium. 8 2.2. Wyświetlacz alfanumeryczny LCD Wykorzystywany w zestawie ZL9ARM wyświetlacz LCD (rysunek 5) jest wyposażony w sterownik HD44780, który komunikuje się z otoczeniem za pomocą równoległej magistrali danych (8- lub 4-bitowej), wyposażonej w trzy sygnały sterujące RS (Register Select), R/W (Read/Write) oraz E (Enable) Rys. 5. Wykorzystywany alfanumeryczny wyświetlacz LCD 2x16 znaków. Układ HD44780 jest od wielu lat jednym z najpopularniejszych sterowników wyświetlaczy alfanumerycznych. Interfejs i funkcjonalność tego układu stanowią nieformalny standard w dziedzinie alfanumerycznych modułów wyświetlających. Sterownik HD44780 ma następujące właściwości: - obsługa matryc znakowych LCD o rozmiarach 5x8 i 5x10 punktów - 4-bitowy lub 8-bitowy interfejs równoległy typu 6800 - pamięć RAM przechowująca do 80 znaków - pamięć ROM przechowująca 240 szablonów znakowych - pamięć RAM przechowująca do 8 szablonów znakowych zdefiniowanych przez użytkownika - funkcja: kursora, czyszczenia ekranu i przesuwu okna Sterownik wyposażono w cztery rejestry umożliwiające wymianę danych z otoczeniem: - DataWR – rejestr przeznaczony do zapisu danych do sterownika - DataRD – rejestr przeznaczony do odczytu danych ze sterownika - ControlRD – rejestr sterujący i statusu wyświetlacza (do odczytu, status-control) - ControlWR – rejestr sterujący (do zapisu, control) O tym, do którego z wymienionych rejestrów nastąpi zapis lub z którego nastąpi odczyt decyduje kombinacja stanów na liniach RS i R/W a zapis i odczyt danych jest synchronizowany za pomocą linii E. Sterowniki HD44780 są wyposażone w dwa rodzaje pamięci: DD (Display Data) i CG (Character Generator), do których użytkownik ma dostęp poprzez rejestry DataRD, DataWR, ControlRD i ControlWR. Pamięć CG składa się z pamięci CG-ROM zawierającej przygotowane przez producenta kody znaków oraz CG-RAM przeznaczonej na kody znaków definiowane przez użytkownika. Sposób adresowania znaków wyświetlanych przez kontroler HD44780 jest przedstawiony na rysunku 2. W pamięci CG-RAM pomiędzy adresami 0x00 i 0x1F znajduje się miejsce na umieszczenie 8 znaków zdefiniowanych przez użytkownika. Kształty tych znaków są definiowane jako matryce o wymiarach 5x8 punktów. Jeżeli wpisane 9 kolejno powyżej kody zostaną umieszczone w pamięci CG-RAM od adresu 0x00, to zdefiniowany znak będzie dostępny w tablicy kodów wyświetlacza LCD pod adresem 0x00. Rys. 6. Szablony znakowe zawarte w pamięci CGROM 10 Poniżej podano zestawienie możliwych operacji sterownika HD44780. 2.2. Środowisko uruchomieniowe Keil uVision3 Do przygotowania programów na mikrokontroler LPC2148 jest wykorzystywane środowisko IDE oraz kompilator języka C, dystrybuowane przez firmę Keil. Etapy tworzenia nowego projektu w środowisku Keil uVision3 zostaną przedstawione w poniższych podpunktach. 1. Po kliknięciu w ikonę programu nowy projekt tworzymy po wybraniu w menu opcji Project -> New uVision Project 11 2. Po nadaniu nazwy tworzonemu projektowi należy wskazać właściwy mikrokontroler – LPC2148. 3. W kolejnym kroku należy potwierdzić dołączenie pliku startowego i przejść do tworzenia pliku wybierając z menu File -> New 12 4. Po napisaniu programu (w języku C) należy włączyć opcję do utworzenia pliku .hex (zakładka Output) i poprawnej kompilacji (zakładka Linker) 13 2.3. Program Flash Magic Mikrokontrolery z pamięcią Flash są często wyposażone w mechanizmy umożliwiające programowanie jej w systemie, bez konieczności demontowania układu z urządzenia. Taki rodzaj programowania nosi nazwę ISP (In System Programming). W mikrokontrolerach LPC2148 jest użyty booloader, który poprzez interfejs RS-232 pobiera z komputera (port szeregowy COM) dane przeznaczone do wpisania do pamięci Flash. Obsługę transmisji danych (wgrywanie pliku wynikowego .hex) można zrealizować za pomocą bezpłatnego programu Flash Magic. Wygląd głównego okna tego programu wraz z wybranymi opcjami w polu Step1 i Step2 pokazano na poniższym rysunku. Rys. 7. Główne okno programu Flash Magic (po ustawieniu odpowiednich parametrów Step1, Step2 i wskazaniu pliku .hex do załadowania – Step3, plik jest ładowany do LPC2148 po kliknięciu przycisku Start) 3. Stanowisko laboratoryjne Komputer PC z zainstalowanym programem narzędziowym Keil uVision3 oraz programem ładującym Flash Magic. Zestaw uruchomieniowy ZL9ARM z modułem dipARM z mikrokontrolerem LPC2148. 4. Przebieg ćwiczenia Ćwiczenie jest planowane jako 2-godzinne i obejmuje: Połączenie zestawu uruchomieniowego z komputerem PC za pomocą łącza RS-232. W płytce ZL9ARM korzystamy z gniazda UART0. Przygotowanie programów obsługujących linie we/wy mikrokontrolera LPC2148 w zakresie: a) sterowania diodami LED – w tym celu należy na podstawie schematu ideowego zestawu uruchomieniowego zlokalizować linie mikrokontrolera, do których są podłączone diody LED, a następnie uzyskać dowolne efekty świetlne, b) obsługi przetwornika piezoceramicznego do generowania prostych dźwięków, 14 c) obsługi klawiatury 4-przyciskowej – w tym celu należy na podstawie schematu ideowego zestawu uruchomieniowego zlokalizować linie mikrokontrolera, do których są podłączone przyciski S1...S4, a następnie zaprogramować układ w ten sposób, aby wciśnięcie dowolnego przycisku uruchamiało efekt świetlny na diodach LED. Szczegóły odnośnie programów ustala prowadzący ćwiczenie. Wynikiem pracy grupy laboratoryjnej są programy na mikrokontroler LPC2148. Wnioski i spostrzeżenia jakie nasunęły się podczas wykonywania ćwiczenia należy zamieścić w sprawozdaniu. 5. Wymagania BHP Warunkiem przystąpienia do realizacji ćwiczenia jest zapoznanie się z obowiązującą w laboratorium instrukcją BHP oraz przestrzeganie zasad w niej zawartych. Konieczne jest także zapoznanie z ogólnymi zasadami pracy przy stanowisku komputerowym. Instrukcje BHP powinny być podane studentom podczas pierwszych zajęć laboratoryjnych i dostępne do wglądu w laboratorium. 6. Sprawozdanie studenckie Sprawozdanie powinno zawierać: cel i zakres ćwiczenia, opis stanowiska badawczego, opis przebiegu ćwiczenia z wyszczególnieniem wykonywanych czynności, algorytm oraz listing opracowanego programu komentarze i wnioski 15 Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki Instrukcja do zajęć laboratoryjnych Numer ćwiczenia: 2 Temat: Wykorzystanie interfejsu SPI do komunikacji z graficznym wyświetlaczem LCD Laboratorium z przedmiotu: Systemy wbudowane Kod: ES2C202 202 Elektrotechnika – studia stacjonarne II stopnia, sem. II specjalność Automatyka Przemysłowa i Technika Mikroprocesorowa Opracował dr inż. Rafał Kociszewski Białystok 2014 16 1. Cel ćwiczenia • • • Zapoznanie się z konfiguracją i wykorzystaniem sprzętowego modułu ADC zaimplementowanego w mikrokontrolerze LPC2148 do pracy w funkcji woltomierza cyfrowego. Zapoznanie się z programową obsługą szeregowego interfejsu SPI do komunikacji mikrokontrolera LPC2148 z graficznym wyświetlaczem LCD ze sterownikiem PCD8544. Wykorzystanie czujnika położenia do realizacji funkcji obrotu obrazu wyświetlanego na wyświetlaczu graficznym LCD. 2. Wprowadzenie 2.1. Moduł ADC W mikrokontrolerach LPC2148 zaimplementowano dwa 10-bitowe przetworniki analogowocyfrowe o czasie konwersji 2.44ms (ok. 410kHz), które noszą nazwy AD0 i AD1. Wyposażono je w multipleksery analogowe (odpowiednio 6- lub 8-wejściowe) o dopuszczalnym zakresie napięć 0...+3 V. Wejścia analogowe są multipleksowane, tzn. w danej chwili tylko jedno z nich może być źródłem sygnału. Wybór aktywnego wejścia następuje poprzez ustawienie rejestru konfiguracyjnego ADnCR. Rejestr ADGSR ma budowę podobną do rejestru ADCR. Rejestr ADGSR umożliwia jednoczesne uruchamianie przetworników AD0 i AD1. Wyniki pomiarów są dostępne w rejestrze ADnDR0...7. Każdy kanał pomiarowy ma swój rejestr wyników pomiaru. W rejestrze ADnGDR jest zapisywany zarówno wynik pomiaru jak i numer kanału. Rejestr ADnSTAT zawiera informacje o statusie poszczególnych kanałów pomiarowych, tj, - bit sygnalizujący zgłoszenie przerwania przez ADC - sygnalizacja powstania błędu OVERUN podczas pomiaru - sygnalizacja zakończenia pomiaru – bit DONE Rejestr ADnINTEN pozwala na odblokowanie przerwań od poszczególnych kanałów pomiarowych. Rejestr kontrolny ADnCR (rysunek 1) pozwala na konfigurację przetwornika oraz wyznaczenie początku konwersji ADC. Rys. 1. Rejestry ADCR i ADGSR sterujące pracą przetwornika ADC Pierwszym krokiem w konfigurowaniu przetwornika jest ustawienie częstotliwości sygnału taktującego. Przetwornik jest taktowany sygnałem wytwarzanym z sygnału PCLK. 17 Częstotliwość PCLK w wyniku podziału musi być mniejsza niż 4.5MHz. Gdy nie jest możliwe dobranie dokładnej wartości można wybrać częstotliwość jak najbliżej wymaganej. Częstotliwość PCLK jest dzielona przez CLKDIV+1 dla uniknięcia dzielenia przez zero. Sygnał zegarowy taktujący przetwornik można zablokować przy użyciu rejestru PDN. Po zerowaniu przetwornik jest wyłączony, zatem oprócz podania sygnału zegarowego należy go wyłączyć, ustawiając 1 na tym bicie. Bity SEL pozwalają wybrać kanały, w których będą wykonywane pomiary. Każdy z kanałów ma w polu SEL przypisany jeden bit odpowiedzialny za jego aktywację. Włączenie trybu BURST wymaga ustawienia bitów CLKS. W tym trybie pracy przetwornik wykonuje ciągłe pomiary w kanale. Pole CLKS określa kompromis pomiędzy prędkością pomiarów wyrażoną w liczbie okresów zegara CLK przetwornika a dokładnością pomiaru w trybie BURST. Pole START pozwala zatrzymać lub rozpocząć konwersję. Użytkownik może spowodować, aby pomiar zapoczątkowało zbocze sygnału na wejściu zewnętrznym CAP0.0 lub CAP0.2 lub na wyjściu MAT0.1 MAT0.3, MAT1.0, MAT1.1. Przetwornik może mierzyć sygnał na wyprowadzeniach zewnętrznych, nawet gdy są skonfigurowane do pracy w trybie GPIO – co może obniżać dokładność przetwarzania. Wynik konwersji jest dostępny w polu RESULT rejestrów ADnDR0...7 oraz ADnGDR (w tym rejestrze wynik konwersji jest podawany wraz z numerem kanału). Po zakończeniu przetwarzania bit DONE zostaje ustawiony, co można wykorzystać do wygenerowania przerwania. Jeżeli po zakończeniu pomiaru wartość w polu RESULT nie zostanie odczytana, to zostaje ona utracona, gdyż przetwornik wykona kolejny pomiar i nadpisze ostatnio zmierzoną wartość w polu wynik. Fakt ten jest sygnalizowany ustawieniem bitu OVERRUN. Rys. 2. Rejestry ADGDR oraz ADDR0...7, z których można odczytać wyniki konwersji Przetwornik ADC może pracować w trybie odpytywania oraz w trybie przerwań. Konfiguracja przetwornika do pracy w pierwszym wymienionym trybie jest przedstawiona poniżej. 18 #include <lpc214x.h> int main(void) { unsigned val; PINSEL1 = 0x01000000; AD0CR = 0x00200402; while(1){ AD0CR |= 0x01000000; do { val = AD0DR1; } while ((val & 0x80000000) == 0); val = (val >> 6) & 0x3FF); // przetwornik ADO kanal AIN0.1 // 10-bitow, 3MHz // uruchom przetwarzanie //czekanie na koniec przetwarzania //wyluskaj wynik } } 2.2. Interfejs SPI w mikrokontrolerze LPC2148 Mikrokontroler LPC2148 wyposażono w dwa interfejsy SPI (SPI0, SPI1) zgodne ze standardem Serial Peripherial Interface. Mogą one pracować jako master lub slave w pełnym dupleksie (full duplex), a przesyłane dane mają programowaną długość od 8 do 16 bitów. W ramach ćwiczenia laboratoryjnego do współpracy z mikrokontrolera z wyświetlaczem graficznym będzie wykorzystany interfejs SPI0. Na poniższym rysunku przedstawiono możliwe formaty 8-bitowych danych używanych podczas transmisji z wykorzystaniem sprzętowego interfejsu SPI mikrokontrolera LPC2148. Rys. 3. Możliwe formaty danych przesyłanych interfejsem SPI0 Format przesyłanych danych jest określany przez bity CPOL i CPHA rejestru SPI Control Register. 19 Warstwa fizyczna interfejsu jest zbudowana z czterech linii: SCK0, SSEL0, MISO0 i MOSI0. Przebieg zegarowy na linii SCK0 jest używany do synchronizacji przesyłania danych. Źródłem sygnału SCK jest zawsze układ master, natomiast slave jest zawsze odbiornikiem SCK. Linie danych MISO0, MOSI0 są jednokierunkowe. Linią MOSI0 są przesyłane dane z układu master do układu slave. Linia MISO0 jest przeznaczona do przesyłania danych z układu slave do układu master. Linia SSEL0 służy do detekcji aktywnego układu slave. Jeżeli do układu master trzeba dołączyć kilka układów slave, to musi on sterować dodatkową liczbą linii SSEL w zależności od tego ile jest układów slave. W trakcie transmisji może być aktywna tylko jedna linia SSEL. Linia P0.7 w LPC2148 zaprogramowana jako SSL0 w trybie slave, musi przejść w stan niski przed rozpoczęciem transferu danych i pozostawać w tym stanie do jego zakończenia. Jeżeli w trakcie transmisji danych SSEL0 przejdzie w stan wysoki, to układ slave przechodzi w stan idle i transmisja zostaje przerwana. Gdy moduł SPI mikrokontrolera jest ustawiony w tryb master, to jego linia SSEL (P0.7) może być zaprogramowana jako wyjściowa (w trybie GPIO) do sterowania SSEL układu slave. Tryb master Programowanie tego trybu należy zacząć od zaprogramowania licznika SPI Counter Register poprzez określenie prędkości transmisji. W tym rejestrze musi być ustawiony bit MSTR oraz podany format transmisji: długość słowa danych (bity BitEnable oraz BITS), kolejność wysyłania bitów (bit LBSF) oraz zależność pomiędzy danymi i fazą sygnału zegarowego (bity CPHA, CPOL). Zapisanie danych do rejestru SPI Data Register rozpoczyna transmisję. Po zakończeniu przesyłania danych jest ustawiany bit SPIF w rejestrze SPI Status Register. Można również odczytać dane odebrane z SPI Data Register w sytuacji, gdy są do odczytania. Bit SPIF jest zerowany po odczytaniu SPI Status Register i wpisaniu nowej danej do SPI Data Register. Tryb slave Praca w tym trybie jest możliwa po wyzerowaniu bitu MSTR w rejestrze SPI Control Register. Podobnie jak w trybie master trzeba ustawić format przesyłanych danych oraz zależność pomiędzy danymi i fazą sygnału zegarowego. Dane przeznaczone do układu master są wpisywane do SPI Data Register. Wpisywanie jest możliwe przy wyzerowanym bicie SPIF. Natomiast dane są gotowe do odczytania gdy bit SPIF zostanie ustawiony. 2.3. Wyświetlacz graficzny ze sterownikiem PCD8544 Wykorzystywany w ćwiczeniu wyświetlacz graficzny (rysunek 1) jest wyposażony w sterownik PCD8544 i jest stosowany między innymi w telefonach komórkowych Nokia 5110/3310. Rys. 4. Wykorzystywana płytka z wyświetlaczem graficznym - widok z przodu oraz z tyłu (źródło: dokumentacja modułu modLCD1, www.kamami.pl) 20 Wyświetlacz jest przystosowany do stosowania w systemach zasilanych napięciem +3,3V. Matryca wyświetlacza ma wymiar 48 x 84 pikseli. W trybie graficznym można wyświetlić na niej 14 znaków w 6 liniach. Do sterowania matrycą LCD jest wykorzystywany sterownik PCD8544, którego schemat blokowy przedstawiono na poniższym rysunku. Rys. 5. Schemat blokowy sterownika PCD8544 Właściwości PCD8544: - sterownik matrycy monochromatycznej LCD 48 x 84 (48 wierszy, 84 kolumny) - wbudowana pamięć RAM 48 x 84 b (6 banków po 84 bajty) - wewnętrzny układ generowania napięcia zasilającego matrycę LCD - programowa regulacja kontrastu z programową kompensacją temperaturową - wbudowany wewnętrzny oscylator - szybki interfejs SPI (4 Mb/s) - napięcie zasilania układów logicznych (Vdd): 2,7...3,3 V - zakres temperatur pracy: -25...+70oC - brak wbudowanego generatora znaków W sterowniku oprócz standardowych linii interfejsu SPI (SDIN – dane wejściowe, SCLK – linia zegarowa) znajdują się dodatkowe linie: _______ - linia wybory układu SCE (odpowiednik chip select) linia D/C wyboru przeznaczenia wysyłanych danych: pamięć RAM wyświetlacza – rejestr danych ( D/C=1 ) lub rejestr sterujący ( D/C=0 ), - linia RES zerująca sterownik _______ _______ Transmisja rozpoczyna się od uaktywnienia linii SCE (stan niski). Dane z linii SDIN są wpisywane do rejestru sterownika przy narastającym zboczu zegara SCLK. Jest to istotna informacja, gdyż interfejsy SPI wbudowane w mikrokontrolery mogą pracować w kilku trybach. 21 Rys. 6. Przebiegi czasowe podczas przesyłania bajtu danych do wyświetlacza Rys. 7. Przebiegi czasowe podczas przesyłania kilku bajtów do wyświetlacza _______ Po wpisaniu pojedynczego bajtu, sygnał SCE staje się nieaktywny. Sterownik akceptuje _______ wpisywanie bloku bajtów z aktywnym SCE (bez konieczności przechodzenia w stan wysoki tej linii po każdym przesłanym bajcie). Przyspiesza to przesyłanie danych, ale może powodować przekłamania przy większych blokach i dużej prędkości transmisji. Każde _______ opadające zbocze SCE synchronizuje transmisję i jeżeli pojawiają się problemy, to należy zastosować sterowanie tą linia w sposób pokazany na rysunku 3. Zawartość pamięci RAM sterownika PCD8544 można modyfikować poleceniami zapisywania danych w momencie gdy linia D/C jest w stanie wysokim. Pamięć obrazu jest zgrupowana w 6 banków po 84 bajty. Taka organizacja wymusza logiczny podział pola wyświetlacza na 6 wierszy po 84 kolumny. Wiersze są numerowane od 0 do 5, kolumny od 0 do 83. Rys. 8. Organizacja pamięci RAM w sterowniku PCD8544 22 Podczas wpisywania danej do pamięci należy określić miejsce, w którym banku (zmienna Y) zostanie ona zapisana, a następnie podać numer bajtu w wierszu (zmienna X). Zapisanie całego banku odpowiada wyświetleniu jednego wiersza wyświetlacza. Każdy bajt pamięci RAM jest wyświetlany jako pionowy pasek o wysokości 8 pikseli. Najwyżej położony piksel w pasku odpowiada najmniej znaczącemu bitowi, a najniżej położony piksel odpowiada najbardziej znaczącemu bitowi bajtu pamięci. W standardowym trybie wyświetlania ustawienie bitu w bajcie pamięci odpowiada „zapaleniu” piksela, zaś wyzerowanie – „zgaszeniu”. Przy wpisywaniu bajtów do pamięci RAM sterownik wykonuje automatyczna inkrementację liczników wierszy i kolumn. Dostępne są dwa tryby automatycznego modyfikowania liczników: pionowy i poziomy. a) b) Rys. 9. Adresowanie pamięci obrazu: pionowe a), poziome b) Tryb pionowy – po każdym zapisaniu bajtu do pamięci zwiększa się stan licznika wierszy. Po osiągnięciu maksymalnego numeru wiersza licznik wierszy jest zerowany a licznik kolumn jest zwiększany o jeden. Wysłanie 6 bajtów 0xFF rozpoczynając od wiersza zerowego spowoduje wyświetlenie w pierwszej z lewej kolumny wyświetlacza pionowego paska przez całą wysokość wyświetlacza. Tryb adresowania pionowego jest stosowany przy wpisywaniu pełnoekranowej bitmapy. Tryb poziomy – po zapisaniu każdego bajtu jest zwiększany licznik kolumn. Po osiągnięciu maksymalnego numeru kolumny licznik kolumn jest zerowany a licznik wierszy zwiększany o jeden. Tryb adresowania poziomego jest stosowany do wyświetlania tekstu. Tryby adresowania można dowolnie przełączać w trakcie normalnej pracy wyświetlacza i nie ma to żadnego wpływu na prezentowana informację. Sterownik PCD8544 akceptuje dwa zestawy komend: standardowy i rozszerzony. Zestawienie komend oraz funkcje bitów znajdują się w poniższych tabelach. 23 Tab. 1. Komendy obsługiwane przez sterownik PCD8544 Komenda Function Set jest przeznaczona do ustawiania wyświetlacza w tryb obniżonego poboru energii, sposobu adresowania pamięci RAM i ustawianiu zestawu komend (normalny/rozszerzony). Komenda Set Vop jest przeznaczona do ustawiania kontrastu wyświetlacza, który zależy od napięcia zasilającego matrycę LCD. Można ustawić 128 wartości. Użyteczny zakres wynosi 30 ... 90. Komenda Temperature Control umożliwia ustawienie jednej z czterech predefiniowanych charakterystyk kompensacji temperaturowej kontrastu. Do większości zastosowań można stosować współczynnik 2 (TC = 1, TC0 = 0), zaś Bias jest zwykle równy 3. Tab. 2. Funkcje bitów 24 Po włączeniu zasilania sterownik PCD8544 wymaga sprzętowego zerowania. Odbywa się to _______ poprzez wymuszenie stanu niskiego na wyprowadzeniu RES przez minimum 100 ns. Ten stan musi wystąpić najpóźniej po 30 ms od włączenia zasilania. Niespełnienie tego warunku grozi uszkodzeniem matrycy wyświetlacza. 2.4. Obroty obrazu Jedną z często spotykanych funkcji w konsumenckich urządzeniach przenośnych jest możliwość obrotu obrazu w zależności od położenia urządzenia. Taki element można między innymi zrealizować za pomocą 6-kierunkowego czujnika położenia FC30. Jest czujnik MEMS, którego rozkład wyprowadzeń jest pokazany na poniższym rysunku. Rys. 10. Widok układu FC30 oraz opis wyprowadzeń Czujnik może być zasilany napięciem z przedziału 2.5 ... 3.6V. Komunikacja z układem nie wymaga zastosowania żadnego protokołu. W zależności od położenia na wyprowadzeniach PC, LC, SIGN pojawiają się odpowiednie stany logiczne. Kombinacja tych stanów określa jedną z sześciu pozycji. 25 Rys. 11. Położenia czujnika FC30 Rys. 12. Stan sygnałów w zależności od orientacji czujnika FC30 3. Stanowisko laboratoryjne 1. Komputer PC z zainstalowanym programem narzędziowym Keil uVision3 oraz programem ładującym Flash Magic. 2. Zestaw uruchomieniowy ZL9ARM z modułem dipARM z mikrokontrolerem LPC2148, graficznym wyświetlaczem LCD oraz modułem z czujnikiem położenia FC30. 26 4. Przebieg ćwiczenia Ćwiczenie jest planowane jako 4-godzinne i obejmuje: 1. Połączenie zestawu uruchomieniowego z komputerem PC za pomocą łącza RS-232. W zestawie ZL9ARM korzystamy z gniazda UART0. 2. Zapoznanie się z przykładowym programem realizującym obsługę wyświetlacza graficznego w trybie tekstowym i graficznym. Podłączenie mikrokontrolera LPC2148 z wyświetlaczem należy zrealizować według schematu: LPC2148 +3,3V 8 -LED P0.4 7 -SCLK P0.6 6 -SDIN P0.8 5 -D /C P0.9 4 -SCE P0.10 3 -RST 2 -GND 1 -VCC + 3,3V Moduł z wyświetlaczem musi być zasilany napięciem 3.3V. Podłączenie napięcia 5V może trwale uszkodzić moduł. 3. Konfigurację przetwornika ADC do pomiaru napięcia zadawanego za pomocą potencjometru umieszczonego na płytce uruchomieniowej. Wynik pomiaru powinien być widoczny na wyświetlaczu wraz z dodatkową grafiką. 4. Przygotowanie programu realizującego obroty obrazu (np. ramka, sześcian) zgodnie z aktualną orientacją czujnika położenia FC30. Moduł z czujnikiem musi być zasilany napięciem 3.3V. Podłączenie napięcia 5V może trwale uszkodzić moduł. Szczegóły odnośnie programów ustala prowadzący ćwiczenie. Wynikiem pracy grupy laboratoryjne są programy na mikrokontroler LPC2148. Wnioski i spostrzeżenia jakie nasunęły się podczas wykonywania ćwiczenia należy zamieścić w sprawozdaniu. 5. Wymagania BHP Warunkiem przystąpienia do realizacji ćwiczenia jest zapoznanie się z obowiązującą w laboratorium instrukcją BHP oraz przestrzeganie zasad w niej zawartych. Konieczne jest także zapoznanie z ogólnymi zasadami pracy przy stanowisku komputerowym. Instrukcje BHP powinny być podane studentom podczas pierwszych zajęć laboratoryjnych i dostępne do wglądu w laboratorium. 27 6. Sprawozdanie studenckie Sprawozdanie powinno zawierać: cel i zakres ćwiczenia, opis stanowiska badawczego, opis przebiegu ćwiczenia z wyszczególnieniem wykonywanych czynności, listing opracowanego programu komentarze i wnioski 28 Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki Instrukcja do zajęć laboratoryjnych Numer ćwiczenia: 3 Temat: Komunikacja z wykorzystaniem interfejsu USB Laboratorium z przedmiotu: Systemy wbudowane Kod: ES2C 202 202 Elektrotechnika – studia stacjonarne II stopnia, sem. II specjalność Automatyka Przemysłowa i Technika Mikroprocesorowa Opracował dr inż. Rafał Kociszewski Białystok 2014 29 1. Cel ćwiczenia • Zapoznanie się z podstawami komunikacji komputera PC z mikrokontrolerem LPC2148 za pomocą klasy HID interfejsu USB. 2. Wprowadzenie Interfejs USB (Universal Serial Bus) od pewnego czasu stał się jednym z podstawowych łączy szeregowych komputerów osobistych i przenośnych, zastępując wiele tradycyjnych portów standardowych i specjalizowanych. Jako łącze oferujące kilka rodzajów przekazywania danych (4 typy transferów) i szybkości transmisji, pozwala na podłączanie do komputera urządzeń peryferyjnych o różnych wymaganiach komunikacyjnych i sposobie obsługi. USB został zaprojektowany tak, aby każdy użytkownik komputera mógł z niego łatwo korzystać. Wykrywanie urządzenia w systemie, jego konfiguracja oraz instalacja sterowników urządzenia odbywają się automatycznie. Ze względu na dużą liczbę i zróżnicowanie pod względem zastosowań, urządzenia USB zostały pogrupowane w bardzo ogólne klasy. Podział ten jest oparty o wymogi dotyczące wymiany danych oraz zastosowanie. Przykładowo, klasa Audio jest tworzona przez urządzenia wymagające izochronicznej transmisji danych. W przypadku urządzeń zaliczanych do klasy HID, wymagania dotyczące transferu danych są znacznie mniejsze. Jeżeli urządzenia USB nie można zaklasyfikować do żadnej z istniejących klas, należy zdefiniować wtedy nową, odpowiednią do tego urządzenia klasę oraz stworzyć do niej sterownik. Wszystko musi się odbyć w zgodzie ze specyfikacją USB. Każde urządzenie USB musi przynależeć przynajmniej do jednej klasy. Tak, to nie błąd. Może należeć do kilku klas jednocześnie. Przykładem jest słuchawka telefonu podłączana do portu USB. Posiada ona właściwości zarówno urządzeń klasy HID, Audio oraz Telephony. Klasa HID jest jedną z klas urządzeń zdefiniowanych w standardzie USB. Do klasy HID zaliczane są urządzenia służące głównie do wprowadzania danych do systemu komputerowego. Do tej klasy urządzeń USB należą: klawiatury, myszki, przełączniki, przyciski, suwaki, joysticki, kierownice, pady, czytniki kodów kreskowych, termometry, itp. Urządzenie klasy HID komunikuje się ze sterownikiem klasy HID domyślnie przy pomocy potoku kontrolnego (Control pipe). Dodatkowo, do komunikacji można zdefiniować potok przerwaniowy (Interrupt pipe). Wykorzystanie w komunikacji potoku przerwaniowego spowoduje, że raporty od hosta USB do urządzenia USB będą przesyłane właśnie tym potokiem. Jeżeli nie zostanie zdefiniowany, wtedy raporty wychodzące (Output Reports) będą przesyłane potokiem kontrolnym przy pomocy żądania Set_Report(Output). Potok kontrolny jest wykorzystywany do: - odbierania i odpowiadania na zapytania dotyczące parametrów transmisji oraz typu podłączonego urządzenia; - transmisji danych z urządzenia USB w przypadku otrzymania żądania takiej transmisji (żądanie Get_Report) od sterownika USB; - przesyłania danych przez hosta USB do urządzenia USB. Potok przerwaniowy jest używany do: - przesyłania przez urządzenie USB do hosta USB danych asynchronicznych (czyli nie zostało wysłane do urządzenia USB żądanie Get_Report); 30 - transmisji danych, które muszą być przesłane z jak najmniejszym opóźnieniem, do urządzenia USB. Aby urządzenie USB było rozpoznawanie jako urządzenie klasy HID, niezbędne jest zdefiniowanie deskryptora HID. W deskryptorze urządzenia klasy HID jest zdefiniowana obecność i rozmiar innych deskryptorów, które dookreślają cechy urządzenia HID. Najczęściej definiowanymi dodatkowo deskryptorami są: Report descriptor - opisuje sposób organizacji przesyłanych danych, ich ilość oraz czego one dotyczą. Przykładowo może on opisywać pozycję kontrolera, albo stan przycisku. W nim są zawarte informacje na temat, tego czy pozycja kontrolera powinna zostać odbierana przez API myszki, czy też API joystika; Physical descriptor - zawiera informacje na temat części, która manipuluje urządzeniem HID. Deskryptory służące do opisu urządzeń należących do klasy HID można podzielić na dwie kategorie. Pierwsza z nich to deskryptory opisujące standardowe urządzenie USB: • • • • • Device descriptor – zawiera podstawowe informacje na temat urządzenia USB, np. klasa urządzenia USB, subklasa urządzenia USB, identyfikator producenta ( VID ), identyfikator produktu ( PID ), wersja; Configuration descriptor – zawiera informacje na temat konfiguracji urządzenia USB (np. sposobu zasilania, maksymalnego poboru prądu), oraz ilości wykorzystywanych przez nie interfejsów. Każdy ze zdefiniowanych interfejsów może działać niezależnie; Interface descriptor – zawiera informacje na temat konkretnego interfejsu wykorzystywanego przez urządzenie USB, tj jego klasy i subklasy , rodzaju protokołu, oraz ilości wykorzystywanych endpoint'ów; Endpoint descriptor – zawiera informacje na temat konkretnego endpoint'u, tj. jego numeru, kierunku przesyłanych danych, typu, maksymalnego rozmiaru pakietu jaki może zostać przez niego wysłany bądź odebrany; String descriptor – zawiera etykiety tekstowe, opisujące poszczególne pola i kolekcje danych. Ten deskryptor jest opcjonalny. Drugą kategorię tworzą deskryptory dedykowane klasie HID: HID descriptor – definiuje informacje charakterystyczne dla urządzenia HID, oraz typ i rozmiar deskryptorów podrzędnych, tj. Report descriptor'a, oraz Phisical descriptor'a; • Report descriptor – zawiera informacje na temat przesyłanych raportów, m.in. typu, rozmiaru, zakresu wartości; • Phisical descriptor – zawiera informacje na temat części ciała człowieka, która jest odpowiedzialna za interakcje z urządzeniem klasy HID Ten deskryptor jest opcjonalny. • Device descriptor dostarcza ogólnych informacji na temat urządzenia USB oraz jego konfiguracji. Urządzenie USB może posiadać tylko jeden Device descriptor. Jeżeli urządzenie USB zgodne ze specyfikacją USB 2.0 ( High Speed ) ma być również kompatybilne ze specyfikacją USB 1.1 ( Full Speed ), może okazać się konieczne (ale nie musi) zdefiniowanie dla trybu wolniejszego ( Full Speed ) odmiennych informacji na jego temat. Realizowane jest to poprzez zdefiniowanie deskryptora Device_qualifier descriptor. 31 Configuration descriptor dostarcza informacji na temat konfiguracji urządzenia USB. Urządzenie USB może posiadać kilka takich deskryptorów. W celu ich rozróżnienia każdy Configuration descriptor posiada przypisany mu unikalny indeks. Może przyjąć jedną z wartości z przedziału od 0 do N-1, gdzie N to liczba zdefiniowanych dla urządzenia USB Configuration descriptor'ów. Indeks deskryptora jest przechowywany przez pole bConfigurationValue. W każdym Configuration descriptor'rze zapisana jest liczba interfejsów (opisywanych przez Interface descriptor'y; musi być zdefiniowany przynajmniej jeden Interface descriptor ) wykorzystywanych w danej konfiguracji. Każdy z interfejsów może działać niezależnie. W przypadku zapytania hosta USB o Configuration descriptor, urządzenie USB musi odesłać w odpowiedzi oprócz Configuration descriptor'a wszystkie powiązane z nim Interface descriptor'y, Endpoint descriptor'y oraz deskryptory charakterystyczne dla danej klas urządzenia USB, bądź producenta. Interface descriptor służy do opisania konkretnego interfejsu wykorzystywanego w danej konfiguracji urządzenia USB. W skład każdej z konfiguracji musi wchodzić przynajmniej jeden interfejs, z kolei Interface descriptor zawiera informacje na temat ilości endpoint'ów, wykorzystywanych przez dany interfejs. Każdy interfejs może wykorzystywać jeden, bądź kilka niezależnych endpoint'ów. Interface descriptor'y są wysyłane do hosta USB jako część odpowiedzi na zapytanie o konkretną konfigurację urządzenia USB (są więc integralną częścią odpowiedniego Configuration descriptor'a ). Każdy endpoint, za wyjątkiem 0 (zwanego też kontrolnym), wykorzystywany przez interfejs USB posiada swój własny deskryptor. Deskryptory endpoint'ów zawsze są zwracane jako część odpowiedzi na zapytanie hosta USB - GetDescriptor(Configuration). W standardzie USB nie ma zdefiniowanego zapytania o Endpoint descriptor'a. Standardowy Endpoint descriptor dostarcza informacji na temat adresu definiowanego endpoint'a, typu transmisji, rodzaju synchronizacji przesyłania danych, przeznaczenia. Adres definiowanego endpoint'u przechowywany jest przez pole bEndpointAddress . Jest on zbudowany z numeru logicznego endpoint'a, który jest zakodowany na 4 najmłodszych bitach oraz flagi definiującej kierunek wymiany danych. Za określenie kierunku przepływu informacji odpowiada najstarszy bit. Ustawienie go na 1 informuje że dane są wysyłane przez endpoint'a do hosta USB. Jest on więc dla hosta USB endpoint'em wejściowym, tzw. IN endpoint. W przypadku wyzerowania flagi kierunku, dane wysyłane są przez hosta USB i odbierane przez definiowany endpoint . Flaga kierunku transmisji jest ignorowana dla endpoint'ów kontrolnych. HID descriptor jest charakterystyczny dla urządzeń typu HID. Jego głównym zadaniem jest określenie typów oraz rozmiarów deskryptorów podrzędnych (mianowicie Report descriptor'a oraz Physical descriptor'a). W odróżnieniu od pozostałych deskryptorów, Report descriptor nie ma struktury tabeli zawierającej ściśle określone pola. Nie można więc określić rozmiaru standardowego Report descriptor'a, ponieważ takowy nie istnieje. Zarówno zawartość jak i rozmiar tego deskryptora zależą od struktury raportów, którymi będą przesyłane dane z/do urządzenia typu HID. 32 Podstawową jednostką opisującą transmitowane dane jest Item. Zbiór item'ów tworzy natomiast Report descriptor'a. Report descriptor dostarcza informacji na temat transmitowanych danych. Dzięki tym informacją host USB może określić sposób obsługi danych oraz w jaki sposób powinny zostać użyte. Mikrokontroler LPC2148 jest wyposażony w kontroler USB zgodny ze specyfikacją 2.0 Full–speed. Kontroler posiada 2 kB podręcznej pamięci RAM (przeznaczonej na bufory Endopointów USB) oraz dodatkowo 8 kB RAM-u wykorzystywanego przy pomocy mechanizmu DMA. Kontroler urządzenia USB w LPC2148 posiada pięć wyprowadzeń: D+ oraz D– są właściwymi liniami transmisji danych USB, linia VBUS dostarcza kontrolerowi informacji o obecności napięcia 5 V (po stronie hosta), linia CONNECT oraz UP_LED dzielą jedno fizyczne wyprowadzenie. Rys. 1. Wyprowadzenia kontrolera USB w mikrokontrolerze LPC2148j . Linia CONNECT jest odpowiedzialna za funkcję „miękkiego”dołączania urządzenia do komputera nadrzędnego. Aby host rozpoczął proces enumeracji (negocjacji połączenia z urządzeniem) linia danych D+ musi być podciągnięta do napięcia zasilającego urządzenia poprzez rezystor 1,5 kΩ. W przeciwnym przypadku komputer nie zareaguje na fakt włożenia wtyczki do gniazda USB. Rozwiązanie to może być wykorzystane do zasymulowania przez urządzenie wyjęcia i włożenia wtyczki do gniazda hosta (a tym samym wymuszenie procesu enumeracji). Mechanizm ten jest wykorzystywany w przypadku, gdy urządzenie chciałoby zmienić swoją konfigurację USB lub nawet zmienić klasę, jaką eksponuje po podłączeniu do komputera. Jest to powszechnie stosowana praktyka np. w telefonach komórkowych, kiedy to telefon może służyć jako modem (klasa USB Communication Device Class), a po wybraniu odpowiedniej opcji z menu może być widoczny jako urządzenie składujące (Mass Storage). Przełączenie się z jednej klasy do drugiej może w tym przypadku nastąpić bez fizycznego odłączania urządzenia od hosta. Aplikacja dla komputera PC Wykorzystywana podczas zajęć laboratoryjnych aplikacja umożliwia zmianę stanu na liniach P1.16 ... P1.23. W zestawie uruchomieniowym do tych linii są podłączone diody LED. Efektem działania programu będzie zatem zapalanie/gaszenie diod. Oprogramowanie dla komputera PC jest dostępne w dwóch wersjach: napisane w środowisku Visual C++ (po stronie lewej) oraz w środowisku Delphi (po stronie prawej). 33 Rys. 2. Widok okna aplikacji dla komputera PC. Deskryptor urządzenia (Device Descriptor) zawiera takie informacje jak wersja standardu USB, numery identyfikujące producenta (Vendor) oraz urządzenie (Product). Te zostaną wykorzystane do połączenia się z urządzeniem USB z poziomu aplikacji uruchomionej na komputerze PC. Numerów tych w zasadzie nie należy modyfikować, gdyż VendorID (VID) jest nadawany członkom organizacji USB-IF (www.usb.org). Numer ProductID (PID) jest określany we własnym zakresie przez posiadacza numeru VID. Oczywiście do zastosowań prywatnych, czy też testów, można przypisać dowolne numery VID i PID, jednak absolutnie nie wolno tego robić w przypadku urządzeń wprowadzanych na rynek. W systemie może pracować kilka urządzeń o identycznych numerach VID i PID, więc nie ma potrzeby ich modyfikacji nawet, jeśli zamierzamy zbudować kilka urządzeń pełniących różne funkcje. Przy poprawnym podłączeniu płytki uruchomieniowej z załadowanym kodem wynikowym do LPC2148 w systemie Windows zostaną zainstalowane sterowniki testowanego urządzenia, które będzie „widoczne” w systemie jako: Human Interface Devices/HID-compilant device/ USB Human Interface Device. W aplikacji przygotowanej w Delphi w polach Vendor Name, Product Name, Serial Number oraz Interface pojawią się odpowiednio nazwy: NXP Semiconductors, Keil MCB2140 HID, DEMO, HID. 3. Stanowisko laboratoryjne Komputer PC z zainstalowanym programem narzędziowym Keil uVision3 oraz programem ładującym Flash Magic. Zestaw uruchomieniowy ZL9ARM z modułem dipARM z mikrokontrolerem LPC2148 oraz wyświetlaczem LCD i klawiaturą matrycową 4x4. 4. Przebieg ćwiczenia Ćwiczenie jest planowane jako 2-godzinne i obejmuje: Połączenie zestawu uruchomieniowego z komputerem PC za pomocą łącza RS232. W płytce ZL9ARM korzystamy z gniazda UART0. Połączenie zestawu uruchomieniowego z komputerem PC za pomocą przewodu USB A/B. 34 W płytce ZL9ARM korzystamy z gniazda USB typu B. Zworki JP19 oraz JP20 należy ustawić w pozycji 1-2. W ten sposób linie D+ (DP) oraz D- (DM) zostaną podłączone do portów P0.26 i P0.27 mikrokontrolera LPC2148. Zapoznanie się z gotowym projektem wykorzystującą klasę HID interfejsu USB przygotowaną na mikrokontroler serii LPC214x. Kompilację projektu, wgranie pliku wynikowego .hex do pamięci Flash mikrokontrolera i podłączenie płytki bazowej do komputera PC, a następnie przetestowanie działania aplikacji. Dokonanie modyfikacji projektu zgodnie ze wskazówkami prowadzącego ćwiczenie. Wynikiem pracy grupy laboratoryjnej są programy na mikrokontroler LPC2148. Wnioski i spostrzeżenia jakie nasunęły się podczas wykonywania ćwiczenia należy zamieścić w sprawozdaniu. 5. Wymagania BHP Warunkiem przystąpienia do realizacji ćwiczenia jest zapoznanie się z obowiązującą w laboratorium instrukcją BHP oraz przestrzeganie zasad w niej zawartych. Konieczne jest także zapoznanie z ogólnymi zasadami pracy przy stanowisku komputerowym. Instrukcje BHP powinny być podane studentom podczas pierwszych zajęć laboratoryjnych i dostępne do wglądu w laboratorium. 6. Sprawozdanie studenckie Sprawozdanie powinno zawierać: cel i zakres ćwiczenia, opis stanowiska badawczego, opis przebiegu ćwiczenia z wyszczególnieniem wykonywanych czynności, algorytm oraz listing opracowanego programu komentarze i wnioski 35 Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki Instrukcja do zajęć laboratoryjnych Numer ćwiczenia: 4 Temat: Bezprzewodowa transmisja danych z wykorzystaniem modułu Bluetooth Laboratorium z przedmiotu: Systemy wbudowane Kod: ES2C202 202 Elektrotechnika – studia stacjonarne II stopnia, sem. II specjalność Automatyka Przemysłowa i Technika Mikroprocesorowa Opracował dr inż. Rafał Kociszewski Białystok 2014 36 1. Cel ćwiczenia • • • • Zapoznanie się z konfiguracją i wykorzystaniem sprzętowych modułów UART oraz PWM zaimplementowanych w mikrokontrolerze LPC2148. Zapoznanie się z działaniem modułu Bluetooth BTM-222. Wykorzystanie modułu PWM do płynnego sterowania serwomechanizmem HS-422. Realizacja toru transmisji bezprzewodowej do zdalnego sterowania serwomechanizmem. 2. Wprowadzenie 2.1. Moduł UART Interfejsy szeregowe UART (Universal Asynchronous Receiver Transmitter) są standardowym wyposażeniem mikrokontrolerów rodziny LPC2000 i umożliwiają wymianę danych pomiędzy nadajnikiem i odbiornikiem za pomocą dwóch linii sygnałowych Tx i Rx oraz jednego przewodu łączącego potencjały odniesienia (masy). Na wyjściach linii transmisyjnych z mikrokontrolera występują poziomy logiczne zgodne ze standardem TTL-LV, czyli napięcia z zakresu 0...+3.3V. W przypadku komunikacji za pomocą UART z urządzeniami zewnętrznymi (np. komputer PC) konieczne jest dodanie konwertera napięciowego (np. MAX3232, MAX232 – rysunek 1) zgodnego ze standardem RS-232. 1 11 12 10 9 3 C1+ C1- T1IN R1OUT T2IN R2OUT T1OUT R1IN T2OUT R2IN MAX232 VS+ VS- C2+ C2- 4 5 14 13 7 8 2 6 Rys. 1. Układ MAX232 Typowa ramka danych przesyłana przez UART i schemat blokowy interfejsu RS-232 jest pokazany na rysunku 2. Rys. 2. Ramka danych, poziomy napięcia oraz schemat blokowy interfejsu RS232. Mikrokontroler LPC2148 ma dwa niezależne sterowniki transmisji szeregowej – UART0 i UART1. Do dalszego opisu wykorzystany będzie moduł UART0, którego struktura jest przedstawiona na poniższym rysunku. 37 Rys. 3. Struktura modułu UART0 Nowością wobec większości standardowych sterowników UART stosowanych w prostszych mikrokontrolerach jest obecność bufora FIFO o długości 16 bajtów, zarówno w nadajniku jak i odbiorniku. Rejestr U0RSR podczas odbierania danych jest wypełniany bit po bicie, na podstawie stanu linii RxD0. Gdy moduł UART0 otrzyma 8 bitów danych, wówczas skompletowany w rejestrze U0RSR bajt jest przekazywany do kolejki FIFO, w której przechowywany jest najwcześniej odebrany bajt. W przypadku, gdy w buforze wejściowym znajduje się więcej niż jeden bajt, odczyt rejestru U0RBR powoduje przesunięcie pozostałych bajtów znajdujących się w buforze tak, że drugi z kolei bajt trafia do U0RBR. Jeżeli rejestr ten nie zawiera nieodczytanego bajtu to bit 0 rejestru U0LSR ma wartość 0. Badanie stanu tego bitu pozwala stwierdzić, czy w buforze wejściowym znajduje się chociaż jeden nieoczytany bajt, który został odebrany przez łącze RS-232.Budowa bufora w nadajniku jest analogiczna. Przed wykorzystaniem modułu UART należy odpowiednio ustalić szybkość transmisji szeregowej. Dokonuje się tego za pomocą pary rejestrów U0DLM i U0DLL tworzących razem 16-bitową liczbę U0DLM:U0DLL. Zapis do tych rejestrów jest możliwy tylko wtedy, gdy bit nr 7 rejestru U0CLR ma wartość 1. Wpływ wartości tych rejestrów na szybkość transmisji jest następujący BAUDRATE = VPB clock 16 ⋅ Divisor value przy czym: BAUDRATE – uzyskana szybkość transmisji VPB clock – częstotliwość taktowania układów peryferyjnych (ustalana za pomocą rejestru VPBDIV) Divisor value – liczba 16-bitowa ustalana przez parę rejestrów U0DLM:U0DLL Mechanizm ustalania szybkości transmisji jest typowy i podobnie jak w przypadku większości mikrokontrolerów 8-bitowych dzielnik Divisor value musi być liczbą całkowitą. Powoduje to, że przy danej częstotliwości taktowania układów peryferyjnych (VPB clock) nie można w ogólnym przypadku uzyskać wszystkich żądanych szybkości transmisji. Są one obarczone pewnym błędem. 38 Przykładowa aplikacja wykorzystująca UART1 mikrokontrolera LPC2148 do wysyłania tekstu jest podana niżej. #include "lpc214x.h" #define baudrate 19200 // szybkosc transmisji #define baudratediv 15000000/(16*baudrate) // liczba przechowywana przez U1DLM i U1DLL [U0DLM:U1DLL] // odbior danych - jezeli bufor odbiorczy jest pusty // zwracamy 0 - chwilowo brak danych. W przeciwnym przypadku odczytujemy // dana i zwracamy jako wynik funkcji unsigned char uart1_recv(void) { if ((U1LSR & 0x01)==0) return 0; return U1RBR; // przechowuje najwczesniej odebrany bajt } // jezeli w RBR jest to kolejny odczytany powoduje // przesuniecie w kolejce wczesniejszego // wysyla 1 bajt void uart1_send_byte(unsigned char byte) { U1THR = byte; // przechowuje ostatnio zapisany bajt //w buforze nadawczym while(!(U1LSR & 0x20)); } // wysyla ciag znakow void uart1_send(const char *s) { while (*s) { uart1_send_byte(*s++); } } int main(void) { // konfiguracja (inicjalizacja) UART1; PINSEL0 |= 0x00050000; U1FCR = 0x01; // P0.8 - nadawanie TxD, P0.9 - odbieranie RxD // rejest sterujacy bufora FIFO // ustawienie predkosci transmisji U1LCR |= 0x80; U1DLL = baudratediv; U1DLM = 0; // umozliwienie zapisu do U1DLM i U1DLL // wartosc [U1DLM:U1DLL] U1LCR = 0x03; // 8 bitow danych, 1 bit stopu, bez kontroli parzystosci while(1){ uart1_send("*** test UART1 ***\r\n"); } } 39 2.3. Moduł PWM Mikrokontroler LPC2148 ma w swej strukturze sprzętowy moduł PWM, którego uproszczony schemat jest pokazany na poniższym rysunku. Rys. 4. Uproszczona struktura PWM mikrokontrolera LPC2148 Głównym elementem modułu PWM jest 32-bitowy układ licznikowy, który jest inkrementowany co PR+1 cykli magistrali VPB (PR jest wartością rejestru PWMPR, sterującego pracą preskalera). Aktualna wartość tego licznika jest przechowywana w rejestrze PWMTC. Licznik PWM współpracuje z zespołem przerzutników RS, służących do sterowania wyjściami PWM1...PWM6. Odpowiednie ustawianie i zerowanie tych przerzutników powoduje, że na tych wyjściach pojawiają się przebiegi PWM. Przerzutniki sterowane są za pomocą wewnętrznych sygnałów Match0...Match6, które są wytwarzane na podstawie porównania stanu licznika PWM (rejestru PWMTC) z wartościami rejestrów referencyjnych PWMMR0...PWMMR6. Aby zapobiec chwilowym zaburzeniom przebiegów PWM spowodowanych zapisaniem nowych danych do tych rejestrów każdy z nich wyposażono w rejestr zatrzaskowy Shadow Register. Nowa wartość każdego z rejestrów jest przepisywana do zatrzasku w momencie wystąpienia sygnału Match0. Aby mogło nastąpić zatrzaśnięcie, musi być zasygnalizowane wpisanie nowej wartości do jednego (lub kilku) z tych rejestrów. Odbywa się to poprzez ustawienie odpowiedniego bitu(lub kilku bitów) rejestru PWMLER. Od wartości rejestrów PWMMR1....PWMMR6 zależy wypełnienie generowanych przebiegów. Ich okres (taki sam dla wszystkich wyjść PWM) typowo jest zależny od wartości rejestru PWMMR0. Czasy trwania okresu i stanów wysokich poszczególnych przebiegów PWM wynoszą PWMNRn ( PWMPR + 1) 1 VPBfreq Moduł PWM mikrokontrolera LPC2148 może pracować w jednym z dwóch trybów wybieranych za pomocą bitów PWMSEL2...6 rejestru PWMPCR: Tryb kontroli położenia pojedynczego zbocza Sygnał Match0 powoduje ustawienie wszystkich przerzutników. Momenty wystąpienia sygnałów Match1...6 względem momentu zerowania licznika (za pomocą Match0) są zależne 40 od wartości rejestrów PWMMR1...6. W rezultacie na wszystkich aktywnych wyjściach PWM występują przebiegi prostokątne, których zbocze narastające występuje w tym samym momencie (Match0), położenie zbocza opadającego zaś jest indywidualnie kontrolowane za pomocą wartości rejestrów PWMPR1...6. Maksymalna liczba tak wytworzonych przebiegów wynosi 6. Rys. 5. Połączenie przerzutników RS w trybie kontroli położenia pojedynczego zbocza Przykładowa konfiguracja modułu PWM mikrokontrolera LPC2148 jest podana niżej. #include <lpc214x.h> #define Okres 60000 #define Krok 10 // wartosc wplywa na okres generowanego przebiegu // wartosc wplywa na wypelnienie int main (void) { // PINSEL - rejestr wyboru trybu pracy portu // wybrano kanal PWM5 PINSEL1 =(1<<10); // Zerowanie preskalera. PWMTC jest inkrementowany w kazdym cyklu magistrali VPB // Rozpoczecie zawsze od wartosci rownej zero PWMPR=0x00; // Odblokowanie wybranego kanalu PWM i ustawienie do pracy // w trybie kontroli pojedynczego zbocza PWMPCR=(1<<13); // PWMMRO - rejestr, w ktorym jest zawarty okres przebiegu // W trybie kontroli pojedynczego zbocza jest on taki sam dla // wszytskich aktywnych kanalow PWMMR0 = Okres; PWMMR5 = Okres/Krok; PWMMCR=0x02; //Reset PWMTC (licznika PWM) z PWMMR0 PWMLER=(1<<5); // Zatrzask dla wybranego kanalu PWM PWMTCR=0x02; // Reset PWMTC (licznika PWM) // Odblokowanie licznika, preskalera oraz odblokowanie modulu PWM PWMTCR=0x09; } 41 Tryb kontroli położenia obu zboczy Sygnał Match0 jest wykorzystany tylko do zerowania licznika PWM, sygnały Match1...6 sterują zaś parami momentami pojawienia się (względem momentu zerowania licznika) zarówno zboczy narastających jak i opadających. W tym trybie maksymalna liczba wytworzonych przebiegów PWM wynosi 3 (wyjścia PWM2, 4, 6). Rys. 6. Połączenie przerzutników RS w trybie kontroli położenia obu zboczy 2.4. Sterowanie serwomechanizmem Schemat blokowy serwomechanizmu jest pokazany na poniższym rysunku. Rys. 7. Schemat blokowy serwomechanizmu Silnik napędowy - silnik komutatorowy prądu stałego, pracujący w zakresie napięć od 4,8 do 6VDC. Pomimo niewielkich rozmiarów silnik taki wyróżnia się bardzo starannym wykonaniem i bardzo dużą sprawnością. Zastosowanie tego rodzaju silnika jest konieczne, ponieważ serwomechanizm musi pracować z dużą prędkością i jednocześnie wytwarzać duży moment obrotowy. 42 Przekładnia mechaniczna - zespół kółek zębatych wykonanych najczęściej z wysokiej jakości tworzywa sztucznego. Zadaniem przekładni jest redukcja wysokich obrotów silnika oraz zapewnienie dużego momentu obrotowego. Potencjometr - jest osadzony bezpośrednio na wale napędzającym mechanizmy wykonawcze. Napięcie na środkowej nóżce potencjometru jest proporcjonalne do kąta pod jakim aktualnie ustawione jest kółko sterujące mechanizmem wykonawczym. Układ elektroniczny - jego zadaniem jest porównanie napięcia otrzymywanego z potencjometru z napięciem otrzymanym po przetworzeniu informacji podanej na wejście układu i takie sterowanie kierunkiem obrotów silnika, aby te napięcia były równe. Jest to klasyczny przykład sprzężenia zwrotnego. W ćwiczeniu laboratoryjnym wykorzystywany jest serwomechanizm firmy HiTec o oznaczeniu HS-422, którego widok jest zamieszczony na rysunku 5. Rys. 8. Serwomechanizm HS-422 wykorzystywany w ćwiczeniu laboratoryjnym Dane techniczne serwomechanizmu HS-422 Napięcie działania: Prędkość działania (4,8V): Prędkość działania (6,0V): Moment zatrzymujący (4,8V): Moment zatrzymujący (6,0V): Wymiary: Masa: Zakres temperatur pracy: 4,8 ÷ 6,0 V 0,21 s / 60° bez obciążenia 0,16 s / 60° bez obciążenia 33 Ncm 41 Ncm 40,6 x 19,8 x 36,6 mm 45,5 g -20 ÷ +60 °C Pobór prądu (4,8V): 8,0 mA w stanie bezczynnym; 150 mA - działanie bez obciążenia Pobór prądu (6,0V): 8,8 mA w stanie bezczynnym; 180 mA - działanie bez obciążenia Typ łożyskowania: Typ przekładni: Napęd potencjometru: Typ silnika: dwie tuleje z prasowanego brązu, impregnowane olejem nylon pośredni 3 biegunowy/możliwość uzyskania pełnego obrotu Serwomechanizm posiada wyprowadzone trzy przewody. Czerwony i czarny to zasilanie (+5V i masa odpowiednio) oraz żółty (lub w niektórych serwomechanizmach pomarańczowy) to przewód sterujący. Obsługa serwomechanizmu w zakresie zmian kąta wychylenia jest bardzo prosta. Polega ona na podawaniu impulsu długości od 0.5 do 2.5ms. Przerwa między impulsami powinna wynosić od 10 do 20ms. Wartości wychyleń serwomechanizmu w zależności od długości impulsu można zobrazować jak na poniższym rysunku. 43 67.5o = 1.25ms 45o = 1ms 22.5o = 0.75ms 0o = 0.5ms 90o = 1.5ms 112.5o = 1.75ms 135o = 2.0ms 157.5o = 2.25ms 180o = 2.5ms Rys. 9. Wartości wychyleń ramienia otrzymane dla impulsów określonej długości Należy pamiętać, że szczególnie w tańszych serwomechanizmach pokazana wyżej reguła może znacznie się różnić. Jak widać z powyższego opisu sterowanie serwomechanizmem można bezpośrednio zrealizować wykorzystując moduł PWM pracujący w trybie kontroli pojedynczego zbocza. Utrzymanie ramienia serwomechanizmu w określonej pozycji można także zrealizować nie używając tego modułu. Wystarczy wówczas przez żądany czas utrzymywać stan wysoki i niski na dowolnej linii mikrokontrolera pracującej w trybie GPIO. Dodatkowych eksperymentów wymaga jedynie określenie liczby generowanych impulsów. Jednokrotny impuls nie jest w stanie ani wymusić zmiany położenia ramienia, ani nawet utrzymać go pod oczekiwanym kątem. 2.5. Moduł Bluetooth BTM-222 Jednym z popularnych rozwiązań do realizacji transmisji bezprzewodowej jest standard Bluetooth opisany specyfikacją IEEE 802.15.1. urządzenia Bluetooth klasyfikowane są do jednej z klas mocy nadawczej o zasięgu 100, 10 oraz 1 metra w otwartej przestrzeni. Do transmisji wykorzystywane są fale radiowe w paśmie 2,4 GHZ. W zależności od wersji, dostępne są różne maksymalne przepustowości łącza. Podstawową jednostka logiczną w technologii Bluetooth jest tzw. pikosieć, która zawiera węzeł nadrzędny oraz maksymalnie siedem węzłów podrzędnych. Dodatkowo oprócz siedmiu węzłów podrzędnych w jednej pikosieci może pracować do 255 węzłów, pozostających w stanie synchronizacji z urządzeniem nadrzędnym. Jest to tzw. tryb wyczekiwania i obniżonego poboru mocy. Urządzenia te nie uczestniczą w wymianie danych, ale mogą otrzymywać sygnał akwizycji od węzła nadrzędnego. Wymiana danych jest możliwa tylko między węzłem nadrzędnym i podrzędnym. Protokół Bluetooth zakłada, że posługujące się nim urządzenie wykorzystuje jeden z kilkudziesięciu profili. Opisują one typowe sposoby realizacji transmisji przeznaczone dla różnych klas urządzeń. Opisane w dalszej części moduł BTM-222 wykorzystuje profil wirtualnego portu szeregowego SSP (Serial Port profile). Port ten jest w pełni zgodny z RS-232. dzieki temo po skonfigurowaniu modułu i zestawieniu z nim połączenia Bluetooth dalsza transmisja odbywa się identycznie jak przy użyciu kabla RS-232. Moduły Bluetooth dostępne są w postaci miniaturowych modułów integrujących w sobie układ nadawczo-odbiorczy, mikrokontroler, interfejsy oraz inne niezbędne elementy. 44 W ćwiczeniu jest wykorzystywany moduł firmy Rayson BTM-222. Cechuje się on dobrą dokumentacją programowa oraz prostym sterowaniem poprzez interfejs UART. Rys. 10. Moduł BTM-222 Parametry BTM-222: • napięcia zasilania od 3,0 V do 3,6 V, • moc nadajnika do 18dBm, • brak wbudowanej anteny, • interfejsy UART, USB, PCM i SPI, • profil SPP (Serial Port Profile) i komendy AT, • wykonany w technologii bezołowiowej, • wymiary: 28,2 x15,0x2,8 mm, • dopuszczalny zakres temperatur pracy od -10°C do +70°C. Na rysunku 11 przedstawiono schemat blokowy modułu BTM-222. Układ BlueCore4-EXT firmy CSR integruje stos Bluetooth, 16-bitowy mikrokontroler RISC oraz układ radiowy. Wbudowany mikrokontroler posiada 48 kB pamięci RAM, taktowany jest z częstotliwością 16 MHz i spełnia rolę sterownika dla systemu Bluetooth. Do sterownika dołączona jest 8Mbitowa pamięć Flash, w której przechowywany jest stos protokołów Bluetooth oraz oprogramowanie firmware. Pozostałe bloki modułu składają się na fizyczny interfejs radiowy. Rys. 11. Schemat blokowy modułu BTM-222 45 W płytce z modułem dostępnym podczas zajęć laboratoryjnych została zastosowana antena TCA10FR-2400 na pasmo 2,4 GHZ. Rys. 12. Antena TCA10FR-2400 firmy TriCOM Antena ma małe wymiary (16x5x1,8 mm) i jest montowana w technologii powierzchniowej. Posiada równomierną charakterystykę dookólną i pasmo przenoszenia o szerokości 300 MHz a jej zysk kierunkowy wynosi maksymalnie 3dBi. Antena ta posiada bardzo dobre parametry ale wymaga specjalnie przygotowanego miejsca do montażu w obwodzie drukowanym. Antena musi być umieszczona na brzegu płytki, który musi być specjalnie wyprofilowany. Najprostszą metodą wykorzystania modułu BTM-222 w systemie mikroprocesorowym jest jego skonfigurowanie jako Slave z odpowiednimi parametrami transmisyjnymi. Po zestawieniu z systemem mikroprocesorowym połączenie jest nawiązywane np. ze zdalnego komputera PC, po czym moduł staje się przezroczysty dla przesyłanych danych. Możliwe jest skonfigurowanie modułu w taki sposób, aby po uruchomieniu automatycznie nawiązywał połączenie z wybranym urządzeniem. Sygnały RTS# i CTS# wykorzystywane są jedynie w przypadku konfiguracji transmisji ze sprzętowym potwierdzeniem odbioru. W przypadku transmisji bez sprzętowego potwierdzenia odbioru wykorzystywane są jedynie 2 linie transmisyjne: TXD i RXD. Wyprowadzenia CTS# i RTS# można pozostawić niepodłaczone. Fabrycznie BTM-222 jest skonfigurowany do współpracy z systemem mikroprocesorowym lub komputerem (poprzez interfejs RS-232 lub USB) z następującymi parametrami transmisji szeregowej: Prędkość transmisji: 19200 b/s Ilość bitów dla danych: 8 Kontrola parzystości: brak Ilość bitów stopu: 1 Kontrola przepływu: brak Parametry transmisji mogą być zmienione z wykorzystaniem dowolnego programu terminalowego. Zmiana parametrów polega na przesłaniu odpowiednich komend AT. Po połączeniu się z interfejsem wysyłamy tekst AT, a następnie potwierdzając poprzez ENTER. W odpowiedzi powinniśmy otrzymać: OK. Powyższa reakcja wskazuje na poprawność zainstalowania, konfiguracji oraz podłączenia urządzenia. Ustawienie interfejsu jako Master jest realizowane poprzez komendę ATR0. Ręczny tryb nawiązania połączenia natomiast poprzez ATO1. Komenda ATF? Powoduje wypisanie wszystkich wykrytych urządzeń Bluetooth, będących w zasięgu naszego interfejsu. Do ustalenia adresu urządzenia służy komenda ATD=xxxxxxxxxxxx, gdzie xxxxxxxxxxxx oznacza 12-znakowy adres urządzenia (podawany np. poprzez komende ATF? z pominięciem kresek). W wielu przypadkach wymagane jest aby po podłączeniu interfejsu automatycznie nawiązał on połączenie z wcześniej ustalonym urządzeniem, bez czasochłonnych konfiguracji. Służy do tego metoda automatycznego nawiązywania połączenia ustalana 46 komenda ATO0. Jeżeli interfejs został wcześniej zaprogramowany do pracy w tym trybie po podłączeniu do komputera (zasilania) automatycznie nawiązuje on połączenie z urządzeniem, którego adres został również wcześniej ustalony komendą ATD. Po zaprogramowaniu interfejsu do pracy w trybie automatycznego połączenia i ewentualnym ustawieniu odpowiednich parametrów transmisji, możemy zamknąć połączenie w terminalu i odłączyć interfejs. Po ponownym podłączeniu interfejsu do komputera automatycznie nawiązuje on połączenie z określonym wcześniej urządzeniem typu Slave i jest gotowy do transmisji danych z dowolnego programu (od strony programu interfejs będzie widoczny jak zwykły port szeregowy). Ważniejsze komendy sterujące AT: ATB? - Powoduje zwrócenie adresu interfejsu ATC - Włączenie lub wyłączenie sprzętowej kontroli przepływu dla łącza szeregowego (linie CTS/RTS) ATK - Wybór ilości bitów stopu ATL - Wybór prędkości transmisji ATM - Wybór trybu kontroli parzystości ATN - Umożliwia określenie nazwy interfejsu (widocznej w sieci Bluetooth) ATP - Umożliwia określenie numeru PIN interfejsu (wartość standardowa to 1234) ATQ - Włączenie lub wyłączenie informacji zwrotnych z interfejsu typu OK/ERROR oraz CONNECT/DISCONNECT (przy pracy w docelowym systemie warto wyłączyć tego typu informacje - dla zapewnienia pełnej „przezroczystości” łącza) ATZ0 - Ustawienie domyślnych parametrów interfejsu i jego wyresetowanie 3. Stanowisko laboratoryjne Komputer PC z zainstalowanym programem narzędziowym Keil uVision, Flash Magic oraz programem do wymiany danych za pomocą interfejsu RS-232. Zestaw uruchomieniowy ZL9ARM z modułem dipARM mikrokontrolerem LPC2148, wyświetlaczem LCD. Serwomechanizm HS-422, joystik 2-osiowy, moduł BTM-222, Oscyloskop cyfrowy. 4. Przebieg ćwiczenia Ćwiczenie jest planowane jako 4-godzinne i obejmuje: Połączenie zestawu uruchomieniowego z komputerem PC za pomocą łącza RS-232. W zestawie ZL9ARM korzystamy z gniazda UART0. Przygotowanie programów konfigurujących moduł UART0/1 mikrokontrolera LPC2148 i realizujących przesyłanie informacji (tekstu lub pojedynczych znaków) w kierunku: mikrokontroler <-> komputer PC. Do wysyłania znaków z komputera PC, jak i odbierania informacji z mikrokontrolera będzie wykorzystywany wskazany przez prowadzącego program terminalowy. Podłączenie modułu BTM-222 do komputera PC (poprzez płytkę uruchomieniową) i przetestowanie wybranych komend AT dla własnego modułu. Do nawiązanie połączenia z modułem BTM-222 z poziomu komputera PC należy wykorzystać wskazany przez prowadzącego program narzędziowy oraz moduł USB Bluetooth. 47 Przetestowanie przygotowanego wcześniej programu - komunikacja: mikrokontroler z podłączonym modułem BTM-222 <-> komputer PC. Konfigurację sprzętowego modułu PWM wbudowanego w mikrokontroler LPC2148 do realizacji zdalnego sterowania serwomechanizmem. Sterowanie serwomechanizmem powinno odbywać się z poziomu klawiatury komputera PC. Szczegóły odnośnie programów ustala prowadzący ćwiczenie. Wynikiem pracy grupy laboratoryjnej są programy na mikrokontroler LPC2148. Wnioski i spostrzeżenia jakie nasunęły się podczas wykonywania ćwiczenia należy zamieścić w sprawozdaniu. 5. Wymagania BHP Warunkiem przystąpienia do realizacji ćwiczenia jest zapoznanie się z obowiązującą w laboratorium instrukcją BHP oraz przestrzeganie zasad w niej zawartych. Konieczne jest także zapoznanie z ogólnymi zasadami pracy przy stanowisku komputerowym. Instrukcje BHP powinny być podane studentom podczas pierwszych zajęć laboratoryjnych i dostępne do wglądu w laboratorium. 6. Sprawozdanie studenckie Sprawozdanie powinno zawierać: cel i zakres ćwiczenia, opis stanowiska badawczego, opis przebiegu ćwiczenia z wyszczególnieniem wykonywanych czynności, algorytm oraz listing opracowanego programu komentarze i wnioski 48