VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky
D a t a l o g g e r s U S B ro z h r a n í m bakalářská práce
Autor: Tomáš Nikl Obor: Počítačové systémy Vedoucí práce: Ing. David Matoušek Jihlava 2011
Anotace Tato bakalářská práce popisuje návrh a konstrukci zařízení pro zaznamenávání aktuální teploty a vlhkosti, které je připojitelné k počítači přes USB rozhraní. Zařízení je schopné ukládat naměřené hodnoty po dobu řádově několika měsíců až roků. Po ukončení měření je možné naměřené údaje stáhnout do počítače pomocí vytvořené aplikace. Bakalářská práce se dále zaměřuje na komunikaci zařízení s počítačem a komunikaci s teplotním a vlhkostním senzorem a pamětí EEPROM. Program pro mikrokontrolér je naprogramován v jazyce C18 a vytvořen v prostředí MPLAB IDE s použitím volně dostupných knihoven Microchip Solution. Aplikace pro počítač je vytvořena v prostředí Microsoft Visual Studio 2010 prostřednictvím jazyka C#.
Klíčová slova USB, HID, PIC18F, teplotní senzor, vlhkostní senzor, záznamník teploty, záznamník vlhkosti
Annotation This thesis describes design and construction of device for recording the actual temperature and humidity, which is connectable to a PC via USB interface. The device is able to store measured over a period of several months to years. After the measurement readings can be downloaded to your computer by using the application. This thesis also focuses on communication device with a computer and communication with a temperature and humidity sensors and EEPROM memory. The program for the microcontroller is programmed in the C18 language and developed in the MPLAB IDE environment, using freely available libraries Microchip Solutions. PC software is developed in Microsoft Visual Studio 2010 with C# language.
Key words USB, HID, PIC18F, temperature sensor, humidity sensor, temperature logger, humidity logger
Na tomto místě bych chtěl poděkovat vedoucímu práce Ing. Davidu Matouškovi za odbornou pomoc při tvorbě mé práce a možnosti zapůjčení technických prostředků pro její realizaci.
Prohlašuji, že předložená bakalářská práce je původní a zpracoval/a jsem ji samostatně. Prohlašuji, že citace použitých pramenů je úplná, že jsem v práci neporušil/a autorská práva (ve smyslu zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů, v platném znění, dále též „AZ“). Souhlasím s umístěním bakalářské práce v knihovně VŠPJ a s jejím užitím k výuce nebo k vlastní vnitřní potřebě VŠPJ . Byl/a jsem seznámen/a s tím, že na mou bakalářskou práci se plně vztahuje AZ, zejména § 60 (školní dílo). Beru na vědomí, že VŠPJ má právo na uzavření licenční smlouvy o užití mé bakalářské práce a prohlašuji, že s o u h l a s í m s případným užitím mé bakalářské práce (prodej, zapůjčení apod.). Jsem si vědom/a toho, že užít své bakalářské práce či poskytnout licenci k jejímu využití mohu jen se souhlasem VŠPJ, která má právo ode mne požadovat přiměřený příspěvek na úhradu nákladů, vynaložených vysokou školou na vytvoření díla (až do jejich skutečné výše), z výdělku dosaženého v souvislosti s užitím díla či poskytnutím licence. V Jihlavě dne ...................................................... Podpis
Obsah 1
Úvod a cíl práce....................................................................................................... 7
2
Popis řešeného problému ....................................................................................... 8
3
Popis struktury bakalářské práce ......................................................................... 9
4
Analýza a návrh implementace ........................................................................... 10 4.1 4.2 4.3 4.4 4.5 4.6 4.7
5
Analýza možností implementace USB rozhraní ............................................. 10 Mikrokontrolér................................................................................................ 12 Senzory teploty a vlhkosti............................................................................... 15 Systém reálného času...................................................................................... 17 Paměť pro uložení naměřených hodnot .......................................................... 18 Vývojový software pro mikrokontrolér .......................................................... 19 Vývojový software pro aplikaci do počítače .................................................. 20
Návrh zapojení ...................................................................................................... 21 5.1 5.2 5.3 5.4 5.5 5.6
6
Blokové schéma zapojení ............................................................................... 21 Propojení EEPROM paměti s mikrokontrolérem ........................................... 21 Propojení senzoru SHT11 s mikrokontrolérem .............................................. 22 Zapojení USB konektoru ................................................................................ 22 Zapojení konektoru pro programování osazených součástek ......................... 23 Plošný spoj včetně osazených součástek ........................................................ 24
Popis implementace nestandardních částí řešení............................................... 25 6.1 6.2 6.3 6.4 6.5 6.6 6.7
7
Komunikace mikrokontroléru prostřednictvím USB rozhraní ....................... 25 Komunikace obslužné aplikace prostřednictvím USB rozhraní ..................... 28 Komunikace mikrokontroléru s EEPROM pamětí ......................................... 30 Komunikace mikrokontroléru se senzorem SHT11........................................ 34 Režim snížené spotřeby .................................................................................. 36 Systém reálného času...................................................................................... 38 Přepočet naměřených hodnot.......................................................................... 40
Závěr ...................................................................................................................... 42
Seznam použité literatury ............................................................................................ 45 Seznam tabulek ............................................................................................................. 48 Seznam použitých symbolů a zkratek......................................................................... 49
Přílohy A B C D E
Uživatelská příručka aplikace Schéma zapojení Plošné spoje Seznam použitých součástek Obsah přiloženého CD
1 Úvod a cíl práce Mnoho domácností a firem má v dnešní době potřebu měřit ve svém okolí teplotu a vlhkost vzduchu, ať už se jedná o okamžité měření nebo o dlouhodobé registrační měření v řádu hodin, dnů až měsíců. Cílem mé bakalářské práce je navrhnout zařízení umožňující měření teploty a vlhkosti a následně provést jeho realizaci jak na straně jeho hardwaru, tak na straně jeho softwaru. Zařízení bude mít největší uplatnění při měření a záznamu hodnot ve skladovacích prostorech, prostorech postižených velkou vlhkostí a plísněmi až po kontrolu vytápění a klimatizace v objektu. Je naprosto jasné, že každé moderní měřící zařízení by mělo umožnit komunikaci s počítačem z důvodu zpracování naměřených hodnot a nastavení jednotlivých vlastností zařízení, ať už se jedná o nastavení aktuálního času a data, periody vzorkování, kalibrace senzoru nebo požadované přesnosti naměřených hodnot. Většina nových osobních i průmyslových počítačů přestává být vybaveno sériovým portem. Z tohoto důvodu je kladen velký důraz na možnost připojení prostřednictvím USB1 rozhraní, které je v dnešní době nejvíce rozšířené napříč celou výpočetní technikou. Další důležitou vlastností je přenositelnost zařízení a doba běhu na baterie. Součástí bakalářské práce je také naprogramování softwarové aplikace, která umožní nastavení měření a stažení naměřených údajů a jejich uložení v některém ze standardů pro ukládání dat pro jejich následné zpracování.
1
Univerzální sériová sběrnice sloužící k připojení periferií k počítači.
7
2 Popis řešeného problému Funkčnost celého zařízení se sice na první pohled jeví jako primitivní, při hlubším nahlédnutí do problematiky je ale nutné implementovat několik základních podproblémů, a to: •
Komunikace zařízení s počítačem pomocí USB rozhraní – je nutné zvolit vhodný mikrokontrolér, který v sobě implementuje USB rozhraní. Další možné řešení je použití mikrokontroléru podporujícího sériové rozhraní a na něj následně napojit převodník sériového rozhraní na USB rozhraní.
•
Systém reálného času – je zřejmé, že v okamžiku záznamu hodnot bude nutné znát přesný čas. Pro řešení tohoto problému existuje také více variant, například použití obvodu reálného času nebo výběr mikrokontroléru s čítačem/časovačem k tomu určeným.
•
Měření aktuální teploty a vlhkosti – jednou z nejdůležitějších vlastností zařízení je správné měření těchto veličin. Je proto nezbytné porovnat různé způsoby a metody měření, provést porovnání běžně dostupných teplotních a vlhkostních čidel a na základě těchto výsledků vybrat to správné.
•
Uložení naměřených hodnot do interní paměti zařízení – pro naměřené údaje je nutné vybrat vhodný typ paměti a její velikosti s ohledem na paměťovou náročnost několika stovek až tisíců naměřených hodnot.
•
Režim snížené spotřeby pro měření v delších časových intervalech – jelikož od zařízení je očekávána přenositelnost a z ní vyplývající napájení z baterií, je nutností brát ohled na spotřebu jednotlivých součástí, nejvíce pak na spotřebu mikrokontroléru. Je nutné zhodnotit použitelné metody pro snížení spotřeby zařízení a provést jejich implementaci.
V tomto odstavci jsem se snažil obecně přiblížit jednotlivé úkoly a vlastnosti, které by měly být v zařízení implementovány. Hlubší náhled do problematiky bude proveden v kapitole analýza a návrh implementace.
8
3 Popis struktury bakalářské práce V kapitole 4.1 naznačuji různé možnosti řešení komunikace zařízení prostřednictvím USB sběrnice a na základě tohoto porovnání možných implementací jsem provedl výběr nejvýhodnějšího řešení. Na základě tohoto výběru jsou v kapitole 4.2 porovnány mikrokontroléry vhodné k tomuto účelu a jejich důkladným srovnáním je proveden výběr použitého mikrokontroléru. V kapitole 4.3 je srovnáno několik typů senzorů pro snímání požadovaných veličin společně s výběrem patřičného senzoru, který je použitý v zařízení. Kapitola 4.4 popisuje možné způsoby řešení implementace systému reálného času. Volba vhodné paměti je popsána v kapitole 4.5. Obecný návrh zapojení a komunikace mikrokontroléru vzhledem k paměti, senzoru, komunikaci s počítačem a programátorem nastiňuje kapitola 5.1. Podrobné informace o zapojení paměti uvádí kapitola 5.2, senzoru kapitola 5.3, USB konektoru kapitola 5.4 a programovací sběrnici kapitola 5.5.
Konečné
zapojení
plošného
spoje
je
rozebráno
v kapitole 5.6.
Analýza a návrh implementace nestandardních částí zařízení je řešena v kapitole 6 (včetně příkladů zdrojových kódů u jednotlivých částí). Kapitola 6.1 rozebírá a popisuje vybrané řešení USB komunikace mezi zařízením a počítačem na straně programu zařízení. Řešení USB komunikace na straně obslužné aplikace uvádí kapitola 6.2. V kapitole 6.3 je detailněji popsáno řešení komunikace mikrokontroléru s externí EEPROM pamětí připojenou prostřednictvím I2C sběrnice. Podrobně jsou rozebrány jednotlivé sekvence komunikace (začátek komunikace, načítání nebo ukládání dat, ukončení komunikace) včetně zdrojových kódů pro uvedené sekvence. Komunikace mikrokontroléru se senzorem SHT11 je detailněji popsána v kapitole 6.4. Řešení režimu snížené spotřeby včetně uvedení funkcí pro přepínání mezi normálním režimem běhu a režimem snížené spotřeby mikrokontroléru naznačuje kapitola 6.5. Zvolené řešení systému reálného času popisuje kapitola 6.6. Poslední částí analýzy a návrhu implementace je kapitola 6.7, která popisuje výpočet hodnot teploty a vlhkosti ze surových dat přijatých se senzoru SHT11. V kapitole 7 je uvedeno zhodnocení této práce společně s možností vylepšení zařízení. V příloze A je uživatelská příručka ovládací aplikace na straně počítače, která naznačuje průběh instalace ovladačů v počítači a následné ovládaní jednotlivých prvků aplikace. Příloha B uvádí schéma zapojení zařízení. V příloze C je uvedena deska plošného spoje zařízení společně s deskou pro senzor SHT11. Příloha D obsahuje seznam všech použitých součástek. Konečně příloha E naznačuje obsah CD, které je přiloženo k této bakalářské práci.
9
4 Analýza a návrh implementace Kapitola analýza a návrh implementace patří nepochybně mezi nejdůležitější části této práce. Je zcela jasné, že bez důkladné analýzy všech komponentů a součástí zařízení nelze přistoupit k jeho konstrukci.
4.1 Analýza možností implementace USB rozhraní Již v úvodu jsem popisoval možnosti připojení zařízení k počítači a jasně vyplynulo, že v této době je mezi počítači nejvíce rozšířeno rozhraní USB. Z tohoto důvodu je cílem této práce použít zvolené rozhraní. Existuje více variant jak připojit mikrokontrolér k počítači za pomocí USB rozhraní. Rád bych na tomto místě popsal některé možnosti.
4.1.1 Použití převodníku USB – UART První možností je použití univerzálního sériového rozhraní UART2, které je dostupné u většiny mikrokontrolérů a následně na něj připojit konvertor USB – UART. Mezi nejznámější a nejpoužívanější konvertor patří obvod typu FT232xx od firmy FTDI Chip. Velkou výhodou tohoto řešení je jednoduchost implementace jak na straně software mikrokontroléru tak i na straně software v počítači, protože je nutné vše řešit jen na vrstvě komunikace sériovým kanálem. Nevýhodou může být rychlost komunikace, potřeba dalšího integrovaného obvodu na desce zařízení a s tím související cena zařízení. V dnešní době se totiž cena konvertoru pohybuje ve stejné, možná i ve vyšší cenové relaci, než mikrokontrolér s vlastním hardwarovým USB rozhraním. Poslední nevýhodou může být i zvýšená spotřeba z důvodu napájení konvertoru, to lze ale samozřejmě řešit přímým napájením s USB portu. Obrázek 1 uvádí obecné schéma implementace při použitím konvertoru USB – UART.
Obrázek 1: Zapojení při použití konvertoru USB - UART
2
Rozhraní umožňující sériovou komunikaci.
10
4.1.2 Mikrokontrolér s vlastním hardwarovým USB rozhraním Druhou, a podle mě nejvýhodnější možností, je při implementaci zařízení použít mikrokontrolér, který má v sobě integrovanou hardwarovou podporu USB rozhraní. Dříve byla dostupnost těchto mikrokontrolérů nízká, v této době jich je ale na trhu dostatek. Jako příklad bych rád uvedl dnes velmi populární mikrokontroléry řady PIC18F2455/2550/4455/4550 od firmy Microchip nebo modely AT90USBxxxx, které vyrábí
firma
Atmel.
Tyto
mikrokontroléry
podporují
rychlejší
(Full speed)
i pomalejší (Low speed) režim rychlosti přenosu dat. Výrobci těchto mikrokontrolérů také poskytují výbornou podporu při implementaci USB rozhraní a dokonce nabízí volně ke stažení již hotové knihovny řešící veškerou komunikaci jak na straně programu v mikrokontroléru, tak i na straně aplikace v počítači. Pro mé řešení má podle mého názoru tato implementace nejvíce výhod, a proto bude při výběru mikrokontroléru pro mé zařízení kladen velký důraz na to, aby měl v sobě obsaženu hardwarovou podporu USB
rozhraní.
Obrázek 2
uvádí
obecné
schéma
implementace
při
použití
mikrokontroléru s vlastním hardwarovým rozhraním.
Obrázek 2: Zapojení při použití mikrokontroléru s vlastním hardwarovým rozhraním
4.1.3 Softwarová emulace USB rozhraní Další možností komunikace mikrokontroléru s počítačem za pomocí USB rozhraní je softwarová emulace celého protokolu USB. Při použití softwarové emulace je nutné do vlastního programu mikrokontroléru přidat všechny operace probíhající v protokolu USB. Dále je pak nutné vyhradit některé dva vstupně/výstupní vývody mikrokontroléru, na které jsou nastaveny datové vodiče USB sběrnice. Obecné schéma zapojení je v tomto případě stejné jako obecné schéma zapojení mikrokontroléru s vlastním hardwarovým rozhraním, které uvedené na obrázku 2. Nevýhodou tohoto řešení může být vyšší hardwarová náročnost na mikrokontrolér, protože není možné použít již implementované rozhraní, které provádí samostatně většinu základních činností USB protokolu. Výhodou může být cena tohoto řešení, která je ze všech případů jednoznačně nejnižší.
11
4.2 Mikrokontrolér Mezi základní stavební prvek celého zařízení nepochybně patří vhodný typ mikrokontroléru. Na trhu je k dispozici nespočetné množství mikrokontrolérů, které se liší výkonem, architekturou, podporovanými rozhraními, velikostí paměti, ať už se jedná o programovou nebo datovou, čítači, časovači a dalšími parametry, které již nebudu jmenovat. Při provádění implementace zařízení pokládám za nejdůležitější parametry: •
Vestavěné USB rozhraní
•
Velikost FLASH paměti
•
Sběrnice I2C3
•
Čítač/časovač pro systém reálného času
•
Režim snížené spotřeby
•
Dostupnost na českém trhu
•
Dostupná dokumentace a knihovny k ovládání periferií mikrokontroléru
Pro srovnání uvedu v následujících odstavcích několik mikrokontrolérů, které vyhovují většině stanovených požadavků.
4.2.1 Mikrokontroléry Atmel Od firmy Atmel je v dnešní době k dispozici řada modelů mikrokontrolérů s hardwarovou podporou USB rozhraní. Jedná se o odlišně výkonné a vybavené modely řad
ATmega8U2/16U2/32U2,
AT90USB82/162,
AT90USB646/647/1286/1287
a mnoho dalších. Všechny tyto mikrokontroléry v sobě integrují plnou hardwarovou podporu USB rozhraní pracující jak nižší (Low Speed) rychlostí přenosu, tak i vyšší (Full Speed) rychlostí přenosu. Mikrokontroléry popsaných řad podporují všechny standardní periférie a rozhraní, které jsou potřeba pro implementaci mého zařízení. Nevýhodou je podle mého názoru nižší podpora softwarových knihoven pro ovládání mikrokontroléru. Také dostupnost některých modelů je velice nízká.
3
Je dvouvodičová sériová sběrnice umožňující komunikaci mezi jednotlivými integrovanými obvody.
12
4.2.2 Mikrokontroléry Microchip Firma Microchip nabízí několik řad mikrokontrolérů splňující tyto požadavky. Nejnižší řada je z rodiny PIC18F. Nejsnáze dostupné modely na našem trhu jsou mikrokontroléry PIC18F2455/2550/4455/4550, a proto zde uvedu jejich krátký popis. Jedná se o středně výkonné osmibitové mikrokontroléry s architekturou RISC podporující harvardskou architekturu4. Implementují v sobě plnou hardwarovou podporu USB rozhraní pracující jak nižší (Low Speed) rychlostí přenosu tak i vyšší (Full Speed) rychlostí přenosu. Mimo jiné v sobě mají i mnoho dalších důležitých periferních obvodů. V následujícím výpisu uvedu ty nejzákladnější a nejvíce se hodící při použití v mém zařízení. •
Nízká spotřeba díky nanoWatt technologii
•
Programová paměť typu Flash 24-32 KB
•
Režimy snížené spotřeby (Idle a Sleep)
•
Podpora SPI sběrnice nebo I2C sběrnice
•
Hardwarová podpora USB rozhraní
•
Čítač/časovač Timer1 použitelný s hodinovým oscilátorem pro systém reálného času
Jelikož uvedené vlastnosti plně vyhovují nárokům na implementaci zařízení, a proto se již nebudu zabývat vyššími řadami mikrokontrolérů, mezi které nepochybně patří šestnáctibitové mikrokontroléry PIC24 nebo třicetidvoubitové mikrokontroléry PIC32, které mají nepřiměřeně vysoký výkon s ohledem na nároky zařízení. Také jejich cena je řádově vyšší, což by se samozřejmě výrazně projevilo na ceně celého zařízení.
4.2.3 Popis vybraného mikrokontroléru PIC18F4550 Mnoho důvodů mě vedlo k tomu, že jsem si po dlouhém rozhodování vybral mikrokontrolér od firmy Microchip model PIC18F4550. Hlavním důvodem výběru byla velice rychlá dostupnost na našem trhu a také možnost zapůjčení programátoru PICkit 2 taktéž od firmy Microchip z Vysoké školy Polytechnické v Jihlavě, katedry elektrotechniky a informatiky, kde studuji. Dalšími důvody jsou výborné dokumentace k jednotlivým
periferiím
mikrokontroléru,
velmi
dobrá
dostupnost
a kvalita
softwarových knihoven i s příklady a v neposlední řadě také výborné diskusní fórum 4
Označuje architekturu mikrokontroléru, u kterého je paměť programu oddělena od datové paměti.
13
přímo na internetových stránkách výrobce, kde je možné najít řešení pro mnoho problémů s těmito mikrokontroléry. Jedná se o osmibitový mikrokontrolér, který je dostupný ve dvou provedení pouzder. První je standardní PDIP s počtem 40 pinů a druhá je varianta pro možnost povrchové montáže a to TQFP s počtem 44 pinů. Pro mou implementaci a nedostupnost nástrojů pro povrchovou montáž jsem si vybral první variantu. K vybrání této varianty mě také vedla možnost vyzkoušet si konečné zapojení předem na nepájivém poli. Zapojení vývodů vybraného pouzdra PDIP je uvedeno na obrázku 4. Mikrokontrolér obsahuje programovou paměť typu FLASH o velikosti 32 KB a dva typy datové paměti, z nichž jedna je typu RAM o velikosti 2 KB a druhá EEPROM o velikosti 256 B. K dispozici má
jeden
osmibitový
a tři
šestnáctibitové
čítače/časovače,
desetibitový
A/D (analogově/digitální) převodník, tři zdroje přerušení a sériový port podporující sběrnice SPI a I2C. Umožňuje komunikovat prostřednictvím sériové sběrnice USART a USB rozhraní. Mikrokontrolér může být přepnutý do jednoho ze tří pracovních módů (Run, Idle a Sleep). U módů Run a Idle lze také snadno přepínat hodinový zdroj a to buď
z interního
oscilátoru
mikrokontroléru,
hlavního
externího
oscilátoru
mikrokontroléru nebo z oscilátoru určeného pro čítač/časovač Timer1. Všechny módy běhu mikrokontroléru i s jejími vlastnostmi jsou uvedeny na obrázku 3. Maximální pracovní frekvence mikrokontroléru je 48 MHz. Jeho cena na našem trhu se pohybuje od 120 Kč do 170 Kč. Popis vybraného mikrokontroléru byl vytvořen na základě technické dokumentace (1).
Obrázek 3: Módy běhu mikrokontroléru PIC18F4550 [převzato z (1)]
14
Obrázek 4: Zapojení vývodů mikrokontroléru PIC18F4550 [převzato z (1)]
4.3 Senzory teploty a vlhkosti Senzory teploty a vlhkosti použitelné v elektronických obvodech pracují na principu převodu neelektrické veličiny (teplota, vlhkost, tlak, …) na veličinu elektrickou. Senzory lze rozdělit jednak podle principu měření (odporové kovové, odporové polovodičové, kapacitní, termoelektrické nebo polovodičové s PN přechodem) tak i podle místa, kde dochází k A/D převodu na veličiny teploty a vlhkosti.
4.3.1 Senzory s analogovým výstupem Senzory s analogovým výstupem mají na svém výstupu určitou elektrickou veličinu, která koresponduje s aktuální měřenou neelektrickou veličinou na senzoru. Změřením těchto elektrických veličin dokážeme získat výsledek měření. Pro konečné získání výsledku měření je tedy zapotřebí senzor společně s A/D převodníkem. Potřeba A/D převodníku nebývá ve většině případech problémem, jelikož většina dnešních mikrokontrolérů má tento převodník jako svoji integrovanou periferii. Příkladem senzoru s analogovým výstupem může být teplotní senzor LM35 od výrobce National Semiconductor. LM35 má na svém výstupu napětí závislé na aktuální teplotě. Pokud teplota na senzoru vzroste o jeden teplotní stupeň, vzroste zároveň i napětí na výstupu a to o 10 mV.
15
4.3.2 Inteligentní senzory s digitálním výstupem Inteligentní senzory s digitálním výstupem v sobě integrují samotný senzor i obvody pro A/D převod. Výstupem senzoru s digitálním výstupem jsou tedy plně digitální data. To má velkou výhodu v eliminaci chybovosti způsobené rušením a ztrátami na vedení. Většina těchto senzorů komunikuje přes jednovodičovou (1-Wire) sběrnici nebo dvouvodičovou sběrnici (SPI, I2C). Velkou výhodou těchto senzorů je také to, že jsou kalibrovány již od výroby a mají předem stanovenou přesnost. Příkladem senzoru s digitálním výstupem může být teplotní senzor DS18S20 jehož výrobce je Dallas Semiconductor. Dalším příkladem může být teplotní a vlhkostní senzor s digitálním výstupem SHT11, které vyrábí firma Sensirion. Vzhledem k jeho přesnosti a dostupnosti na našem trhu jsem se ho rozhodl implementovat do mého měřícího zařízení. V odstavci 4.3.3 si dovolím uvést detailnější popis vzhledem k jeho použití.
4.3.3 Popis vybraného senzoru SHT11 SHT11 je teplotní a vlhkostní senzor umožňující komunikaci po dvoudrátové sériové sběrnici. Výstupem ze senzoru jsou tedy plně digitální data již kalibrovaných naměřených hodnot, které jsou v nejvyšším rozlišení 14 bitů pro teplotu a 12 bitů pro vlhkost. V jednom čipu jsou integrovány senzory teploty a vlhkosti, čtrnáctibitový A/D převodník, kalibrační paměť a sériové dvoudrátové rozhraní. Pro měření teploty slouží tzv. „Band gap“ senzor. K měření vlhkosti slouží speciální kapacitní senzor vyvinutý a patentovaný firmou Sensirion. Použití technologie CMOSens® zaručuje vynikající spolehlivost a stabilitu. Senzor má také velmi nízkou spotřebu při měření a dokáže se automaticky přepínat do režimu snížené spotřeby. Jako nevýhodu tohoto senzoru bych považoval nekompatibilitu se standardem sériové sběrnice I2C. Pro komunikaci je nutné používat odlišné sekvence přenosu dat než u standardizovaného protokolu I2C sběrnice. Z tohoto důvodu budou v návrhu propojení senzoru SHT11 s mikrokontrolérem vyhrazeny jeho dva vstupně/výstupní porty pro situaci, kdy by opravdu nešlo senzor navázat na hardwarovou sběrnici mikrokontroléru společně s pamětí EEPROM. Obrázek 5 znázorňuje pouzdro senzoru SHT11. Tabulka 1 uvádí základní vlastnosti senzoru SHT11. Popis vybraného senzoru byl vytvořen na základě technické dokumentace (4).
16
Obrázek 5: Pouzdro senzoru SHT11 [převzato z (4)] Tabulka 1: Základní vlastnosti a parametry senzoru SHT11 [převzato z (4)]
Parametr Napájecí napětí
Stav
Minimální 2,4
Režim spánku Měření Průměr
Spotřeba
Teplota Rozlišení Vlhkost Teplota Vlhkost Teplota Vlhkost
Přesnost Rozsah měření
Typický 3,3 2
0,04 12 0,4 8
3 90 0,01 14 0,05 12 ±0,4 ±3,0
Maximální Jednotky 5,5 V µW 5
0,01 14 0,05 12
-40 0
123,8 100
mW µW °C bit % bit °C % °C %
4.4 Systém reálného času Již v úvodu jsem uvedl, že je nutné po celou dobu měření znát přesný čas a datum, který musí být uložen společně s každou zaznamenanou hodnotou teploty a tlaku. Tento problém
řeší
tzv.
systém
reálného
času.
Lze
ho
implementovat
přímo
v mikrokontroléru, nebo je možné použít externí obvod reálného času. V druhé variantě se k mikrokontroléru pomocí sběrnice připojí specializovaný obvod, který po poslání správného aktuálního času a datu tyto údaje v sobě udržuje a samozřejmě i aktualizuje. Pro získání aktuálního času a datu pak stačí jen poslat požadavek do obvodu reálného času a ten zpět odešle potřebné údaje. Výhodou tohoto řešení je možnost k obvodu reálného času připojit zálohovací baterii, která při výpadku napájení celého zařízení udrží vždy ten správný čas a datum. Já se ale rozhodl implementovat v mém zařízení první variantu, a to řešit systém reálného času přímo za pomocí mikrokontroléru, protože v sobě má přímo integrovaný čítač/časovač pro tuto úlohu i s možností připojení
17
přesného externího hodinového krystalu s velmi nízkým odběrem. Posledním problémem je zvolit správný formát, ve kterém budou časy a data uložené. Jednou z možností by bylo uložení jednotlivých položek času (sekundy, minuty a hodiny) a data (den, měsíc, rok) odděleně od sebe. Pro všechny položky by to znamenalo paměťovou náročnost pro jeden záznam času nejméně 5 B. Z důvodu snadnější implementace jsem se rozhodl použít pro uchování aktuálního času formát typu UNIX Time5. V mém návrhu má mnoho nesporných výhod, mezi které nepochybně patří nižší paměťová náročnost pro jeden záznam času 4 B a jednoduchý posun času. Mikrokontrolér s použitím externího hodinového krystalu 32 kHz umí jednoduše odměřit interval sekundy. Tímto postupem se celá situace usnadňuje, protože pro posun času stačí každý odměřený interval sekundy inkrementovat UNIX Time hodnotu.
4.5 Paměť pro uložení naměřených hodnot Z kapitol 4.3.3 a 4.4 vyplývá, že pro uložení jedné naměřené hodnoty je nutné mít k dispozici 58 bitů. Jelikož se sériové paměti adresují po 8 bitových blocích, je pro uložení hodnot vyhrazeno 64 bitů (8 B) paměti. Uložení 58 bitů za sebou je samozřejmě možné, ale řešení je zbytečně složité a nestandardní. Tabulka 2 ukazuje paměťovou náročnost jednoho uloženého záznamu teploty a tlaku společně s časem ve formátu UNIX Time. Tabulka 2: Paměťová náročnost jednoho uloženého záznamu teploty a vlhkosti
Čas a datum (UNIX Time) 4B
Teplota 2B
Vlhkost 2B
Je několik možných řešení jakou paměť pro uložení naměřených hodnot zvolit. Před zvolením paměti je ale nejdříve nutné stanovit její minimální kapacitu s ohledem na minimální počet uložených hodnot v zařízení. Je zřejmé, že zařízení je určeno k dlouhodobému měření, a tak by mělo být schopné v sobě uchovat minimálně 1000 naměřených hodnot. Jednoduchý výpočet (1000 * 8 B) naznačuje, že je zapotřebí alespoň 8 KB datové paměti. Jednoduchým řešením by bylo využít datovou paměť EEPROM přímo v mikrokontroléru. Vybraný mikrokontrolér PIC18F4550 má k dispozici pouze 256 B této paměti, proto je tohle řešení nevyhovující. Je zřejmé, že je nutné do zařízení implementovat externí datovou paměť. V úvahu připadají možnosti 5
Je způsob zápisu času používaný v oblasti informačních technologií. UNIX Time je číslo, které označuje
18
připojení externí EEPROM paměti připojené přes sériovou nebo paralelní sběrnicí, je také možné použít modernější způsob, kterým je připojení FLASH paměti prostřednictvím některého z typů paměťových karet (Secure Data, Compact Flash, Memory Stick nebo MultiMedia Card). Kapacita těchto paměťových karet je ale v dnešní době tak velká (řádově stovky MB), že by toto řešení bylo zbytečně složité a nákladné. Rozumnějším řešením je podle mého názoru připojení externí EEPROM paměti připojené přes sériovou nebo paralelní sběrnici. Z důvodu, že vybraný mikrokontrolér disponuje hardwarovou podporou sériové sběrnice I2C, rozhodl jsem se použít externí EEPROM paměť připojenou přes sériovou sběrnici I2C.
4.5.1 Popis vybrané EEPROM paměti 24LC128 Jedná se o paměť typu EEPROM od výrobce Microchip připojitelnou přes sériovou dvoudrátovou I2C sběrnici disponující kapacitou 16 KB (128 Kbit). Tato paměť má velice nízkou spotřebu díky použité nízkopříkonové CMOS technologii. Typická spotřeba paměti je 100 nA v klidovém stavu a 3 mA při zápisu/čtení. Dokáže pracovat při napájecím napětí 2,5 – 5,5 V. Paměť je možno téměř milionkrát přepsat. Obrázek 6 naznačuje pouzdro a vývody EEPROM paměti 24LC128. Popis vybrané paměti byl vytvořen na základě technické dokumentace (5).
Obrázek 6: Pouzdro a vývody EEPROM paměti 24LC128 [převzato z (5)]
4.6 Vývojový software pro mikrokontrolér Vzhledem k tomu, že mi bylo umožněno zapůjčit si programátor mikrokontrolérů Microchip PICkit 2, jak jsem uvedl v kapitole 4.2.3, rozhodl jsem se využít vývojové prostředí dodávané společně s tímto programátorem, které se jmenuje MPLAB IDE. MPLAB IDE je vývojové prostředí, které umožňuje návrh, psaní, vývoj a ladění aplikací určených pro mikrokontroléry PIC jak v jazyce assembler tak i ve vyšším programovacím jazyce C. Vzhledem k tomu, že s programovacím jazykem C mám větší zkušenosti, rozhodl jsem se k jeho využití při programování této aplikace.
19
K MPLAB IDE je možno připojit celou škálu programátorů od Microchipu. Po připojení je pak možné mikrokontrolér naprogramovat přímo pomocí nástrojů ve vývojovém prostředí. Díky tomu je pak celé programování mnohem rychlejší, protože není třeba spouštět jiný software určený jen k programování mikrokontroléru. Velkou výhodou propojení programátoru a vývojového prostředí je možnost ladit program přímo v mikrokontroléru včetně nahlížení do jeho registrů a pamětí. To znamená, že po nahrání programu do mikrokontroléru je možné program v něm zastavit a po sléze krokovat po jednotlivých instrukcích v reálném čase.
4.7 Vývojový software pro aplikaci do počítače Vzhledem k tomu, že mám za celé mé studium nemalé zkušenosti s programovacím jazykem C#, rozhodl jsem se aplikaci naprogramovat za pomocí integrovaného vývojového prostředí Microsoft Visual Studio 2010 Professional. Dalším aspektem při výběru tohoto prostředí také bylo jednoduché integrování dynamických knihoven a široká škála vzorových příkladů a jejich dokumentace v balíku knihoven od výrobce mikrokontroléru. Vývojové prostředí Microsoft Visual Studio 2010 je pro studentské a nekomerční účely zdarma díky projektu DreamSpark6.
6
Projekt Microsoft DreamSpark umožňuje studentům a učitelům bezplatné stažení vývojových nástrojů pro nekomerční použití.
20
5 Návrh zapojení Kapitola návrh zapojení se zabývá propojením mikrokontroléru s USB konektorem určeného pro komunikaci s počítačem, konektoru pro sériové programování ICSP, EEPROM pamětí a senzorem teploty a vlhkosti
5.1 Blokové schéma zapojení Obrázek 7 naznačuje propojení hlavních součástí zařízení. Základem je mikrokontrolér PIC18F4550, EEPROM paměť připojená přes I2C sběrnici a senzor SHT11 připojený přes dvouvodičovou sériovou sběrnici. Dále je vyvedeno USB rozhraní mikrokontroléru pro komunikaci s počítačem a sběrnice pro sériové programování mikrokontroléru s konektorem pro ICSP7 programování.
Obrázek 7: Blokové schéma zapojení
5.2 Propojení EEPROM paměti s mikrokontrolérem Obrázek 8 naznačuje zapojení sériové paměti do obvodu. Základem je propojení datové (SDA) a synchronizační (SCL) linky I2C sběrnice paměti k vývodům (RB0/SDA a RB1/SCL) mikrokontroléru, které jsou přímo určeny pro hardwarovou komunikaci pomocí I2C sběrnice. Dále jsou pak tyto linky připojeny prostřednictvím zdvihacích rezistorů (pull up) R2 a R3 k napájecímu napětí z důvodu zajištění obousměrné komunikace na těchto linkách. Adresové vývody paměti jsou společně se zemnícím vývodem paměti uzemněny. Taktéž vývod ochrany proti zápisu (WP) je uzemněn. Tím je zajištěna možnost zapisovat do paměti. Napájecí vývod paměti (Vcc) je připojen na napájecí napětí. 7
ICSP umožňuje programování již zapojeného mikrokontroléru v obvodu a následné ladění nahrané aplikace. Pro použití je nutné mít vhodný programátor podporující tuto komunikaci.
21
Obrázek 8: Schéma zapojení paměti 24LC128
5.3 Propojení senzoru SHT11 s mikrokontrolérem Obrázek 9 naznačuje zapojení senzoru do obvodu. Zapojení je odvozeno z typického zapojení uvedeného v dokumentaci senzoru. Datový vývod (SDA) a synchronizační vývod (SCL) senzoru jsou propojené s vstupně/výstupními vývody mikrokontroléru (RD2 a RD3), na kterých je zajištěna softwarová emulace sériové sběrnice pro zvolený senzor. Na datový vývod (SDA) je taktéž z důvodu potřeby obousměrné komunikace připojen zdvihací rezistor R1/1. Napájecí a zemnící vývod senzoru musí být opět zapojeny na napájení a zem zařízení.
Obrázek 9: Schéma zapojení senzoru SHT11 [převzato z (4)]
5.4 Zapojení USB konektoru Obrázek 10 naznačuje připojení konektoru USB do obvodu. Dvojice datových vodičů (D+ a D-) je připojena přímo na předem určené vývody mikrokontroléru (RC5 a RC4),
22
na kterých je hardwarová implementace tohoto rozhraní. K zapojení těchto vodičů není potřeba připojovat zdvihací rezistory, protože lze využít zabudovaných a zcela softwarově ovládaných zdvihacích rezistorů integrovaných přímo v mikrokontroléru. Napájení z USB rozhraní počítače není využito. Pouze jsou zapojeny blokovací kondenzátory doporučených kapacit dle specifikace pro USB zařízení.
Obrázek 10: Schéma zapojení USB konektoru [převzato z (1)]
5.5 Zapojení konektoru pro programování osazených součástek Obrázek 11 naznačuje vyvedení konektoru pro možnost programování zařízení bez nutnosti vyjmutí mikrokontroléru. Zapojení resetovacího vývodu ¬MCLR/Vpp je odvozeno z typického zapojení uvedeného v dokumentaci mikrokontroléru a většiny programátorů firmy Microchip. V pracovním režimu zařízení je na tento vývod přivedeno napájecí napětí. Odpor R5 slouží k izolaci vyššího programovacího napětí při programování od běžného pracovního napětí zařízení. Napájecí a zemnící vývod programátoru je připojený přímo k zařízení. Vývody sériové sběrnice určené k programování mikrokontroléru (RB7/PGD a RB6/PGC) jsou přímo připojeny na vývody
programátoru
(ICSPDAT/PGD
a
ICSPCLK/PGC).
Pomocný
vývod
programátoru AUX není zapojen.
23
Obrázek 11: Schéma zapojení konektoru pro ICSP programování
5.6 Plošný spoj včetně osazených součástek Obrázek 12 ukazuje vyrobený plošný spoj včetně osazených součástek. Rozměry plošného spoje jsou 8 cm délka a 5 cm šířka. Mikrokontrolér není pájený přímo, ale je vložen do patice. Taktéž pro paměť EEPROM je zvolena patice z důvodu snazší výměny z kapacitních důvodů. Konektor pro připojení prostřednictvím USB sběrnice je zvolen typu zásuvka B, který je standardně určený pro zařízení připojitelná k počítači jako host.
Obrázek 12: Plošný spoj včetně osazených součástek.
24
6 Popis implementace nestandardních částí řešení Kapitola popis implementace nestandardních částí řešení hlouběji popisuje řešení problémů, které byly nejvíce problematické nebo u kterých není na první pohled jasné, jak byly vyřešeny. Příkladem může být komunikace mezi zařízením a počítačem, která lze vyřešit mnoha způsoby.
6.1 Komunikace mikrokontroléru prostřednictvím USB rozhraní Prvním krokem k zajištění komunikace mikrokontroléru prostřednictvím USB rozhraní je zajistit inicializaci a pozdější řízení USB periferie mikrokontroléru. Tyto úkoly lze velmi zjednodušit použitím knihoven s funkcemi pro řízení USB periferie, které jsou volně ke stažení na internetové stránce společnosti Microchip v balíku knihoven Microchip Application Libraries společně s dokumentací USB Firmware (8). USB komunikaci lze řešit dvěma způsoby. První způsob je použít třídu CDC (Communication Device Class). Tato třída provádí emulaci sériové linky UART prostřednictvím USB hardware mikrokontroléru a USB hardware počítače. Třída CDC se nejvíce hodí pro použití již naprogramovaných aplikací, které standardně komunikují přes sériovou sběrnici UART, společně s komunikací USB. Jak na straně mikrokontroléru tak i na straně počítače je nutné zavést a nainstalovat patřičné ovladače, které řídí komunikaci. Druhým způsobem je použití třídy HID (Human Interface Device). HID umožňuje připojit zařízení prostřednictvím USB rozhraní k počítači bez instalace speciálních ovladačů, protože ovladač této třídy je již součástí většiny moderních operačních systémů. Z důvodu jednoduchosti připojení této třídy jsem ji implementoval do mého zařízení.
6.1.1 Inicializace USB periferie mikrokontroléru Pro správnou funkčnost USB periferie je nutné nejdříve inicializovat všechny komponenty USB periferie a to co nejdříve po spuštění programu mikrokontroléru. K tomuto kroku je k dispozici funkce USBDeviceInit. Funkce resetuje a kompletně nastaví všechny komponenty USB periferie, vymaže chybové registry a povolí všechna přerušení nutné pro běh USB komunikace. Přerušení je nutné povolit v hlavičkovém souboru funkce odkomentováním příznaku USB_INTERRUPT. Celé řízení USB
25
periferie by samozřejmě mohlo být řízeno bez přerušení, ale to by znamenalo mít v programu stále běžící nekonečnou smyčku ve vysoké frekvenci, která by znemožňovala zavedení režimu snížené spotřeby.
6.1.2 Řízení běhu USB periferie Všechny úlohy běhu USB periferie řídí funkce USBDeviceTasks. Při použití USB přerušení je ji nutno volat při každém příchodu přerušení od USB periferie. Funkce se vždy rozhoduje kterou z úloh bude provádět podle stavu enumerace8, ve kterém se USB periferie nachází. Pro řízení jsou důležité dva stavy, mezi které patří stav DETACHED_STATE a CONFIGURED_STATE. DETACHED_STATE indikuje stav, kdy mikrokontrolér není připojen k hostiteli. CONFIGURED_STATE indikuje stav, kdy je mikrokontrolér připojen k hostiteli a komunikace mezi hostem a hostitelem je nakonfigurována a připravena k přenosu dat. Mimo těchto stavů může být USB periferie v některém z dalších stavů. Všechny stavy enumerace popisuje tabulka 3. Tabulka 3: Stavy enumerace USB zařízení
Stav enumerace DETACHED_STATE ATTACHED_STATE POWERED_STATE DEFAULT_STATE ADR_PENDING_STATE ADDRESS_STATE CONFIGURED_STATE
Popis Zařízení není připojeno k USB sběrnici hostitele. Zařízení je připojeno k USB sběrnici hostitele. Spojení s USB sběrnicí hostitele je konfigurováno. Zařízení obdrželo resetovací sekvenci od hostitele. Zařízení obdrželo příkaz pro nastavení jeho adresy. Zařízení obdrželo svou vlastní jedinečnou adresu. Zařízení je připojeno a nakonfigurováno pro přenos dat.
6.1.3 Přenos dat přes USB periferii Pro přenos dat slouží funkce HIDTxPacket (odesílání) a HIDRxPacket (příjem). Funkcím se jako parametr předává ukazatel na USB periferii, pole naplněné daty pro odesílání nebo prázdné pole pro přijímané data a počet přenášených bajtů. Pro získání informací o připravenosti periferie lze použít funkce HIDTxHandleBusy (odesílání) a HIDRxHandleBusy (přijímání). Pokud je USB periferie zaneprázdněna a není možno přenášet data, funkce vrátí hodnotu TRUE. Pole pro přijímaná a odesílaná data
8
Cílem enumerace je získání informací o připojeném zařízení hostitelem a konfigurace USB spojení.
26
jsou typu unsigned char. Rozměr pole je 64 hodnot jak pro přijímaná tak pro odesílaná data. Příklad USB komunikace USBOutHandle = HIDRxPacket(HID_EP,(BYTE*)&ReceivedDataBuffer,64); if(!HIDRxHandleBusy(USBOutHandle)) { ReceiveData=ReceivedDataBuffer[0]; } ToSendDataBuffer[0]=TransmitData; if(!HIDTxHandleBusy(USBInHandle)) { USBInHandle=HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],64); }
6.1.4 Řízení komunikace mezi zařízením a počítačem Komunikace zařízení s počítačem je řešena formou příkazů a odpovědí na ně. V každém přijatém poli bajtů je vždy jako první bajt použit jako kód, aby bylo možno rozhodnout, jakou operaci má zařízení vykonat a jakou má odeslat odpověď. Ostatní bajty v poli jsou použity rozdílně podle typu operace. Tabulka 4 naznačuje všechny možné kódy operací použitelné při komunikaci. Tabulka 4: Kódy pro komunikaci mezi zařízením a počítačem
Kód 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13
Operace Odeslání informace o periodě měření Příjem periody měření a její nastavení do zařízení Zastavení měření Spuštění měření Vymazání paměti EEPROM Nastavení času Odeslání informace o času Odeslání ukazatele na volnou část paměti Rezervováno Začátek přenosu naměřených hodnot Přenos naměřených hodnot Konec přenosu naměřených hodnot Odeslání informace o aktivitě měření
Zachytávání přijímaných kódů Zachytávání přijímaných kódů je řešeno sekvencí case, která podle kódu v prvním bajtu přijímaného pole rozhodne o příslušné operaci.
27
USBOutHandle = HIDRxPacket(HID_EP,(BYTE*)&ReceivedDataBuffer,64); if(!HIDRxHandleBusy(USBOutHandle)) { switch(ReceivedDataBuffer[0]) { case 0x02: timeIntervalRecord=ReceivedDataBuffer[1]; timeIntervalRecord=timeIntervalRecord<<8; timeIntervalRecord=ReceivedDataBuffer[2]; break; } }
6.2 Komunikace obslužné aplikace prostřednictvím USB rozhraní Obslužná aplikace vytvořená ve vývojovém prostředí Microsoft Visual Studio 2010 Professional využívá pro zajištění USB komunikace dynamickou knihovnu HID Class, která přímo navazuje na funkce zajišťující USB komunikaci v zařízení. Po přidání dynamické knihovny do projektu je k dispozici několik metod, které obsluhují USB komunikaci.
6.2.1 Vytvoření spojení Metoda USBHIDClassInit provede inicializaci USB HID komunikace. Jako parametry této metody je nutné uvést šestnáctibitová identifikační čísla VID9 (Vendor ID) a PID10 (Product ID). Třetím parametrem je velikost vyrovnávací paměti v bajtech. Metodu USBHIDClassInit je nejvýhodnější volat již v konstruktoru nebo inicializaci celé aplikace a její příklad použití může být: MCHPHIDClass.USBHIDClassInit(0x4D8, 0x003F, 64);
Je zřejmé, že po inicializaci i v průběhu běhu aplikace je nutné kontrolovat, jestli je zařízení připojeno nebo odpojeno. To zajišťuje metoda USBHIDIsConnected, která vrací hodnotu TRUE pokud je zařízení připojeno a její příklad použití může být: if (MCHPHIDClass.USBHIDIsConnected() == true) { label1.Text = "Zařízení připojeno"; }
9
Slouží k identifikaci výrobce zařízení. Přiděluje ho organizace USB_IF. Slouží k identifikaci jednotlivých typů zařízení výrobce.
10
28
6.2.2 Odesílání a přijímání dat Pro
přijímání
a odesílání
dat
prostřednictvím
USB
HID
slouží
metody
USBHIDReadReport a USBHIDWriteReport. Metodám se podobně jako u funkcí v programu zařízení předává pole naplněné daty pro odesílání nebo prázdné pole pro přijímaná data a počet přijímaných nebo odesílaných bajtů. Jelikož při použití těchto metod bylo nutné pracovat s ukazateli, bylo nezbytné kód, který s nimi pracuje vložit do bloku unsafe11, ve kterém jsou tyto operace dovoleny. Příklad pro odeslání dat může vypadat následovně: Byte[] OUTBuffer = new byte[64];
unsafe { fixed (byte* pOUTBuffer = OUTBuffer) { MCHPHIDClass.USBHIDWriteReport(pOUTBuffer, 64); } }
Příjem dat: Byte[] INBuffer = new byte[64];
unsafe { fixed (byte* pINBuffer = INBuffer) { if (MCHPHIDClass.USBHIDReadReport(pINBuffer) != true) ; } }
6.2.3 Řízení komunikace mezi počítačem a zařízením Řízení komunikace mezi počítačem a zařízením probíhá podobně jako v programu zařízení odesíláním příkazů a přijímáním jejich odpovědí. Kódy příkazů jsou stejné jako uvádí tabulka 4, nicméně v opačném směru, tedy z aplikace v počítači do zařízení. Příkladem může být metoda isRecord, která zjišťuje, jestli je v zařízení spuštěno měření.
11
Klíčové slovo, které je nutné uvést k označení bloku nebo i celé třídy pro dovolení práce s ukazateli.
29
public bool isRecord() { Byte[] OUTBuffer = new byte[64]; OUTBuffer[0] = LOAD_IS_RECORD; send(OUTBuffer);
Byte[] INBuffer = new byte[64]; INBuffer = receive(); if (INBuffer[0] == 0xFF) { return true; } else { return false; } }
6.3 Komunikace mikrokontroléru s EEPROM pamětí Komunikace mikrokontroléru s EEPROM pamětí probíhá po již hardwarově integrované I2C sběrnici dostupné v mikrokontroléru. Pro zápis nebo čtení dat z paměti byly
naprogramovány
funkce
Write_byte_eeprom_i2c
a Read_byte_eeprom_i2c, které využívají jednoduchých funkcí pro obsluhu sběrnice, které jsou dostupné v knihovnách u překladače jazyka C ve vývojovém prostředí. Tabulka 5 popisuje přehled použitých funkcí. Tabulka 5: Přehled použitých funkcí z knihovny I2C sběrnice
Funkce OpecI2C CloseI2C IdleI2C StartI2C StopI2C RestartI2C WriteI2C ReadI2C
12
Popis Povolí a konfiguruje MSSP12 modul mikrokontroléru, který obsluhuje I2C sběrnici Zakáže MSSP modul Kontroluje stav hardwarové I2C sběrnice a čeká dokud není připravena k použití Generuje startovací sekvenci Generuje ukončovací sekvenci Generuje sekvenci pro restart Zapíše jeden byte Přečte jeden byte
Je periferie mikrokontroléru, která řídí jeho sériový port.
30
6.3.1 Komunikační sekvence pro zápis dat do paměti Obrázek 13 ukazuje příklad komunikační sekvence pro zápis jednoho bajtu do paměti. Komunikace začíná přenosem startovací sekvence, která je pro všechny kompatibilní I2C zařízení stejná. Dále je nutné poslat kontrolní bajt, který se skládá z adresy zařízení a z určení směru přenosu. Po každém bajtu je nutné čekat na potvrzovací (ACK) bit. Pokud zařízení potvrdilo příjem pokračuje se odesláním horní části a dolní části adresy paměťového místa, kde se má ukládat. Jako poslední se odesílají ukládaná data a za nimi následuje ukončovací sekvence.
Obrázek 13: Komunikační sekvence pro zápis bajtu do paměti [převzato z (5)]
6.3.2 Komunikační sekvence pro čtení dat z paměti Obrázek 14 ukazuje příklad komunikační sekvence pro čtení bajtu do paměti. Začátek komunikace je podobný jako u zápisu do paměti. Je odeslán kontrolní bajt, po něm adresa, ale již ne zapisovaného paměťového místa nýbrž čteného. Po odeslání adresy je sekvence odlišná. Je nutné znovu provést startovací sekvenci a pak odeslat kontrolní bajt s nastavením pro čtení. Následně paměť pošle čtená data a konec přenosu je opět nutné opatřit ukončovací sekvencí.
Obrázek 14: Komunikační sekvence pro čtení bajtu z paměti [převzato z (5)]
31
6.3.3 Příklad funkce pro zápis dat do paměti Funkci je nutné předat kontrolní bajt, horní a dolní část adresy a zapisovaná data. Funkce vrátí 0 pokud je vše v pořádku, tedy byly přijaty všechny potvrzení z paměti. unsigned char Write_byte_eeprom_i2c( unsigned char control, unsigned char high_address, unsigned char low_address, unsigned char data ) { unsigned char ack=4; IdleI2C(); StartI2C(); while ( SSPCON2bits.SEN ); if (WriteI2C(control) == 0) ack--; IdleI2C(); if (WriteI2C(high_address) == 0) ack--; IdleI2C(); if (WriteI2C(low_address) == 0) ack--; IdleI2C(); if (WriteI2C(data) == 0) ack--; IdleI2C(); StopI2C(); while ( SSPCON2bits.PEN ); return ack; }
6.3.4 Příklad funkce pro uložení naměřených hodnot do paměti V kapitole 4.5 jsem uvedl, že pro uložení jednoho naměřeného záznamu je zapotřebí 8 B paměti (čas 4 B, teplota 2 B a vlhkost 2 B). Tato data jsou v paměti ukládána za sebou. Pro jednoduché zjištění adresy volného místa v paměti je k dispozici ukazatel freeAddressMemory, který ukazuje na první volný blok v paměti. Po každém uloženém bajtu je tento ukazatel patřičně posunut. V proměnné unixTimeRecord je čas
k dispozici
a datum
měření.
Proměnné
highTemp,
lowTemp
a highHumidity, lowHumidity obsahují aktuálně naměřenou teplotu a vlhkost. Uložení času Nad proměnnou unixTimeRecord, ve které je uložen čas, jsou aplikovány bitové operace,
které
zajistí
oddělení
jednotlivých
bajtů,
protože
funkce
Write_byte_eeprom_i2c určená pro uložení dat do paměti uloží při jednom 32
zavolání pouze jeden bajt. Z tohoto důvodu je funkce opakována vícekrát za sebou s jinou bitovou částí proměnné unixTimeRecord obsahující čas. Write_byte_eeprom_i2c(CONTROL_EEPROM, HIGH(freeAddressMemory), LOW(freeAddressMemory), (unixTimeRecord)>>24); freeAddressMemory++; Write_byte_eeprom_i2c(CONTROL_EEPROM, HIGH(freeAdressMemory), LOW(freeAddressMemory), (unixTimeRecord)>>16); freeAddressMemory++; Write_byte_eeprom_i2c(CONTROL_EEPROM, HIGH(freeAddressMemory), LOW(freeAddressMemory), (unixTimeRecord)>>8); freeAddressMemory++; Write_byte_eeprom_i2c(CONTROL_EEPROM, HIGH(freeAddressMemory), LOW(freeAddressMemory), (unixTimeRecord)&0xFF); freeAddressMemory++;
Uložení teploty a vlhkosti Uložení naměřené teploty a vlhkosti probíhá podobným způsobem jako uložení času. Tím je myšleno opětovné použití funkce pro zápis do paměti. Write_byte_eeprom_i2c(CONTROL_EEPROM, HIGH(freeAddressMemory), LOW(freeAddressMemory), highTemp); freeAddressMemory++; Write_byte_eeprom_i2c(CONTROL_EEPROM, HIGH(freeAddressMemory), LOW(freeAddressMemory), lowTemp); freeAddressMemory++; Write_byte_eeprom_i2c(CONTROL_EEPROM, HIGH(freeAddressMemory), LOW(freeAddressMemory), HIGH(highHumidity)); freeAddressMemory++; Write_byte_eeprom_i2c(CONTROL_EEPROM, HIGH(freeAddressMemory), LOW(freeAddressMemory), LOW(lowHumidity)); freeAddressMemory++;
33
6.3.5 Příklad funkce pro načtení hodnot z paměti pro přenos do počítače Vzhledem k tomu, že jsou naměřené hodnoty uloženy v paměti těsně za sebou a také máme k dispozici počet uložených záznamů, ze kterého lze vypočítat velikost obsazené paměti, lze pomocí těchto hodnot určit počet průchodů smyčky pro naplnění pole určeného pro odesílání přes USB sběrnici. Vypočítaný počet průchodů je uložen v proměnné
loopCount.
Pro
čtení
záznamů
je
použita
funkce
Read_byte_eeprom_i2c společně s proměnnou pointerTransfer, která je ukazatelem na právě čtený bajt v paměti. if (loopCount>0) { for (i=0; i<64; i++) { ToSendDataBuffer[i]=Read_byte_eeprom_i2c(CONTROL_EEPROM, HIGH(pointerTransfer), LOW(pointerTransfer)); pointerTransfer++; } } loopCount--;
6.4 Komunikace mikrokontroléru se senzorem SHT11 V kapitole 4.3.3, ve které je detailněji popsán teplotní a vlhkostní senzor SHT11 jsem naznačil, že tento senzor podporuje sériovou dvouvodičovou komunikaci, která bohužel nevyhovuje standardu I2C. Proto bylo nutné komunikaci pomocí této sběrnice naprogramovat a emulovat na jiných vývodech mikrokontroléru. Funkce pro obsluhu sběrnice byly naprogramovány na základě popsaných sekvencí pro jednotlivé operace v technické dokumentaci senzoru (4). Obrázek 15 naznačuje posloupnost jednotlivých částí komunikace se senzorem.
Obrázek 15: Příklad posloupnosti jednotlivých částí komunikace
34
Komunikace začíná stejně jako u sběrnice I2C startovací sekvencí pro zahájení komunikace. Startovací sekvence není zaměnitelná se startovací sekvencí I2C a její sekvenci naznačuje obrázek 16.
Obrázek 16: Startovací sekvence pro teplotní a vlhkostní senzor SHT11
Následuje odeslání kontrolního bajtu, který se skládá z adresy zařízení uložené v interní paměti senzoru a z kódu příkazu, který má senzor vykonat. Data jsou do senzoru posílána pomocí funkce sht_write, kde je jako jediný parametr uveden typ měřené veličiny. Po vyslání příkazu pro měření následuje doba, kterou je třeba čekat, než proběhne změření veličiny. Doba měření je závislá na nastaveném rozlišení snímaných údajů a pohybuje se od 20 do 320 ms. Tabulka 6 obsahuje seznam všech příkazů pro ovládání senzoru. Tabulka 6: Seznam příkazů senzoru SHT11
Příkaz Rezervováno Měření teploty Měření vlhkosti Čtení z interního registru Zápis do interního registru Rezervováno Softwarový reset
Kód 0000x 00011 00101 00111 00110 0101x-1110x 11110
Pro přesné zjištění dokončeného měření je vhodné využít skutečnosti, že senzor po správně dokončeném měření stáhne datovou linku sběrnice na nízkou úroveň. Tento úkol zajišťuje funkce sht_wait. unsigned char sht_wait() { int delay; DATA_HI; for(delay=0; delay<30; delay++) { if(DATA_PIN==0) return 0; Delay100TCYx(0); }
35
return 1; }
Načtení naměřených hodnot provádí funkce sht_read. Funkce vystaví potvrzovací bit jen tehdy, pokud jako parametr obdrží hodnotu TRUE. Takto je to řešeno z důvodu možnosti nevystavení potvrzovacího bitu po přijetí dolní poloviny bitů. Pro převod načtených údajů na fyzikální hodnoty je zapotřebí použít vztahy uvedené v kapitole 6.7. unsigned char sht_read(BOOL ack) { data=0; DATA_HI;
for(i=0; i<8; i++) { data=data<<1; SCLK_LAT=1; Delay100TCYx(0); if(DATA_PIN) data=data+1; SCLK_LAT=0; Delay100TCYx(0); }
if(ack) { DATA_LOW; DATA_LAT=0; SCLK_LAT=1; Delay100TCYx(0); SCLK_LAT=0; Delay100TCYx(0); } return data; }
6.5 Režim snížené spotřeby Z popisu řešeného problému vyplynulo, že je nutné zavést režim snížené spotřeby zařízení z důvodu dlouhodobé činnosti pouze na baterie. Volby běhu mikrokontroléru byly naznačeny v kapitole 4.2.3 na obrázku 3. Ve standardním režimu RUN jsou taktovány periferie i samotný mikrokontrolér. Mikrokontrolér je z důvodu snížení spotřeby možné přepnout do režimu IDLE nebo SLEEP. V režimu IDLE jsou taktovány všechny periferie mikrokontroléru, ale samotný mikrokontrolér není taktovaný. 36
Z režimu IDLE lze mikrokontrolér probudit resetem, uplynutím doby watchdogu nebo příjmem libovolného přerušení. V režimu SLEEP nejsou taktovány periferie ani samotný mikrokontrolér. Z režimu SLEEP lze mikrokontrolér probudit resetem, uplynutím doby watchdogu nebo příjmem vnějšího přerušení. Z důvodu aplikace systému reálného času přímo v mikrokontroléru je nutné použít režim IDLE. SLEEP režim není možné použít z důvodu absence probuzení z vnitřního přerušení. V RUN a IDLE režimu běhu mikrokontroléru je možné zvolit jeho zdroj taktování (PRI jako hlavní vnitřní/vnější zdroj nebo SEC pro taktování ze zdroje určeného pro čítač/časovač Timer1). V zařízení jsou použity dva režimy. První je standardní běh mikrokontroléru s použitím hlavního vysokofrekvenčního (20 MHz) vnějšího taktovacího zdroje. V tomto režimu je prováděna komunikace se senzorem a pamětí, obsluha USB periferie mikrokontroléru a každou uplynulou sekundu také aktualizace UNIX Time. Důvodem pro volbu vysokofrekvenčního krystalu jako taktovacího zdroje je potřeba vysokého kmitočtu pro obsluhu USB periferie mikrokontroléru. Druhý je IDLE režim s taktování ze zdroje určeného pro čítač/časovač Timer1, kterým je hodinový krystal 32 kHz. Důvodem zvolení zdroje určeného pro čítač/časovač Timer1 je řádově nižší spotřeba mikrokontroléru taktovaného kmitočtem 32 kHz (typický odběr 25 µA) než 20 MHz (typický odběr 25 mA).
6.5.1 Implementace režimu snížené spotřeby v programu mikrokontroléru Pro zvolení režimu slouží funkce pri_run_mode (RUN, PRI) a sec_idle_mode (IDLE, SEC). Obě funkce patřičně nastaví bity registru OSCCON, který nastavuje běh mikrokontroléru společně s volbou zdroje hodin. void pri_run_mode() { OSCCONbits.IDLEN=0; OSCCONbits.SCS1=0; OSCCONbits.SCS0=0; }
37
void sec_idle_mode() { OSCCONbits.IDLEN=1; OSCCONbits.SCS1=0; OSCCONbits.SCS0=1; }
Funkce pro uvedení mikrokontroléru do RUN režimu pri_run_mode je volána ihned po přijetí jakéhokoliv přerušení vysoké priority, do kterého patří již zmíněné přerušení USB periferie společně s přerušením čítače/časovače Timer1 určeného pro systém reálného času. Uvedení mikrokontroléru do IDLE režimu nelze provést pouhým provedením funkce sec_idle_mode na konci přerušení vysoké priority, protože mezi jednotlivými typy přerušení enumerace a USB periferie není možno uvést mikrokontrolér do IDLE režimu. Tento problém je nutné vyřešit tak, že přechod do IDLE režimu je možný jen tehdy, pokud není přijato žádné přerušení od USB periferie mikrokontroléru po dobu 5 sekund. Pro tento účel je vyhrazena proměnná secIdle, která je při každém přijetí přerušení z čítače/časovače Timer1 (každou uplynulou sekundu) inkrementována. Na konci je pak provedena podmínka, která porovná, jestli uplynulo 5 sekund. Pokud ano, je možný přechod do IDLE režimu. Při příchodu přerušení od USB periferie mikrokontroléru je nulována. if (secIdle>=5) { secIdle=5; sec_idle_mode(); }
6.6 Systém reálného času V kapitole 0 jsem uvedl analýzu možného řešení systému reálného času a dospěl jsem k názoru, že bude výhodné řešit tento problém připojením externího hodinového krystalu společně s využitím čítače/časovače pro tuto úlohu. Obrázek 17 naznačuje připojení hodinového krystalu k vývodům mikrokontroléru. Zbývající část řešení je na straně programu mikrokontroléru.
38
Obrázek 17: Zapojení krystalu pro systém reálného času [převzato z (1)]
Nastavení čítače/časovače Timer1 se provádí přes funkci OpenTimer1 následujícím způsobem: OpenTimer1( TIMER_INT_ON & T1_16BIT_RW & T1_SOURCE_EXT & T1_PS_1_1 & T1_OSC1EN_ON & T1_SYNC_EXT_OFF );
Direktiva TIMER_INT_ON povolí přerušení čítače/časovače, T1_16BIT_RW zajistí přepnutí do šestnáctibitového režimu, T1_SOURCE_EXT zvolí externí hodinový zdroj, žádnou předděličku nastaví T1_PS_1_1, T1_OSC1EN nastaví jako hodinový zdroj vývody RC0/T1OSO a RC1/T1OSI a konečně T1_SYNC_EXT_OFF vypne synchronizaci s primárním hodinovým zdrojem mikrokontroléru. Pro správný běh čítače/časovače je dále nutné nastavit úroveň přerušení čítače/časovače a jeho celkové povolení. Tyto nastavení se provedou nastavením registru pro úrovně přerušení IPR1 a registru pro povolení přerušení periferií PIE1 následujícím způsobem: IPR1bits.TMR1IP = 1; PIE1bits.TMR1IE = 1;
Nastavení předvolby čítače/časovače je provedeno funkcí WriteTimer1, která patřičně nahraje vložený parametr do registrů TMR1H a TMR1L. Parametrem funkce je symbolická konstanta SET_TIMER vyjadřující předvolbu čítače/časovače. WriteTimer1(SET_TIMER1);
39
6.6.1 Výpočet předvolby čítače/časovače Systém reálného času řešený formou UNIX Time vyžaduje zvýšení proměnné, ve které je uložený aktuální čas, právě o 1 každou uplynulou sekundu. Nejvýhodnějším řešením této operace je nastavit čítač/časovač tak, aby vyvolal přerušení právě každou sekundu a po vyvolání tohoto přerušení ihned inkrementovat proměnnou s uloženým časem. Pro zvolený krystal s kmitočtem 32 kHz je výpočet předvolby: SET _ TIMER1 = 65536 − 32768 = 32768 Hodnota 65536 je maximální počet impulzů, které je možno načítat v šestnáctibitovém režimu čítače/časovače (216). Hodnota 32768 označuje kmitočet krystalu v Hz.
6.7 Přepočet naměřených hodnot Naměřené digitální hodnoty které přijmeme od senzoru ještě nejsou konečnou teplotou a vlhkostí, ale je třeba je přepočítat na fyzikální hodnoty za pomocí vzorců pro přepočet a kompenzaci nelinearit senzoru uvedených v technické dokumentaci senzoru (4).
6.7.1 Výpočet teploty Výpočet teploty je možný pomocí vztahu [1]. U výpočtu teploty není zapotřebí kompenzace nelinearit senzoru, protože senzor měří teplotu již od jeho výroby velmi lineárně a z tohoto důvodu je i tento vztah lineární. Tabulka 7 a tabulka 8 obsahuje konstanty pro výpočet teploty dle závislosti na napájecím napětí a rozlišení měření.
T = d1 + d 2 ⋅ SOT
[1]
Tabulka 7: Konstanty pro výpočet teploty dle závislosti na napájecím napětí
Vdd 5V 4V 3,5 V 3V 2,5 V
d1 (°C) -40,1 -39,8 -39,7 -39,6 -39,4
d1 (°F) -40,2 -39,6 -39,5 -39,3 -38,9
40
Tabulka 8: Konstanty pro výpočet teploty dle rozlišení měření
SOT (bit)13 14 12
d1 (°C) 0,01 0,04
d1 (°F) 0,018 0,072
6.7.2 Výpočet vlhkosti Výpočet vlhkosti je možný pomocí vztahu [2]. U výpočtu vlhkosti je zapotřebí kompenzace nelinearit senzoru, kterou provádí polynom druhého řádu obsažený ve vztahu [2]. Tabulka 9 obsahuje konstanty pro výpočet vlhkosti.
RH linear = c1 + c 2 ⋅ SORH + c3 ⋅ SORH
2
[2]
Tabulka 9: Konstanty pro výpočet vlhkosti
SORH (bit)14 12 8
c1 -2,0468 -2,0468
c2 0,0367 0,5872
c3 -1,5955E-6 -4,0845E-4
6.7.3 Teplotní kompenzace vlhkosti Pro přesný výsledek vlhkosti je nutné do výpočtu zahrnout teplotní závislost při měření vlhkosti. Tato kompenzace je nejvíce důležitá pro teploty, které se výrazněji liší od teploty 25 °C. Výpočet vlhkosti společně se zahrnutou teplotní kompenzací je možný pomocí vztahu [3]. Tabulka 10 obsahuje konstanty pro výpočet teplotní kompenzace vlhkosti. RH true = (T°C − 25) ⋅ (t1 + t 2 ⋅ SO RH ) + RH linear
[3]
Tabulka 10: Konstanty pro výpočet teplotní kompenzace vlhkosti
SORH (bit) 12 8
13 14
t1 0,01 0,01
t2 0,00008 0,00128
Digitální hodnota teploty naměřená senzorem. Digitální hodnota vlhkosti naměřená senzorem.
41
7 Závěr Výsledkem této bakalářské práce je navrhnutí, provedení konstrukce a naprogramování zařízení pro zaznamenávání aktuální teploty a vlhkosti včetně obslužného software pro počítač. Splnění cílů bakalářské práce Prvním cílem bakalářské práce bylo vybrat vhodný typ jednotlivých součástí (součástek) zařízení, kterými jsou mikrokontrolér, paměť pro uložení naměřených údajů, vyřešení systému reálného času a výběr vhodného senzoru pro měření teploty a vlhkosti a s tím související schéma zapojení a tvorba plošného spoje pro osazení jednotlivých součástek. Na všechny tyto součásti byl kladen velký důraz v kapitole Analýza a návrh implementace. Díky správnému výběru součástek nebyl problém ve spojení součástek ani v konstrukci a oživení zařízení. Jediná menší komplikace nastala kvůli nestandardizované sériové sběrnici I2C u teplotního a vlhkostního senzoru. Díky správné analýze bylo s touto možností počítáno a díky softwarové emulaci této sběrnice na jiných portech mikrokontroléru se komunikaci podařilo bez větších problémů vyřešit. Druhým cílem bylo vytvořit program mikrokontroléru, který ovládá funkčnost celého zařízení. Program zajišťuje inicializaci zařízení včetně všech jeho součástí a řídí komunikaci s teplotním a vlhkostním senzorem, čtení a zápis do paměti, systém reálného času a v neposlední řadě také komunikaci s počítačem prostřednictvím USB sběrnice. V použitém řešení komunikace s počítačem vidím velkou výhodu v tom, že zařízení se chová jako obecné vstupně/výstupní zařízení (HID) a při jeho připojení není potřeba instalovat do operačního systému počítače žádné ovladače. Stačí pouze spustit ovládací program zařízení. Třetím cílem bylo vytvořit ovládací aplikaci do počítače, která dokáže obsluhovat zařízení. Aplikace dokáže automaticky rozpoznat, je-li zařízení připojeno. Po připojení je následně možné využívat jeho ovládacích prvků, mezi které patří možnost spustit nebo zastavit měření, nastavit periodu snímání hodnot, stažení naměřených hodnot do počítače, kalibrace naměřených hodnot, vymazání paměti a v neposlední řadě také uložení naměřených hodnot do textového souboru.
42
Čtvrtým cílem bylo zajistit, aby bylo zařízení schopné pracovat na baterie bez jejich výměny po dobu řádově jednoho roku. Tohoto cíle se mi také podařilo dosáhnout. Nemohl jsem sice tuto skutečnost potvrdit faktickým čekáním na vybití baterií z důvodu dlouhého časového intervalu, ale měřením odběru v klidovém i provozním režimu a následném porovnání naměřených hodnot s obvyklou udávanou kapacitou dnešních baterií jsem dospěl k výsledku, že je zařízení schopné pracovat na baterie minimálně dvojnásobnou dobu než bylo cílem této práce. Problémy této práce a jejich řešení Mezi největší problém této práce rozhodně patřilo řešení komunikace prostřednictvím USB rozhraní spojené s nutností přechodu zařízení do úsporného režimu z důvodu úspory příkonu z baterií. Tento problém se podařilo vyřešit funkcí, která dovolí přechod do úsporného režimu jen při odpojení USB rozhraní společně se správně nastaveným intervalem po odpojení. Dalším problémem bylo také správně vyladit systém reálného času aby nedocházelo k jeho zpožďování nebo zrychlování. Na straně obslužného software do počítače nastal menší problém při použití dynamické knihovny pro obsluhu USB komunikace poskytovanou výrobcem mikrokontroléru z důvodu nekompatibility s nejnovějším .NET Framework operačních systémů Microsoft Windows Vista a Windows 7. Problém se podařilo vyřešit přepnutím do kompatibilního módu se starším .NET Framework ve vývojovém prostředí Microsoft Visual Studio 2010, ve kterém byl software vytvořen. V konečném důsledku je ale nezbytně nutné mít při spuštění obslužného software zařízení tyto komponenty nainstalované v operačním systému počítače. Z tohoto důvodu jsou instalační soubory těchto komponent přiloženy na doprovodném CD této práce. Možnosti rozšíření nebo pokračování této práce Je zřejmé, že rozšíření této práce může být jak na straně zařízení (návrh, konstrukce a jeho program) tak i na straně obslužného software do počítače. Mezi možné rozšíření obslužného software do počítače nepochybně patří schopnost nějakým způsobem zpracovávat naměřené hodnoty. Může jít o tvorbu grafického znázornění naměřených hodnot v podobě grafů, statistické upravení hodnot, aproximaci hodnot nebo také výpočet rosného bodu. Mezi další možné rozšíření zařízení může rozhodně patřit možnost měřit i jiné neelektrické či elektrické veličiny, protože mnoho vstupů mikrokontroléru zůstalo nevyužitých (digitálních i analogových). V úvahu přichází
43
i zmenšení velikosti zařízení použitím součástek pro povrchovou montáž. V případě potřeby zobrazení snímaných hodnot je také možné zařízení rozšířit přidáním některých ze zobrazovacích prvků určených pro zařízení tohoto typu, například znakového LCD panelu nebo při nižším nároku na přesnost diodového indikátoru.
44
Seznam použité literatury [1]
Microchip Technology Inc. PIC18F2455/2550/4455/4550 Data Sheet. [on-line]. 2006.
[2]
Oficiální webové stránky firmy Microchip [on-line]. © 1998 – 2011.
[3]
Webové fórum firmy Microchip [on-line]. © 2009.
[4]
Sensirion AG. SHT1x (SHT10, SHT11, SHT15) Humidity and Temperature Sensor Data Sheet. [on-line]. 2010.
[5]
Microchip Technology Inc. 24AA128/24LC128/24FC128 Data Sheet. [on-line]. 2007.
[6]
MATOUŠEK, David. Mikroprocesorová technika. 1. opravené vydání. Jihlava : Vysoká škola polytechnická – katedra elektrotechniky a informatiky, 2008. 73 s.
[7]
MATOUŠEK, David., BRTNÍK, Bohumil. Programování mikrokontrolérů s jádrem 8051 v jazyce C. 1. vydání. Praha : BEN – technická literatura, 2010. 152 s. ISBN 978-80-7300-264-0
[8]
Microchip Technology Inc. MCHPFSUSB Firmware User´s Guide. [on-line]. 2007.
[9]
Microchip Technology Inc. MPLAB® C18 C Compiler Libraries. [on-line]. 2005.
[10]
PLIVA, Zdeněk. EAGLE prakticky – řešení problémů při běžné práci. 1. vydání. Praha : BEN – technická literatura, 2007. 175 s. ISBN 978-80-7300-227-5
[11]
MACH, Jan. Firmware pro USB zařízení s mikropočítači PIC : bakalářská práce. Praha : ČVUT Fakulta elektrotechnická, 2006. 50 s.
[12]
IBRAHIM, Dogan. Advanced PIC microcontroller project in C: from USB to RTOS with the PIC18F series. First Edition. Burlington : Elsevier Ltd., 2008. 544 s. ISBN 978-0-7506-8611-2
[13]
AXELSON, JAN. USB Complete: Everything You Need to Develop USB Peripherals. Third Edition. Madison : Lakeview Research LLC, 2005. 572 s. ISBN 978-1-931448-02-4
45
[14]
Microchip Technology Inc. MPLAB® C18 C Compiler User´s Guide. [on-line]. 2005.
[15]
Microchip Technology Inc. MPLAB® IDE User´s Guide. [on-line]. 2005.
[16]
HRBÁČEK, Jiří. Komunikace mikrokontroléru s okolím – 1. díl. 1. vydání. Praha : BEN – technická literatura, 1999. 152 s. ISBN 80-86056-42-2
[17]
HRBÁČEK, Jiří. Komunikace mikrokontroléru s okolím – 2. díl. 1. vydání. Praha : BEN – technická literatura, 2000. 148 s. ISBN 80-86056-73-2
46
Seznam obrázků Obrázek 1: Zapojení při použití konvertoru USB - UART ............................................ 10 Obrázek 2: Zapojení při použití mikrokontroléru s vlastním hardwarovým rozhraním. 11 Obrázek 3: Módy běhu mikrokontroléru PIC18F4550 [převzato z (1)]......................... 14 Obrázek 4: Zapojení vývodů mikrokontroléru PIC18F4550 [převzato z (1)] ................ 15 Obrázek 5: Pouzdro senzoru SHT11 [převzato z (4)]..................................................... 17 Obrázek 6: Pouzdro a vývody EEPROM paměti 24LC128 [převzato z (5)].................. 19 Obrázek 7: Blokové schéma zapojení............................................................................. 21 Obrázek 8: Schéma zapojení paměti 24LC128............................................................... 22 Obrázek 9: Schéma zapojení senzoru SHT11 [převzato z (4)]....................................... 22 Obrázek 10: Schéma zapojení USB konektoru [převzato z (1)]..................................... 23 Obrázek 11: Schéma zapojení konektoru pro ICSP programování ................................ 24 Obrázek 12: Plošný spoj včetně osazených součástek.................................................... 24 Obrázek 13: Komunikační sekvence pro zápis bajtu do paměti [převzato z (5)] ........... 31 Obrázek 14: Komunikační sekvence pro čtení bajtu z paměti [převzato z (5)].............. 31 Obrázek 15: Příklad posloupnosti jednotlivých částí komunikace................................. 34 Obrázek 16: Startovací sekvence pro teplotní a vlhkostní senzor SHT11...................... 35 Obrázek 17: Zapojení krystalu pro systém reálného času [převzato z (1)] .................... 39
47
Seznam tabulek Tabulka 1: Základní vlastnosti a parametry senzoru SHT11 [převzato z (4)]................ 17 Tabulka 2: Paměťová náročnost jednoho uloženého záznamu teploty a vlhkosti .......... 18 Tabulka 3: Stavy enumerace USB zařízení .................................................................... 26 Tabulka 4: Kódy pro komunikaci mezi zařízením a počítačem ..................................... 27 Tabulka 5: Přehled použitých funkcí z knihovny I2C sběrnice ...................................... 30 Tabulka 6: Seznam příkazů senzoru SHT11................................................................... 35 Tabulka 7: Konstanty pro výpočet teploty dle závislosti na napájecím napětí............... 40 Tabulka 8: Konstanty pro výpočet teploty dle rozlišení měření ..................................... 41 Tabulka 9: Konstanty pro výpočet vlhkosti.................................................................... 41 Tabulka 10: Konstanty pro výpočet teplotní kompenzace vlhkosti................................ 41
48
Seznam použitých symbolů a zkratek A/D
Analog-Digital converter
ACK
Acknowledgement
CD
Compact Disc
CDC
Communication Device Class
CMOS
Complementary Metal-Oxide-Semiconductor
DIP
Dual In-line Package
EEPROM
Electrically Erasable Programmable Read-Only Memory
HID
Human Interface Sevice
I2C
Inter-Integrated Circuit
ICSP
In-Circuit Serial Programming
IDE
Integrated Development Environment
LCD
Liquid Crystal Display
MCU
Microcontroller Unit
MSSP
Master Synchronous Serial Port
PDIP
Plastic Dual Inline Package
PID
Product Identification
RAM
Random-Access Memory
RISC
Reduced Instruction Set Computing
SCL
Serial Clock Line
SDA
Serial Data Line
SPI
Serial Peripheral Interface Bus
TQFP
Thin Quad Flat Pack
USART
Universal Synchronous/Asynchronous Receiver/Transmitter
USB
Universal Serial Bus
VID
Vendor Identification
WP
Write Protection
49
Příloha A
Uživatelská příručka aplikace Instalace ovladače Datalogger je kompatibilní se standardem HID (Human Interface Device). Z tohoto důvodu není zapotřebí dodávat operačnímu systému žádné ovladače, operační systém si ovladače sám vyhledá a nainstaluje. U starších operačních systémů je nutné zajistit obecné ovladače HID pro konkrétní operační systém. Obr 1 ukazuje činnost operačního systému Microsoft Windows 7 po prvním připojení dataloggeru na konkrétní USB port počítače. Instalace může probíhat déle z důvodu hledání nových ovladačů na internetu. Obr 2 ukazuje úspěšnou instalaci zařízení. Po těchto krocích je zařízení připraveno k použití.
Obr 1: Instalace softwaru ovladače zařízení
Obr 2: Úspěšné nainstalování ovladače dataloggeru
Ovládání aplikace Při spuštění aplikace dojde k automatickému rozpoznání, jestli je datalogger správně připojen k počítači. Obr 3 naznačuje situaci, kdy datalogger není připojen nebo nastala chyba při instalaci ovladače. Při této situaci je dobré zkusit připojení dataloggeru k jinému USB portu počítače. Důvodem špatného připojení dataloggeru mohou být zcela vybité baterie, které je pro správnou funkčnost vyměnit. Obr 4 naznačuje situaci, kdy je datalogger správně připojen a komunikace mezi dataloggerem a aplikací probíhá v naprostém pořádku.
Obr 3: Aplikace v případě odpojeného dataloggeru
Tlačítko Spustit nebo Zastavit provede spuštění a nebo zastavení záznamu měření. Časová perioda měření lze navolit pomocí posuvníků. Levý posuvník nastavuje hodiny a pravý posuvník minuty. Nastavení je nutné potvrdit tlačítkem Nastav periodu měření. Minimální časová perioda měření je 1 minuta, maximální 23 hodin a 59 minut. Tlačítko Aktualizuj čas provede synchronizaci aktuálního času a data s počítačem. Pro stažení naměřených hodnot pro čtení v aplikaci slouží tlačítko Nahraj data. Naměřené hodnoty je možné uložit do textového souboru, ve kterém jsou jednotlivé položky odděleny středníkem, pomocí tlačítka Ulož do souboru. Tlačítko Vymaž paměť vymaže všechny uložené hodnoty v dataloggeru. V dolní části programu je k dispozici indikátor obsazení paměti dataloggeru.
Obr 4: Aplikace v případě připojeného dataloggeru, na kterém probíhá měření
Aplikace dovoluje dodatečnou kalibraci naměřených hodnot. Po stisku tlačítka Kalibrace se zobrazí posuvníky pro zvolení kalibrační hodnoty teploty a vlhkosti. Hodnoty se změnou kalibrace je nutné opětovně nahrát nebo uložit do souboru, jinak se změna neprojeví.
Obr 5: Aplikace v případě připojeného dataloggeru a možností kalibrace hodnot
Příloha B
Schéma zapojení
Obr 6: Plošný spoj
Příloha C
Plošné spoje Hlavní deska dataloggeru
Deska pro senzor SHT11 v pouzdře SMD
Příloha D
Seznam použitých součástek Označení IC1 IC2 SHT11 X1 R1 R2 R3 R4 R5 R1/1 C1 C2 C3 C4 C5 C6 C7 C8 C9 JP1 JP2 JP3 JP4 JP5 JP6 JP1/1 Q1 Q2
Typ PIC 18F4550 PDIP 24LC128 SHT11 USB1X90B PCB 1M 10 k 10 k 10 k 470 10 k 22 p 22 p 33 p 33 p 10 µ 470 n 100 n 100 n 100 n 2 piny 4 piny 4 piny 2 piny 4 piny 2 piny 4 piny 20 MHz 32 kHz
Popis Mikrokontrolér Microchip EEPROM paměť Senzor Sensirion SHT11 USB konektor zásuvka 90° Rezistor Rezistor Rezistor Rezistor Rezistor Rezistor Keramický kondenzátor Keramický kondenzátor Keramický kondenzátor Keramický kondenzátor Elektrolytický kondenzátor Keramický kondenzátor Keramický kondenzátor Keramický kondenzátor Keramický kondenzátor Lišta pinová 2,54 mm Lišta pinová 2,54 mm Lišta pinová 2,54 mm Lišta pinová 2,54 mm Lišta pinová 2,54 mm Lišta pinová 2,54 mm Lišta pinová 2,54 mm Krystal Krystal
Příloha E
Obsah přiloženého CD