60
Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 1 ________________________________________________________________________ AUTOREFERAT Autor: dr inż. Bohdan Edward Borowik www.bel-borowik.com Miejsce pracy: Akademia Techniczno-Humanistyczna w Bielsku-Bialej Katedra Elektrotechniki i Automatyki Stanowisko: Adiunkt Spis treści Spis treści .................................................................................................................................... 1 Życiorys ....................................................................................................................................... 3 Wyksztalcenie ............................................................................................................................. 3 Zatrudnienie ............................................................................................................................... 3 Dzialalność pozanaukowa ......................................................................................................... 4 WSKAZANIA, KTÓRE PUBLIKACJE WCHODZĄ W SKLAD OSIĄGNIĘCIA, O KTÓRYM MOWA W ART. 16 W/W USTAWY WRAZ Z PODANIEM TYTULÓW TYCH PRAC .............................................................................................................................. 4 1. Wstęp ....................................................................................................................................... 5 2. Bariery w rozwoju oprogramowania dla WSN (Wireless Sensor Network) .................... 6 3. Cel i zakres pracy ................................................................................................................... 6 4. Elementy inteligentnej bezprzewodowej sieci czujników ................................................... 8 5. Wybór sensorów do sieci sensorycznej................................................................................. 9 6. Moduly RF .............................................................................................................................. 11

AUTOREFERAT Spis treści

  • Upload
    lydiep

  • View
    224

  • Download
    0

Embed Size (px)

Citation preview

Page 1: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 1

________________________________________________________________________

AUTOREFERAT

Autor: dr inż. Bohdan Edward Borowik www.bel-borowik.com

Miejsce pracy: Akademia Techniczno-Humanistyczna w Bielsku-Białej Katedra Elektrotechniki i Automatyki

Stanowisko: Adiunkt

Spis treści

Spis treści .................................................................................................................................... 1

Życiorys....................................................................................................................................... 3

Wykształcenie............................................................................................................................. 3

Zatrudnienie ............................................................................................................................... 3

Działalność pozanaukowa ......................................................................................................... 4

WSKAZANIA, KTÓRE PUBLIKACJE WCHODZ Ą W SKŁAD OSIĄGNIĘCIA,

O KTÓRYM MOWA W ART. 16 W/W USTAWY WRAZ Z PODANIEM TYTUŁÓW

TYCH PRAC.............................................................................................................................. 4

1. Wstęp....................................................................................................................................... 5

2. Bariery w rozwoju oprogramowania dla WSN (Wireless Sensor Network) .................... 6

3. Cel i zakres pracy................................................................................................................... 6

4. Elementy inteligentnej bezprzewodowej sieci czujników................................................... 8

5. Wybór sensorów do sieci sensorycznej................................................................................. 9

6. Moduły RF.............................................................................................................................. 11

Page 2: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 2

________________________________________________________________________ 7. Proponowany model .............................................................................................................. 13

8. Analiza pracy Koordynatora FFD Full Function Device, w oparciu o Dynamic Signal

Analyzer HP356555A................................................................................................................. 15

9. Wybrane zagadnienia akwizycji danych ............................................................................. 17

9.1. Konwersja analogowo - cyfrowa.................................................................................... 17

9.2. Próbkowanie.................................................................................................................... 20

9.3. Kwantyzacja wartości....................................................................................................20

9.4. Główne parametry przetworników ............................................................................... 21

10. Porównanie akcelerometrów czołowych producentów..................................................... 22

11. Sposoby przesyłu danych .................................................................................................... 23

11.1. Przesył sygnału analogowego ....................................................................................... 23

11.2. Przesył magistralą I²C ................................................................................................ 23

11.3. SPI (Serial Peripheral Interface) ................................................................................. 24

11.4. PWM (Pulse-Width Modulation) ................................................................................ 25

12. Budowa prototypu akcelerometrycznego systemu pomiarowego.................................... 26

12.1. Cechy modelu MMA7260Q akcelerometru ................................................................ 28

13. Prototypowy system akcelerometryczny............................................................................ 31

14. Schemat ideowy systemu Mikrokon6................................................................................. 33

14.1. Widok podzespołów ...................................................................................................... 35

15. Karta pamięci SD (Security Card) / MMC (Multi Media Card)........................................ 36

15.1. Komendy sterujące przez SPI ...................................................................................... 37

16. Opis programu systemu Mikrokon6 .................................................................................. 40

16.1. Algorytm programu.......................................................................................................... 40

16.2. Utworzony Kod źródłowy dla systemu akcerometrycznego Mikrokon6 .................... 40

Bibliografia ................................................................................................................................. 59

Page 3: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 3

________________________________________________________________________

Autoreferat podzielony jest na 16 rozdziałów części. Zawiera krótki życiorys autora w formie

zestawienia, wskazania, które publikacje wchodzą w skład osiągnięcia, o którym mowa w art.

16 w/w ustawy wraz z podaniem tytułów tych prac, a następnie opis monografii habilitacyjnej

z podziałem na podstawowe rozdziały. W następnej części podany jest szczegółowy opis dorobku

autora, jego publikacji i osiągnięć.

Życiorys

Wykształcenie

1972 – 1977 Studia na Politechniki Krakowskiej.

01.11.1984 Uzyskanie dyplomu CET, Certified Electronic Technician, ISCET, New York NYC-331

09.06.1984 Uzyskanie: FCC Licence, New York NYC PG-2-5929

1984 – 1985 Roczne studia w NRI National Radio Institute Washington DC.

Uzyskanie Certyfikatu: NRI

1981 – 1985 Studia Wyższe w CIE, Ohio, USA. Uzyskanie dyplomu: “Associate of Applied Science in Electronics Engineering Technology”.

1996 – 2001 Studia Doktoranckie, AGH, Temat pracy: „Algorytmy programowania równoległego w zastosowaniu do problemów teorii sterowania Uzyskany tytuł „ Doktor Nauk Technicznych w zakresie Automatyki i Robotyki”.

Zatrudnienie

1980 – 1986 Middlesex County College, Mill Rd Edison, N.J, USA, Konsultant, informatyk

2002 – 31.III.2009 „Bel”, Systemy komputerowe, konsultant

X.2004 – X.2011 Wykładowca w Państwowej Wyższej Szkole Zawodowej w Nowym Sączu

X.2004 – nadal Adiunkt w Katedrze Elektrotechniki i Automatyki Akademii Techniczno-Humanistycznej w Bielsku-Białej,

Podnoszenie kwalifikacji zawodowych

1984 - 85 Studia w Brookdale Community College, Lincroft, NJ oraz w Middlesex College, Zaliczenie with High Honor kursów: Fortran, C, Systemy komputerowe, Algorytmy i struktury danych, uzyskanie 15 kredytów.

Page 4: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 4

________________________________________________________________________

Działalno ść pozanaukowa .

09.2001 – 30.12.2004 Projektowanie elektronicznych edukacyjnych zestawów testujących dla Szkoły Elektroniki, przedstawiciel i administrator „ISCET” w Polsce (ISCET – International Society of Certified Electronics Technicians), E-learning Microcon Certyficate, www.borowik.info

1998 - XII.2005 Opracowanie, wdrożenie i serwis systemu komputerowego dla recyklingu odpadów dla firmy TUŚ – Zakopane.

1.05.1994 - 30.9.1994 Opracowanie programu bazy danych dla obsługi studium podyplomowego na Uczelni w Krakowie –

1987 – nadal Opracowanie, wdrożenie i serwis autorskiego bazodanowego programu komputerowego do wyliczania dodatków mieszkaniowych LOK w Skawinie, Krzeszowicach, Starachowicach, Zabierzowie, Zielonkach, Jordanowiei innych miastach

1.06.1992 – 30,02.1993 Przygotowanie projektu komputeryzacji Zawodów Sportowych „Uniwersiada’93” w Zakopanem.

Znajomość obcych języków Angielski - dobra Rosyjski - dobra

Wskazania, które publikacje wchodzą w skład osiągnięcia o którym mowa

w art. 16 w/w ustawy wraz z podaniem tytułów tych prac

Podstawą niniejszego Autoreferatu są następujące pozycje mojego autorstwa:

a) ” Interfacing PIC Microcontrollers to Peripheral Devices”, International Series on Intelligent Systems, Control and Engineering, vol. 49, Springer, 2011, monografia autorska, 166 str.

b) ”Bezprzewodowe Sieci Sensoryczne ZigBee” -cykl artykułów opublikowanych w latach

2006-2011. c) “Feasibility of the Using Zigbee Sensor Network for Measuring Vibration Parameters”,

monografia autorska, Oficyna druk. Zdz. Spyra, Kraków, 2010, 187 str.

d) Patenty z elektroniki (Cztery patenty złożone w Polsce, 1 uzyskany - Ukraina)

e) Główny wykonawca w Grancie nr 504 068638 / 2009, Sieci sensoryczne ZigBee do badań układów mechanicznych.

Page 5: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 5

________________________________________________________________________

1. Wstęp

Monografia stanowi syntezę wyników badań przeprowadzonych w latach 2008 – 2012 w zakresie zastosowania sieci sensorycznych. Zakres badań obejmował akwizycję danych podczas normalnej pracy maszyn. Badany był poziom wibracji podczas obróbki materiału. Przebadane zostało szereg sensorów różnorakich firm i wyniki tych badań były publikowane na konferencjach krajowych i zagranicznych, miedzy innymi na konferencji organizowanej przez Politechnikę Lwowską MSM’07 i publikowanych w „Вимірювальна техніка та метрологія”, pozycja 16 Borowik B., Borowik B.E., „Data acquisition made with microcontroller on the 1-Wire Line” // Вимірювальна техніка та метрологія (Technika Pomiarowa i Metrologia): Wyd. Politechniki Lwowskiej. – 2008. – Nr 68. – S. 35-42, na konferencji w Zakopanem, “Problemy Rozwoju Maszyn Roboczych”, Poznań, 2008, na konferencji IMECO we Florencji, patrz wykaz publikacji poz. [23 ]; Borowik B., “New approach to measuring vibration parameters of the remote objects with the ZigBee technique” //16th IMEKO TC4 Symposium Exploring New Frontiers of Instrumentation and Methods for Electrical and Electronic Measurements, Sept. 22-24, 2008, Florence, Italy, na konferencji GAMM 2009: Borowik. B., Wojnarowski J., “Applying the Zigbee technology for the enhancing the remote objects control”, 80 Annual Meeting International Association of Applied Mathematics and Mechanics (GAMM2009), Gdansk, University of Technology, February 9-13, 2009, a także przyjęte na konferencję NEET 2009: Borowik B., “Analyzing Tilt Accuracy of the Remote Objects Using ZigBee Communication Sensor”, przyjęte do druku w Proceedings of the International Conference NEET 2009 „New Electrical and Electronic Technologies and Their Industrial Implementation” (June 12-15, 2009, Zakopane, Poland), Lublin, Pub.: Lublin University of Technology. 2009.

Sieci bezprzewodowe sensoryczne stały się obecnie gorącym tematem i wyzwaniem napędzającym rozwój przyszłej technologii elektronicznej. Ta nowa technologia oferuje ogromne możliwości wykorzystania, w takich dziedzinach jak: środowisko ekologiczne, medycyna, wojsko, transport, przemysł rozrywkowy, a nawet działania antykryzysowe. Istotą WSN jest pozyskiwanie przez użytkowników informacji i danych z węzłów sensorycznych, zwanych motami (eng. Motes). Motek musi zawierać elementy zapewniające szereg zintegrowanych funkcji. Są to następujące elementy: czujnik, procesor wewnętrzny DSP do obróbki sygnału, moduł komunikacyjny RF trasceiver, aktuator, jak też element zasilający: baterię jonowo litową, lub wodorkową.

Zwykle sieć sensoryczna zawiera od kilku do kilku tysięcy takich węzłów, komunikujących się na kanałach radiowych, wymieniających informacje i kooperujących. Ze względu na lokalizację węzłów w miejscach trudnodostępnych i odległych, motki winny mieć niezależne zasilanie, zapewniające im długotrwałą pracę w granicach od 1 roku do kilku lat. Ze względu na to, że motki mogą być licznikami energii, przepływu paliwa, czy ciepła, ogniwo zasilające musi znajdować się w zaplombowanym boksie. Motki mogą być zrzucone na terenie wroga dla wykrywania promieniowania, wykrywania ludzi (czujniki infrared), do wykrywania gazów, oraz zaminowania.

Dane surowe pozyskiwane z czujników muszą być na miejscu, tzn. w motku, przetworzone przez procesor, aby niosły sensowne informacje potrzebne przykładowo do wygenerowania alarmu lub podejmowania decyzji, przy jednoczesnym minimalnym poborze energii. Projektanci i programiści tworzą odpowiednie aplikacyjne oprogramowanie dla różnych warstw i poziomów stosu WSN, jak warstwa komunikacji, warstwa sieciowa, warstwa fizyczna, warstwa MAC i warstwa aplikacji.

Charakter tworzonego kodu jest ściśle zależny od właściciela i producenta danej technologii, posiadającego własny autoryzowany bezprzewodowy stos (stack). Przykładowo, Microchip ma swój stos dla technologii ZigBee, inny niż stos firmy Freescale.

Page 6: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 6

________________________________________________________________________

2. Bariery w rozwoju oprogramowania dla WSN

Barierą w tworzeniu oprogramowania dla WSN jest zależność od platformy i systemu operacyjnego, a także tworzenie dla poszczególnych platform bibliotek API, co utrudnia kompatybilność i przenośność pomiędzy platformami różnych producentów. Przykładowo, przenośność kodu firmware z platformy TINI OS do ZigBee jest praktycznie niemożliwa.

Innym podejściem jest posługiwanie się symulacją platformy i symulacją sieci, ale i tu występuje konieczność przenoszenia kodu pomiędzy platformami. Zmusza to czołowe biura projektowe do pracowania na wysokim poziomie abstrakcji przy projektowaniu sieci sensorycznych. Jednak takie projektowanie wymaga bardzo dobrej orientacji w topologiach sieci i w możliwości ich konfiguracji. W takiej pracy należy opierać się na odpowiednich narzędziach software’owych do generowania kodu na różne platformy i do symulacji. Każdy producent mikrokontrolerów stara się zaspokoić takie potrzeby i zapewnić własny pakiet, w formie zintegrowanego środowiska programistycznego, zawierającego narzędzia do tworzenia kodu, symulator, emulator, programator, debuger, układ komunikacji z pamięcią flash mikrokontrolera, dający możliwość mapingu pamięci i jej weryfikacji. Przykładowo, Mikrochip posiada środowisko zintegrowane MPLAB, spełniające te funkcje dla swoich mikrokontrolerów PIC. Aplikacje mogą być tworzone w języku maszynowym, ale większy poziom kompatybilności zapewnia tworzenie ich w języku C.

Kompilator spełnia warunek portabilności, jeżeli zawiera biblioteki opisujące urządzenia, które chcemy oprogramować. Architektura programowanego mikroprocesora musi dokładnie odpowiadać użytemu kompilatorowi C. Innymi, dobrze rozwiniętymi środowiskami zintegrowanym IDE innych producentów, są np. AVR Studio dla platformy Atmel, czy CodeWarrior dla Freescale.

Wymienione zagadnienia są pierwszoplanowe i muszą być uwzględniane przy projektowaniu nowych urządzeń

3. Cel i zakres pracy

Tematem mojej pracy było zaproponowanie i zaprojektowanie układu sterującego dla piły taśmowej, wykorzystywanej w produkcji przemysłowej. Piła taśmowa SELECT – O – MAT 320 stosowana jest do cięcia profili metalowych. Siła nacisku przyporu zębów do przecinanego materiału jest regulowana przez układ hydrauliczny. Siła ta musi być zróżnicowana w zależności nie tylko od twardości przecinanego materiału, ale i od ilości zębów zaangażowanych w proces cięcia. Stosowanie nieodpowiedniej siły nacisku jest przyczyną niepożądanych zjawisk, do których należy wibracja, szybkie zużycie ostrza piły, a także złamanie zębów.

W pracy zbadałem możliwość zastosowania bezprzewodowej sieci czujników wibracji (WSN) do sterowania siłą nacisku przyporu zębów. Poniższy rysunek przedstawia schematycznie piłę w procesie cięcia, wraz z umiejscowieniem czujników.

Page 7: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 7

________________________________________________________________________

15 o

2

4

6

7

9

810

11

12

1

5

Borowik 2008

13

13

13

Rys. 1. Elementy i podzespoły piły podczas pracy: Mechanizm naciągu piły (1), Koło napinające (2), Imadło zaciskowe materiału (3), Prowadnice (4), Ostrze piły (5), Support prowadnicy (6), Cięty materiał (7), Układ hydrauliczny kontrolujący nacisk na materiał (8), Łożysko głowicy tnącej (9),

Koło napędowe (10), Korpus piły (11), Rama głowicy piły(12), Akcelerometry zbierające informacje o wibracji (13).

Dla akwizycji danych wykonano specjalny system procesorowy Mikrokon6, przedstawiony na rys. 2.

Rys. 2. System Mkrokon6 do akwizycji danych

Mass Storage Device SD Card

Page 8: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 8

________________________________________________________________________

4. Elementy inteligentnej bezprzewodowej sieci czujników

Analizując proponowaną bezprzewodową sieć czujników omówię następujące jej elementy:

1. Mikrokontrolery MCU

2. Czujniki

3. Moduły RF – transceivery pracujące wg protokołu ZigBee Ad 1. Mikrokontrolery

Proponowana sieć WSN oparta jest na mikrokontrolerach, które wnoszą inteligencję do nowych technologii.

Biorąc pod uwagę moje doświadczenie pracy z produktami firmy Microchip, proponuję jako mikrokontroler: 16 bitowy PIC24F, do którego atrybutów należą:

- Posiada on moduł SPI, jak też moduł USART

- Duży obszar pamięci programu

- Wiele portów We/Wy ogólnego przeznaczenia

- Wejścia/wyjścia analogowe i cyfrowe

- Port równoległy

- Komparator Analogowo Cyfrowy zintegrowany z układem

- Moduł SPI (Interfejs szeregowy do transmisji synchronicznej)

W Monografii: Borowik B., „Interfacing PIC Microcontrollers to Peripherial Devices”,

Springer Verlag, 2011, Science and Engineering - opisane zostały aplikacje z 8-bitowym mikrokontrolerem PIC16F, w tym transmisja szeregowym interfejsem SPI urządzeń peryferyjnych. Wymieniony mikrokontroler PIC16F nie posiada modułu SPI, dlatego do przeprowadzenia transmisji niezbędne było symulowanie tego modułu poprzez ręczne ustawienie reżimów czasowych transmisji. Takie podejście określane jest jako bit banging.

Opis przeprowadzonych przeze mnie ćwiczeń przedstawiony jest jako załącznik do niniejszego autoreferatu.

Moduł SPI jest alternatywą do innego szeregowego modułu transmisji: I2C, również bardzo popularnego. W proponowanym modelu moduł SPI użyty jest dwukrotnie, łącząc czujnik z MCU, a także MCU z transceiverem. Dla szybkiego transferu danych zastosowana została aplikacja PMP Parallel Master. Został tu wykorzystany wyświetlacz LCD wg standardu Hitachi HD44780, który umożliwia odczyt wielu informacji bezpośrednio na płytkach z mikrokontrolerem PIC. Jednak dołączenie LCD do mikrokontrolera nawet w trybie nie 8-mio, ale 4-ro bitowym wymaga co najmniej 6 linii portu ogólnego przeznaczenia (GPIO). W mikrokontrolerze PIC24F zamiast ręcznego sterowania liniami portu GPIO można do obsługi wyświetlacza użyć specjalnie do tego celu skonfigurowany moduł portu równoległego PMP. Komunikację z wyświetlaczem LCD można realizować poprzez wpisy do rejestrów portu. W załączeniu jest opis prowadzonych przeze mnie ćwiczeń komunikacji z wyświetlaczem LCD z wykorzystaniem portu równoległego mikrokontrolera PIC24F.

Page 9: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 9

________________________________________________________________________

5. Wybór sensorów do sieci sensorycznej

Wiele firm proponuje czujniki do pomiaru wibracji. Są to firmy Analog Devices, Freescale i inne. Zasada działania czujników jest podobna. Opiera się na układzie różnicowym, rejestrujacym zmianę pojemności, jak na rys. 3:

Rys. 3. Budowa sensora akcelerometrycznego

Czujnik ten wykrywa zarówno przyspieszenie statyczne spowodowane przyspieszeniem

ziemskim, jak też przyspieszenie spowodowane ruchem, nie rozróżniając ich. Dlatego musi być zastosowany odpowiedni filtr rozdzielający te dwa wpływy. Dzięki temu możliwy jest pomiar nie tylko przyspieszenia, ale też odchylenia (tilt).

W moich badaniach zostało wykorzystane szereg sensorów takich producentów, jak Analog Devices, Maxim-Dallas, Freescale. Były to: akcelerometry, vibration sensor, tilt sensor i angle sensor. Są to układy MEMS (microelectromechanical-systems sensors). Schemat węzła do pomiaru wibracji przedstawiony jest na rys. 4.

Page 10: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 10

________________________________________________________________________

V DD

100

nFC

1

Q 1

33 pFC 2, C 3

PIC24HJ128GA006SCK1

3,3 V

End Device Controler

8 MHz

12

11

13

14

6

2

16

5

4

3

1

V DD

V DD

C 8

680 pF

UART Driver

1 Fµ

C 6C 4

1 Fµ 1 Fµ

1 FµC 5

DB-9

IC 4

IC 2

IC 3

U2/TX

Transceiver

CC

24205,6 pF

0,5 pF

Accelerometer

MMA7455

Borowik 2008

12

34

56

78

91

011

13

14

15

16

12

17 18 19 20 21 22 23 24 25 26 27 29 30 31 3228

33

34

35

36

37

38

39

40

4142

4345

4647

48

44

64 63 62 61 60 59 58 57 56 55 54 52 51 50 4953

SDI1

SDO1

3134

3332

SS1

SCK

SI

SO

25

U2/RX

OSC1/CLKIOSC1/CLKO

SPI1

822

IC 1

34 33 32

CLK

8

SCK2SDI2

SDO2

SS2

DO D

I

SS

SPI2

C 7

C 9C 8

Rys. 4. Schemat ideowy węzła sieci WSN

W celu komunikowania się z sensorem konieczne było poznać strukturę jego rejestrów. Omawiany jest tu czujnik MMA7455L. Ma on strukturę rejestrów o adresach $00 - $1F (32 rejestry). Rejestry o adresach $00 - $05 to 10 bitowe rejestry zawierające wyniki pomiaru przyspieszenia wzdłuż osi X, Y i Z. LSB jako pierwszy, MSB jako drugi. 3 rejestry o adresach $06 - $08 zawierają wynik pomiarów w rozdzielczości 8-mio bitowej, a więc wyniki z trzech osi mieszczą się w trzech bajtach.

Rejestr $16 to rejestr kontrolny, tzw. MCTL (Mode Control Register). Bity [1:0] w nim określają tryb pracy czujnika, spośród czterech trybów:

- Stand-by

- Measurement mode

- Level detection

- Pulse detection.

Następne 2 bity określają czułość pomiaru: 2g, 4g i 8g. Do tego rejestru należy najpierw wysłać (zadać) ustawienia i wówczas można z pierwszych rejestrów 10-cio bitowych albo 8-mio bitowych odczytywać mierzone wartości.

Przy wyborze sensora należy brać pod uwagę protokół komunikacyjny dla dwukierunkowego

przesyłu informacji. W większości przypadków w badaniach używany był interfejs szeregowy SPI. Poznanie poszczególnych trybów pracy było nieodzowne dla utworzenia oprogramowania dla mikrokontrolera PIC24F, komunikującego się z sensorem. Działania te były możliwe dzięki moim poprzednim pracom przy tworzeniu interfejsów komunikacyjnych dla mikrokontrolerów PIC. (Ćwiczenia z mikrokontrolera PIC z wykorzystaniem języka maszynowego), jak również dla mikrokontrolerów Maxim_Dallas (poz. 17 literatury, Borowik B., Borowik B.E., „Data acquisition made with microcontroller on the 1-Wire Line” // Вимірювальна техніка та метрологія (Technika Pomiarowa i Metrologia): Wyd. Politechniki Lwowskiej. 2008, Nr 68. s. 35-42), oraz dla systemu Tiny OS (poz. 18, Borowik B., “Exploring Possibility Of Deploying Maxim/Dallas Microcontrollers For Pay-Tv Access Control” // Przegląd Telekomunikacyjny, 2008, Nr 4, CD).

Page 11: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 11

________________________________________________________________________

6. Moduły RF

W mojej pracy analizowałem dostępne technologie bezprzewodowe. Do pomiarów odległych i trudnodostępnych w technologii bezprzewodowej najbardziej odpowiedni jest protokół ZigBee, który nie zapewnia wprawdzie dużych prędkości przesyłu i szerokości pasma, jak np. w transmisjach multimedialnych, ale charakteryzuje się małym poborem mocy i dużą niezawodnością. Implementacje technologii ZigBee są nadzorowane przez organizację ZigBee Aliance. Początkowo analizowałem w swej pracy sieci ZigBee firmy Meshnetics. Moduły Meshnetics wykorzystują mikrokontrolery AVR firmy Atmel, programowane w środowisku zintegrowanym AVR Studio. Ze względu na długoletnią praktykę z mikrokontrolerami firmy Microchip, przeprowadziłem badania z modułami ZigBee tej firmy, zawierającymi obok mikrokontrolera PIC także moduł RF firmy Chipcon CC2420. Moduły firmy Microchip nie posiadają jeszcze certyfikatów ZigBee Aliance, chociaż firma Microchip rozwija nadal tę technologię. W zaprojektowanej sieci pracował Analizator Sieci Bezprzewodowej Zena, opisany w pracy w rozdziale 15.2. Viewing Network Traffic. Dzięki Analizatorowi ZENA wygenerowano kod dla stosu ZigBee, a także było możliwe monitorowanie w czasie rzeczywistym przepływu pakietów w eterze. Zostało to zobrazowane w rozdziale 15 pracy.

Rys. 5. Rozszyfrowanie pakietów wysyłanych w eterze przez moduły ZigBee firmy Microchip

Można tu wyróżnić nagłówki ramek dla warstwy MAC, warstwy PHY i innych, według rysunku:

Page 12: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 12

________________________________________________________________________

Frame Control Field FCD

DataSequence Number

AddressInformation Frame Payload

Frame Check Sequence FCS

MAC Fotter MFR

MAC PayloadMAC Header MHR

Bytes 12 0 to 20 0 2

MAC Protocol Data Unit MPDU

5 + ( 0 to 20 ) + n

PHY Service Data Unit PSDU

Frame Lengh

Frame Lengh

Start of Frame Delimiter SFD

PreambleSequence

Synchronization Header SHR

PHY Protocol Data Unit PPDU

11+ ( 0 to 20 ) + n

MACLayer

PHYLayer

Borowik 2008 Rys. 6. Nagłówki ramek dla warstwy MAC i warstwy PHY

Także przy pomocy analizatora Zena wyznaczona została topologia sieci.

Rys. 7. Topologia sieci ZigBee

Najbardziej sprawne i efektywne z przebadanych urządzeń okazały się moduły RF firmy Digi o nazwie Xbee. Posiadają one poglądowy interfejs graficzny X-CTU, na którym w komputerze PC w systemie MS Windows można obserwować przesył informacji w eterze przy wykorzystaniu standardowego zestawu komend AT. Alternatywnie, zamiast komend AT można użyć biblioteki API, zdefiniowanej dla stosu Znet 2.5.

Page 13: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 13

________________________________________________________________________

7. Proponowany model

Proponowany model przedstawiony został na schemacie poniżej.

SPI Serial Pheriferial Interface

In Circuit Serial Programing SPI

Dev1

PIC24H

SPI Dev2

PIC18F1320 12

Borowik 2008

Digital Controller & Expander SPI

ZigBeeRF module

ZigBeeRF module

Coordinator

3- axis Accelerometr

Cutting Bandsaw wheel

RS232

Rys. 8. Proponowany model sieci WSN

Poszczególne elementy sieci zostały zweryfikowane. Konstrukcja samego modelu wykracza

swą komplikacją poza możliwości przedstawionej tu monografii.

1. Przystosowanie systemu z zastosowaniem techniki ZigBee do współdziałania z akcelerometrami typu ICP, firmy Piezotronics.

2. Wykonanie testów weryfikujących dla pomiaru jednokanałowego.

3. Opracowanie układu elektronicznego do obsługi trójkanałowej transmisji danych z trójosiowego akcelerometru ICP.

4. Opracowanie i weryfikacja oprogramowania do trójkanałowej transmisji danych pomiarowych.

Page 14: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 14

________________________________________________________________________ 5. Wykonanie testów układu transmisji i odbioru danych z przetwornika trójosiowego, z

uwzględnieniem wpływu zakłóceń zewnętrznych, charakterystycznych dla zakładów przemysłowych i dla specyficznych oddziaływań środowiska.

VCC1UART OUT2

UART IN3

Digital I/O124RESET5Digital I/O106Digital I/O117

reserved8

SLEEP/ Digital I/O89GDN10 11

12

13

14

15

16

17

18

19

20

Digital I/O10

Digital I/O10

Digital I/O10

reserved

Digital I/O6

Analog I 3

Analog I 2

Analog I 1

Comissioning Button

B 2

Associated Indicator

R 3670 Ω

MCP6284

-+

R 4

47 Ω2

31

4

11

-+

R 5

47 Ω6

57

4

11

-+

R 7

47 Ω9

108

4

11

16 15 14 13

5 6 7 8

1

2

3

4

12

11

10

9

VCC

V DD

100 nF

3,3 V

C 1

X OUT

Y OUT

Z OUT

S 1

B1

R1

10 k

R 2

4,7 k

Borowik 2011

XBee ZNet 2,5

ADXL330

D 1

Filter Ft 1

Rys. 9. Schemat układu pomiarowego z wykorzystaniem 3-osiowego akcelerometru in RFD (Reduced Function Device)

Page 15: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 15

________________________________________________________________________

8. Analiza pracy Koordynatora FFD Full Function Device, w oparciu o Dynamic Signal Analyzer HP356555A

Rys. 10. Oprzyrządowanie system pomiarowego i kalibracja jego podstawowych elementów

1. STORAGE OSCILOSCOPE JC1102TA

2. SIGNAL CONITIONER Model 480C02

4. VIARIABLE POWER SYPPLY 24 – 30 V DC

5. DYNAMIC SIGNAL ANALYSER HP 35665A

Ścieżka pomiarowa przedstawiona została na rys. 11. Układ pokazany poniżej pozwala zapisać na MSD Mass Storage Device.

Page 16: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 16

________________________________________________________________________

Rys. 11. Schemat pomiarowy z wykorzystaniem układu kondycjonowania sygnału

Realizując projekt badawczy NN504 068638 utworzyłem sieć sensoryczną bezprzewodową

opartą o protokoł ZigBee. Jako RF Transceiver użyty został moduł firmy Digi International o nazwie Xbee, pracujący w standardzie 802.15.4. Moduł ten zawiera także linie we/wy ogólnego przeznaczenia, które mogą być skonfigurowane jako analogowe wejścia. Przy wykorzystywaniu tych linii pozyskiwałem dane z sensora przyspieszenia i dane te zostały przesyłane w eterze do odległego zdalnego węzła sieci. Jednak okazało się, że moduł Xbee, którego głównym i podstawowym zadaniem jest bezprzewodowe przesyłanie i odbiór danych w sieci ZigBee, nie może być użyty do pozyskiwania wyników z sensora, ze względu na bardzo niską częstotliwość próbkowania. Częstotliwość próbkowania dla modułu Xbee miała wartość 1 – 10 Hz. Dla pomiarów temperatury taka częstość byłaby wystarczająca, jednak dla pomiarów przyspieszenia, a zwłaszcza wibracji, niezbędne są częstości próbkowania 100 razy większe. Stąd konieczne okazało się ułożenie innego scenariusza badań:

1. Utworzenie modułu (płytki drukowanej), zawierającego nie tylko element RF Xbee, ale także mikrokontroler, odpowiedniej mocy i wykorzystanie mikrokontrolera do pozyskiwania danych z sensora oraz do wstępnego przetwarzania tych danych.

2. Przesyłanie do transceivera RF Xbee odpowiednio wyselekcjonowanych informacji w formie komunikatów – do przesyłania w sieci.

Ten właśnie scenariusz badań zamierzam realizować w niniejszym projekcie badawczym.

Mikrokontroler 16 bitowy może pobierać dane analogowe z akcelerometru z częstością rzędu

kilku kHz. Badania takie przeprowadzałem poprzednio.

Na następnym etapie przeprowadzono zaprojektowanie, wykonanie i przetestowanie prototypowego układu procesorowego Mikrokon6, wymaganego do koordynowania bezprzewodowej sieci sensorycznej.

1. Uzbrojenie płytki prototypowej w transceiver, układ komunikacji RS i układ do przesyłu danych pomiędzy trasceiverem i mikrokontrolerem.

Page 17: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 17

________________________________________________________________________ 2. Przygotowanie algorytmu programu dla mikrokontrolera, realizującego zaplanowane zadania

(akwizycja danych, sprawdzanie poziomu drgań, generowanie komunikatów).

3. Przesyłanie utworzonych komunikatów do transceivera RF złączem RS232.

4. Odbiór komunikatów na zdalnym węźle sieci i kierowanie ich do graficznego interfejsu użytkownika.

9. Wybrane zagadnienia akwizycji danych

Akwizycja danych to przechwytywanie, próbkowanie danych, pobieranie sygnałów ze środowiska tak, aby można je było przesłać do komputera i dowolnie obrobić. Akwizycja danych obejmuje zebranie danych, sygnałów, fal oraz przetwarzanie ich w celu uzyskania pożądanych wyników, informacji. Zwykle układ do akwizycji danych składa się z sensora, w tym wypadku jest to akcelerometr, który przetwarza zbierane pomiary na sygnał elektryczny, który następnie jest przesyłany do urządzenia przetwarzającego – mikrokontrolera, który jest wyposażony w odpowiedni przetwornik A/C, służący do konwersji tego sygnału.

Najistotniejszymi parametrami przy doborze przetworników analogowo - cyfrowych są:

częstotliwość próbkowania i rozdzielczość. Te parametry mówią nam o możliwościach pomiarowych, co do zakresu częstotliwości rejestrowanych sygnałów oraz jego dokładności.

9.1 Konwersja analogowo - cyfrowa

W cyfrowym torze pomiarowym sygnał elektryczny generowany przez czujnik przechodzi przez filtr, a następnie poddawany jest konwersji analogowo-cyfrowej. Konwersja polega na zamianie ciągłego sygnału elektrycznego na zestaw liczb opisujących wartość sygnału o określonych momentach czasowych i obejmuje dwa procesy:

- próbkowanie, czyli pobieranie próbek sygnału w konkretnych chwilach czasu;

- kwantowanie, czyli przypisanie każdej próbce wartości X ze zbioru skończonego N wartości, na które podzielono zakres przetwarzania (pomiarowy).

Często można się spotkać ze stwierdzeniem, że sygnał analogowy po próbkowaniu staje się sygnałem dyskretnym, a po kwantowaniu sygnałem cyfrowym.

Rys. 12. Sygnał analogowy

Page 18: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 18

________________________________________________________________________ W sygnale analogowym dla każdej chwili czasowej określona jest odpowiadająca jej wartość

sygnału. Zbiór chwil czasowych i odpowiadających im wartości sygnału jest nieskończony (rys. 12).

Dla sygnału cyfrowego wartość sygnału określona jest dla wybranych chwil czasowych następujących po sobie w stałych odstępach czasu. Zbiór chwil czasowych i odpowiadających im wartości sygnału jest skończony (rys. 13).

Rys. 13. Sygnał cyfrowy

Należy zwrócić uwagę na jedną z podstawowych cech cyfrowej postaci sygnału: wartość

sygnału w okresach pomiędzy próbkami jest nieokreślona. Intuicyjnie jest tendencja do interpolacji z wartości brzegowej, ale taka interpretacja jest błędna. Konwersja analogowo - cyfrowa może być źródłem wielu błędnych analiz, dlatego konieczna jest znajomość podstawowych zjawisk i zasad pozwalających na uzyskanie wiarygodnych informacji.

Zastosowany tu mikrokontroler PIC24H posiada wbudowany przetwornik analogowo cyfrowy, przedstawiony na schemacie rys. 14.

Page 19: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 19

________________________________________________________________________

Rys. 14. Schemat blokowy modułu ADC 1

Page 20: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 20

________________________________________________________________________ 9.2. Próbkowanie

Próbkowanie (rys. 15) to dyskretyzacja argumentu funkcji, zatem x(t) po próbkowaniu jest

reprezentowane przez zbiór wartości x(kT s) odczytanych w odstępach czasu Ts. Efektywność przetwarzania sygnałów wymaga, aby próbkowanie odbywało się najrzadziej, tzn. aby częstotliwość próbkowania była najmniejsza. Jednak powinna być dostatecznie duża, aby gwarantować pobranie liczby próbek wystarczającej do ponownego odtworzenia sygnału w postaci analogowej. Według twierdzenia Shannona-Kotielnikowa, częstotliwość próbkowania fs powinna być nie mniejsza niż dwukrotna częstotliwość górna fg widma próbkowanego sygnału.

fs ≥ 2fg [1]

Rys. 15. Próbkowanie

9.3. Kwantyzacja wartości

Kolejnym źródłem zniekształcenia sygnału jest jego kwantowanie. Wynika ono z faktu, iż wielkość uzyskana na wyjściu z konwertera analogowo-cyfrowego nie może przybierać dowolnej wartości, lecz tylko jedną z ciągu określonego właściwościami konwertera. Kwantowanie polega na przypisaniu każdej próbce wartości X ze zbioru skończonego N wartości, na które podzielono zakres przetwarzania (pomiarowy). Zakres od 0 do Xmax podzielono na N przedziałów o szerokości nazwanej kwantem q.

qN

XXX =

−∆ minmax [2]

Przypisana próbce wartość X jest zapisana w określonym kodzie. Najczęściej wynik kwantowania jest podany w postaci słowa cyfrowego, zwykle liczby binarnej zapisanej w naturalnym kodzie binarnym:

00

11

22

11 22...22 aaaa n

nn

n +++ −−

−− , [3]

gdzie n jest liczbą bitów słowa cyfrowego, a a może przybierać wartości 0 lub l. W słowie cyfrowym an-1 jest najbardziej znaczącym bitem MSB, a a0 najmniej znaczącym bitem LSB.

Na rys.16 kwantowanie daje w wynik-u 3-bitowe słowo cyfrowe, Zatem liczba kwantów 2n = 8, wszystkie przedziały kwantowania mają jednakową szerokość równą kwantowi q:

VUU

qn

12

08

2 3minmax =−=

−= . [4]

Wydaje się, że ten sposób wyznaczenia przedziałów jest najwłaściwszy. Nie jest to jednak słuszne, jeżeli uwzględnimy błąd kwantowania, który jest nieuniknionym skutkiem procesu kwantowania. Maksymalny błąd kwantyzacji jest równy połowie wartości q, czyli dla powyższego

Page 21: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 21

________________________________________________________________________ przypadku jest równy 0.5 V. W przypadku projektowanego urządzenia posiadającego przetwornik 12 bitowy błąd kwantyzacji jest na tyle mały, że może zostać pominięty.

Rys. 16. Kwantowanie

9.4. Główne parametry przetworników

Rozdzielczość przetwornika definiowana jest liczba N stanów cyfrowego słowa wejściowego (lub liczba wartości analogowych sygnału wyjściowego). Liczba N jest jednoznacznie określona przez liczbę bitów n - cyfrowego słowa wyjściowego: N= 2n. Zwykle mówimy jednak, że przetwornik ma rozdzielczość n bitów, a nie N stanów. Rozdzielczość bezwzględna przetwornika wynika z liczby jego stanów N oraz zakresu sygnału wejściowego. Tak więc przetwornik o zakresie sygnału wejściowego od Umin do Umax i rozdzielczości n bitów ma rozdzielczość bezwzględną ∆Ur równą kwantowi przetwarzania q:

qUU

N

UUU

nr =−=−=∆2

minmaxminmax . [5]

Dokładność przetwornika określona jest przez błąd bezwzględny lub błąd względny. Błąd bezwzględny jest to różnica między wartością rzeczywistą sygnału analogowego na wejściu przetwornika, a wartością zmierzoną. ∆Ub = Urzecz - Uzmierz. Często błąd bezwzględny jest podawany jako liczba bitów LSB.

Błąd względny δ przetwornika jest obliczany jako stosunek błędu bezwzględnego do zakresu sygnału wyjściowego:

minmax UU

U b

−∆

=δ . [6]

Page 22: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 22

________________________________________________________________________

10. Porównanie akcelerometrów czołowych producentów

Obecnie na rynku można zakupić kilka tanich modeli czujników przyspieszenia. Produkują je głownie firmy:

• Freescale Zakres: x < 20g 20g < x < 100g 100g < x < 500g Przesył danych: Analog, I2C, SPI, SPI5,DSI

• Shure Electronics Zakres: x < 20g 20g < x < 100g 100g < x < 500g Przesył danych: Analog, I2C, SPI, SPI5,DSI

• Analog Devices Zakres: 2g < x< 70g 70g < x < 500g Przesył danych: Analog, SPI, PWM

• STMicroelectronics. Zakres: 2g ,4g,6g,8g,12g,16g,24g,200g Przesył danych: Analog, I2C, SPI, DSI Poszczególne firmy produkują czujniki o bardzo zbliżonych parametrach, różniących się

sposobem przesyłu danych, budową, czułością oraz zakresem, choć każdy z producentów posiada w swojej ofercie układy obsługujące najpopularniejsze interfejsy, łącznie z sygnałem analogowym.

Tabela 1. Dobór czułości akcelerometrów do zastosowania

Czułość Zastosowanie

1 – 2g Wykrywanie swobodnego spadku, kompensacja przechyłów, rejestrowanie ruchu pojazdów

2 – 4g Interfejsy człowiek – maszyna (HMI), kontrolery gier

4 – 6g Analiza niewielkich wibracji, monitorowanie wstrząsów transportowych

6 – 10g Monitorowanie znacznych wibracji, rejestrowanie udarów

10 – 500g Wykrywanie zderzeń

Po wnikliwym przeglądnięciu ofert producentów Freescale i Shure okazało się, że firma Shure

Electronics nie produkuje już samych akcelerometrów, lecz gotowe moduły z akcelerometrami firmy Freescale. Dla przykładu produkt DC-SS009 firmy Shure Electronics posiada moduł Akcelerometryczny MMA7260 firmy Freescale.

Page 23: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 23

________________________________________________________________________

11. Sposoby przesyłu danych 11.1. Przesył sygnału analogowego

Informacja o przeciążeniu akcelerometru jest przetwarzana liniowo na napięcie w zależności od

typu akcelerometru i jego czułości. Na przykład, dla czułości 1.5g jest równa 800mV/g. Przy czym 0g będzie równe połowie napięcia zasilania. Dla układu zasilanego 3.3V będzie więc równe 1.65V. Napięcie następnie jest odbierane przez przetwornik w mikrokontrolerze i przetwarzane na postać cyfrową. 11.2. Przesył magistralą I²C

I²C to szeregowa, dwukierunkowa magistrala służąca do przesyłania danych w urządzeniach elektronicznych. Została opracowana przez firmę Philips na początku lat 80. Znana jest również pod akronimem IIC, którego angielskie rozwinięcie Inter-Intergrated Circuit oznacza "pośredniczący pomiędzy układami scalonymi". Standard I²C określa dwie najniższe warstwy modelu odniesienia OSI: warstwę fizyczną i warstwę łącza danych.

I²C do transmisji wykorzystuje dwie dwukierunkowe linie: SDA (linia danych, ang. Serial Data

Line) i SCL (linia zegara, ang. Serial Clock Line). Obydwie linie są na stałe podciągnięte do źródła zasilania poprzez rezystory podciągające (ang. pull-up). I²C używa logiki dodatniej, a więc stan niski na magistrali odpowiada "0" logicznemu, natomiast stan wysoki "1" logicznej.

Rys. 17. Przebieg komunikacji w I2C

Wszystkie nadajniki są typu otwarty kolektor lub otwarty dren, a więc na liniach występuje tzw.

iloczyn na drucie ("1" jest recesywna, a "0" dominujące). Pozwala to na wykrywanie kolizji. Każde urządzenie nadając "1" jednocześnie sprawdza, czy na magistrali rzeczywiście pojawił się stan wysoki. Jeżeli tak nie jest, oznacza to, iż inne urządzenie nadaje w tym samym czasie i urządzenie zaprzestaje nadawania.

Rys. 18. Schemat połączenia w I2C Podstawowa wersja I²C zakłada istnienie tylko jednego urządzenia, które może inicjować

transmisję (master) (rys.18), ale dzięki istnieniu mechanizmu detekcji kolizji, możliwa jest praca w trybie multi-master. Ponieważ dane nadawane są w kolejności od najbardziej znaczącego bitu do najmniej znaczącego, w przypadku jednoczesnego nadawania, urządzenie nadające adres o wyższym numerze wycofa się pierwsze, co wynika z binarnego sposobu zapisywania liczb. Występuje tu zatem arbitraż ze stałym przydziałem priorytetów, określony przez adres urządzenia

Page 24: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 24

________________________________________________________________________ typu slave. Urządzenia o niższych adresach mają wyższy priorytet od urządzeń o adresach wyższych.

Zmiana na linii danych podczas transmisji może następować jedynie, gdy linia zegara znajduje

się w stanie niskim. Nie dotyczy to specjalnych sytuacji: bitu startu i bitu stopu. Bit startu ma miejsce, gdy linia danych zmienia swój stan z "1" na "0", podczas wysokiego stanu linii zegara, co ma miejsce w momencie rozpoczynania każdej transmisji danych. Po zakończeniu transmisji generowany jest bit stopu, czyli przejście linii danych w stan wysoki przy wysokim stanie linii zegara.

Standard zakłada magistralowe połączenie urządzeń. Długość linii ograniczona jest jedynie jej

maksymalną pojemnością, która wynosi 400 pF. 11.3. SPI (ang. Serial Peripheral Interface)

SPI to szeregowy interfejs urządzeń peryferyjnych, jeden z najczęściej używanych interfejsów

komunikacyjnych pomiędzy systemami mikroprocesorowymi a układami peryferyjnymi, takimi jak: przetworniki ADC/DAC, układy RTC, pamięci EEPROM, pamięci flash, karty MMC/SD/ itp.

Komunikacja odbywa się synchronicznie za pomocą 3 linii:

- MOSI - (ang. Master Output Slave Input) - dane dla układu peryferyjnego

- MISO - (ang. Master Input Slave Output) - dane z układu peryferyjnego

- SCK - (ang. Serial ClocK) - sygnał zegarowy (taktujący)

Rys. 19. Schemat połączenia interfejsu szeregowego SPI

Magistrala SPI może pracować z jednym urządzeniem Master i jednym lub więcej urządzeniami Slave. Jeśli pracuje z pojedynczym urządzeniem slave, na pinie SS powinien być stan niski. Do aktywacji wybranego układu peryferyjnego służy dodatkowo linia CS (ang. Chip Select - wybór układu) lub adresacja układów.

Sposób transmisji danych inicjuje rozpoczęcie komunikacji przez Master, który najpierw konfiguruje zegar, używając częstotliwości mniejszej lub równej maksymalnej częstotliwości obsługiwanej przez Slave’a, następnie na wyjściu SS ustawia stan niski.

W każdym cyklu zegara SPI, podczas transmisji danych full duplex następuje:

- master wysyła bit na linii MOSI, slave go z tej linii odczytuje,

- slave wysyła bit na linii MISO, a master go z niej odczytuje.

Page 25: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 25

________________________________________________________________________ Transmisje zwykle obejmują dwa rejestry przesuwne, jeden mastera i jeden w niewolnika, tak,

że są one połączone w pierścień. Dane są zwykle wypchnięte zaczynając od najbardziej znaczącego bitu, aż do mniej znaczącego bitu. Po tym przesunięciu oba urządzenia wymieniają wartości rejestrów. Następnie każde urządzenie zapisuje wartość otrzymaną. Jeśli jest więcej danych do wymiany do rejestru są ładowane nowe dane i proces się powtarza.

Rys. 20. Przebieg komunikacji interfejsu szeregowego SPI

Polaryzacja zegara i fazy

Oprócz ustawienia częstotliwości zegara, są cztery tryby reakcji na fazę, które master musi również skonfigurować, korzystając z rejestrów CPOL i CPHA.

Tabela 2. Ustawienia polaryzacji oraz fazy w SPI

CPOL CPHA Zbocze pierwsze Zbocze ostatnie Tryb SPI

0 0 Pobieranie (narastanie) Ustawienie (opadanie) 0

0 1 Ustawienie (narastanie) Pobieranie (opadanie) 1

1 0 Pobieranie (opadanie) Ustawienie (narastanie) 2

1 1 Ustawienie (opadanie) Pobieranie (narastanie) 3

W pierwszej części przesyłanej wiadomości zawarty jest adres urządzenia, które po jego

rozpoznaniu przyjmuje pozostałe bajty. Adresowanie układów wykorzystywane jest szczególnie podczas pracy z rozbudowanymi systemami, których poszczególne części można programować niezależnie, także po zamontowaniu na płytce. Dodaje to więcej elastyczności do kanału komunikacji między urządzeniem Master i Slave. 11.4. PWM (ang. Pulse-width modulation)

Jest to metoda regulacji szerokości wypełnienia, polegająca na zmianie szerokości impulsu o

stałej amplitudzie. Akcelerometr generuje na wyjściu prostokątny sygnał o określonej częstotliwości, amplitudzie i wypełnieniu. Wypełnienie jest wprost proporcjonalne do działającego na czujnik przyspieszenia. W zależności od czułości układu wypełnienie jest różne, dla przykładu 12.5% / 1g dla ADXL202 oraz 4% / 1g dla ADXL210. Częstotliwość modulacji jest stała, więc np. dla układu ADXL202 firmy Analog Devices generowany jest sygnał o częstotliwości 1kHz.

Page 26: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 26

________________________________________________________________________

12. Budowa prototypu akcelerometrycznego systemu pomiarowego

Sensory w swojej miniaturowej strukturze zawierają kondensator różnicowy (Rys.21). Centralna ruchoma belka, tworząc wraz z nieruchomymi belkami strukturę grzebieniową, jest wychylana z położenia równowagi przez siły bezwładności. Ruchoma belka jest jednocześnie ruchomą okładką w strukturze kondensatora różnicowego, który utworzony jest przez odpowiednie połączenia elektryczne belek struktury grzebieniowej.

Rys. 21 Widok uproszczony struktury mikromechanicznej czujnika

Napięcia przyłożone do dolnej i górnej elektrody mają kształt prostokątny i są przesunięte w fazie o 180 stopni (rys. 21). Gdy elektroda środkowa jest w położeniu równowagi (obie pojemności równe) sygnał wyjściowy VOUT = 0. Wychylenie się elektrody spowoduje „rozzrównoważenie” układu i pojawienie się na wyjściu napięcia. Napięcie to, w dalszych blokach jest odpowiednio filtrowane, wzmacniane i demodulowane.

Rys. 22. Uproszczony schemat połączeń wewnętrznych czujnika

Akcelerometry liniowe (w tym MEMS) wykorzystują odkształcenie sprężystego układu

belkowego w celu przeciwdziałania sile bezwładności. Pomiar przemieszczenia najczęściej odbywa się poprzez pomiar zmiany pojemności

elektrycznej kondensatora (∆C), w wyniku wzajemnego przesunięcia się jego płyt o ∆x, wywołanego przyspieszeniem w kierunku x. Takie rozwiązanie znacznie zmniejsza wielkość przyrządu. W przeciwieństwie do akcelerometrów wahadłowych, pozwala to na zwiększenie

Page 27: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 27

________________________________________________________________________ zakresu pomiarowego, a także brak czułości poza osią pomiarową. Typowy akcelerometr MEMS składa się z kilkudziesięciu warstw takich czujników.

Rys. 23. Akcelerometr belkowy powiększenie 300 razy

Czujniki pojemnościowe są wystarczająco dokładne dla większości zastosowań. Ich zaletą jest

bezpośrednie wejście sygnału do układów cyfrowych. Większa dokładność wynika z braku obwodów analogowych, z natury dość wrażliwych na zakłócenia. Nowoczesne akcelerometry MEMS są chemicznie trawione w płytce krzemowej i stanowią integralną całość z czujnikami przesunięcia. Wielkość takiego układu nie przekracza wymiarów typowego układu scalonego SMD. Rysunek 23 przedstawia 300-krotne powiększenie układu pomiarowego akcelerometru MEMS serii ADXL firmy Analog Devices.

Przyspieszeniomierz mierzy składową przyspieszenia całkowitego, na które wpływ ma także przyspieszenie grawitacyjne. W celu uzyskania jedynie wartości przyspieszenia układu pomiarowego, wynikającego z ruchu, w odczycie należy uwzględnić:

a = w – g [7]

gdzie: w - wektor przyspieszenia bezwzględnego, g - wektor przyspieszenia grawitacyjnego Ziemi.

Do obliczeń niewymagających bardzo wysokiej precyzji przyjmuje się tzw. przyspieszenie ziemskie normalne, oznaczane gn:

[8]

Przyspieszenie normalne jest wartością, która została przyjęta przez 3 Generalną konferencję Miar i Wag w 1901 roku. Odpowiada ona ziemskiemu przyspieszeniu grawitacyjnemu na poziomie morza na szerokości geograficznej około 45,5°.

Niestety przyśpieszenie ziemskie w zależności od położenia geograficznego zmienia się. Tak więc zależy od szerokości geograficznej oraz wysokości nad poziomem morza. Wraz z wysokością przyspieszenie maleje odwrotnie proporcjonalnie do kwadratu odległości od środka Ziemi i jest wynikiem zmniejszania się siły grawitacji, zgodnie z prawem powszechnego ciążenia. Zmniejszanie

Page 28: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 28

________________________________________________________________________ się przyspieszenia ziemskiego wraz ze zmniejszaniem szerokości geograficznej jest spowodowane działaniem pozornej siły odśrodkowej, która powstaje na skutek ruchu obrotowego Ziemi. Ponieważ siła ta jest proporcjonalna do odległości od osi obrotu, stąd największą wartość osiąga na równiku. Ponieważ siła odśrodkowa ma tu zwrot przeciwny do siły grawitacji, przyspieszenie ziemskie na równiku osiąga najmniejszą wartość. Dodatkowe zmniejszenie przyspieszenia ziemskiego w okolicach równika spowodowane jest spłaszczeniem Ziemi (większą odległością od środka Ziemi).

Z tego powodu układy akcelerometryczne powinny posiadać program służący do kalibracji każdej z osi, aby wskazywać rzeczywistą wartość pomiaru. Niektóre akcelerometry posiadają układ "self test" służący do kalibracji, który po aktywizacji napięciem zewnętrznym, powoduje przyłożenie do okładek kondensatora napięcia odchylającego elektrodę ruchomą, co jest równoważne odpowiedniemu przyspieszeniu, np. 800mg. 12.1. Cechy modelu MMA7260Q akcelerometru

MMA7260 (rys. 24) jest tanim pojemnościowym sensorem przyspieszenia, posiada

wbudowany filtr dolno przepustowy, kompensację temperaturową. Posiada Tryb uśpienia, który powoduje, że układ jest doskonały dla urządzeń przenośnych. Rysunek 25 przedstawia schemat blokowy czujnika przyśpieszenia.

Rys. 24. Widok czujnika z góry

Tabela 4. Opis wyjść akcelerometru

Nr pinu Nazwa pinu Description

1 g-Select1 Logic input pin to select g level.

2 g-Select2 Logic input pin to select g level.

3 VDD Power Supply Input

4 VSS Power Supply Ground

5 - 7 N/C No internal connection. Leave unconnected.

8 - 11 N/C Unused for factory trim. Leave unconnected.

12 Sleep Mode Logic input pin to enable product or Sleep Mode.

13 ZOUT Z direction output voltage.

Page 29: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 29

________________________________________________________________________ 14 YOUT Y direction output voltage.

15 XOUT X direction output voltage.

16 N/C No internal connection. Leave unconnected.

Układ jest zasilany napięciem z zakresu 2.2 V - 3.6 V. Posiada wysoką czułość 800 mV/g dla

1.5 g dla pomiaru przyspieszeń w trzech osiach, wybór zakresów od 1,5 do 6g. Jest ponadto wytrzymały na uderzenia i ma małe wymiary 6x6x1,45mm. W trakcie pracy zużywa: 500 uA, a po przejściu w stan uśpienia tylko 3 uA. Tabela 4 zawiera opis poszczególnych nóżek układu.

Rys. 25. Uproszczony schemat blokowy akcelerometru

Czułość może zostać wybrana między 1.5g, 2g, 4g i 6g przez odpowiednie ustawianie stanów

napięcia, na odpowiednich wejściach g-Select1 i g-Select2 (tabela 5).

Tabela 5. Wybór czułości sensora

Wartość przyśpieszenia 0g jest równa połowie napięcia zasilania. Układ jest zasilany napięciem 3.3V, więc 0g jest równe 1.65V. Rysunek 26 obrazuje napięcie na wyjściach dla poszczególnych pozycji.

Page 30: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 30

________________________________________________________________________

Rys. 26. Napięcie generowane dla różnych pozycji

Do budowy systemu akcelerometrycznego użyto gotową płytkę DC-SS009 z powyższym

czujnikiem przyśpieszenia 3 osiowego, która jest wyprodukowana przez SURE Electronics. Jest to pierwsza generacja 3 osiowych czujników przyspieszenia.

Z układu możemy otrzymać wartości przyspieszenia w osiach X, Y i Z. Shure Electronics dostarcza tę płytkę dla tych, którzy chcą używać takich akcelerometrów, ale nie mogą przylutować ich samodzielnie. Płytkę jest łatwo zaimplementować w systemy pracujące na 3.3V oraz 5V, przy czym ich koszt jest bardzo niski. Są często używane przy wykrywaniu wstrząsów, pochylenia i ruchu. Rysunek 27 przedstawia schemat elektryczny płytki z modułem akcelerometrycznym.

Page 31: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 31

________________________________________________________________________

Rys. 27. Schemat elektryczny płytki DC-SS009

Rys. 28. Widok wykonanego modułu do układu akcelerometru

13. Prototypowy system akcelerometryczny

Prototypowy system akcelerometryczny Mikrokon6 został zbudowany w oparciu o

mikrokontroler 16-bitowy PIC24H. Zawiera on autorskie oprogramowanie, przedstawione w książce dalej w poniższej pracy. Oprogramowanie zostało napisane w języku C. Użyto kompilatora MicrochipC30, który obsługuje architekturę procesora PIC24H.

Page 32: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 32

________________________________________________________________________

Rys. 29. Widok wykonanego systemu procesorowego MIKROKON6

Page 33: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 33

________________________________________________________________________ 14. Schemat ideowy systemu Mikrokon6

Rys. 30. Schemat zaprojektowanego plugin’u mikrokontrolera z wyprowadzeniami portów

Rys. 31. Schemat wykonanego podłączenia diod LED

Page 34: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 34

________________________________________________________________________

Rys. 32. Schemat wykonanego podłączenia klawiatury

Rys. 33. Schemat wykonanego podłączenia karty SD/MMC

Page 35: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 35

________________________________________________________________________

Rys. 34. Schemat podłączenia wyświetlacza

Rys. 35. Schemat podłączenia akcelerometru

14.1. Widok podzespołów

Rys. 36. Wykonana klawiatura do obsługi systemu Mikrokon

Page 36: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 36

________________________________________________________________________

Rys. 37. Wykonany prototypowy system akcelerometryczny

Na rysunku 37 przedstawiono prototypowy układ akcelerometryczny, zamocowany na płycie wraz z programatorem i wyświetlaczem oraz układem sensora akcelerometrycznego.

15. Karta pamięci SD (Security Card) / MMC (Multi Media Card)

Karta pamięci SD jest kartą pamięciową standardu dla mobilnych sprzętów. Standard SD został skonstruowany jako kompatybilny z kartami MMC. W wielu przypadkach karta SD może być zastąpiona kartą MMC i odwrotnie. Posiadają one również mniejsze wersje, takie jak: RS-MMC, miniSD i microSD. Karty te mają mikrokontroler do sterowania pamięcią typu flash (kasowanie, odczyt, zapis, kontrola błędów), który znajduje się wewnątrz karty pamięciowej. Dane są przenoszone między kartą pamięciową i kontrolerem hosta jako bloki danych o rozmiarze 512

Programator ICSP

Karta Pamięci

Page 37: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 37

________________________________________________________________________ bajtów, żeby karty były widziane jak dysk twardy od punktu górnych warstw posiadają zdefiniowany system plików FAT16 / FAT32.

Rys. 38. Porównanie złącz karty SD i MMC

Na rysunku 38 widać rozkład styków kart SDC i MMC. MMC ma siedem kontaktów, a SD ma

ich dziewięć. Trzy z kontaktów są przeznaczone dla zasilacza, więc ilość styków sygnałów jest równa cztery dla MMC i sześć dla SDC.

Obie karty pracują na napięciu od 2.7V – 3.6V. Podczas zapisu prąd pobierany przez kartę może podskoczyć o 10 mA, więc host powinien zasilać kartę ze źródła o minimalnej wydajności 100 mA. 15.1. Komendy sterujące przez SPI

Każda komenda jest wyrażona skrótem, np. GO_IDLE_STATE lub numerem (n) indeksu rozkazu i może mieć wartość od 0-63, np. CMD <n>. Poniższa tabela opisuje jedynie komendy, które są najczęściej wykorzystywane do odczytu, zapisu i inicjalizacji.

Tabela 6. Komendy SPI sterujące kartą SD/MMC

Numer komendy

Argument Odp.

Dane Skrót Opis

CMD0 brak (0) R1 No GO_IDLE_STATE Reset programowy.

CMD1 brak (0) R1 No SEND_OP_COND Proces inicjalizacji.

ACMD41 brak (0) R1 No APP_SEND_OP_COND

Tylko dla SD. Inicjacja procesu inicjalizacji.

CMD8 brak (0) R7 No SEND_IF_COND Tylko dla SD V2 Sprawdź wartość napięcia.

CMD9 brak (0) R1 Yes SEND_CSD Odczytaj rejestr CSD.

CMD10 brak (0) R1 Yes SEND_CID Odczytaj rejestr CID.

CMD12 brak (0) R1b No STOP_TRANSMISSION

Zatrzymaj by odczytać dane.

CMD16 Długość bloku [31:0]

R1 No SET_BLOCKLEN Zmień rozmiar bloku R/W.

Page 38: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 38

________________________________________________________________________

CMD17 Adres[31:0] R1 Yes READ_SINGLE_BLOCK

Odczytaj blok.

CMD18 Adres[31:0] R1 Yes READ_MULTIPLE_BLOCK

Czytaj bloki wielokrotnie.

CMD24 Adres[31:0] R1 Yes WRITE_BLOCK Zapisz blok.

CMD25 Adres[31:0] R1 Yes WRITE_MULTIPLE_BLOCK

Zapisuj bloki wielokrotnie.

CMD55 brak (0) R1 No APP_CMD Główny rozkaz dla ACMD<n>.

CMD58 brak (0) R3 No READ_OCR Czytaj OCR.

15.2. Procedury inicjalizacyjne

Po uruchomieniu zasilania (tzw. reset) MMC/SDC wchodzi do trybu pracy. W celu inicjalizacji

należy wykonać prawidłowo algorytm z rysunku 39. Power ON (włożenie)

Po zasileniu karty minimalnym napięciem 2.2V, należy odczekać kilka milisekund i ustawić

zegar SPI pomiędzy 100 – 400kHz. Następnie należy ustawić stan wysoki na DI i CS. Po 74 lub więcej impulsach zegara na wejściu SCLK karta wchodzi w naturalny tryb pracy i czeka na zatwierdzenie komend. Inicjalizacja

W trybie wstrzymania karta akceptuje tylko komendy CMD0, CMD1, ACMD41, CMD58 i

CMD59. Każda inna komenda zostanie zignorowana. W tym czasie odczytuje rejestr OCR i sprawdza zakres napięcia pracy karty. W chwili, gdy napięcie zasilania karty jest poza zakresem, karta musi zostać wyłączona. Noty aplikacyjne wszystkich kart informują o zakresie zasilania pomiędzy 2.7V a 3.6V. Karta rozpoczyna inicjalizację, gdy otrzyma komendę CMD1.

W celu wykrycia końca procesu inicjalizacji mikrokontroler musi wysłać komendę CMD1 i

czekać na odpowiedź, do czasu jej zakończenia. Gdy inicjalizacja zakończy się pomyślnie, w trybie wstrzymania R1 w odpowiedzi jest kasowany (R1 zmienia stan z 0x01 na 0x00). Proces inicjalizacji może trwać setki milisekund, więc należy przeznaczyć na niego odpowiednią ilość czasu. Po wyjściu ze stanu wstrzymania standardowe komendy są akceptowane.

Page 39: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 39

________________________________________________________________________

Rys. 39. Procedura inicjalizacji karty SD/MMC

Wartość zegara SPI powinna być ustawiona na maksymalną, by w miarę możliwości maksymalnie zwiększyć wydajność zapisu/odczytu. Maksymalna prędkość kart to 20MHz dla MMC i 25MHz dla SD.

Page 40: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 40

________________________________________________________________________

16. Opis programu systemu Mikrokon6

Schemat blokowy algorytmu programu przedstawiony został na rys. 40. 16.1. Algorytm programu

Rys. 40. Algorytm programu

16.2. Utworzony Kod źródłowy dla systemu akcerometrycznego Mikrokon6

16.2.1. Program główny „main.c”

#include <p24hj256gp210.h> // DYREKTYWY #include "delay_moj.h" #include "string.h" #include "T6963C.h" #include "graphic.h" #include "ADC.h" #include "stdio.h" #include "stdlib.h" #include "keyboard.h" #include "sdmmc.h" #define AINPUTS 0xBFF4 // DEKLARACJE #define ACCELX 0 #define ACCELY 1 #define ACCELZ 3 void menu (void); void pomiar (void); char _array1[10] = "X= V"; char _array2[10] = "G= g"; char _array3[10] = "VDD= 3.3 V";

Page 41: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 41

________________________________________________________________________ char _probkowanie[10] = "czas = 1 "; unsigned short int vdd,sens,xx,yy,zz; char page; int Gx,Gy,Gz,G; unsigned long int sumaG; void ADCShortToString(int, char, char*); int main(void) GLCD_Initalize(); // INICJALIZACJA LCD GLCD_ClearText(); // CZYŚĆ PRZESTRZEŃ TEKSTOWĄ GLCD_ClearGraphic(); // CZYŚĆPRZESTRZEŃ GRAFICZNĄ initADC(AINPUTS); // INICJALIZUJ WEJ ŚCIA ANALOGOWE TRISA = 0xff00; // ZAZNACZ PORT A JAKO WYJŚCIA menu(); void menu (void) GLCD_FillGraph(72,19,92,58,0); // WYCZYŚĆ POLE LCD GLCD_Rectangle(73,20,90,56,1); // NARYSUJ PROSTOKĄT GLCD_TextGoTo(14,3); // USTAW KOORDYNATY GLCD_WriteString("Pomiar"); // WYPISZ TEKST GLCD_TextGoTo(14,4); // USTAW KOORDYNATY GLCD_WriteString("Wykres // WYPISZ TEKST GLCD_TextGoTo(14,5); GLCD_WriteString("Zapis"); // WYPISZ TEKST GLCD_TextGoTo(14,6); // USTAW KOORDYNATY GLCD_WriteString("Kalibracja"); // WYPISZ TEKST GLCD_TextGoTo(14,7); // USTAW KOORDYNATY GLCD_WriteString("Ustawienia"); // WYPISZ TEKST GLCD_TextGoTo(14,8); // USTAW KOORDYNATY GLCD_WriteString("Tilt"); // WYPISZ TEKST GLCD_TextGoTo(13,position+2); // USTAW KOORDYNATY GLCD_WriteString("*"); // WYPISZ TEKST while(1) // OBSŁUGA MENU if (getkey()==6 & (position)<6) // RUCH W DÓŁ

GLCD_TextGoTo(13,position+2); // USTAW KOORDYNATY GLCD_WriteString(" "); // WYPISZ TEKST position++; // ZWIĘKSZ POZYCJĘ GLCD_TextGoTo(13,position+2); // USTAW KOORDYNATY GLCD_WriteString("*"); // WYPISZ TEKST delayms(200); //if if (getkey()==2 & position>1) // RUCH W GÓRĘ

Page 42: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 42

________________________________________________________________________ GLCD_TextGoTo(13,position+2); // USTAW KOORDYNATY GLCD_WriteString(" "); // WYPISZ TEKST position--; // ZMNIEJSZ POZYCJĘ GLCD_TextGoTo(13,position+2); // USTAW KOORDYNATY GLCD_WriteString("*"); // WYPISZ TEKST delayms(200); //if if (getkey()==8 & (position)==1) pomiar(); if (getkey()==8 & (position)==2) wykres(); if (getkey()==8 & (position)==3) zapis(); if (getkey()==8 & (position)==4) kalibracja(); if (getkey()==8 & (position)==5) ustawienia(); if (getkey()==8 & (position)==6) tilt(); //while //menu void pomiar (void) unsigned char sel_ch = 0,n=0; GLCD_ClearGraphic(); // CZYŚĆ PRZESTRZEŃ GRAFICZNĄ GLCD_ClearText(); // CZYŚĆ PRZESTRZEŃ TEKSTOWĄ GLCD_TextGoTo(0,0); // USTAW KOORDYNATY GLCD_WriteString("Pomiar"); // WYPISZ TEKST while(1) show_adc(); MFILE *fs;

unsigned r; Delayms( 100); // wait for card to pow er up

if ( mount() & zapis)

if ( (fs = fopenM( "ACCEL.xml", "r")))

Page 43: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 43

________________________________________________________________________

data[i] = xi; r = freadM(data, B_SIZE, fs); // GLCD_TextGoTo(13,10); // ADCShortToString((int)G,1, _array2+3); // GLCD_WriteString(_array2); if (getkey()==1) menu(); n++; //while //pomiar wykres() unsigned char sel_ch = 0,n=240,key=0,t_czas=1,petl a; GLCD_ClearGraphic(); // CZYŚĆ PRZESTRZEŃ GRAFICZNĄ GLCD_ClearText(); // CZYŚĆ PRZESTRZEŃ TEKSTOWĄ GLCD_Line(0,64,239,64,1); GLCD_TextGoTo(0,0); // USTAW KOORDYNATY GLCD_WriteString("Wykres osi X"); // WYPISZ TEKST GLCD_TextGoTo(30,0); // USTAW KOORDYNATY GLCD_WriteString("czas = 1"); // WYPISZ TEKST while(1) key=getkey(); if (key) // JEŚLI KLAWISZ NACI ŚNI ĘTY, SPRAWDŹ KTÓRY if (key==1) menu(); if (key==2 & !(sel_ch==0)) sel_ch--; if (sel_ch==2)sel_ch=1; delayms(200); n=240; // WARTOŚĆ, ZA KTÓR Ą NIE MOŻE WYJŚĆ WYKRES if (key==6 & !(sel_ch==3)) sel_ch++; if (sel_ch==2)sel_ch=3; delayms(200); n=240; // WARTOŚĆ, ZA KTÓR Ą NIE MOŻE WYJŚĆ WYKRES

Page 44: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 44

________________________________________________________________________ if (key==5 & !(t_czas==1)) t_czas--; delayms(50); n=240; // WARTOŚĆ ZA KTÓR Ą NIE MOŻE WYJŚĆ WYKRES if (key==7 & !(t_czas==100)) t_czas++; delayms(50); n=240; // WARTOŚĆ ZA KTÓR Ą NIE MOŻE WYJŚĆ WYKRES GLCD_TextGoTo(11,0); switch (sel_ch) case 0: GLCD_WriteString("X"); break; // WYPISZ TEKST case 1: GLCD_WriteString("Y"); break; // WYPISZ TEKST case 3: GLCD_WriteString("Z"); break; // WYPISZ TEKST //switch GLCD_TextGoTo(30,0); ADCShortToString((int)t_czas,9, _probkowanie+7); GLCD_WriteString(_probkowanie); if (n==240) // JEŚLI KONIEC WY ŚW. KASUJ I ZACZNIJ OD NOWA n=0; GLCD_ClearGraphic(); // CZYŚĆ PRZESTRZEŃ GRAFICZNĄ GLCD_Line(0,64,239,64,1); //if //while zapis() ; kalibracja() ; void show_adc (void) // WY ŚWIETLANIE WARTOŚCI Z TRZECH OSI long int x,y,z; x=0,y=0,z=0; // OŚ X x = readADC(ACCELX); _array2[0]='X'; GLCD_TextGoTo(0,15);

Page 45: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 45

________________________________________________________________________ Gx=((x/1.2526)-1760)/0.850; if (Gx<0) _array2[2]='-'; ADCShortToString((int)abs(Gx),1, _array2+3); else _array2[2]='+'; ADCShortToString((int)Gx,1, _array2+3); GLCD_WriteString(_array2); // OŚ Y y = readADC(ACCELY); _array2[0]='Y'; GLCD_TextGoTo(10,15); Gy=((y/1.2526)-1760)/0.850; if (Gy<0) _array2[2]='-'; ADCShortToString((int)abs(Gy),1, _array2+3); else _array2[2]='+'; ADCShortToString((int)Gy,1, _array2+3); GLCD_WriteString(_array2); // OŚ Z z = readADC(ACCELZ); _array2[0]='Z'; GLCD_TextGoTo(20,15); Gz=((z/1.2526)-1760)/0.850; if (Gz<0) _array2[2]='-'; ADCShortToString((int)abs(Gz),1, _array2+3); else _array2[2]='+'; ADCShortToString((int)Gz,1, _array2+3); GLCD_WriteString(_array2); void AccelKalib () unsigned short int kalibracjaXa,kalibracjaXp,kalibr acjaXk; GLCD_ClearGraphic(); // CZYŚĆ PRZESTRZEŃ GRAFICZNĄ GLCD_TextGoTo(15,1);

Page 46: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 46

________________________________________________________________________ GLCD_WriteString("Kalibracja"); GLCD_Rectangle(89,6,82,11); GLCD_TextGoTo(0,3); GLCD_WriteString("Ustaw na powierzchni A -");delaym s(500); x = readADC(ACCELX); xx=x/1.24121; // mV kalibracjaXa=xx-1650; GLCD_TextGoTo(25,3);GLCD_WriteString("OK");delayms( 500); GLCD_TextGoTo(0,4); GLCD_WriteString("Ustaw na powierzchni B -");delays (2); x = readADC(ACCELX); xx=x/1.24121; // mV kalibracjaXp=xx-850; GLCD_TextGoTo(25,4);GLCD_WriteString("OK");delayms( 500); GLCD_TextGoTo(0,5); GLCD_WriteString("Ustaw na powierzchni C -");delays (2); x = readADC(ACCELX); xx=x/1.24121; // mV kalibracjaXk=xx-2450; GLCD_TextGoTo(25,5);GLCD_WriteString("OK");delayms( 500); GLCD_TextGoTo(0,6); GLCD_WriteString("Ustaw na powierzchni D -"); delays(1); GLCD_TextGoTo(25,6);GLCD_WriteString("OK");delayms( 500); GLCD_TextGoTo(0,7); GLCD_WriteString("Ustaw na powierzchni E -"); delays(1); GLCD_TextGoTo(25,7);GLCD_WriteString("OK");delayms( 500); GLCD_TextGoTo(0,8); GLCD_WriteString("Ustaw na powierzchni F -"); delays(1); GLCD_TextGoTo(25,8);GLCD_WriteString("OK");delayms( 500); // ZAMIANA WARTOŚCI ZMIENNEJ NA TEKST, W CELU WY ŚWIETLENIA. void ADCShortToString(int Value, char DotPos, char* Buffer) char Result; char Pos; for(Pos = 0; Pos < 5; Pos++) Buffer[Pos] = ' '; Pos = 0; if(Pos == DotPos) *Buffer++ = '0';*Buffer++ = '.'; Pos++; Result = Value/1000; Value -= 1000*Result; if(Result) *Buffer++ = Result + '0'; else if(Pos >= DotPos) *Buffer++ = '0'; if(Pos == DotPos) *Buffer++ = '.'; Pos++; Result = Value/100; Value -= 100*Result;

Page 47: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 47

________________________________________________________________________ if(Result) *Buffer++ = Result + '0'; else if(Pos >= DotPos) *Buffer++ = '0'; if(Pos == DotPos) *Buffer++ = '.'; Pos++; Result = Value/10; Value -= 10*Result; if(Result) *Buffer++ = Result + '0'; else if(Pos >= DotPos) *Buffer++ = '0'; if(Pos == DotPos) *Buffer++ = '.'; Pos++; if(Value) *Buffer++ = Value + '0'; else if(Pos >= DotPos) *Buffer++ = '0';

16.2.2. Podprogram sterujący przetwornikiem „ADC.c”

#include <p24hj256gp210.h> // DYREKTYWY #include "delay_moj.h" #define ADC_CTRL_TRIS TRISB // DEKLARACJE #define AN0 0 // X #define AN1 1 // Y #define AN3 3 // Z void initADC(unsigned int amask) // INICJALIZACJA ADC unsigned char amaskl,amaskh; ADC_CTRL_TRIS = ((1 << AN0) | (1 << AN1) | (1 << A N3) | (1 << AN14)); amaskh=amask/0x100; amaskl=amask%0x100; AD1PCFGL = amaskl; // ZAZNACZ PINY ANALOGOWE JAKO WEJŚCIA AD1PCFGH = amaskh; AD1CON1 = 0x04E0; // Auto konwersja po zako ńczeniu próbkowania AD1CSSL = 0; // no scanning required AD1CON3 = 0x9FFF; // max sample time = 31Tad, Tad = 2 x Tcy = 125ns >75ns AD1CON2 = 0; // use MUXA, AVss and AVdd are used as Vref+/- AD1CON1bits.ADON = 1; // turn on the ADC //initADC int readADC(unsigned short int ch) AD1CHS0 = ch; // select analog input chann el AD1CON1bits.SAMP = 1 ; // stop sampling delayus(50); AD1CON1bits.SAMP = 0; // start converting, aut omatic conversion will follow while (!AD1CON1bits.DONE); // wait to complet e the conversion

Page 48: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 48

________________________________________________________________________ return ADC1BUF0; // read the conversio n result // readADC

Page 49: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 49

________________________________________________________________________ 16.2.3. Podprogram sterujący opóźnieniem „delay.c”

#include <p24hj256gp210.h> #define DELAYS 39062 //dla kwarcu 20MHz #define DELAYMS 156 //dla 20MHz #define DELAYUS 1 //dla 20MHz void delays(unsigned short int i) T1CON = 0x8030; // TMR1 on, prescale 1:256 Tclk/ 2 while (i>0) TMR1 = 0; while ( TMR1 < DELAYS) i--; void delayms(unsigned short int i) T1CON = 0x8020; // TMR1 on, prescale 1:64 Tclk/2 TMR1 = 0; while (i>0) while ( TMR1 < DELAYMS) TMR1 = 0; i--; void delayus(unsigned short int i) unsigned short int x; x = (i<<DELAYUS)-2; while(x--);

Page 50: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 50

________________________________________________________________________ 16.2.4. Podprogram sterujący klawiaturą „keyboard.c”

#include <p24hj256gp210.h> #define tris1 TRISF #define tris2 TRISG #define k1 _RG12 #define k2 _RG13 #define k3 _RG14 #define k4 _RF2 #define k5 _RF0 #define k6 _RF1 #define k7 _RF12 #define k8 _RF13 unsigned char getkey(void) tris1 = ((1 << 0) | (1 << 1) | (1 << 2) | (1 << 12 ) | (1 << 13)); // tris2 = ((1 << 12) | (1 << 13) | (1 << 14) | (1 << 15)); // if(!k1) return 1; // 1 kolumna if(!k2) return 2; // 1 kolumna if(!k3) return 3; // 1 kolumna if(k4) return 4; // 1 kolumna if(!k5) return 5; // 1 kolumna if(!k6) return 6; // 1 kolumna if(!k7) return 7; // 1 kolumna if(!k8) return 8; // 1 kolumna return 0;

Page 51: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 51

________________________________________________________________________ 16.2.5. Podprogram sterujący wyświetlaczem „T6936C.c”

//------------------------------------------------- ------------------------------------------------ // Graphic LCD with T6963 / SAP1024B controller // Compiler : C30 //------------------------------------------------- ------------------------------------------------ #include "T6963C.h" #include <p24hj256gp210.h> #include "delay_moj.h" //------------------------------------------------- ------------------------------------------------ // Ports intalization //------------------------------------------------- ------------------------------------------------ void GLCD_InitalizeInterface(void) GLCD_DATA_TRIS = 0x00; GLCD_CTRL_TRIS = ((0 << GLCD_WR) | (0 << GLCD_RD) | (0 << GLCD_CE) | (0 << GLCD_CD) | (0 << GLCD_RESET) | (0 << GLCD_F S)); GLCD_CTRL_LAT |= ((1 << GLCD_WR) | (1 << GLCD_RD) | (0 << GLCD_CE) | (1 << GLCD_CD) | (1 << GLCD_RESET) | (1 << GLCD_F S)); //------------------------------------------------- ------------------------------------------------ // Reads dispay status //------------------------------------------------- ------------------------------------------------ unsigned char GLCD_ChceckStatus(void) unsigned int tmp; GLCD_DATA_TRIS = 0xFF; GLCD_CTRL_LAT &= ~((1 << GLCD_RD) | (1 << GLCD_CE)) ; delayus(7); tmp = GLCD_DATA_PORT; GLCD_DATA_TRIS = 0x00; GLCD_CTRL_LAT |= ((1 << GLCD_RD) | (1 << GLCD_CE)); return tmp; //------------------------------------------------- ------------------------------------------------ // Writes instruction //------------------------------------------------- ------------------------------------------------ void GLCD_WriteCommand(unsigned char command) while(!(GLCD_ChceckStatus()&0x03));

Page 52: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 52

________________________________________________________________________ GLCD_DATA_LAT = command; GLCD_CTRL_LAT &= ~((1 << GLCD_WR) | (1 << GLCD_CE)) ; delayus(2); GLCD_CTRL_LAT |= ((1 << GLCD_WR) | (1 << GLCD_CE)); //------------------------------------------------- ------------------------------------------------ // Writes data //------------------------------------------------- ------------------------------------------------ void GLCD_WriteData(unsigned char data) while(!(GLCD_ChceckStatus()&0x03)); GLCD_DATA_LAT = data; GLCD_CTRL_LAT &= ~((1 << GLCD_WR) | (1 << GLCD_CE) | (1 << GLCD_CD)); delayus(1); GLCD_CTRL_LAT |= ((1 << GLCD_WR) | (1 << GLCD_CE) | (1 << GLCD_CD)); //------------------------------------------------- ------------------------------------------------ // Reads data //------------------------------------------------- ------------------------------------------------ unsigned char GLCD_ReadData(void) unsigned int tmp; while(!(GLCD_ChceckStatus()&0x03)); GLCD_DATA_TRIS = 0xFF; GLCD_CTRL_LAT &= ~((1 << GLCD_RD) | (1 << GLCD_CE) | (1 << GLCD_CD)); delayus(2); tmp = GLCD_DATA_PORT; GLCD_CTRL_LAT |= ((1 << GLCD_RD) | (1 << GLCD_CE) | (1 << GLCD_CD)); GLCD_DATA_TRIS = 0x00; return tmp; //------------------------------------------------- ------------------------------------------------ // Sets address pointer for display RAM memory //------------------------------------------------- ------------------------------------------------ void GLCD_SetAddressPointer(unsigned int address)

Page 53: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 53

________________________________________________________________________ GLCD_WriteData(address & 0xFF); GLCD_WriteData(address >> 8); GLCD_WriteCommand(T6963_SET_ADDRESS_POINTER); //------------------------------------------------- ------------------------------------------------ // Clears text area of display RAM memory //------------------------------------------------- ------------------------------------------------ void GLCD_ClearText(void) int i; GLCD_SetAddressPointer(GLCD_TEXT_HOME); for(i = 0; i < GLCD_TEXT_SIZE; i++) GLCD_WriteDisplayData(0); //------------------------------------------------- ------------------------------------------------ // Clears characters generator area of display RAM memory //------------------------------------------------- ------------------------------------------------ void GLCD_ClearCG(void) unsigned int i; GLCD_SetAddressPointer(GLCD_EXTERNAL_CG_HOME); for(i = 0; i < 256 * 8; i++) GLCD_WriteDisplayData(0); //------------------------------------------------- ------------------------------------------------ // Clears graphics area of display RAM memory //------------------------------------------------- ------------------------------------------------ void GLCD_ClearGraphic(void) int i; GLCD_SetAddressPointer(GLCD_GRAPHIC_HOME); for(i = 0; i < GLCD_GRAPHIC_SIZE; i++) GLCD_WriteDisplayData(0x00);

Page 54: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 54

________________________________________________________________________ //------------------------------------------------- ------------------------------------------------ // Writes a single character (ASCII code) to displa y RAM memory //------------------------------------------------- ------------------------------------------------ void GLCD_WriteChar(char charCode) GLCD_WriteDisplayData(charCode - 32); // tzw. ASCII offset // Od kodu kazdego znaku ascii odejmujemy 32 //------------------------------------------------- ------------------------------------------------ // Writes null-terminated variable data to display RAM memory //------------------------------------------------- ------------------------------------------------ void GLCD_WriteVar (unsigned short int data) unsigned short int reszta; if (data<10) GLCD_WriteDisplayData(data+16); else if (data<100) reszta=data%10; data=data/10; GLCD_WriteDisplayData(data+16); GLCD_WriteDisplayData(reszta+16); else if (data<1000) reszta=data%100; data=data/100; GLCD_WriteDisplayData(data+16); data=reszta; reszta=data%10; data=data/10; GLCD_WriteDisplayData(data+16); GLCD_WriteDisplayData(reszta+16); else if (data<10000) reszta=data%1000; data=data/1000; GLCD_WriteDisplayData(data+16); data=reszta; reszta=data%100; data=data/100; GLCD_WriteDisplayData(data+16); data=reszta; reszta=data%10; data=data/10; GLCD_WriteDisplayData(data+16); GLCD_WriteDisplayData(reszta+16);

Page 55: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 55

________________________________________________________________________ else if (data<65535) reszta=data%10000; data=data/10000; GLCD_WriteDisplayData(data+16); data=reszta; reszta=data%1000; data=data/1000; GLCD_WriteDisplayData(data+16); data=reszta; reszta=data%100; data=data/100; GLCD_WriteDisplayData(data+16); data=reszta; reszta=data%10; data=data/10; GLCD_WriteDisplayData(data+16); GLCD_WriteDisplayData(reszta+16); //------------------------------------------------- ------------------------------------------------ // Writes null-terminated string to display RAM mem ory //------------------------------------------------- ------------------------------------------------ void GLCD_WriteString(char * string) while(*string) GLCD_WriteChar(*string++); //------------------------------------------------- ------------------------------------------------ // Writes null-terminated string from program memor y to display RAM memory //------------------------------------------------- ------------------------------------------------ /* void GLCD_WriteStringPgm(prog_char * string) char ch; while((ch = pgm_read_byte(string++))) GLCD_WriteChar(ch); */

Page 56: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 56

________________________________________________________________________ //------------------------------------------------- ------------------------------------------------ // Sets display coordinates //------------------------------------------------- ------------------------------------------------ void GLCD_TextGoTo(unsigned char x, unsigned char y ) unsigned int address; address = GLCD_TEXT_HOME + x + (GLCD_TEXT_AREA * y ); GLCD_SetAddressPointer(address); //------------------------------------------------- ------------------------------------------------ // Writes single char pattern to character generato r area of display RAM memory //------------------------------------------------- ------------------------------------------------ void GLCD_DefineCharacter(unsigned char charCode, u nsigned char * defChar) unsigned int address = GLCD_EXTERNAL_CG_HOME + (cha rCode * 8); unsigned char i; GLCD_SetAddressPointer(address); for(i = 0; i < 8 ; i++) GLCD_WriteDisplayData(*(defChar + i)); //------------------------------------------------- ------------------------------------------------ // Set (if color==1) or clear (if color==0) pixel o n screen //------------------------------------------------- ------------------------------------------------ void GLCD_SetPixel(unsigned char x, unsigned char y , unsigned char color) unsigned int address; unsigned char tmp; address = GLCD_GRAPHIC_HOME + (x / GLCD_FONT_WIDTH) + (GLCD_GRAPHIC_AREA * y); GLCD_SetAddressPointer(address); GLCD_WriteCommand(T6963_DATA_READ_AND_NONVARIABLE); tmp = GLCD_ReadData(); if(color) tmp |= (1 << (GLCD_FONT_WIDTH - 1 - (x % GLCD_FO NT_WIDTH))); else

Page 57: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 57

________________________________________________________________________ tmp &= ~(1 << (GLCD_FONT_WIDTH - 1 - (x % GLCD_FO NT_WIDTH))); GLCD_WriteDisplayData(tmp); //------------------------------------------------- ------------------------------------------------ // Writes display data and increment address pointe r //------------------------------------------------- ------------------------------------------------ void GLCD_WriteDisplayData(unsigned char x) GLCD_WriteData(x); GLCD_WriteCommand(T6963_DATA_WRITE_AND_INCREMENT); //------------------------------------------------- ------------------------------------------------ // Sets graphics coordinates //------------------------------------------------- ------------------------------------------------ void GLCD_GraphicGoTo(unsigned char x, unsigned cha r y) unsigned int address; address = GLCD_GRAPHIC_HOME + (x / GLCD_FONT_WIDTH) + (GLCD_GRAPHIC_AREA * y); GLCD_SetAddressPointer(address); //------------------------------------------------- ------------------------------------------------ // Displays bitmap from program memory //------------------------------------------------- ------------------------------------------------ void GLCD_Bitmap(unsigned char grafika, unsigned ch ar x, unsigned char y, unsigned char width, unsigned char height) unsigned char misio[] =; unsigned char obrazek[] =; if (grafika==1) _GLCD_Bitmap(misio, x, y, widt h, height); if (grafika==2) _GLCD_Bitmap(obrazek,x, y, wid th, height); void _GLCD_Bitmap(unsigned char bitmap[], unsigned char x, unsigned char y, unsigned char width, unsigned char height) unsigned char i,j; for(j = 0; j < height; j++) GLCD_GraphicGoTo(x, y + j);

Page 58: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 58

________________________________________________________________________ for(i = 0; i < width/GLCD_FONT_WIDTH; i++) GLCD_WriteDisplayData(bitmap[i+(GLCD_GRAPHIC_AREA *j)] ); /* void GLCD_Bitmap(unsigned char * bitmap, unsigned c har x, unsigned char y, unsigned char width, unsigned char height) unsigned char i, j; for(j = 0; j < height; j++) GLCD_GraphicGoTo(x, y + j); for(i = 0; i < width/GLCD_FONT_WIDTH; i++) GLCD_WriteDisplayData(pgm_read_byte(bitmap + i + (GLCD_GRAPHIC_AREA * j))); */ //------------------------------------------------- ------------------------------------------------ // Display initalization //------------------------------------------------- ------------------------------------------------ void GLCD_Initalize(void) GLCD_InitalizeInterface(); GLCD_CTRL_LAT &= ~(1 << GLCD_RESET); delayus(5); GLCD_CTRL_LAT |= (1 << GLCD_RESET); #if (GLCD_FONT_WIDTH == 8) GLCD_CTRL_LAT &= ~(1 << GLCD_FS); #endif GLCD_WriteData(GLCD_GRAPHIC_HOME & 0xFF); GLCD_WriteData(GLCD_GRAPHIC_HOME >> 8); GLCD_WriteCommand(T6963_SET_GRAPHIC_HOME_ADDRESS); GLCD_WriteData(GLCD_GRAPHIC_AREA); GLCD_WriteData(0x00); GLCD_WriteCommand(T6963_SET_GRAPHIC_AREA); GLCD_WriteData(GLCD_TEXT_HOME); GLCD_WriteData(GLCD_TEXT_HOME >> 8); GLCD_WriteCommand(T6963_SET_TEXT_HOME_ADDRESS);

Page 59: AUTOREFERAT Spis treści

Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 59

________________________________________________________________________ GLCD_WriteData(GLCD_TEXT_AREA); GLCD_WriteData(0x00); GLCD_WriteCommand(T6963_SET_TEXT_AREA); GLCD_WriteData(GLCD_OFFSET_REGISTER); GLCD_WriteData(0x00); GLCD_WriteCommand(T6963_SET_OFFSET_REGISTER); GLCD_WriteCommand(T6963_DISPLAY_MODE | T6963_GRAPH IC_DISPLAY_ON | T6963_TEXT_DISPLAY_ON); GLCD_WriteCommand(T6963_MODE_SET | 0);

BIBLIOGRAFIA

1. Kaczorek T.: Teoria Sterowania i Systemów, Wydawnictwo Naukowe PWN, Warszawa, 1999. 2. Borowik B.: Interfacing PIC microcontrollers to Peripheral Devices, Springer, 2010. 3. Borowik B.: Feasibility of the Using Zigbee Sensor Network for Measuring Vibration

Parameters, Oficyna druk. Zdz. Spyra, Kraków, 2010. 4. Di Jasio L.: Programming 16-bit PIC Microcontrollers in C: Learning to Fly the PIC24,

Newnes, Burlington 2007. 5. 16-Bit Language Tools Libraries, DS51456F, Microchip Technology Inc., 2009. 6. MPLAB® C30 C Compiler User’s Guide, DS51284J. Microchip Technology Inc., 2009. 7. MPLAB® IDE, SIMULATOR, EDITOR USER’S GUIDE, DS51025E, Microchip Technology

Inc., 2001. 8. PIC24HJXXXGPX06/X08/X10 Data Sheet High-Performance, 16-Bit Microcontrollers,

DS70175F, Microchip Technology Inc., 2007. 9. Specyfikacja akcelerometru MMA7260Q Three Axis Low-g Micromachined Accelerometer,

Rev 0, 04/2005, Freescale Semiconductor, Inc., 2005. 10. Specyfikacja Modułu Graficznego LCM ABG240128N17-DIW-R 11. Tadeusiewicz R.: Neural networks as a tools for solving engineering problems [In Polish: Sieci

neuronowe jako narzędzia do rozwiązania zadań inżynierskich], Napędy i Sterowanie ISSN 1507-7764, nr 2 (118), 2009, ss. 92-102 MNiSW: 2

12. Tadeusiewicz R., Ogiela L., Ogiela M.R.: The Automatic Understanding Approach to Systems Analysis and Design, International Journal of Information Management, Vol. 28, Nr.1, 2008, pp 38-48 LF; MNiSW: 15

13. Tadeusiewicz R.: Special Issue on "Dynamic Systems, Stability, Controllability, and Automatic Control". Bulletin of the Polish Academy of Sciences - Technical Sciences, Vol. 56, No. 4, 2008, pp. 307-308 LF; MNiSW: 6

14. Zeng Y., Skibniewski M.J., Tadeusiewicz R.: Enhancing Collaboration in Project-Based Organizations with Information Technology: A Multi-Level Strategy. In PMI Research Conference "Defining the Future of Project Management" (ISBN: 978-1-933890-48-7) PMI, Warsaw, 2008, CD Version only, pp. 1-13

15. Tadeusiewicz R.: The way from physical discoveries to cultural transformations quoting the development of electronics as an example [In Polish: Droga od fizyki do przemian kulturalnych na przykładzie rozwoju elektroniki]. Rozdział w książce Warczewski J. (red.): Oblicza fizyki -

Page 60: AUTOREFERAT Spis treści