Instrukcja do laboratorium 2

Transkrypt

Instrukcja do laboratorium 2
Komunikacja w mikrokontrolerach
Laboratorium
Ćwiczenie 2
Magistrala UART
Program ćwiczenia:
konfiguracja transmisji danych między komputerem PC
a mikrokontrolerem przy użyciu magistrali UART.
Zagadnienia do przygotowania:
podstawy programowania mikrokontrolerów w języku C,
obsługa magistrali UART w mikrokontrolerach AVR,
licznik T/C1 w trybie pracy normalnym – obsługa,
konwerter analogowo-cyfrowy – obsługa.
Literatura:
[1] Wykład
[2] Dokumentacja mikrokontrolera ATmega8535, www.atmel.com.
[3] Mikrokontrolery AVR ATmega w praktyce, R. Baranowski, BTC 2005.
[4] AVR i ARM7. Programowanie mikrokontrolerów dla każdego, P.
Borkowski, Helion 2010.
[5] Mikrokontrolery AVR Język C. Podstawy programowania, M. Kardaś,
Atnel 2011.
dr inż. Piotr Markowski © 2015
Wydział Elektroniki Mikrosystemów i Fotoniki
Komunikacja w mikrokontrolerach
Zawartość instrukcji
1. Wstęp .................................................................................................................................................. 1
2. Magistrala UART.................................................................................................................................. 1
3. HyperTerminal..................................................................................................................................... 3
4. Układ scalony MAX232........................................................................................................................ 5
5. Licznik T/C1.......................................................................................................................................... 5
6. Konwerter analogowo-cyfrowy........................................................................................................... 5
7. Przykładowe zadania ........................................................................................................................... 5
UWAGA! Do poprawnej obsługi mikrokontrolera niezbędne jest korzystanie z jego dokumentacji.
Instrukcja zawiera pewne uproszczenia w stosunku do rzeczywistych możliwości mikrokontrolera
oraz języka C.
1. Wstęp
W trakcie ćwiczenia należy nawiązać połączenie między komputerem PC a mikrokontrolerem.
Następnie przesyłać pakiety danych w obu kierunkach. Danymi będą znaki alfanumeryczne (kod
ASCII) lub wyniki generowane przez urządzenia peryferyjne mikrokontrolera, takie jak liczniki,
konwerter analogowo-cyfrowy.
Do komunikacji zostanie wykorzystana magistrala RS232 komputera PC oraz odpowiadająca jej
magistrala UART mikrokontrolera. Należy pamiętać, że obie zasadniczo się różnią poziomami napięć
logicznych, dlatego konieczne jest zastosowanie scalonego konwertera napięć MAX232.
Programem obsługującym komunikację po stronie mikrokontrolera będzie HyperTerminal,
aplikacja znajdująca się w podstawowym pakiecie systemu Windows XP. Stworzenie programu
obsługi komunikacji po stronie mikrokontrolera będzie tematem ćwiczeń.
2. Magistrala UART
Magistrala UART jest magistrala szeregową. Komunikacja odbywa się za pośrednictwem dwóch
wyprowadzeń – RxD oraz TxD. TxD służy do wysyłania, RxD do odbioru danych. Są one połączone
krzyżowo, tzn. TxD_1 → RxD_2 oraz RxD_1 ← TxD_2. Z punktu widzenia mikrokontrolerów AVR
nawiązanie komunikacji wymaga:
•
•
•
•
1
konfiguracji magistrali;
wystawienia danych do wysłania (jeśli nadajemy);
oczekiwania na zakończenie transmisji;
odczytaniu otrzymanych danych (jeśli odbieramy).
dr inż. Piotr Markowski © 2015
Komunikacja w mikrokontrolerach
Magistrala UART w mikrokontrolerach AVR jest zaimplementowana w bardzo elastyczny sposób,
tzn. umożliwia dostosowanie do potrzeb użytkownika wielu detali (np. długość ramki danych, bity
stop oraz parzystości, praca synchroniczna, prędkość transmisji). W trakcie laboratorium będzie
wykorzystywana najbardziej podstawowa wersja ramki danych, co znacząco upraszcza konfigurację
magistrali.
2.1. Konfiguracja magistrali
Konfiguracja magistrali polega na odpowiednim ustawieniu rejestrów specjalnych UCSRA,
UCSRB, UCSRC, UBRRH, UBRRL.
Rejestr kontrolny UCSRA:
jest to głównie rejestr flag informacyjnych. Najprostsza, podstawowa konfiguracja magistrali nie
wymaga wpisu do tego rejestru. Pomijamy.
Rejestr kontrolny UCSRB:
umożliwia aktywację przerwań, zmianę rozmiaru ramki. W kontekście zajęć laboratoryjnych istotne są
tylko 2 bity (białe tło w tab. 1).
Tab. 1. Bity rejestru UCSRB
7
6
5
RXCIE TXCIE UDRIE
0
0
0
4
RXEN
0
3
TXEN
0
2
UCSZ2
0
1
RXB8
0
0
TXB8
0
nr bitu
UCSRB
stan pocz.
RXEN – aktywuje odbiornik UART (‘1’ jeśli chcemy odbierać dane).
TXEN – aktywuje nadajnik UART (‘1’ jeśli chcemy nadawać dane).
Rejestr kontrolny UCSRC (tab. 2):
głównie ustala szczegóły ramki danych. W kontekście laboratorium ustalamy warunki jak w opisie
poniżej.
Tab. 2. Bity rejestru UCSRC
7
6
5
URSEL UMSEL UPM1
1
0
0
4
UPM0
0
3
USBS
0
2
UCSZ1
1
1
UCSZ0
1
0
nr bitu
UCPOL UCSRC
0
stan pocz.
URSEL – umożliwia modyfikację rejestru UCSRC. Należy ustawić na ‘1’.
UMSEL – wybieramy pracę asynchroniczną (zob. opis rejestru w dokumentacji).
UPM1, UPM2 – wybieramy brak bitu parzystości (zob. opis rejestru w dokumentacji).
USBS – wybieramy 1 bit stopu (zob. opis rejestru w dokumentacji).
UCSZ1, UCSZ0 – wybieramy 8 bitów danych (zob. opis rejestru w dokumentacji).
UCPOL – wybór polaryzacji sygnału zegarowego, ustawiamy ‘0’.
Rejestr baud rate UBRR (UBRRH, UBRRL):
15
URSEL
0
14
0
13
0
7
6
5
0
0
0
2
12
0
11
0
4
3
bity UBRR [7:0]
0
0
10
9
bity UBRR [11:8]
0
0
8
0
2
1
0
0
0
0
nr bitu
UBRRH
stan pocz.
nr bitu
UBRRL
stan pocz.
dr inż. Piotr Markowski © 2015
Komunikacja w mikrokontrolerach
Wpisując wartość do tego rejestru ustalamy prędkość transmisji. Jest kilkanaście standardowych
wartości baud rate dla magistrali UART/RS232, np. 2400, 4800, 9600, 57600.
Należy zdecydować się na jakąś prędkość i dokonać przeliczenia zgodnie ze wzorem:
UBRR =
f osc
−1,
16 ⋅ BAUD _ RATE
gdzie fosc = 1 MHz, BAUD_RATE – wybrana prędkość transmisji.
Alternatywnie można skorzystać z tabel 69-72 z dokumentacji (s. 168-171) i odczytać wartość, którą
należy wpisać jako UBRR.
Magistrala jest gotowa do pracy. W momencie wpisania danych do rejestru nadawczego UDR
rozpocznie się transmisja. Należy czekać na zakończenie transmisji (kod przykładowy w podrozdziale
„Data Transmission – The USART Transmitter” dokumentacji) i obserwować okno dialogowe
programu HyperTerminal.
W przypadku odbioru danych, po konfiguracji magistrali należy oczekiwać na przesłane dane –
przykład pętli oczekującej można znaleźć w dokumentacji w podrozdziale „Data Reception – The
USART Receiver”.
3. HyperTerminal
HyperTerminal jest jednym z programów w prosty umożliwiających komunikację z wykorzystaniem
portów szeregowych COM komputera PC. Przy pierwszym uruchomieniu aplikacja może poprosić
o podanie „informacji o lokalizacji”, które nie maja znaczenia w kontekście komunikacji
mikrokontroler – PC. Po zatwierdzeniu przyciskiem OK pojawi się okno nowego połączenia (rys. 1).
Rys. 1. Tworzenie nowego połączenia w programie HyperTerminal.
Wybieramy ikonę telefonu (jak na rys. 1) i wpisujemy nazwę (dowolną) połączenia. W następnym
oknie wybieramy port COM, z którego chcemy korzystać (rys. 1). W kolejnym oknie ustalamy
parametry transmisji – konieczne identyczne jak zostały wybrane w rejestrze UCSRC (wybrana
prędkość, 8 bitów danych, brak bitu parzystości, 1 bit stopu) oraz wybieramy „sterowanie
przepływem: brak” (rys. 2). Ukaże się okno dialogowe, terminal jest gotowy do użycia. Makietę
laboratoryjną należy połączyć z wybranym portem komputera.
3
dr inż. Piotr Markowski © 2015
Komunikacja w mikrokontrolerach
Rys. 2. Tworzenie nowego połączenia w programie HyperTerminal.
Mikrokontroler wysyła/odbiera pakiety 8-bitowe, zatem liczby z zakresu 0 – 255. HyperTerminal
odbierane/wysyłane dane interpretuje jako znaki kodu ASCII. Na rys. 3 przedstawiono tablicę kodową
ASCII.
Rys. 3. Tablica kodów ASCII.
4
dr inż. Piotr Markowski © 2015
Komunikacja w mikrokontrolerach
4. Układ scalony MAX232
Układ scalony MAX232 służy do konwersji poziomów logicznych magistrali UART na
poziomy standardu RS232. Pin wyjściowy TxD mikrokontrolera należy połączyć z pinem TxD układu
MAX232. Analogicznie piny RxD.
5. Licznik T/C1
Dokładne informacje na temat pracy liczników zawiera dokumentacja mikrokontrolera [2] oraz
materiały z wykładu [1]. Na zajęciach laboratoryjnych wykorzystywany będzie tryb pracy normalny
lub CTC licznika T/C1. Licznik będzie pracował w trybie zliczania impulsów/odliczania czasu (nie w
trybie generowania przebiegu prostokątnego). W związku z tym w ustawieniach rejestrów sterujących
pracą licznika (TCCR1A, TCCR1B – s. 110 [2]) na bitach COM1xx, FOC1x, ICNC1 oraz ICES1
należy wpisać ‘0’. Bity WGM1x należy ustawić adekwatnie do wybranego trybu pracy.
W trakcie laboratorium będzie konieczna znajomość funkcji i sposobu użycia rejestru zliczającego
TCNT1 oraz rejestrów porównawczych OCR1A i OCR1B, a także rejestru odblokowującego
przerwania liczników (TIMSK). Wyczerpujące informację o wymienionych rejestrach można znaleźć
w literaturze do laboratorium [1-5].
6. Konwerter analogowo-cyfrowy
Dokładne informacje na temat pracy konwertera zawiera dokumentacja mikrokontrolera [2] oraz
materiały z wykładu [1]. Jako napięcie odniesienia należy wybrać pin AREF lub AVCC (na makiecie
są połączone elektrycznie). Konwerter może pracować w trybie „pojedyncza konwersja” (bit ADATE
w rejestrze ADCSRA = ‘0’) lub seria konwersji (free running, bit ADATE w rejestrze ADCSRA =
‘1’). Prescaler należy tak dobrać, aby po podziale częstotliwości 1 MHz taktującej mikrokontroler
otrzymać wartość z przedziału od 50 kHz do 200 kHz (zalecenia producenta).
W trakcie laboratorium będzie konieczna umiejętność uruchomienia konwertera i odczytania
wyniku konwersji.
7. Przykładowe zadania
a) skonfiguruj połączenie mikrokontroler AVR – komputer PC przy użyciu magistrali UART.
Wysyłaj i odbieraj pojedyncze bajty;
b) przy pomocy licznika T/C0 odlicz 50 impulsów zewnętrznych, doprowadzanych przez wejście T0;
c) przy pomocy licznika T/C1 odlicz czas 1 min;
d) uruchom konwerter analogowo-cyfrowy w trybie pojedynczej konwersji; konwersja sygnału
doprowadzonego do wejścia ADC5 ma się rozpoczynać każdorazowo po naciśnięciu przycisku
podłączonego na wejściu PA0;
e) napisz program konwertujący liczbę binarną na kod dziesiętny.
5
dr inż. Piotr Markowski © 2015

Podobne dokumenty