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
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
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.
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.
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.
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.
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
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.
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.
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).
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:
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.
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.
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)
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.
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.
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
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.
Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 19
________________________________________________________________________
Rys. 14. Schemat blokowy modułu ADC 1
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
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]
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.
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
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.
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.
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
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
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.
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.
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.
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.
Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 32
________________________________________________________________________
Rys. 29. Widok wykonanego systemu procesorowego MIKROKON6
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
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
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
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
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.
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.
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.
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";
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Ę
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")))
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
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);
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);
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;
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
Bohdan Borowik Interfacing PIC microcontrollers to Peripheral Devices 48
________________________________________________________________________ return ADC1BUF0; // read the conversio n result // readADC
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--);
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;
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));
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)
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);
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);
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); */
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
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);
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);
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 -