Komunikacja w mikrokontrolerach Laboratorium

Komunikacja w mikrokontrolerach Laboratorium Ćwiczenie 2 Magistrala UART Program ćwiczenia: konfiguracja transmisji danych między komputerem PC a mikr...
Author: Martyna Kania
12 downloads 4 Views 352KB Size
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