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. Wydział Elektroniki Mikrosystemów i Fotoniki dr inż. Piotr Markowski 2015
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: konfiguracji magistrali; wystawienia danych do wysłania (jeśli nadajemy); oczekiwania na zakończenie transmisji; odczytaniu otrzymanych danych (jeśli odbieramy). 1 dr inż. Piotr Markowski 2015
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 4 3 2 1 0 nr bitu RXCIE TXCIE UDRIE RXEN TXEN UCSZ2 RXB8 TXB8 UCSRB 0 0 0 0 0 0 0 0 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 4 3 2 1 0 nr bitu URSEL UMSEL UPM1 UPM0 USBS UCSZ1 UCSZ0 UCPOL UCSRC 1 0 0 0 0 1 1 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 14 13 12 11 10 9 8 nr bitu URSEL - - - bity UBRR [11:8] UBRRH 0 0 0 0 0 0 0 0 stan pocz. 7 6 5 4 3 2 1 0 nr bitu bity UBRR [7:0] UBRRL 0 0 0 0 0 0 0 0 stan pocz. 2 dr inż. Piotr Markowski 2015
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: f osc UBRR = 16 BAUD _ RATE 1, gdzie f osc = 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
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
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