Miernik częstotliwości/okresu oparty na mikrokontrolerze HCS12



Podobne dokumenty
Laboratorium Procesorów Sygnałowych

CW-HC08 Programowanie mikrokontrolera MC9S08QD4 [2]

dokument DOK wersja 1.0

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej

Instytut Teleinformatyki

MultiTool instrukcja użytkownika 2010 SFAR

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Ćwiczenia z S Komunikacja S z miernikiem parametrów sieci PAC 3200 za pośrednictwem protokołu Modbus/TCP.

AKADEMIA MORSKA KATEDRA NAWIGACJI TECHNICZEJ

Parametryzacja przetworników analogowocyfrowych

LabVIEW PLATFORMA EDUKACYJNA Lekcja 5 LabVIEW i Arduino konfiguracja środowiska i pierwszy program

Konfiguracja pakietu CrossStudio for MSP

Instrukcja instalacji oraz konfiguracji sterowników. MaxiEcu 2.0

Ćwiczenia z S S jako Profinet-IO Controller. FAQ Marzec 2012

Instrukcja do oprogramowania ENAP DEC-1

Instytut Teleinformatyki

Licznik rewersyjny MD100 rev. 2.48

2. Architektura mikrokontrolerów PIC16F8x... 13

Projektowanie z użyciem procesora programowego Nios II

Instrukcja instalacji oraz obsługi czytników i kart procesorowych dla Klientów SBI Banku BPH S.A.

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

1 Moduł Neuronu Cyfrowego SM

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

FAQ: /PL Data: 3/07/2013 Konfiguracja współpracy programów PC Access i Microsoft Excel ze sterownikiem S7-1200

Technika mikroprocesorowa. Konsola do gier

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

Konfigurowanie modułu BK9050 firmy Beckhoff wprowadzenie

OPTIMA PC v Program konfiguracyjny dla cyfrowych paneli domofonowy serii OPTIMA ELFON. Instrukcja obsługi. Rev 1

TV LCD LED Samsung seria UE**Fxxxx

Częstościomierz wysokiej rozdzielczości

NARZĘDZIE KONFIGURACYJNE VNX SETUP TOOL MODUŁÓW RODZINY VNX ADVANCED

1.1 Co to jest USBasp? Parametry techniczne Obsługiwane procesory Zawartość zestawu... 4

Product Update Funkcjonalność ADR dla przemienników Częstotliwości PowerFlex 750 oraz 525 6

Laboratorium Komputerowe Systemy Pomiarowe

CW-HC08 Programowanie mikrokontrolera MC9S08QD4

LITEcompLPC1114. Zestaw ewaluacyjny z mikrokontrolerem LPC1114 (Cortex-M0) Sponsorzy:

1. Opis aplikacji. 2. Przeprowadzanie pomiarów. 3. Tworzenie sprawozdania

1 Moduł Neuronu Cyfrowego

LOW ENERGY TIMER, BURTC

3. Sieć PLAN. 3.1 Adresowanie płyt głównych regulatora pco

Programator procesorów rodziny AVR AVR-T910

Politechnika Białostocka

SML3 październik

Electronic Infosystems

Tomasz Greszata - Koszalin

Laboratorium ASCOM COLT-2

PLUTO Sterownik bezpieczeństwa Skrócona Instrukcja obsługi oprogramowania. PlutoProgrammingManualPL_v7A.pdf 1

Instrukcja obsługi programatora AVR Prog USB v2

Instrukcja instalacji systemu. CardioScan 10, 11 i 12

ZL1MSP430 Zestaw startowy dla mikrokontrolerów MSP430F11xx/11xxA ZL1MSP430

1. Wprowadzenie Programowanie mikrokontrolerów Sprzęt i oprogramowanie... 33

LITEcomp. Zestaw uruchomieniowy z mikrokontrolerem ST7FLITE19

Programowanie mikrokontrolerów AVR

Tworzenie nowego projektu w asemblerze dla mikroprocesora z rodziny 8051

Szanowni Państwo. Należy przy tym pamiętać, że zmiana stawek VAT obejmie dwie czynności:

Instrukcja użytkowania

TwinCAT 3 konfiguracja i uruchomienie programu w języku ST lokalnie

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

1 Badanie aplikacji timera 555

Konfiguracja Połączenia

Ćwiczenie 23. Cyfrowe pomiary czasu i częstotliwości.

Konfiguracja i programowanie sterownika GE Fanuc VersaMax z modelem procesu przepływów i mieszania cieczy

Instrukcja obsługi programatora AVR Prog USB v2

Organizacja pamięci VRAM monitora znakowego. 1. Tryb pracy automatycznej

Instrukcja instalacji i obsługi modemu ED77 pod systemem operacyjnym Windows 98 SE (wydanie drugie)

Układy czasowo-licznikowe w systemach mikroprocesorowych

Spis treści. Opis urządzenia. Pierwsze użycie

PROGRAM TESTOWY LCWIN.EXE OPIS DZIAŁANIA I INSTRUKCJA UŻYTKOWNIKA

1. Opis. 2. Wymagania sprzętowe:

DOKUMENTACJA PROJEKTU

ĆWICZENIE 7. Wprowadzenie do funkcji specjalnych sterownika LOGO!

Programator STK500v2 USB

Ćwiczenie 23. Cyfrowe pomiary czasu i częstotliwości.

LABORATORIUM UKŁADÓW PROGRAMOWALNYCH. PROCESORY OSADZONE kod kursu: ETD 7211 SEMESTR ZIMOWY 2017

Wstęp Architektura... 13

5.2. Pierwsze kroki z bazami danych

Zastosowanie procesorów AVR firmy ATMEL w cyfrowych pomiarach częstotliwości

Instalacja PPPoE w systemie Windows XP za pomocą kreatora nowego połączenia sieciowego

Warsztaty AVR. Instalacja i konfiguracja środowiska Eclipse dla mikrokontrolerów AVR. Dariusz Wika

SigmaDSP - zestaw uruchomieniowy dla procesora ADAU1701. SigmaDSP - zestaw uruchomieniowy dla procesora ADAU1701.

1.Wstęp. 2.Generowanie systemu w EDK

Laboratorium Komputerowe Systemy Pomiarowe

Spis treści

Instytut Teleinformatyki

INSTRUKCJA OBSŁUGI microplc STEROWNIK INKUBATORA ver: F1.0

Ploter I-V instrukcja obsługi

Ćwiczenie 4: Eksploatacja systemu kontroli dostępu jednego Przejścia REGIONALNE CENTRUM EDUKACJI ZAWODOWEJ W BIŁGORAJU

Instrukcja użytkownika ARSoft-WZ1

Podstawy Elektroniki dla Elektrotechniki. Liczniki synchroniczne na przerzutnikach typu D

Zestaw uruchomieniowy z mikrokontrolerem LPC1114 i wbudowanym programatorem ISP

MultiBoot Instrukcja obsługi

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

Instrukcja instalacji nos niko w USB w bankowos ci Alior Banku

Instrukcja zgłaszania błędu

Projekt Komputerowych Systemów Sterowania Wymiana danych pomiędzy dwoma sterownikami Siemens S7-300 po sieci Profibus DP

INSTRUKCJA INSTALACJI DRUKARKI. (Dla Windows CP-D70DW/D707DW)

Instrukcja obsługi programatora AVR Prog USB v2

Ćwiczenie 5 Zegar czasu rzeczywistego na mikrokontrolerze AT90S8515

NIE WYŁACZANIE PROTOKOŁU TCP/IP POWODUJE ZNACZNE SPOWOLNIENIE DZIAŁANIA SIECI!!! PROSZĘ O TYM PAMIĘTAĆ!

Transkrypt:

KATEDRA INFORMATYKI Wydział EAIiE AGH Laboratorium Techniki Mikroprocesorowej Ćwiczenie 9 Miernik częstotliwości/okresu oparty na mikrokontrolerze HCS12 Opracował dr inż. Wojciech Zaborowski Kraków 2010

Cel ćwiczenia Celem ćwiczenia jest zapoznanie się ze sposobem programowania i możliwościami zastosowania mikrokontrolerów firmy Freescale, należących do rodziny HCS12, jako urządzeń pomiarowych na przykładzie miernika częstotliwości lub okresu. Wymagane wiadomości Budowa, sposób programowania mikrokomputerów jednoukładowych rodziny HCS12 ze szczególnym uwzględnieniem układu czasowo-licznikowego. Metody pomiaru częstotliwości i okresu. Znajomość programowania w języku C. Wykorzystywany sprzęt Komputer klasy PC z zainstalowanym oprogramowaniem CodeWarrior i nakładką Procesor Export, Zestaw laboratoryjny NI ELVIS II z oprogramowaniem. Płyta prototypowa PBMCUSLK Kompatybilny z PBMCUSLK moduł mikrokontrolera APS12C128 (z mikrokontrolerem Freescale MC9S12C128CFU25) Literatura [1] Freescale Semiconductors: MCU PROJECT BOARD STUDENT LEARNING KIT (PBMCUSLK) User Guide. Rev. 1. 07/2007. Dostępna w Internecie. [01.05.2010] : http://cache.freescale.com/files/student_learning_kits/doc/user_guide/pbmcus LKUG.pdf?fpsp=1 [2] Freescale Semiconductors: Application Module Student Learning Kit Featuring Freescale HCS12. 2006. Dostępna w Internecie [01.05.2010]: http://www.axman.com/files/aps12ug.pdf [3] Freescale Semiconductors: MC9S12C Family, MC9S12GC Family Reference Manual. Rev. 01.23, 05/2007. Dostępna w Internecie. [01.05.2010] : http://cache.freescale.com/files/microcontrollers/doc/data_sheet/mc9s12c128 V1.pdf?pspll=1 [4] Freescale Semiconductors: CPU12 Reference Manual.68HC12 and HCS12Microcontrollers. Rev. 4.0, 03/2005. Dostępna w Internecie. [01.05.2010] : http://cache.freescale.com/files/microcontrollers/doc/ref_manual/cpu12rm.pd f?fsrch=1 2

Przeprowadzenie ćwiczenia Stanowisko ćwiczeniowe składa się z urządzenia NI ELVIS II, płyty prototypowej PBMCUSLK wraz z wyposażeniem oraz komputera PC wykorzystywanego do programowania mikrokontrolera i sterowania pracą urządzenia NI ELVIS2. Urządzenie NI ELVIS II, płyta PBMCUSLK oraz moduł mikrokontrolera APS12C128 Są podłączone do komputera PC poprzez porty USB. Urządzenie ELVIS II jest wykorzystane, jako nośnik płyty PMBCUSLK oraz jako źródło sygnału, którego parametry czasowe mają być mierzone. Możliwy jest również podgląd na ekranie wirtualnego oscyloskopu parametrów generowanego sygnału. Do kontroli nastaw generatora funkcyjnego służy dostarczone oprogramowanie NI Elvis MX Function Generator oraz NI Elvis MX Oscilloscope. Wymagane połączenia: Wszystkie niezbędne do poprawnej pracy stanowiska połączenia zostały wcześniej wykonane. ZABRANIA SIĘ JAKIEJKOLWIEK INGERENCJI W KONFIGURACJE STANOWISKA!!! W przypadku wątpliwości należy sprawdzić, czy istnieją następujące połączenia wykonane przewodami: Złącze J2 wyjście FUNC_OUT powinno być połączone ze złączem MCU_PORT (J7) pin 50 (PT2/IOC2) oraz z wejściem ACH1+ złącza J2. Sygnał AGND złącza J2 powinien być połączony z sygnałem GND tego samego złącza. Programowanie mikrokontrolera będzie prowadzone z wykorzystaniem pakietu CodeWarrior IDE wersja 5.9. Część 1 Zapoznanie się ze środowiskiem Code Warrior IDE Uruchomić pakiet CodeWarrior IDE. Automatycznie powinno się pojawić okienko Startup (Rys. 1). Jeśli się nie pojawia, można je przywołać z menu poleceniem File Startup dialog. Rys. 1 Okno startowe Rys. 2 Pierwsza strona kreatora 3

Wybieramy opcję Create New Project. W pierwszym oknie wizarda (Rys. 2) wybieramy Dalej >. Rys. 3 Druga strona kreatora Rys. 4 Trzecia strona kreatora W drugim kroku (Rys. 3) wybieramy z listy procesor: MC9S12C128 i przycisk Dalej>. W trzecim kroku (Rys. 4) decydujemy się na język programowania (wybierając domyślny język C. Zawodowcom pozostawiamy do wyboru opcje Assembly). I naciskamy Dalej>. Rys. 5 Czwarta strona kreatora Rys. 6 Piąta strona kreatora W czwartym dialogu (Rys. 5) zaznaczamy chęć korzystania z narzędzia Procesor Expert i naciskamy Dalej>. W piątym kroku (Rys. 6) rezygnujemy z wsparcia dla systemu operacyjnego OSEKturbo zaznaczając opcję No i naciskamy Dalej>. W szóstym kroku (Rys. 7) rezygnujemy z wykorzystania PL-lint(TM) i naciskamy Dalej>. W siódmym kroku (Rys. 8) wybieramy opcję ANSI startup code. I oczywiście Dalej>.

Rys. 7 Szósta strona kreatora Rys. 8 Siódma strona kreatora W ósmym kroku (Rys. 9) rezygnujemy ze wsparcia liczb zmiennoprzecinkowych (nie będziemy z nich korzystać) i kontynuujemy naciskając Dalej >. W dziewiątym kroku (Rys. 10) zaznaczamy opcje Full Chip Simulation oraz P&E Multilink/Cyclone Pro. Na tym kończymy pracę z wizardem naciskając wreszcie Zakończ. Rys. 9 Ósma strona kreatora Rys. 10 Dziewiąta strona kreatora Po zakończeniu pracy wizarda pojawia nam się należące do pakietu Procesor Expert okienko wyboru rodzaju obudowy mikrokontrolera. Wybieramy opcję MC9S12C128CFU25 80-pins QFP i naciskamy OK. Po chwili pracy związanej z wygenerowaniem odpowiednich plików źródłowych i konfiguracyjnych projektu, pojawia się obszar roboczy aplikacji Freescale CodeWariorr IDE (Rys. 11) z otwartym na środku oknem konfiguracji rdzenia mikrokontrolera (CPU) Rys. 12.

Rys. 11 Obszar roboczy CodeWarrior IDE W pierwszej kolejności należy skonfigurować poprawnie układ generacji sygnału zegarowego, który musi być zgodny z aplikacją mikrokontrolera na płycie APS12C128, jeśli oczekujemy, ze mikrokontroler uruchomi się poprawnie. Zgodnie z dokumentacją modułu APS12C128 [2], układ taktowania kontrolera zbudowany jest w oparciu o zewnętrzny rezonator kwarcowy o częstotliwości 4 MHz. Zatem w ustawieniach zegara wybieramy układ pracy generatora kwarcowego w układzie Pierce a (opcja Pierce oscillator), oraz deklarujemy częstotliwość podłączonego rezonatora kwarcowego: 4MHz. Rdzeń procesora oraz wewnętrzne układy peryferyjne mogą pracować z inną, z reguły większą częstotliwością niż ta, wynikająca z dołączonego do mikrokontrolera rezonatora kwarcowego (większa częstotliwość pracy oznacza z reguły większą wydajność). Rdzeń HCS12 oraz wewnętrzne układy peryferyjne mogą pracować z częstotliwością do 25MHz. Możliwe jest to dzięki zastosowaniu w konstrukcji układu taktowania mikrokontrolera pętli synchronizacji fazowej (PLL). Układ PLL umożliwia w stosunkowo prosty sposób powielenie częstotliwości sygnału zegarowego, a wraz z dodatkowymi dzielnikami częstotliwości pozwala konfigurować w szerokim zakresie wewnętrzną częstotliwość taktowania mikrokontrolera. Konfiguracja tych opcji wymaga jednak szczegółowej znajomości budowy układu wytwarzania sygnałów zegarowych i związanych z nim rejestrów mikrokontrolera. W stosunkowo prosty sposób można tej konfiguracji dokonać z poziomu nakładki Procesor Expert. Wystarczy włączyć układ PLL i wybrać odpowiednią częstotliwość sygnału zegarowego. Poprawną konfiguracje 6

ustawień rdzenia procesora dla wewnętrznej częstotliwości taktowania wynoszącej 8MHz przedstawia Rys. 12. Rys. 12 Konfiguracja rdzenia mikrokontrolera Ze względu na dołączone do mikrokontrolera zewnętrzne układy peryferyjne zaleca się ustawienie częstotliwość pracy rdzenia (Internal bus clock) na 5 MHz. W zasadzie w tym momencie należałoby poleceniem File Save as projekt zapisać pod jakąś własną nazwą. Niestety dokonanie zapisu projektu pod inną nazwą nie przenosi automatycznie użytkownika do pracy nad nowym projektem. Najlepiej w tym miejscu zamknąć domyślny projekt i otworzyć projekt chwilę wcześniej zapisany pod własną nazwą. Po prawidłowym skonfigurowaniu rdzenia CPU dodajemy obsługę urządzeń peryferyjnych. Na początek zajmiemy się kontrolowaniem lampek LED1 LED4 na pycie modułu APS12C128 oraz lampek na LED1 LED4 na płycie bazowej PMBCUSLK. Zgodnie z dokumentacją [2], diody LED1 LED4 są podłączone do wyprowadzeń PB4 PB7 mikrokontrolera. Konfiguracji odpowiednich portów we/wy dokonamy w sposób podobny do konfiguracji rdzenia mikrokontrolera, wykorzystując mechanizm komponentów (Beans). 7

W prawym dolnym rogu ekranu aplikacji znajduje się okno Bean Selector. Jeśli w tym oknie nie jest wybrana zakładkę On-Chip Prph, to ją wybieramy i rozwijamy gałąź opisaną MC9S12C32_80 (selected target CPU). Interesować nas będą gałęzie I/O port B oraz I/O port P. Aby skonfigurować port B w sposób umożliwiający kontrolowanie podłączonych diod LED musimy wykonać następujące czynności: Na początek z rozwiniętej gałęzi I/O port B wybieramy kontrolkę BitsIO i dodajemy ją do naszego projektu. Następnie w oknie Bean Inspector w gałęzi Pins konfigurujemy ilość linii, które chcemy kontrolować (ustawiamy wartość 4). W gałęziach konfigurujących poszczególne piny wybieramy PB4.., PB5, PB6.., PB7. W opcji Direction ustawiamy Output, w gałęzi Initialization ustawiamy Init value 00001010B. Możemy oczywiście zmienić nazwę użytego komponentu BitsIO na inną (np. LEDs). Poprawną konfigurację kontrolki portu B można zobaczyć na Rys. 13. Rys. 13 Kontrolka konfiguracji portu B dla potrzk diodm LED1-LED4 Po zakończeniu konfiguracji stan projektu (widoczny w oknie po lewej) powinien wyglądać jak na Rys. 14 8

Rys. 14 Konfiguracja projektu po dodaniu kontrolki portu B Następnie przystępujemy do wygenerowania kodu i uruchomienia, tego co zostało zrobione. Z menu wybieramy polecenie Procesor Expert Generate Code. Po zakończeniu pracy Procesor Experta kompilujemy wygenerowany kod poleceniem Project Make. Po zakończeniu kompilacji poleceniem Project Debug (lub klawiszem skrótu F5) uruchamiamy Debuger (Ważne aby przy uruchamianiu debuggera aktywnym oknem było dowolne okno zawierające kod źródłowy wchodzący w skład projektu). Debugera można również uruchomić klikając w zaznaczoną czerwonym okręgiem na Rys. 14 ikonę. Powinno się otworzyć nowe okno zatytułowane True_Time Simulation & Real Time Debugger (Rys. 15). 9

Rys. 15 Okno debugera Jednocześnie zostaniemy zapytani czy zgadzamy się na wykasowanie zawartości pamięci mikrokontrolera Wybranie Yes powoduje wykasowanie zawartości pamięci FLASH mikrokontrolera i zaprogramowanie jej kodem powstałym jako efekt kompilacji naszego projektu. Po zaprogramowaniu pamięci możemy kontrolować działanie programu przy pomocy przycisków umieszczonych na pasku narzędziowym debugera. Jeśli za pomocą przycisku uruchomimy program, powinny zapalić się lampki oznaczone LED1 i LED3 znajdujące się płytce modułu mikrokontrolera. Konfiguracja I/O - Diody na płycie PBMCUSLK Postępując w sposób analogiczny do wcześniej opisanego skonfigurować odpowiednie porty w taki sposób, możliwe było sterowanie diodami LED1 LED4 znajdującymi się ma płycie PBMCUSLK. Diody te są kontrolowane przez wyprowadzenia PA0-PA3 (wyprowadzone na piny 33, 35, 37, 39 złącza MCU_PORT) mikrokontrolera. Dodatkowo aby je kontrolować, musi zostać odpowiednio ustawiona linia sterująca LED_EN 10

wyprowadzona na pin 34 złącza MCU_PORT płyty bazowej. Linia ta kontrolowana jest przez wyprowadzenie PP4 mikrokontrolera (sygnał LED_EN jest aktywny zerem). Zaprogramować MCU w celu weryfikacji poprawności wykonania zadania. I przejść do realizacji następnego punktu. Wykorzystanie układu czasowo licznikowego miganie diodami Do generacji okresowego sygnału zmieniającego stan diod wykorzystany zostanie kontrolka z grupy TIMER:RTI o nazwie TimerInt. Konfiguruje on układ czasowolicznikowy, w taki sposób by zgłaszał on cyklicznie, co ustalony interwał czasowy, przerwanie. Procedura obsługi tego przerwania zajmie się zmianą stanu lampek w taki sposób, aby uzyskać efekt ich migania. Zatem dodajemy wymieniony komponent. Możemy mu nadać nazwę TIMER. Konfigurację komponentu przedstawia Rys. 16. Rys. 16 Konfiguracja kontrolki TimerInt Tak skonfigurowany komponent TIMER będzie generował przerwanie co około 10ms. Zmiana stanu diod świecących w tak krótkim okresie czasu będzie niezauważalna. Aby uzyskać znacznie dłuższe czasy, po skonfigurowaniu komponentu należy jeszcze dodać procedurę obsługi przerwania generowanego przez nasz komponent. We wnętrzu obsługi umieszczony zostanie kod, który odpowiadał będzie za zmianę stanu lampek nie za każdym razem, kiedy będzie generowanie przerwanie, ale co setne jego wywołanie. W pierwszej kolejności uruchamiamy generację kodu do nowo skonfigurowanego komponentu. Następnie odszukujemy w oknie konfiguracji projektu (po lewej stronie) na zakładce Procesor Expert w gałęzi Beans komponent TIMER i rozwijamy jego właściwości. Klikamy dwa razy na nazwie TIMER_OnInterrupt. Otworzy się okno z wygenerowanym kodem źródłowym zawierającym między innymi pustą funkcję void TIMER_OnInterrupt(void) (UWAGA! Początkowa część nazwy, zakończona _ znak podkreślenia w omawianym przypadku TIMER jest zależna od nazwy 11

nadanej komponentowi obsługującemu układ czasowo-licznikowy. Jeśli użytkownik zachowa domyślną nazwę kontrolki lub nada jej inną, początek nazwy funkcji, w której należy umieścić procedurę obsługi będzie inny). We wnętrzu wymienionej wcześniej funkcji TIMER_OnInterrupt, lub funkcji o innej nazwie, wywoływanej w czasie obsługi przerwania pochodzącego od układu czasowo-licznikowego należy umieścić przykładowy kod znajdujący się na listingu poniżej: void TIMER_OnInterrupt(void) //ok. 100 razy na sekundę { static cnt; if(cnt == 50) // poczatek nazwy metody LEDs_ zmieniajacej stan // linii kontrolujacych swiecenie diod zalezy od //nazwy nadanej komponentowi kontrolującemu // linie we/wy do ktorych diody są podlaczone LEDs_PutVal(0b00000); //zapal wszystkie diody if(cnt >= 100) { LEDs_PutVal(0b11111); //zgas wszystkie diody cnt = 0; } cnt++; } Po wprowadzeniu zmian w kodzie przeprowadzić kompilację oraz zaprogramować mikrokontroler. Rozbudować przedstawiony przykład by uzyskać efekt migania lampek na płycie PBMCUSLK. Otrzymanym w wyniku rozbudowy kodem zaprogramować MCU. Rezultat przedstawić prowadzącemu. Wyświetlacz LCD Wyświetlacz LCD o organizacji 2x8 znajduje się na płycie PBMCUSLK i podłączony jest do mikrokontrolera poprzez sprzętowy interfejs SPI (zainteresowanych odsyłamy do schematu płyty PBMCUSLK). Mikrokontroler posiada wbudowany sprzętowy układ obsługi komunikacji SPI (o nazwie SPIV3 szczegółowy opis znajduje się w rozdziale 14 [3]). Aby z niego korzystać należy go najpierw odpowiednio skonfigurować i zainicjować. Wykorzystamy do tego celu kontrolkę Serial Chanel SPI: SynchroMaster. Należy ją dodać do projektu i skonfigurować według Rys. 17 (na zakładce Advanced). Po właściwym skonfigurowaniu kontrolki generujemy kod aplikacji zawierający nowo skonfigurowany element. Poprawna konfiguracja kontrolki SPI:SynchroMaster udostępnia nam funkcje SendChar. Następnie dołączamy bibliotekę zawierającą procedury obsługi wyświetlacza LCD. Odpowiednie pliki zostały załączone do materiałów. W tym celu w oknie konfiguracji projektu przechodzimy na zakładkę Files i rozwijamy gałąź User Module. A następnie 12

dodajemy (poleceniem z menu kontekstowego) do projektu plik nagłówkowy lcd.h oraz plik źródłowy biblioteki lcd.c. Oba pliki znajdują się w archiwum lcd_library.zip umieszczonym na pulpicie. Wszystkie funkcje wewnątrz biblioteki, z wyjątkiem funkcji LCDSend() działają poprawnie. LCDSend jest niskopoziomową funkcją odpowiedzialną za przesłanie danych do sterownika wyświetlacza. Jak wspomniano wcześniej, wyświetlacz jest podłączony do mikrokontrolera za pośrednictwem interfejsu SPI (na płycie PBMCUSLK znajduje się odpowiedni układ elektroniczny). Wykorzystując funkcję SendChar udostępnioną przez komponent SPI należy odpowiednio zmodyfikować (praktycznie stworzyć) funkcję LCDSend w taki sposób by wysyłała dane przez interfejs SPI do wyświetlacza. Należy pamiętać o dołączeniu odpowiedniego pliku nagłówkowego deklarującego funkcję SendChar w plikach definiujących procedury obsługi LCD. Rys. 17 Konfiguracja kontrolki SPI Synchro Master. 13

Test poprawności działania przeprowadzamy dodając do programu głównego, w odpowiednio oznaczonym miejscu wywołanie funkcji LCDInit(), która inicjalizuje wyświetlacz, oraz funkcji LCDPutString( LCD OK\n ), która powoduje wyświetlenie napisu na wyświetlaczu. Niestety biblioteka obsługi wyświetlacza nie dostarcza funkcji umożliwiających wyświetlanie zmiennych liczbowych. Przed wyświetleniem liczba musi zostać, w zależności od jej typu, skonwertowana na odpowiedni ciąg znaków (dla przypomnienia można do tego celu wykorzystać funkcję sprintf biblioteki stdio pamiętając oczywiście o dołączeniu tej biblioteki do projektu). Przygotowanie procedur realizujących taką konwersję w języku C jest zadaniem łatwym, i nie powinno stwarzać większych problemów. Możliwość wyświetlania zmiennych liczbowych będzie niezbędna do zrealizowania kolejnej części ćwiczenia. Przed przejściem do następnego etapu zaleca się przygotowanie i przetestowanie działania odpowiedniej funkcji. Bez niej nie będzie możliwości wyświetlenia wyniku pomiaru na wyświetlaczu LCD. Część 2 - Wykorzystanie układu czasowo licznikowego - pomiar okresu sygnału Przed rozpoczęciem tej części zadania należy zapoznać się z budową układu czasowolicznikowego (rozdział 15 MC9S12C Family Reference Manual [3]). W realizacji tej części ćwiczenia wykorzystywane są fragmenty kodu i konfiguracji projektu wykonywane w czasie realizacji części 1. Układ czasowo licznikowy w mikrokontrolerze MC9S12C128 składa się z 16 bitowego licznika, ośmiu 16-bitowych kanałów IC/OC, oraz 16-bitowego akumulatora. Akumulator może zostać wykorzystany m.in.. jako licznik zdarzeń zewnętrznych. Schemat układu przedstawiono na Rys. 18. Szczegółowe informacje na temat jego działania można znaleźć w rozdziale 15 [3]. Do pomiaru okresu sygnału wejściowego zostanie wykorzystany 16-bitowy licznik oraz kanał 2 IC/OC. Jako źródło sygnału, którego okres będzie mierzony, wykorzystany zostanie generator wbudowany w urządzenia NI ELVIS II. Sygnał z wyjścia tego generatora został podłączony bezpośrednio do wyprowadzenia PT2/IOC2 mikrokontrolera (sygnał jest dostępny na wyprowadzeniu 50 złącza J7 MCU_PORT). W związku z tym, należy zadbać by wartość maksymalna sygnału podawanego z generatora nie przekroczyła 5V. Do kontroli nastaw generatora służy aplikacja Function Generator (odpowiedni skrót znajduje się na pulpicie). Istnieje dodatkowo możliwość podglądu generowanego przebiegu z użyciem wbudowanego w urządzenie ELVIS II oscyloskopu (najlepiej zrobić to wykorzystując drugi kanał wirtualnego oscyloskopu trzeba go włączyć, a jako źródło sygnału wybrać z listy wejście AI 1). Nie wolno ustawiać na wirtualnym panelu generatora amplitudy większej niż 5Vpp oraz składowej stałej (DC Offset) o wartości nie większej niż połowa aktualnie ustawionej amplitudy (w tym przypadku 2.5V). 14

Poprawna konfiguracja układu czasowo-licznikowego jest dosyć skomplikowanym zabiegiem wymagającym szczegółowej znajomości budowy tej części mikrokontrolera. W celu ułatwienia tych czynności, procedura inicjalizacji zostanie wygenerowana z pomocą odpowiedniego komponentu z pakietu Procesor Expert. Natomiast oprogramowanie wszystkich pozostałych czynności związanych z przeprowadzeniem pomiaru należeć będą do studentów. W pierwszej kolejności należy usunąć z projektu komponent TIMER:RTI-TimerInt wykorzystującego układ czasowo-licznikowy oraz ewentualne inne komponenty, które układ czasowo-licznikowy lub wyprowadzenia z nim związane mogłyby wykorzystywać. W konfiguracji CPU zmienić częstotliwość wewnętrznego zegara (Internal bus clock) na 4MHz (dla tej częstotliwości możliwe jest uzyskanie taktowania układu TIM o takich parametrach, by mógł mierzyć okres z dokładnością do 1 us). Po zmianach w konfiguracji CPU konieczna może być zmiana ustawień innych komponentów - komponenty wymagające uwagi użytkownika zostaną oznaczone czerwonym wykrzyknikiem. Jak widać na Rys. 18, 16-bitowy licznik FRC (Free Running Counter zaznaczony na czerwono) jest taktowany sygnałem Bus Clock, Częstotliwość sygnału Bus Clock zależna jest od częstotliwości taktowania CPU. Częstotliwość może zostać zmniejszona w preskalerze. Dostępne stopnie podziału preskalera ograniczające się do kolejnych potęg liczby 2, redukują znacząco możliwości takiego skonfigurowania licznika FRC by zliczał on impulsy o częstotliwości będącej całkowitą wielokrotnością liczby 10. Aby uzyskać częstotliwość zliczanych przez FRC impulsów na poziomie 1MHz konieczne jest zatem ustawienie zegara CPU na wartość 4MHz oraz ustawienie preskalera na podział częstotliwości Bus Clock przez 4. Do właściwej inicjalizacji układu czasowo-licznikowego wykorzystany zostanie komponent TIM:InitTIM. Po dodaniu go do projektu, niezbędna jest oczywiście jego właściwa konfiguracja, zgodna z połączeniami zrealizowanymi na płycie i ustaloną wcześniej konfiguracją CPU. W gałęzi Settings Clock settings wybrać ustawienie Bus Clock/4 (w polu Frequency powinna się pojawić wartość 1000kHz) W gałęzi Settings Cannels należy dodać jeden nowy kanał. Rozwinie się dodatkowe poddrzewo umożliwiające konfigurację kanału wykorzystywanego do pomiaru okresu. Mierzony sygnał jest podawany na wejście PT2/IOC2 obsługiwany przez kanał TC2, zatem w sekcji Chanel Decise wybieramy TC2. W gałęzi Input Control wybieramy opcję Capture on rising edges only. Należy jeszcze aktywować odpowiednie wyprowadzenie (pin) powiązane z wybranym kanałem układu czasowo-licznikowego (przełączamy z Disabled na Enabled, reszta ustawia się automatycznie). Na koniec w gałęzi Initialization włączamy opcję inicjalizacji timera. Następnie generujemy kod aplikacji dla nowo skonfigurowanych peryferiów (Procesor Expert Generate Code). 15

Rys. 18 Budowa układu czasowo-licznikowego (zródło Freescale) Pozostaje do stworzenia główna część aplikacji odpowiedzialna za pomiar okresy i wyświetlenie wyniku na wyświetlaczu LCD. Uwaga!: Dla przyjętej konfiguracji CPU i pozostałych peryferiów, zakres mierzonych okresów odpowiada częstotliwościom od 25Hz do 200kHz (max 499kHz). Zasada pomiaru okresu jest bardzo prosta. Licznik FRC zlicza impulsy o częstotliwości 1 MHz. Każdy impuls oznacza, ze upłyną czas równy 1 μs. Wybrany kanał IC/OC konfigurujemy do pracy w trybie Input Capture (zostało to już zrobione na poziomie konfiguracji komponentu TIM:InitTIM), aby wykrywał kolejne wyłącznie narastające lub wyłącznie opadające zbocza sygnału wejściowego. Przy tak 16

skonfigurowanym kanale IC/OC, w momencie wykrycia zdarzenia (odpowiedniego zbocza), do rejestru TCx jest automatycznie zapisywana wartość licznika FRC. Ponadto jest ustawiany (przyjmuje wartość 1) odpowiedni bit CxF w rejestrze TFLG1. Wystarczy zapamiętać czasy pojawienia się dwóch kolejnych zboczy. Różnica tych czasów będzie okresem mierzonego sygnału. Algorytm działania może wyglądać następująco (przy założeniu, że wszystkie elementy mikrokontrolera zostały poprawnie skonfigurowane): 1. Wyzeruj odpowiedni znacznik CxF w rejestrze TFLG1 (zgodnie z dokumentacją zerowanie znacznika CxF następuje przy zapisaniu do niego wartości 1. Wówczas odpowiedni bit rejestru TFLG1 przyjmuje wartość 0). 2. Poczekaj, aż znacznik CxF się ustawi. 3.Zapamiętaj wartość rejestru TCx w zmiennej pomocniczej dla pierwszego zbocza i wyzeruj znacznik CxF 4. Poczekaj, aż znacznik CxF ponownie się ustawi. 5.Zapamiętaj wartość rejestru TCx w zmiennej pomocniczej dla drugiego i wyzeruj znacznik CxF 6. Oblicz różnice wartości dla drugiego i pierwszego zbocza. 7. Wypisz wynik pomiaru. Wszystkie nazwy rejestrów specjalnych jak TFLG1, T3C itp. oraz nazwy poszczególnych bitów (jak C2F lub TE), są zrozumiałe dla kompilatora. Zadanie dodatkowe 1 Zaproponować i zrealizować pomiar współczynnika wypełnienia sygnału prostokątnego (Rys. 19) T t T 1 Rys. 19 Definicja współczynnika wypełnienia Dla przypomnienia współczynnik wypełnienia definiuje się jako D=T1/T. Zakładamy, że częstotliwość oraz współczynnik wypełnienia mogą się zmieniać na tyle wolno, że pozostają one niezmienne w czasie co najmniej kilkunastu okresów (można dokonać dwóch po sobie następujących pomiarów z gwarancją, ze parametry sygnału nie zmienią się). Zadanie dodatkowe 2 Zaproponować metodę i zrealizować pomiar częstotliwości sygnału podawanego na jedno z wejść (najlepiej to wykorzystywane wcześniej) mikrokontrolera MC9S12C128. Celem zadania nie jest obliczenie częstotliwości na podstawie znajomości okresu sygnału. 17