Ć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’.

Podobne dokumenty