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