1 Wprowadzenie 1.1 Taktowanie mikrokontrolera
Transkrypt
1 Wprowadzenie 1.1 Taktowanie mikrokontrolera
Białostocka Politechnika WYDZIAŁ ELEKTRYCZNY KATEDRA TELEKOMUNIKACJI I APARATURY ELEKTRONICZNEJ Instrukcja do zajęć laboratoryjnych Temat ćwiczenia: Sygnały zegarowe. Obsługa GPIO i przetwornika ADC Numer ćwiczenia: 2 Laboratorium z przedmiotu: Systemy mikroprocesorowe w zastosowaniach przemysłowych i sieciowych KOD: TS1C6 Opracowali: dr inż. Maciej Szumski dr inż. Krzysztof Konopko 2017 1 Wprowadzenie 1.1 Taktowanie mikrokontrolera - sygnały zegarowe Każdy synchroniczny system cyfrowy wymaga do poprawnej pracy odpowiednich sygnałów zegarowych. W najprostszym przypadku cały system może być taktowany z jednego źródła z tą samą częstotliwością. Jednak wraz ze wzrostem poziomu skomplikowania wymagane jest generowanie sygnałów zegarowych o różnych częstotliwościach. Mikrokontroler zastosowany w zestawie ZL29ARM [2] wyposażony jest w wiele peryferii komunikacyjnych, m. in. Ethernet, USB OTG, I2S itd. Wymusza to jednoczesne generowanie wielu przebiegów zegarowych o różnych częstotliwościach. Obsługa interfejsu Ethernet i USB wymaga dwóch różnych sygnałów zegarowych, odpowiednio 25 MHz i 48 MHz. Dodatkowo jeśli mikrokontroler ma wykorzystywać pełnię swoich możliwości, to potrzebny jest trzeci przebieg o częstotliwości 72 MHz. Rys. 1.1. Schemat układu taktowania procesora i peryferii [RM0008] Za dostarczenie do wszystkich układów odpowiedniego sygnału zegarowego odpowiada moduł Reset and Clock Control (RCC). Źródłem sygnałów taktujących mogą być: Low-Speed Internal (LSI) – wewnętrzny oscylator RC 40kHz, High-Speed Internal (HSI) – wewnętrzny oscylator RC 8MHz, Low-Speed External (LSE) – zewnętrzny rezonator kwarcowy 32.768kHz i High-Speed External (HSE) – zewnętrzny rezonator kwarcowy (w zestawie ZL29ARM [2] 10 MHz). W celu uzyskania odpowiednich sygnałów taktujących mikrokontroler STM32F107 ma wbudowane trzy układy PLL, które umożliwiają mnożenie wejściowego sygnału przez wiele współczynników. Do dyspozycji są również układy dzielenia sygnału oraz liczne multipleksery sygnałów zegarowych. Schemat bloku RCC (Reset and Clock Control) przedstawiono na rysunku 1.1. Poniżej została przedstawiona przykładowa funkcja konfigurująca zegary dostosowane do obsługi peryferii komunikacyjnych Ethernet i USB oraz ustawiająca główną częstotliwość taktowania mikrokontrolera na wartość równą 72 MHz. bool RCC_Config(void) { u16 StartUpCounter=0; uint32_t HSEStatus; ErrorStatus HSEStartUpStatus; /* reset ustawień RCC */ RCC_DeInit (); /* Wlacz HSE */ RCC_HSEConfig(RCC_HSE_ON); /* Odczekaj, aż HSE się uruchomi lub zostanie przekroczony dozwolony czas*/ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if (HSEStartUpStatus == SUCCESS){ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* zwłoka Flasha: 2 takty */ FLASH_SetLatency(FLASH_Latency_2); /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */ RCC_PCLK2Config(RCC_HCLK_Div1); /* PCLK1 = HCLK/2 */ RCC_PCLK1Config(RCC_HCLK_Div2); /* PREDIV2: PREDIV2CLK = HSE / 2 = 5 MHz */ RCC_PREDIV2Config(RCC_PREDIV2_Div2 ); /* PLL3: PLL3CLK = (HSE / 2) * 10 = 50 MHz */ RCC_PLL3Config(RCC_PLL3Mul_10); /* Włacz PLL3 */ RCC_PLL3Cmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLL3RDY) == RESET); /* MCO: MCO_OUT = PLL3 / 2 = 25 MHz*/ RCC_MCOConfig(RCC_MCO_PLL3CLK_Div2); /* PLL2: PLL2CLK = (HSE / 2) * 8 = 40 MHz */ RCC_PLL2Config(RCC_PLL2Mul_8); RCC_PLL2Cmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLL2RDY) == RESET); /* PREDIV1: PREDIV1CLK = PLL2 / 5 = 8 MHz */ RCC_PREDIV1Config(RCC_PREDIV1_Source_PLL2,RCC_PREDIV1_Div5); /* PLL: PLLCLK = PREDIV1 * 9 = 72 MHz */ RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9); /* Włacz PLL */ RCC_PLLCmd (ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); /* PLL zrodlem SYSCLK */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08); /* Zrodlo taktowania Ethernet dla ETH_MII - MCO = PLL3CLK / 2 = 25 MHz*/ RCC_MCOConfig(RCC_MCO_PLL3CLK_Div2); /* Zrodlo taktowania USB */ RCC_OTGFSCLKConfig(RCC_OTGFSCLKSource_PLLVCO_Div3); /* Właczenie taktowania ETHERNET i USB */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_ETH_MAC | RCC_AHBPeriph_ETH_MAC_Tx |RCC_AHBPeriph_ETH_MAC_Rx | RCC_AHBPeriph_OTG_FS,ENABLE); /* Włacznie taktowania GPIO */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE); return true; } return false; } 1.2 Obsługa peryferii dołączonych do portów mikrokontrolera Joystick Zestaw ZL29ARM wyposażono w 5-pozycyjny joystick. Każdy ze styków joysticka ma rezystor podciągający do napięcia zasilania. Styki joysticka dołączono do linii 5…9 portu PC. Rys. 1.2. Schemat dołączenia styków joysticka do linii 5…9 portu PC Wyświetlacz LCD Zestaw ZL29ARM wyposażono w złącze umożliwiające dołączenie do zestawu wyświetlacza LCD 2x16 znaków (LCD1602) z wbudowanym sterownikiem Hitachi HD44780. Na rysunku 1.3 pokazano sposób dołączenia linii sterujących wyświetlaczem do portu PE mikrokontrolera. Rys. 1.3. Schemat dołączenia linii sterujących wyświetlaczem LCD do portu PE mikrokontrolera HD44780 jest od wielu lat jednym z najpopularniejszych sterowników wyświetlaczy alfanumerycznych. Sterownik HD44780 posiada dwa rodzaje pamięci: pamięć generatora znaków (CGROM) oraz pamięć danych (DD RAM). Pamięć generatora znaków zawiera graficzną postać znaków wyświetlanych na wyświetlaczu. Oprócz znaków zdefiniowanych na stałe przez producenta sterownika do dyspozycji użytkownika pozostaje 8-znakowa pamięć RAM, w której można zdefiniować własne znaki (np. polskie znaki diakrytyczne). Komendy od danych odróżniane są na podstawie stanu linii RS (0 - komendy; 1 - dane). Natomiast kierunek transmisji ustala stan linii RW (1 - odczyt, 0 - zapis). W Tabeli 1.1 znajduje się zestawienie rozkazów kontrolera: Tab. 1.1. Zestawienie rozkazów kontrolera HD44780 Instrukcja Clear Display Return Home Entry Mode Set Display On/Off Control Cursor or Display Shift Function Set Set CGRAM Address Set DDRAM Address Read Busy Flag and Address Write Data to CG or DDRAM Read Data from CG or DDRAM DATA6 0 0 0 0 0 0 1 DATA5 0 0 0 0 0 1 Stan wejść DATA4 DATA3 DATA2 DATA1 0 0 0 0 0 0 0 1 0 0 1 I 0 1 D C 1 S R X D N F X Adres pamięci CG ROM Adres pamięci DD RAM RS 0 0 0 0 0 0 0 0 RW 0 0 0 0 0 0 0 0 DATA7 0 0 0 0 0 0 0 1 0 1 B 1 0 Zapisywany bajt danych 1 1 Odczytywany bajt danych DATA0 1 X S B X X Adres pamięci DD RAM Krótki opis poszczególnych rozkazów: Clear Display - (RS = 0, RW = 0, dane = 00000001) - instrukcja powoduje wyczyszczenie wyświetlacza poprzez wypełnienie go spacjami, ustawienie trybu zapisu danych od pozycji w lewym górnym rogu wyświetlacza oraz wyłączenie trybu przesuwania okna Return Home - (RS - 0, RW = 0, dane = 0000001x) - instrukcja powoduje ustawienie kursora na pozycji pierwszego znaku w pierwszej linii Entry Mode Set - (RS = 0; RW = 0, dane = 000001IS) - określenie trybu pracy kursora/okna wyświetlacza: dla S = 1 po zapisaniu znaku do wyświetlacza kursor nie zmienia położenia, natomiast przesuwa się cała zawartość wyświetlacza dla S = 0 po zapisaniu znaku do wyświetlacza kursor zmienia położenie, a przesuwanie okna jest wyłączone dla I = 1 kursor lub okno wyświetlacza przesuwa się w prawo (inkrementacja adresu znaku) dla I = 0 kursor lub okno wyświetlacza przesuwa się w lewo (dekrementacja adresu znaku) Display On/Off Control - (RS = 0, RW = 0, dane = 00001DCB) dla D = 1 - włączenie wyświetlacza dla D = 0 - wyłączenie wyświetlacza dla C = 1 - włączenie kursora dla C = 0 - wyłączenie kursora dla B = 1 - włączenie migania kursora dla B = 0 - wyłączenie migania kursora Cursor or Display Shift - (RS = 0, RW = 0, dane = 0001SRxx) dla S = 1 - przesuwana jest zawartość okna dla S = 0 - przesuwany jest kursor dla R = 1 - kierunek przesuwu w prawo dla R = 0 - kierunek przesuwu w lewo Function Set (RS= 0, RW = 0, dane = 001DNFxx) dla D = 1 - interfejs 8-bitowy dla D = 0 - interfejs 4-bitowy dla N = 1 - wyświetlacz dwuwierszowy dla N = 0 - wyświetlacz jednowierszowy dla F = 1 - matryca znaków 5*10 punktów dla F = 0 - matryca znaków 5*7punktów Set CGRAM Address - (RS= 0, RW = 0, dane = 01AAALLL) - ustawia adres pamięci generatora znaków. AAA - 3-bitowy adres znaku, LLL - 3-bitowy numer linii składającej się na graficzne odwzorowanie znaku. Set DDRAM Address - (RS = 0, RW = 0, dane = 1AAAAAAA) - ustawia adres pamięci wyświetlacza, pod który nastąpi zapis (bądź odczyt) danych. Read Busy Flag and Address - (RS = 0, RW = 1, dane = BAAAAAAA) - odczyt flagi zajętości i adresu pamięci wyświetlacza. B - flaga zajętości wyświetlacza, AAAAAAA - 7bitowy adres pamięci. Jezeli B = 1 to sterownik HD44780 jest w trakcie wewnętrznych operacji i jedyną dozwoloną czynnością są kolejne odczyty Read Busy Flagand Address. Write Data to CG or DDRAM - (RS = 1, RW = 0, dane = zapisywany bajt danych) - zapis danych do pamięci wyświetlacza, bądź pamięci CG RAM (jeśli poprzednio wydano komendę CG RAM set). Read Data from CG or DDRAM - (RS = 1, RW= 1, dane = odczytywany bajt danych) odczyt danych z pamięci wyświetlacza, bądź pamięci CG RAM (jeśli poprzednio wydano komendę CG RAM set). Wymagania czasowe w operacji zapisu i odczytu danych z układu LCD1602 przestawiono na rysunkach 1.4 i 1.5 Rys. 1.4. Wymagania czasowe w operacji zapisu do LCD1602. Rys. 1.5. Wymagania czasowe w operacji odczytu z LCD1602. 1.3 Odczyt i wykorzystanie wejścia analogowego Przetwornik analogowo – cyfrowy (analog-to-digital converter) ADC zamienia stosunek napięcia mierzonego do napięcia odniesienia Uref (reference voltage) na liczbę całkowita. Kluczowymi parametrami określającymi przetwornik ADC są: Czas przetwarzania, czyli maksymalny, niezbędny czas do wykonania jednego przetworzenia. Rozdzielczość (resolution), czyli liczba bitów na wyjściu przetwornika ADC. Można także określić rozdzielczość napięciową. Jeżeli przetwornik jest 12-bitowy, to dzieli cały zakres napięcia na 212 = 4096 równych części. Jeżeli ponadto Uref = 3.3V , to rozdzielczość napięciowa jest równa 3.3V/4096 = 0.80566mV. Energia rozpraszana, czyli tracona w czasie przetwarzania. Parametr szczególnie istotny w urządzeniach zasilanych bateryjnie, jak telefony komórkowe. W mikrokontrolerach ARM Cortex-M wbudowane są przetworniki 12–bitowe z sukcesywną aproksymacją (successive-approximation) SAR. Maksymalna częstotliwość taktowania to 14 MHz. Rysunek 1.6 zawiera schemat przetwornika ADC. Rys. 1.6. Schemat przetwornika analogowo - cyfrowego ADC Zestaw ZL29ARM wyposażono w potencjometr P2, który może zostać wykorzystany do podawania napięcia z zakresu 0...3,3 V na wejście przetwornika analogowo-cyfrowego mikrokontrolera STM32. Środkowe wyprowadzenie potencjometru dołączono do linii PB0. Rys. 1.7. Schemat dołączenia potencjometru do przetwornika analogowo - cyfrowego ADC 2 Cel i zakres ćwiczenia Celem ćwiczenia jest ugruntowanie wiedzy studentów oraz nabycie przez nich umiejętności z zakresu podstaw programowania mikroprocesorów. W ramach zajęć studenci nabywają umiejętności z zakresu: konfiguracji moduł RCC (Reset and Clock Control) dostarczającego sygnałów zegarowych, obsługi portów GPIO w tym odczytu położenia kontrolera sterującego, wizualizacji stanu pracy mikrokontrolera za pomocą diod LED i wyświetlacza LCD oraz zastosowania przetwornika analogowo-cyfrowego. Studenci zdobywają umiejętność tworzenia, uruchamiania i testowania oprogramowania mikrokontrolerów na przykładzie zestawu ZL29ARM z mikrokontrolerem STM32F107VCT6. Realizowanymi zadaniami w bieżącym ćwiczeniu jest obsługa podstawowych peryferii dostępnych w stosowanym, na ćwiczeniach laboratoryjnych, zestawie. 3 Zagadnienia do opracowania przed przystąpieniem do zajęć Przed przystąpieniem do zajęć należy opracować następujące zagadnienia: podstawowe parametry zestawu ZL29ARM [2] w tym rodzaje i sposób dołączania układów peryferyjnych, konfiguracja modułu RCC Reset and Clock Control [4], obsługa w języku C portów GPIO [1 (rozdz. 4.10)], sposób komunikacji oraz obsługę w języku C wyświetlacza LCD (LCD1602), obsługa w języku C dostępnego w zestawie przetwornika analogowo-cyfrowego [1 (rozdz. 16)]. 4 Przebieg ćwiczenia Ćwiczenia laboratoryjne prowadzone są w oparciu o zestaw ZL29ARM [2] umożliwiający realizację aplikacji dla mikrokontrolera STM32F107 (rodzina Connectivity Line). Obsługa portów GPIO [1 (rozdz. 4.10)]: a) zrealizować procedurę umożliwiającą odczyt stanu joysticka i sygnalizację jego położenia za pomocą diod LED (sposób wizualizacji określa prowadzący) (przykładowy program można znaleźć w [1 (rozdz. 4.11)]). Obsługa modułu RCC: b) z zastosowaniem przedstawionej w instrukcji konfiguracji modułu RCC [4] oraz prostej funkcji Delay() [1 (rozdz. 4.11.4)], napisać program zapalający w określonym czasie diody LED (sposób wizualizacji określa prowadzący). Obsługa wyświetlacza [1 (rozdz. 9)]: c) zrealizować procedurę wizualizującą na wyświetlaczu LCD stan joysticka (sposób wizualizacji określa prowadzący). Dodatkowe zadania przydzielone grupie przez prowadzącego: d) wykonać zestaw zadań przydzielony grupie przez prowadzącego. Realizacja zadań wymaga znajomości obsługi przetwornika analogowo-cyfrowego [1 (rozdz. 16)], portów GPIO oraz sposobu obsługi wyświetlacza LCD. Każde zrealizowane zadanie należy przedstawić prowadzącemu. 5 Opracowanie sprawozdania Przygotowane sprawozdanie z zajęć powinno zawierać opis przebiegu ćwiczenia laboratoryjnego w tym kody źródłowe procedur wraz z opisem i analizą działania. Sprawozdanie powinno też zawierać wnioski dotyczące realizacji poszczególnych punktów ćwiczenia laboratoryjnego. 6 Wymagania BHP W trakcie realizacji programu ćwiczenia należy przestrzegać zasad omówionych we wstępie do ćwiczeń, zawartych w: „Regulaminie porządkowym w laboratorium” oraz w „Instrukcji obsługi urządzeń elektronicznych znajdujących się w laboratorium z uwzględnieniem przepisów BHP”. Regulamin i instrukcja są dostępne w pomieszczeniu laboratoryjnym w widocznym miejscu. 7 1. 2. 3. 4. 5. 6. 7. 8. 9. Literatura Maciej Szumski - „Systemy Mikroprocesorowe w Sterowaniu. Część I. ARM Cortex-M3”, PLUM, 2016 Dokumentacja zestawu ZL29ARM: http://kamami.pl/dl/zl29arm.pdf STM32F107VC Datasheet: http://www.st.com/resource/en/datasheet/stm32f107vc.pdf, 2015 RM0008: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx advanced ARM®-based 32-bit MCUs: http://www.st.com/resource/en/reference_manual/cd00171190.pdf, 2015 PM0075: STM32F10xxx Flash memory microcontrollers: http://www.st.com/resource/en/reference_manual/cd00171190.pdf, 2012 PM0056: STM32F10xxx/20xxx/21xxx/L1xxxx Cortex-M3 programming manual: http://www.st.com/resource/en/programming_manual/cd00228163.pdf, 2013 STM32F105xx and STM32F107xx revision Z connectivity line device limitations: http://www.st.com/resource/en/errata_sheet/cd00238166.pdf, 2013 Krzysztof Paprocki, „Mikrokontrolery STM32 w praktyce”, BTC, 2011. Marek Galewski, „STM 32 : aplikacje i ćwiczenia w języku C”, BTC, 2011.