Ćwiczenie 1
Transkrypt
Ćwiczenie 1
Programowanie mikrokontrolera PIC18F8720 1 Ćwiczenie 4 Odczyt temperatury z wykorzystaniem protokołu I2C oraz transmisji szeregowej. 1. Cel ćwiczenia Podstawy programowania mikrokontrolera PIC18F8722 w języku C. Sterowanie portem szeregowym. Odczyt sygnału z czujnika temperatury z wykorzystaniem protokołu I2C. 2. Wymagania Realizacja ćwiczenia wymaga podstawowej znajomości mikrokontrolera PIC18F8722 oraz języka C. Ponadto przed rozpoczęciem realizacji ćwiczenia należy zapoznać się z następującymi dokumentami: [1] ‘PIC18F8722 Family.pdf’ – s.5 (Pin Diagram – PIC18F8722), 143-144 (Table 11-5, page141-142), Microchip Technology Inc., 2004 [2] C Compiler Reference Manual, CCS, 2005 [3] ‘czujnik temp TC74.pdf’ , Microchip Technology Inc., 2001 3. Programowanie odczytu temperatury 3.1. Wprowadzenie Komunikacja mikrokontrolera z czujnikiem temperatury następuje z wykorzystaniem protokołu I2C (poprzez dwa standardowe piny czujnika: sda i scl). Do obsługi I2C niezbędne jest umieszczenie dyrektywy ‘#pragma use i2c(options)’ z odpowiednio określonymi parametrami - options[1,2]. Do wyświetlenia bieżącej wartości może posłużyć standard RS232, do którego obsługi również niezbędne jest umieszczenie dyrektywy ‘#pragma use rs232(options)’. Nadawanie (8-bitowe) realizowane jest za pomocą pinu C6, zaś odbieranie informacji za pomocą pinu C7 mikrokontrolera. Zarówno do odczytu wartości 8-bitowych z czujnika (przy użyciu protokołu I2C) jak i do ich wyświetlenia na terminalu komputera PC (z wykorzystaniem transmisji szeregowej) najłatwiej jest użyć funkcje wbudowane. 3.2. Przebieg ćwiczenia a) Podłączenie stanowiska Podłączyć programator MPLAB ICD2 do komputera PC poprzez złącze USB. Podłączyć płytkę mikrokontrolera PIC18F8720 do programatora MPLAB ICD2 oraz do zasilania. b) Projekt Uruchomić środowisko MPLAB IDE. Utworzyć nowy projekt. W tym celu z menu środowiska IDE wybrać funkcję Project->Project Wizard uruchamiając kreator projektu. W kreatorze, w kolejnych krokach, wybierać: Programowanie mikrokontrolera PIC18F8720 - 2 Device: PIC18F8722 (wykorzystywany mikrokontroler), Active Toolsite: CCS C Compiler (kompilator języka C), Project Name, Project Directory (nazwa i folder z plikami projektu). c) Plik źródłowy Utworzyć plik z kodem źródłowym (File->New) i zapisać go (File->Save As) w folderze projektu. Plik powinien mieć nazwę z rozszerzeniem *.c. Dodać zapisany plik do projektu (Project->Add Files to Project). d) Kod źródłowy Otworzyć plik źródłowy w edytorze kodu źródłowego. Wpisać odpowiedni kod zgodnie z pkt 4.2. e) Ustawienia Sprawdzić prawidłowość ustawień bitów konfiguracyjnych (Configure->Configuration Bits), ustawienia pamięci bitów konfiguracyjnych (Programmer->Settings-> Memories-> Configuration) oraz ograniczyć obszar pamięci programu (Programmer->Settings-> Program->Menory). Szczegóły zostały omówione w pkt 3e ćwiczenia nr 1. f) Kompilacja W celu skompilowania projektu należy wywołać funkcję Project->Compile – ‘F10’. g) Programowanie Uruchomić procedurę programowania. W menu środowiska IDE Programmer->Select Programmer wybrać używany układ programatora MPLAB ICD2. Zaprogramować mikrokontroler wywołując funkcję Programmer->Program. Po zakończeniu procedury programowania układ MPLAB ICD2 zwalnia ‘reset’ mikrokontrolera i program zostaje uruchomiony. h) Sprawdzenie Sprawdzić działanie programu. Zapamiętać opisany wyżej cykl projektowania oprogramowania. W kolejnych ćwiczeniach cykl ten będzie wielokrotnie powtarzany. 4. Zadania do wykonania 4.1. Wprowadzenie Wyświetlanie bieżącej wartości temperatury powinno zostać wykonane przy użyciu terminala komputera PC. Program powinien zawierać zainicjowanie trybów pracy protokołu I2C oraz RS232 (przy pomocy dyrektyw), funkcję główną z deklaracjami potrzebnych zmiennych (należy pamiętać o 8-bitowym rozmiarze danych) oraz funkcjami wbudowanymi odpowiadającymi za: opóźnienia czasowe, odczyt danych z I2C, wyświetlenie danych na terminalu. 4.2. Przebieg ćwiczenia Pomoc w zakresie wykorzystywanych funkcji i elementów języka C uzyskać można w pliku pomocy kompilatora „PIC C Help” (skrót ‘F10’). Programowanie mikrokontrolera PIC18F8720 3 a) Opracować program odczytujący temperaturę z czujnika [3]: - Należy pamiętać o dodaniu dyrektywy (#fuses HS, NOWDT) w celu ustawienia bitów konfiguracyjnych. - Opracować algorytm odczytu przy pomocy protokołu I2C – wykorzystać funkcje wbudowane: i2c_start(), i2c_stop(), i2c_write(), i2c_read(). - Test zapisu do wybranego rejestru danych czujnika zrealizować zgodnie z ramką zapisu (‘Write Byte Format’) przedstawioną w dokumentacji PDF czujnika [3]. - Test odczytu zrealizować zgodnie z ramką odczytu (‘Read Byte Format’) przedstawioną w dokumentacji PDF czujnika [3]. - Odczyt rzeczywisty zrealizować zgodnie z ramką odbioru (‘Receive Byte Format’) przedstawioną w dokumentacji PDF czujnika [3]. - Kolejno (według ramki): wystartować proces odczytu, wpisać (‘i2c_write’) adres urządzenia (SMBus Slave Address – 7 bitów) + bit zapisu (write=’0’), wpisać (‘i2c_write’) numer rejestru jako komendę domyślną składającą się z samych zer, ponownie wystartować proces odczytu, wpisać (‘i2c_write’) adres urządzenia (SMBus Slave Address – 7 bitów) + bit odczytu (read=’1’), odczytać daną (‘i2c_read’) z wcześniej wybranego rejestru, zatrzymać odczyt. - Do wyświetlenia wyniku odczytu użyć funkcji printf(cstring, value). - Opóźnienia czasowe zrealizować za pomocą funkcji delay_ms(time). Przyjąć częstotliwość sygnału zegarowego równą 10 MHz. - Należy pamiętać o wpisaniu niezbędnych dyrektyw dotyczących obsługi I2C, RS232 oraz funkcji ‘delay’. - Do komunikacji użyć terminala systemowego lub programu ‘teraterm’. b) Zmodyfikować program z pkt ‘a’ tak, żeby przy pomocy transmisji szeregowej móc zmienić jednostkę i format wyświetlanego wyniku: - Naciśnięcie klawisza ‘k’ na klawiaturze PC ma spowodować zmianę formatu i jednostki wyświetlanego wyniku na stopnie Kelwina. Naciśnięcie klawisza ‘c’ na klawiaturze PC ma spowodować zmianę formatu i jednostki wyświetlanego wyniku na stopnie Celsjusza. - W tym celu wykorzystać funkcję kbhit() oraz getc(), odbierany znak przechowywać w zdeklarowanej wcześniej zmiennej. - Odczyt zrealizować zgodnie z ramką odbioru (‘Receive Byte Format’) przedstawioną w dokumentacji PDF czujnika [3] - Do komunikacji użyć terminala systemowego lub programu ‘teraterm’.