Diplomová Práce
Provozní Zapisovač Dat 2009
Tomáš Kašný
Anotace Práce se zabývá návrhem zapisovače, který ukládá data z inerciální navigační jednotky do externí paměti. Tato data se zpracovávají v aplikaci na PC a převádějí do textové formy vhodné pro import do dalších programů.
Annotation This work deals with the design of the recorder which stores data from an inertial navigation unit to the external memory. These data can be then processed in the PC application and modified into text forms fit for a usage within the other programs.
Poděkování Na tomto místě bych chtěl obzvláště poděkovat svému vedoucímu diplomové práce, panu Ing. Janu Roháči, Ph.D., za jeho vedení a trpělivost při psaní této diplomové práce, panu Ing. Michalovi Reinšteinovi za umožnění přístupu k inerciálně jednotce a nakonec bych chtěl poděkovat svým rodičům a celé rodině za jejích podporu a ohleduplnost během studia a práce na diplomové práci.
ČESTNÉ PROHLÁŠENÍ Prohlašuji, že jsem zadanou diplomovou práci „Provozní zapisovač dat“ zpracoval samostatně a použil jsem podklady (literaturu, software atd.) uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu § 60 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ů (autorský zákon).
V Praze dne 22.5.2009
Podpis…………………………………….
Obsah 1. ÚVOD ................................................................................................................................- 1 2. ANALÝZA PROBLÉMŮ A NÁVRH ŘEŠENÍ.............................................................- 2 2.1 INERCIÁLNÍ JEDNOTKA AHRS M3.................................................................................- 2 2.1.1 Obecný popis .........................................................................................................- 2 2.1.2 Připojení k zapisovači ...........................................................................................- 4 2.1.4 Softwarové rozhraní ..............................................................................................- 5 2.2 VÝBĚR PROCESORU .......................................................................................................- 7 2.3 VÝBĚR PAMĚTI ..............................................................................................................- 8 2.4 OBSLUHA.......................................................................................................................- 9 3. HARDWAROVÁ REALIZACE...................................................................................- 10 3.1 BLOKOVÉ SCHÉMA ZAPISOVAČE ..................................................................................- 10 3.2 POPIS MIKROKONTROLÉRU ..........................................................................................- 11 3.2.1 Propojky ..............................................................................................................- 12 3.2.2 Paměťový prostor ................................................................................................- 13 3.2.3 Obecné vstupy/výstupy ........................................................................................- 13 3.2.4 SPI sběrnice.........................................................................................................- 15 3.2.5 Rozhraní RS-232 .................................................................................................- 16 3.2.6 Časovač ...............................................................................................................- 17 3.2.7 Reset ....................................................................................................................- 18 3.3 PROGRAMÁTOR ...........................................................................................................- 19 3.4 SD KARTA ...................................................................................................................- 20 3.5 LCD ............................................................................................................................- 24 3.6 KLÁVESNICE................................................................................................................- 26 3.7 RS-232........................................................................................................................- 27 3.8 RESETOVACÍ OBVOD ....................................................................................................- 28 3.9 NAPÁJENÍ ....................................................................................................................- 28 4. SOFTWARE ...................................................................................................................- 29 4.1 FIRMWARE...................................................................................................................- 29 4.1.1 Struktura programu.............................................................................................- 30 4.1.2 Inicializační proces .............................................................................................- 33 4.1.3 Ovládání LCD .....................................................................................................- 40 4.1.4 Funkce pro práci s FAT ......................................................................................- 41 4.1.5 Zápis měření........................................................................................................- 42 4.1.6 Odeslání měření ..................................................................................................- 46 4.1.7 Ostatní funkce zapisovače ...................................................................................- 48 4.2 APLIKACE PZD.EXE...................................................................................................- 49 4.2.1 Hlavní dialogové okno ........................................................................................- 50 4.2.2 Nastavení.............................................................................................................- 52 4.2.3 Grafy....................................................................................................................- 54 5. TESTOVÁNÍ ZAPISOVAČE .......................................................................................- 55 6. ZÁVĚR............................................................................................................................- 61 LITERATURA ...................................................................................................................- 63 -
Provozní Zapisovač Dat
Tomáš Kašný
1. Úvod Již z názvu diplomové práce vyplívá podobnost s tzv. černou skříňkou. Ta se používá jako záznamové zařízení pro data ze senzorů, různých jednotek apod. Záznamové zařízení má dnes široké uplatnění v průmyslu, dopravě a jiných odvětvích, kde je potřeba zaznamenávat provozní data strojů, informace o stavech apod. Cílem této diplomové práce je navrhnout zařízení, které bude schopno komunikovat s inerciální jednotkou a číst z ní data z akcelerometrů a senzorů úhlové rychlosti. Zařízení bude vybaveno pamětí, kterou buď bude možné ze zařízení odpojit a připojit přímo k PC nebo zařízení bude vybaveno rozhraním, kterým se připojí k PC a odešle do něj zaznamenaná data. V PC bude aplikace, která zaznamenaná data bude dekódovat a převádět do srozumitelnější formy. Popřípadě aplikace bude komunikovat se samotným zapisovačem a přijímat z něj zaznamenaná data. Převedená data musí být importovatelná do jiných programů (Excel, MatLab apod.). Součástí aplikace bude také zobrazování zaznamenaných dat pomocí grafů. Zapisovač se bude realizovat pomocí mikrokontroléru, který by měl disponovat několika komunikačními kanály, minimálně rozhraním RS-232. Paměť se bude vybírat na základě rychlosti zápisu a její kapacity, a propojení s mikrokontrolérem se bude realizovat buď pomocí vstupně/výstupních brán mikrokontroléru nebo pomocí některé komunikační sběrnice. Komunikace s inerciální jednotkou bude záviset na dispozicích samotné jednotky, ale pravděpodobně se použije sériové rozhraní RS-232. Obsluha zapisovače se bude provádět pomocí malé klávesnice a LCD displeje.
-1-
Provozní Zapisovač Dat
Tomáš Kašný
2. Analýza problémů a návrh řešení Provozní zapisovač dat zaznamenává data z jednotky inerciální navigace (dále jen jednotka). Ta je k zapisovači připojena pomocí rozhraní RS-232. Data z jednotky se zpracovávají v zapisovači, v němž se provede krátký výpočet a uložení do paměti. O vysílání dat se jednotka stará sama. Podle svého nastavení opakuje vysílání bloku dat. V jednotce lze nastavit jak vzorkovací frekvenci, tak formát výstupních dat. Zapisovač musí umět komunikovat také s PC, kde se data budou dále zpracovávat podle potřeby. Komunikace s PC je taktéž zajištěna pomocí sériové linky RS-232. Na PC je programové vybavení, které zajišťuje spojení se zapisovačem. Tento program je schopen zobrazit výstupní data ve formě grafů a umožňuje data ukládat do libovolného souboru. V nastavení programu lze částečně ovlivňovat formát ukládaných dat (oddělovací znak hodnot, názvy sloupců jednotlivých senzorů). Zapisovač rovněž musí umět komunikovat s obsluhou, což se realizuje pomocí LCD displeje a malé klávesnice.
2.1 Inerciální jednotka AHRS M3 2.1.1 Obecný popis Jednotka AHRS M3 firmy Innalabs byla zvolena díky její konektivitě pomocí sériového rozhraní RS-232. Výrobce k ní navíc dodává redukci RS-232 ↔ USB, která v tomto případě není použitá. Specifikace jednotky jsou uvedeny v příloze I.
Obr. 2.1 – jednotka inerciální navigace AHRS M3
-2-
Provozní Zapisovač Dat
Tomáš Kašný
Jednotka je vybavena třemi akcelerometry, třemi senzory úhlové rychlosti a třemi magnetometry. Je schopna poskytovat přímo údaje ze senzorů a výpočetní algoritmus, obsažený v jednotce, poskytuje Eulerovi polohové úhly (kurs, příčný sklon a podélný náklon). Údaje z akcelerometrů a magnetometrů používá výpočetní algoritmus ke kompenzaci chyb vzniklých při integraci polohových úhlů, viz. obr. 2.2. Pro výrobu senzorů jednotky byla použita technologie MEMS. Ta dává jednotce několik výhod: •
rozměry, umožňující její použití v mnoha obdobných aplikacích,
•
napájecí napětí, které je zde 6 V a spotřeba zhruba 110 mA. Pokud by se použila inerciální jednotka s mechanickými gyroskopy, potřebovalo by se napětí řádově v desítkách voltů pro roztočení setrvačníků a proud řádově v jednotkách Ampér,
•
široký rozsah vzorkovacích frekvencí, kterým tato inerciální jednotka disponuje (od 1 Hz do 100 Hz).
Základem výpočetního algoritmu této inerciální jednotky je Kalmanův filtr. Ten je zde použit pro stanovení bias drift senzorů
uhlové rychlosti a k výpočtu stabilizovaných
polohových úhlů.
Obr. 2.2 – funkční diagram AHRS M3
-3-
Provozní Zapisovač Dat
Tomáš Kašný
2.1.2 Připojení k zapisovači Elektrické připojení jednotky k zapisovači je realizováno pomocí 5-ti pinového mini Din konektoru, viz. obr. 2.3. V tabulce tab. 2.1 je popis významů jednotlivých pinů.
Obr. 2.3 – konektor AHRS M3
Tab. 2.1 – význam pinů Pin 1 2 3 4 5
Signál Rx zapisovač GND Tx zapisovač VDD NC
Jednotku lze napájet externě pomocí AC/DC adaptéru, který dodává výrobce (napětí 6 V a výkon 660 mW). Na obr. 2.4 můžeme vidět jak se jednotka propojí se zapisovačem, jenž je vybaven standardním konektorem CANNON 9 V 90. zapisovač inerciální jednotka
1
NC
Rx zapisovač
1
2
Rx zapisovač
Tx zapisovač
3
3
Tx zapisovač
GND
2
4
NC
VDD
4
5
GND
5
6
NC
7
NC
napájení
8
NC
VDD
9
NC
GND
Obr. 2.4 – propojení inerciální jednotky a zapisovače
-4-
Provozní Zapisovač Dat
Tomáš Kašný
2.1.4 Softwarové rozhraní Jak již bylo řečeno k jednotce se připojuje pomocí sériové linky RS-232. Po připojení napájení provede jednotka svou inicializaci a je připravena k práci. Nachází se v “čekacím módu“, kdy čeká na příkazy. Všechny příkazy a data se přijímají a odesílají přes sériovou linku, jejíž nastavení uvádí tab. 2.2.
Tab. 2.2 – nastavení COM portu rychlost [b/s]
115 200
počet datových bitů
8
parita
žádná
počet Stop bitů
1
Jednotku lze ovládat pomoci sady 8-mi příkazů. Příkazy mají velikost 1B a níže je uveden jejich seznam a krátký popis: •
AHRS1, kód 0x80 – přepne jednotku do operačního módu a spustí měření. Jednotka bude vysílat “Full Output Data format“.
•
AHRS2, kód 0x81 - přepne jednotku do operačního módu a spustí měření. Jednotka bude vysílat “Orientation Angles format“.
•
AHRS3, kód 0x82 - přepne jednotku do operačního módu a spustí měření. Jednotka bude vysílat “Quaternion Of Orientation format“.
•
AHRS4, kód 0x82 - přepne jednotku do operačního módu a spustí měření. Jednotka bude vysílat “Orientation Angles+Senzors Output“.
•
Stop, kód 0xFE – jednotka ukončí měření a přejde do “nečinného stavu“.
•
LoadBlockPar, kód 0x10 – příkaz nahraje 52B dat do jednotky. Blok dat obsahuje parametry pro měření, viz. tab. 2.3.
•
ReadBlockPar, kód 0x11 – příkaz přečte 52B z jednotky. Blok dat obsahuje aktuální parametry pro měření, viz. tab. 2.4.
•
GetVerFirmware, kód 0x1F – příkaz přečte verzi firmwaru.
-5-
Provozní Zapisovač Dat
Tomáš Kašný
Tab. 2.3 – obsah data bloku nahrávající se do inerciální jednotky Byte
Parametr
Formát
Délka [B]
Poznámka
0-1
vzorkování
slovo
2
v Hz
2-3
inicializační čas
slovo
2
v sekundách
4-7
magnetická deklinace
float
4
ve stupních
8-11
zeměpisná šířka
float
4
ve stupních
12-15
zeměpisná délka
float
4
ve stupních
16-19
výška
float
4
v metrech
20-23
datum(rok, měsíc)
float
4
24-27
úhel A1
float
4
montážní úhly AHRS
28-31
úhel A2
float
4
na objektu [°], viz. [4]
31-35
úhel A3
float
4
36-49
reservováno
50-51
kontrolní součet
14 slovo
2
Tab. 2.4 – obsah data bloku přečteného z inerciální jednotky Byte
Parametr
Formát
Délka [B]
Poznámka
0-1
vzorkování
slovo
2
v Hz
2-3
inicializační čas
slovo
2
v sekundách
4-7
magnetická deklinace
float
4
ve stupních
8-11
zeměpisná šířka
float
4
ve stupních
12-15
zeměpisná délka
float
4
ve stupních
16-19
výška
float
4
v metrech
20-23
datum(rok, měsíc)
float
4
24-27
úhel A1
float
4
montážní úhly AHRS
28-31
úhel A2
float
4
na objektu [°], viz. [4]
31-35
úhel A3
float
4
36-43
identifikace zařízení
znak
8
44-49
reservováno
50-51
kontrolní součet
pouze pro čtení
6 slovo
2
Jako výstupní formát dat, který je tvořen 36B dlouhým data blokem, se v tomto případě použije “ Orientation Angles+Senzors Output“, příkaz AHRS4. Pro účel této práce se použijí pouze hodnoty z akcelerometrů a senzorů úhlových rychlostí. Pozici jednotlivých bajtů a jejich obsah ukazuje tab. 2.5.
-6-
Provozní Zapisovač Dat
Tomáš Kašný
Tab. 2.5 – význam jednotlivých bajtů ve výstupním data bloku
Kontrolní součet, který tvoří vždy dva poslední bajty vysílaného bloku dat se vypočte jako aritmetický součet všech předchozích bajtů. Pro data blok obsahující parametry inerciální jednotky je kontrolní součet roven součtu bajtu 0 až 49 a pro data blok obsahující výstupní data ze senzorů je kontrolní součet roven součtu bajtu 0 až 33.
2.2 Výběr procesoru Výběr procesoru byl ovlivněn původním návrhem realizace, ve kterém se předpokládalo použití paměti typu FLASH. U tohoto druhu paměti lze adresovat každý bajt samostatně. Z toho vyplynulo: •
procesor s dostatkem vstupně/výstupních bran,
•
integrované některé komunikační kanály, hlavně sériová linka RS-232,
•
alespoň jeden 16-ti bitový časovač, protože zapisovač zaznamenává také časový index mezi jednotlivými odměry,
•
pouzdro procesoru v provedení pro povrchovou montáž,
•
rychlost procesoru, je požadován procesor z rychlostí okolo 10MHz, který dokáže své instrukce vykonávat v co nejkratším čase, ideálně 1 instrukce = 1 takt. Na základě uvedených požadavků jsem se zaměřil na procesory ATmega od firmy
Atmel, se kterýma již mám zkušenosti. Konkrétně jsem vybral mikrokontrolér ATmega16, jehož nejdůležitější vlastnosti jsou uvedeny níže: •
instrukční soubor obsahuje 131 instrukcí,
•
32 obecně použitelných registrů délky 8 bitů,
•
čtyři 8-mi bitové vstupně/výstupní porty (celkem tedy 32 vstupů/výstupů),
•
hodinový kmitočet 0 až 16 MHz, maximální výpočetní výkon až 16 MIPS, -7-
Provozní Zapisovač Dat
Tomáš Kašný
•
programová paměť FLASH, kapacita 16 kB, počet přeprogramování je až 1000 cyklů,
•
datová paměť RAM, kapacita 1 kB,
•
datová paměť E2PROM, kapacita 512 B, počet přeprogramování je až 100 000 cyklů,
•
FLASH a E2PROM jsou programovatelné přímo v systému pomoci rozhraní SPI nebo JTAG,
•
dva 8-mi bitové čítače/časovače, jeden 16-ti bitový čítač/časovač,
•
čtyři PWM kanály,
•
analogový komparátor, 10-ti bitový A/D převodník,
•
jednotky USART, SPI, TWI (podpora I2C),
•
jednotky WDT, Power-on reset,
•
zabudovaný RC oscilátor,
•
pouzdra DIP 40, TQFP 44.
Tento mikrokontrolér se vyrábí nejen ve standardním teplotním rozsahu 0 °C až 70 °C, ale také v teplotním rozsahu -40 °C až 85 °C a to v obou provedeních pouzdra. Jako zdroj hodinového signálu se použije krystalový oscilátor 14,7456 MHz. Tato hodnota krystalu se použije z důvodů přesnějšího časování pro rozhraní RS-232, viz. rovnice 3.1.
2.3 Výběr paměti Při prvním návrhu zapisovače se uvažovalo použít paměťový obvod FLASH. Kvůli požadavku na větší paměťový prostor, se od něj muselo upustit a přešlo se na paměťovou kartu. Konkrétně na “Secure Digital Card“. Volba této paměťové karty byla ovlivněna hlavně její rozšířeností a univerzálností. Protože jde o “otevřený formát“, lze snadno získat veškeré podklady pro práci s SD kartou. Problém by mohl nastat až při komunikaci SD karty s mikrokontrolérem. SD karta ovšem umí komunikovat ve dvou módech: SD mód a SPI mód. SD mód se používá při standardním přístupu na SD kartu, kdy s ní komunikuje např. PC, fotoaparát apod. V této práci se ale bude s SD kartou komunikovat pouze v SPI módu. SPI mód je sice omezenější než SD mód, ale pro účel této práce je dostačující.
Základní vlastnosti SD karty: •
kompatibilní s MultiMediaCard protokolem,
•
podpora SPI módu,
-8-
Provozní Zapisovač Dat
Tomáš Kašný
•
napájecí rozsah 2,7 V až 3,6 V,
•
možnost použití CRC kódu pro opravu chyb,
•
rozsah pracovního kmitočtu 0 až 20 MHz,
•
rychlost zápisu až 3 MB/s (SD mód),
•
mechanická ochrana proti přepisu dat,
•
pouzdro ve třech provedeních (SD karta, miniSD karta a microSD karta),
•
odolná vůči nárazům,
•
až 100 000 cyklů zápis/výmaz.
Mechanické provedení SD karty ve standardním pouzdře je zobrazeno v příloze III.
2.4 Obsluha Zapisovač musí umět komunikovat také s obsluhou a obsluha naopak musí zapisovač ovládat. Jako výstupní komunikační zařízení byl zvolen jednořádkový LCD displej se 16-ti znaky, vybaven také podsvětlením pro lepší čitelnost. Použit je displej z nabídky obchodu GM electronic s označením MC1601A-SYL/H. - standardní displej, ovládán řadičem S6A0069 nebo ST7066 (oba řadiče jsou totožné jen od jiného výrobce a vycházejí ze standardního řadiče HD44780 firmy Hitachi). S displejem lze komunikovat i pomocí čtyř datových bitů, čehož se využilo při původním návrhu, kdy se ještě používala FLASH paměť a u tohoto módu komunikace se zůstalo. Obsluha zapisovače se provádí pomocí tří tlačítek. Tyto tlačítka musí být bezzákmitové a pro tento účel je každé tlačítko vybaveno monostabilním klopným obvodem. Tlačítka mají význam “←“, “OK“ a “→“. Tlačítka “ ←“ a “ →“ se používají pro změnu nastavení, pohyb v MENU apod. Tlačítko “OK“ slouží k potvrzení. Na zapisovači je ještě čtvrté tlačítko “RESET“, které slouží k hardwarovému resetu zapisovače. Tlačítko “RESET“ není jednoduše dostupné, aby zařízení nebylo obsluhou náhodně resetováno. Zadání práce vyžaduje zobrazení dat na PC. K tomuto účelu je napsána aplikace PZD.exe, která byla vyvinuta v programovacím prostředí LabWindows/CVI. Výhodou tohoto prostředí je jeho možnost použití grafického rozhraní pro výsledný program, kde lze jednoduše naprogramovat libovolnou aplikaci i s grafickým rozhraním. Knihovny tohoto programu jsou dosti obsáhlé a je zde i mnoho příkladů použití různých konstrukcí, jako je třeba komunikace přes sériovou linku, vykreslování grafů apod.
-9-
Provozní Zapisovač Dat
Tomáš Kašný
3. Hardwarová realizace 3.1 Blokové schéma zapisovače Blokové schéma zapisovače je na obr. 3.1. Hlavní součástí zapisovače je mikrokontrolér ATmega16, který propojuje a ovládá veškeré periférie. Pomocí sběrnice SPI je k mikrokontroléru připojena SD karta a USB programátor sloužící k nahrání firmwaru do mikrokontroléru. O tom, které zařízení s mikrokontrolérem přes sběrnici SPI komunikuje, rozhodují přepínače SW1 a SW2. Komunikace s inerciální jednotkou a PC se provádí pomocí rozhraní RS-232, jehož správné napěťové přizpůsobení provádí převodník MAX232. Pro obsluhu zapisovače je k V/V bráně PA připojen LCD displej a k V/V bráně PD je připojená klávesnice. Napájení zapisovače obstarává blok napájení, který dodává napájecí napětí 3,3 V pro SD kartu a 5 V pro mikrokontrolér a ostatní periférie. Správnou úroveň napájejícího napětí pro mikrokontrolér hlídá resetovací obvod, který v případě poklesu napájejícího napětí 5 V, mikrokontrolér resetuje.
Obr. 3.1 – blokové schéma zapisovače
- 10 -
Provozní Zapisovač Dat
Tomáš Kašný
3.2 Popis mikrokontroléru Mikrokontrolér ATmega16 (dále jen mikrokontrolér) patří do rodiny mikrokontroléru Atmel AVR. AVR architektura vychází z koncepce rychle přístupného registrového pole, které obsahuje 32 obecně použitelných registrů o délce 8-mi bitů. Přístup do registrů je realizován během jednoho strojového cyklu. Tzn. že během jednoho strojového cyklu se přečtou operandy z registrů, provede se daná instrukce a výsledek se opět uloží do registru. Tato technika dodává mikrokontrolérům AVR velký výpočetní výkon. Pro srovnání procesory řady 8051 mají instrukce o délce 12 až 48 hodinových cyklů a pro práci musí využívat akumulátor, který je většinou jen jeden. U mikrokontrolérů AVR lze považovat všech 32 registrů za akumulátor. Navíc strojový cyklus je u mikrokontrolérů AVR stejně dlouhý jako hodinový cyklus. Nedochází zde k dělení strojových cyklů na několik hodinových cyklů jako u řady 8051. Mikrokontroléry AVR jsou vybaveny prefetch funkcí (předvýběr instrukcí), který je sice velmi zjednodušený, ale funkční a účinný. Díky prefetch je implementován jednofázový pipelining (zřetězené provádění instrukcí), kdy během provádění jedné instrukce se již připravuje další instrukce. Jakmile první instrukce zapíše svůj výsledek do registru, může okamžitě druhá instrukce výsledek číst a použít pro svou operaci. Nedochází zde tak často k prázdným hodinovým cyklům, kdy se čeká než se instrukce nahraje a dekóduje, aby mohla být použita. Rychlost mikrokontrolérů AVR je zajištěna z velké části také instrukční sadou. Pro mikrokontroléry AVR platí jednotná délka instrukcí, a to 16 bitů. Jen několik instrukcí má délku 32 bitů. U mikrokontrolérů ATmega je několik možností, jak jej naprogramovat. Může se použít paralelní programování, které však vyžaduje speciální programátor. Mikrokontrolér se vloží do programátoru, naprogramuje, vyjme a vloží do zařízení. Jistou nevýhodou je fakt, že pokud není zařízení vybaveno ZIF patici, může se snadno mikrokontrolér poškodit. Další možností je použití rozhraní JTAG. Toto rozhraní má tu výhodu, že lze program ladit přímo na čipu. Značnou nevýhodou je ovšem vysoká cena programového vybavení. Nejschůdnější cestou, jak jednoduše naprogramovat tento mikrokontrolér, je použití sériového downloadu pomoci SPI sběrnice. Tento způsob umožňuje bez problémů vykonávat všechny nutné operace, jako mazání FLASH paměti, verifikaci uploadovaných dat apod. SPI rozhraní lze použít i pro naprogramování E2PROM paměti. K programování přes SPI sběrnici se používá programátor, který je popsán v kapitole 3.3.
- 11 -
Provozní Zapisovač Dat
Tomáš Kašný
3.2.1 Propojky Mikrokontrolér disponuje dvěma bajty propojek. Propojky lze programovat i pomocí sériového downloadu. Hodnota propojek je zapamatována i když se vstoupí do programovacího režimu. Dále je uveden seznam propojek a jejich význam: •
OCDEN (On Chip Debug ENabled) – povoluje (0) nebo zakazuje (1) ladění přímo na čipu.
•
JTAGEN (JTAG ENabled) – povoluje (0) nebo zakazuje (1) použití JTAG rozhraní.
•
SPIEN (SPI download ENabled) - povoluje (0) nebo zakazuje (1) sériový download.
•
CKOPT (ClocK OPTions) – uplatní se při použití krystalového oscilátoru, pokud je nastavená (1), inicializuje se na oscilátoru malý rozkmit, sníží se spotřeba a je menší rušení do okolních obvodů. Pokud je nastavená (0), inicializuje se na oscilátoru plný rozkmit. Tato volba je vhodná pro silně rušené prostředí.
•
EESAVE (EEprom SAVE) – je-li
tato propojka naprogramována (0), je obsah
E2PROM zachován i po smazání čipu. •
BOOTSZ1, BOOTSZ2 (BOOT SiZe) – velikost boot loader sekce.
•
BOOTRST (BOOT ReSeT) – je-li tato propojka naprogramována (0), jsou vektory přerušení a resetu umístěny do boot leader sekce a ne do aplikační sekce FLASH.
•
BODLEVEL (Brown-Out Detection LEVEL) – slouží k výběru úrovně
detektoru
výpadku, výchozí hodnota je 1. •
BODEN (Brown-Out Detection ENabled) – je-li BODEN = 0, je detektor aktivován a naopak, výchozí hodnota je 1, detektor deaktivován.
•
SUT1 a SUT0 (Start-Up Time) – volba startovací mikrokontroléru
prodlevy z
režimu
při
Power-save
Power-down. •
CKSEL3 až CKSEL0 (ClocK SELect) – volba zdroje synchronizace.
Podrobnosti ohledně nastavení propojek jsou uvedeny v literatuře [5].
- 12 -
probuzení nebo
Provozní Zapisovač Dat
Tomáš Kašný
3.2.2 Paměťový prostor Paměťový prostor u mikrokontroléru je rozdělen na programovou a datovou část, harvardská architektura. Vnitřní paměť je tvořena FLASH pamětí, RAM a E2PROM. FLASH má velikost 16 kB a je adresována vždy po slovech od adresy 0x0000 až 0x1FFF. Vnitřní datová paměť je tvořená statickými paměťovými buňkami, takže paměť není zatížena refreshem. Prvních 32 bajtů odpovídají obecným registrům R0 až R31. Na následujících 64 bajtech jsou umístěny vstupně/výstupní registry, které slouží jako řídící a datové registry pro periférie mikrokontrolérů. Zbylý paměťový prostor se používá jako RAM, která začíná na adrese 0x0060 a končí na 0x045F. Rozložení vnitřní paměti mikrokontroléru je zobrazeno na obr. 3.2.
Obr. 3.2 – mapa vnitřní paměti
3.2.3 Obecné vstupy/výstupy Mikrokontrolér obsahuje celkem čtyři vstupně/výstupní brány po 8-mi vývodech. Celkem tedy 32 vstupně/výstupních vývodů. Všechny vývody mají tzv. Read-Modify-Write funkcionalitu, takže pomocí příslušných instrukcí (SBI, CBI) lze měnit nastavení libovolného vývodu, aniž bychom ovlivnily ostatní. Všechny vývody jsou mimo jiné vybaveny vlastním pull-up rezistorem, který lze kdykoliv odpojit nebo se mohou odpojit všechny pull-up rezistory najednou bitem PUD v registru SFIOR. Bližší informace jsou uvedeny v literatuře [1] a [5]. Každá vstupně/výstupní brána je vybavena třemi registry: DDRx, PORTx a PINx. DDRx určuje směr toku dat každého vývodu příslušné brány. Pokud je příslušný bit nastaven na log.1, bude příslušný vývod nastaven jako výstup. - 13 -
Provozní Zapisovač Dat
Tomáš Kašný
Registr PORTx nastavuje na příslušné bráně a vývodu výstupní logickou úroveň, pokud je příslušný vývod konfigurován jako výstup. Pokud je vývod konfigurován jako vstup, určuje PORTx zda je (log.1) nebo není (log. 0) připojen pull-up rezistor k tomuto vývodu. Pomocí registru PINx se čte aktuální stav na jednotlivých branách, respektive vývodech. Tento registr je vždy v následujícím strojním cyklu synchronizován s registrem PORTx, takže výstupní úroveň lze kontrolovat pomocí registru PINx. Pokud je vývod nastaven jako vstup, synchronizace s PORTx nefunguje, protože PORTx v takovém případě určuje, zda je nebo není připojen pull-up rezistor, jak již bylo řečeno. Mikrokontrolér obsahuje řadu integrovaných periferních zařízení a proto většina vstupně/výstupních vývodů má dvojí funkci. Může sloužit jako obecný vstupně/výstupní vývod nebo jako vstup či výstup pro některou integrovanou periférii. Funkce příslušného vývodu je vždy určena řídícím registrem dané periférie. Pokud je daná periférie vypnutá, lze vývody použít libovolně. Na obr. 3.3 je zobrazeno vnitřní zapojení jednoho vývodu brány.
Obr. 3.3 – vnitřní zapojení jednoho vývodu brány
- 14 -
Provozní Zapisovač Dat
Tomáš Kašný
3.2.4 SPI sběrnice SPI je vysokorychlostní sběrnice, která se používá pro komunikaci mezi mikrokontrolérem a periferním zařízením. Mikrokontrolér je vybaven plně samostatným rozhraním SPI sběrnice, tzn. že o provoz na sběrnici se mikrokontrolér vůbec nestará. Samozřejmě detekuje příslušná přerušení pro obsluhu SPI sběrnice. Základní vlastnosti: •
plný duplex,
•
třívodičový synchronní přenos dat,
•
mikrokontrolér může být Master nebo Slave,
•
max. přenosová rychlost až 8 Mb/s,
•
příznaky konce a kolize přenosu.
SPI sběrnice je založena na komunikaci mezi nadřazeným Master obvodem a podřazeným Slave obvodem. Mikrokontrolér může pracovat jako Master i jako Slave. Oba módy se využívají. Mód Slave se používá při programování FLASH paměti, kdy programátor je Master. V ostatních případech, což je komunikace s SD kartou, pracuje mikrokontrolér jako Master. Ke komunikaci se používají tři vodiče: MOSI (Master Output Slave Input), MISO (Master Input Slave Output) a SCK (hodinový signál). Čtvrtý vývod SS (Slave Select) je použit pokud mikrokontrolér pracuje jako Slave a tento vývod slouží k jeho aktivaci. Pokud je mikrokontrolér v Master módu, lze tento vývod použít k výběru Slave obvodu. V tomto případě se tímto vývodem aktivuje SD karta. Na obr. 3.4 lze vidět standardní propojení Master – Slave.
Obr. 3.4 – propojení Master - Slave K řízení SPI sběrnice slouží tři registry: SPCR, SPSR a SPDR. SPCR je řídící registr, ve kterém se nastavuje rychlost SPI sběrnice a formát přenosu. SPSR stavový registr, ve kterém jsou příznaky dokončení a kolize přenosu.
- 15 -
Provozní Zapisovač Dat
Tomáš Kašný
Poslední registr SPDR je datový. Do tohoto registru se vkládají data pro vysílání a odebírají se z něj přijatá data. Podrobný popis registrů a celé SPI sběrnice je obsažen v literatuře [1] a [5].
3.2.5 Rozhraní RS-232 Toto rozhraní se používá pro komunikaci mezi inerciální jednotkou a zapisovačem a také slouží k přenosu dat mezi zapisovačem a PC. V obou případech jde o asynchronní přenos. Základní vlastnosti: •
plný duplex,
•
synchronní i asynchronní režim,
•
velký rozsah rychlostí,
•
generátor parity a hardwarové testování parity pro přijímač,
•
detekce ztráty znaku,
•
detekce chyby rámce,
•
tři nezávislá přerušení (odvysílání znaku, příjem znaku a vyprázdnění vysílacího registru).
Rozhraní se skládá ze tří klíčových bloků: generátor hodin, vysílač a přijímač. Rychlost sériového rozhraní je závislá na generátoru hodin, který dodává potřebný synchronizační signál. Pro nastavení rychlosti se používá registr UBRR. 16-ti bitový registr, který je rozdělen na dva 8-mi bitové registry UBRRH a UBRRL. K oběma registrům se musí přistupovat samostatně. Následující rovnicí (3.1) se stanoví hodnota UBRR na základě zvolené rychlosti.
UBRR =
kde:
(3.1)
f0 −1 16 * f BR
f0
hodinový signál mikrokontroléru
fBR
frekvence hodinového generátoru, odpovídá přenosové rychlosti v b/s
UBRR
výsledný obsah registru
- 16 -
Provozní Zapisovač Dat
Tomáš Kašný
Rychlost sériového rozhraní lze dvojnásobně zvýšit pomocí bitu U2X v registru UCSRA. I bez bitu U2X lze dosáhnout rychlosti 230 400 b/s. Osobní počítače však disponují sériovým rozhraním s max. rychlostí 128 000 b/s, proto se v zapisovači používá 115 200 b/s jako maximální rychlost sériového rozhraní. Pro nastavení a řízení sériového rozhraní se používá pět registrů: UDR, UCSRA, UCSRB, UCSRC a UBRR. Registr UDR slouží jako datový registr pro vysílač i přijímač. Registry UCSRA, UCSRB a UCSRC slouží k nastavení vlastností sériového rozhraní (parita, počet stop bitů apod.) a obsahují příznaky chyby rámce, ztráty rámce atd. Poslední 16-ti bitový registr UBRR slouží k nastavení rychlosti rozhraní. Podrobný popis sériového rozhraní lze najít v literatuře [1] a [5].
3.2.6 Časovač Časovač 1 je zde využit jako měřič času. S jeho pomocí se měří časový interval mezi dvěma odměry. Základní vlastnosti: •
16-ti bitový čítač/časovač,
•
dvě nezávislé jednotky OC (Output Compare),
•
normální režim, CTC režim,
•
několik PWM režimů,
•
režim čítače vnějších událostí,
•
čtyři nezávislé zdroje přerušení. Kromě funkce jako měřič času, se využívá také k detekci uplynutí “TimeOut“
intervalu. “TimeOut“ interval slouží jako “záchranná brzda“, která ukončí aktuální činnost zapisovače. Pokud data z jednotky nebo z PC nedorazí do uplynutí “TimeOut“ intervalu, bude operace ukončena. Pokud by nebyl “TimeOut“ interval použit, zapisovač by neustále čekal na příjem dat a zacyklil by se v nekonečné smyčky, ze které by se dostal pouze resetem. Jak již bylo řečeno časovač se používá k měření času mezi dvěma odměry. Pracuje v normální režimu a využívá se pouze detekce přetečení. Když se časovač naplní, nuluje se a pokračuje dál v čítání. Při naplnění se však generuje přerušení, které indikuje uplynutí intervalu “TimeOut“. Pokud ovšem proběhne přijetí dat z jednotky nebo z PC v pořádku, časovač se zastaví. Jeho znovuspuštění závisí na konkrétní zvolené funkci zapisovače.
- 17 -
Provozní Zapisovač Dat
Tomáš Kašný
Řídící, stavové a datové registry jsou: TCCR1A, TCCR1B, TCNT1, OCR1X, ICR1, TIMSK a TIFR. Registry TCCR1A a TCCR1B slouží k nastavení vlastností čítače (zdroj signálu, směr čítání apod.). Registr TCNT1, 16-ti bitový, obsahuje aktuální hodnotu čítače. OCR1X a ICR1 jsou registry pro jednotky Output Compare a Input Compare. Obsah těchto registrů se neustále porovnává s obsahem TCNT1 a po dosažení shody, dojde k vyvolání přerušení, pokud je povoleno. Poslední dvojce registrů TIMSK a TIFR slouží k nastavení masky přerušení čítače a příznaků přerušení čítače. Tyto dva registry jsou společné pro všechny čítače/časovače v mikrokontroléru. Časovač 1 disponuje předděličkou. Použití předděličky je nutné, protože se musí měřit relativně dlouhé časové úseky. Předdělička má několik možnosti nastavení a pro lepší synchronizaci, se před začátkem čítání resetuje. Nastavení se provádí v registru TCCR1B. Podrobný popis časovače, nastavení a jeho možnosti jsou uvedeny v literatuře [1] a [5].
3.2.7 Reset Mikrokontrolér disponuje několika zdroji resetu: •
reset po připojení napětí (Power-on reset),
•
vnější reset – aktivován pinem RESET ,
•
Watchdog reset – nastane při vypršení periody obvodu WDT,
•
reset při poklesu napájení (Brown-out reset),
•
JTAG AVR reset – vyvolán rozhraním JTAG.
Nejvíce používán je Power-on reset. Tento reset se uplatní při startu mikrokontroléru, kdy obvod Power-on reset resetuje mikrokontrolér do doby než napětí zcela naběhne. Důležitou součástí tohoto obvodu je vnitřní časovač, který prodlužuje reset mikrokontroléru po naběhnutí napětí. Po ukončení intervalu vnitřního časovače, začne mikrokontrolér vykonávat program. Dalším
nejpoužívanějším
resetem
je
vnější
reset,
pomocí
kterého
může
mikrokontrolér resetovat obsluha. Vnější reset se využívá také při programování, kdy programátor na začátku programování mikrokontrolér nejprve resetuje. Využívá ho také Resetovací obvod, který je popsán v kapitole 3.8. - 18 -
Provozní Zapisovač Dat
Tomáš Kašný
Watchdog reset slouží ke kontrole správného běhu programu. Tento obvod je sestaven z čítače, který čítá jednotlivé programové kroky. Pokud tento čítač přeteče, vyvolá se reset mikrokontroléru a program začne opět běžet od začátku. Z toho vyplívá povinnost, při správném běhu programu občas provést reset Watchdog Timer. K tomu slouží instrukce WDR. Tento resetovací obvod lze samozřejmě speciální sekvencí vypnout hned na začátku programu, což je zde provedeno. Watchdog reset se uplatní hlavně během ladění programu, kdy se mikrokontrolér může dostávat do různých nepředpovidatelných stavů. Brown-out reset hlídá napájecí napětí mikrokontroléru. Pokud napětí poklesne pod nastavenou hodnotu, výchozí hodnota je U BOT = 2,7 V (při naprogramované propojce BODLEVEL je U BOT = 4,0 V ), dojde k resetu mikrokontroléru. Detektor podpětí vykazuje jistou hysterezi, asi 50 mV, aby se zabránilo zbytečným aktivacím resetu při mírném poklesu napětí. Po aktivaci resetu, se čeká než se napětí opět vyrovná na správnou hodnotu a poté se spustí zpožďovací interval, který prodlouží vnitřní reset mikrokontroléru.. Detektor podpětí reaguje pouze na taková podpětí, která trvají déle než 2 μs. JTAG AVR reset se zde nevyužívá, protože se nepoužívá rozhraní JTAG. Podrobný popis všech funkcí resetovacích obvodů lze najít v literatuře [1] a [5].
3.3 Programátor Programátor mikrokontroléru je součástí vývojového kitu USBmegaKIT, který byl využit při vývoji zapisovače. Tento vývojový kit lze k PC připojit pomocí USB a přiloženou aplikací USBmegaKIT.exe lze mikrokontroléru naprogramovat FLASH paměť, E2PROM paměť a nastavovat propojky. Program USBmegaKIT.exe je uložen na přiloženém CD, v adresáři “programy“. Schéma programátoru, vývojového kitu, je v příloze IV. Programátor používá ke komunikaci přes USB konvertor FT232BM (IO1), který provádí konverzi USB ↔ RS-232. Jako řídící obvod je použit mikrokontrolér AT89S52 (IO3). Použití dalšího mikrokontroléru AT89S52 pro řízení programování je nutné. Tato nutnost vychází ze způsobu programování mikrokontroléru sériovým downloadem. Ten vyžaduje aby data přicházely sériově po SPI sběrnici. AT89S52 zde slouží v podstatě jako převodník mezi RS-232 ↔ SPI. AT89S52 mimo to řídí rychlost programování a přizpůsobuje tedy obrovskou rychlost USB rozhraní na maximální možnou rychlost SPI sběrnice mikrokontroléru. Po připojení vývojového kitu k USB proběhne inicializace konvertoru FT232BM a až po jeho správné inicializaci, připojí konvertor napětí na oba mikrokontroléry (AT89S52 a
- 19 -
Provozní Zapisovač Dat
Tomáš Kašný
ATmega16 (IO4)). Zapnutí celého vývojového kitu (programátoru) je signalizováno LED diodou D1, viz. příloha IV. Zapojení programátoru se využívá v zapisovači pro nahrání firmwaru bez použití speciálního programátoru. Schéma programátoru v zapisovači, viz. příloha VI., je stejné jako schéma vývojového kitu v příloze IV. V zapisovači chybí zdroj referenčního napětí, který je tvořen IO5 a přilehlými součástkami. Pro správnou funkci programátoru, se musí od sběrnice SPI, při programování, odpojit zařízení k ní normálně připojené. Fyzicky se musí odpojit rozhraní SD karty. To se provede sadou přepínačů SW1 a SW2 umístěných přímo na zapisovači. Aby se nemusel při programování používat externí zdroj pro zapisovač, je zde propojka J1, která připojí zapisovač na napájení USB. Po ukončení programování se propojka rozpojí, aby se zbytečně nenapájely nepoužívané obvody programátoru. Podrobný popis programátoru (vývojového kitu) je uveden v literatuře [3]. Potřebné programy, ovládače a katalogové listy jsou uloženy na přiloženém CD v adresářích “programy“ a “datasheets“.
3.4 SD karta SD karta je připojena k mikrokontroléru přes SPI sběrnici, kde mikrokontrolér je Master a SD karta je Slave. SD karta pracuje s napětím 3,3V, mikrokontrolér a ostatní periférie používají k napájení 5 V. Z tohoto důvodu je nutné provést napěťové přizpůsobení 5V logiky na 3,3V. Log.0 při 5 V vyhovuje i log.0 při 3,3 V. Problém nastává u log.1, která může být rovná UCC, tedy 5 V. Naopak log.1 při 3,3 V stále vyhovuje i log.1 při 5 V. Jedinou starostí, je snížit napětí pro vstupy SD karty. Úprava napětí se provádí pomocí obvodu 74HC4050, 6xCMOS budič. Obvod je napájen ze zdroje napětí 3,3 V. Na obr. 3.5 je schéma zapojení SD karty k SPI sběrnici mikrokontroléru.
- 20 -
Provozní Zapisovač Dat
Tomáš Kašný
Obr. 3.5 – připojení SD karty
Po připojení se SD karta musí restartovat, aby přešla do SPI módu. Resetovacím příkazem karta přejde pouze do “nečinného stavu“, kde jsou povoleny pouze některé příkazy. Těmito příkazy se vyčtou z SD karty potřebné informace ke zjištění, zda je SD karta kompatibilní s rozhraním, ke kterému je připojena. Důležitá je zde napěťová kompatibilita. Tu zajišťuje obvod 74HC4050. Proto nebrání nic tomu, aby karta mohla přejít do “operačního módu“. Kromě napěťové kompatibility se testuje, zda připojená karta je skutečně SD karta nebo jestli je karta označená HC, tedy High Capacity. V obou případech generuje zapisovač chybu a kartu odmítne. HC karty se odmítají z důvodů vysoké kapacity, kdy se s kartou musí komunikovat pomocí větších datových bloků, což by vyžadovalo větší paměť RAM. Karta používá při komunikaci CRC kontrolní kód. Tento kód je povinný pro SD mód, ale v SPI módu je ve výchozím stavu CRC kód vypnut. Pouze první příkaz, pro přepnutí do SPI módu, musí obsahovat CRC kód. Při komunikaci se musí dodržet správné pořadí vysílaných bitů, kdy jako první je posílán MSB a nakonec LSB. Všechny příkazy pro SD kartu mají stejný formát. Jejich délka je 6B. Těchto 6B obsahuje příkaz, parametr příkazu a CRC kód (v SPI módu se zde může vložit libovolná hodnota, pokud se CRC kód neaktivuje). Na obr. 3.6 je zobrazeno umístění jednotlivých částí příkazu v 6B.
Obr. 3.6 – formát příkazu pro SD kartu
- 21 -
Provozní Zapisovač Dat
Tomáš Kašný
Pro komunikaci s kartou se používá pouze několik nejjednodušších příkazů, které jsou uvedeny v následujícím výčtu: •
CMD0 – provede reset karty
•
CMD8 – ověření napěťové kompatibility a určení zda je karta ver. 2.0 nebo ver. 1.x
•
CMD55 – příkaz říká kartě, že bude následovat aplikační příkaz
•
ACMD41 – přepne kartu do operačního módu a zjistí zda je karta HC nebo ne
•
CMD58 – čtení OCR registru
•
CMD17 – čtení bloku dat
•
CMD24 – zápis bloku dat
Karta na každý přijatý příkaz reaguje odpovědí. Nejčastější odpovědí je R1. Pokud jsou všechny bity v přijaté odpovědi nulové, byl příkaz přijat a zpracován. Na obr. 3.7 je zobrazena odpověď R1 a význam jednotlivých bitů.
Obr. 3.7 – formát odpovědi R1
Vysvětlení jednotlivých chyb: •
in idle state – karta je v “nečinném stavu“ a je spuštěn inicializační proces
•
erase reset – mazací sekvence byla přerušena z důvodu příjmu příkazu pro přerušení mazání
•
illegal command – byl přijat neznámý příkaz
•
com crc error – špatný CRC kód posledního příkazu
•
erase sequence error – chyba v mazací sekvenci
•
address error – adresa v posledním příkazu byla špatně zarovnána na délku bloku
•
parameter error – parametr příkazu (adresa, délka bloku atd.) je mimo povolený rozsah
- 22 -
Provozní Zapisovač Dat
Tomáš Kašný
Ostatní odpovědi jsou mutací odpovědi R1. Prvních osm bitů je vždy totožných s R1 a poté následují specifické bity pro danou odpověď. Podrobnosti o odpovědích SD karty jsou uvedeny v literatuře [6]. Při čtení z karty, může karta poslat odpověď “Data Error Token“, která znamená, že při čtení došlo k chybě. Na obr. 3.8 je zobrazen tvar “Data Error Token“ s popisy chyb.
Obr. 3.8 – formát “Data Error Token“
Kromě příkazů a odpovědí se vysílají hlavně data bloky. Velikost těchto data bloků je pevně stanovená na výchozí hodnotu 512B. Karty HC mohou mít tuto hodnotu větší. Data blok je složen celkem z 515B, první bajt je “Start Block“, který má tvar “11111110“, potom následuje 512 datových bajtů a poslední dva bajty jsou tvořeny CRC kódem. Po přijetí data bloku odpoví karta bajtem “Data Response Token“. Tento bajt obsahuje kód, kterým se zjistí, zda byla data přijata a zapsána nebo ne. Na obr. 3.9 je zobrazen tvar “Data Response Token“ bajtu a v tab. 3.1 jsou uvedeny možné stavy tohoto bajtu.
Obr. 3.9 – formát “Data Response Token“
Tab. 3.1 – význam bitů “Status“ “Status“ kód
Význam
010
data byla přijata
101
data zahozena, špatný CRC kód
110
data zahozena, chyba zápisu
Podrobná dokumentace o SD kartě je v literatuře [6]. Zde je kompletní seznam všech příkazů, formátu odpovědí apod.
- 23 -
Provozní Zapisovač Dat
Tomáš Kašný
3.5 LCD Pro komunikaci s obsluhou je zapisovač vybaven jednořádkovým LCD displejem se 16-ti znaky. Tento displej obsahuje jako řídící obvod mutaci obvodu HD44780 od firmy Hitachi. Konkrétně použitý displej obsahuje obvod S6A0069 nebo ST7066, což jsou stejné obvody, ale každý od jiného výrobce. Displej má celkem 16 vývodů, jejichž význam popisuje tab. 3.2. Jak již bylo řečeno v kapitole 2.4, je možné s displejem komunikovat čtyřmi datovými bity.
Tab. 3.2 – vývody LCD a jejich význam Číslo vývodu
Signál
1
GND
Zem (0V)
2
UCC
Napájecí napětí (4,75 až 5,25V)
3
U0
Nastavení kontrastu displeje
4
RS
Příkaz (0), data (1)
5
R/ W
Čtení (1), zápis (0)
6
E
7
DB0
Datový bit
8
DB1
Datový bit
9
DB2
Datový bit
10
DB3
Datový bit
11
DB4
Datový bit
12
DB5
Datový bit
13
DB6
Datový bit
14
DB7
Datový bit
15
A
Anoda podsvěcovací LED
16
K
Katoda podsvěcovací LED
Funkce
Vstup povolení
Na obr. 3.10 je zobrazeno připojení LCD k mikrokontroléru na bránu PA. Tranzistor Q4 slouží k ovládání podsvícení displeje a trimrem R10 lze nastavit kontrast displeje, jenž je silně ovlivněn velikostí napájejícího napětí. Při připojení zapisovače k USB, kde se napětí pohybuje okolo 4,8 V až 5 V, podle zatížení USB, je kontrast displeje výrazně nižší, než při použití externího zdroje. Při komunikaci displej rozeznává zda se posílá příkaz nebo data pomocí signálu R/S. S displejem se zde komunikuje pouze jednosměrně, nečtou se žádná data, proto je signál
- 24 -
Provozní Zapisovač Dat
Tomáš Kašný
R / W trvale připojen na log.0. Pro povolení komunikace s displejem se musí nejdříve nastavit signál E na log.1. Tento signál povoluje a zakazuje veškerou komunikaci. Při komunikaci se nejdříve nastaví signál R/S a poté se nastaví signál E na log.1. Nyní je displej připraven přijmout data. Nastaví se datové bity DB7 až DB4 a jakmile se signál E vrátí na log.0, jsou data potvrzená a přijatá.
Obr. 3.10 – schéma připojení LCD k mikrokontroléru
Displej disponuje svou vlastní sadou znaků, které zobrazuje. Kódy jednotlivých znaků odpovídají kódům ASCII tabulky. Displej dokáže zobrazit malou a velkou abecedu, číslice a speciální znaky (!, ?, $, # atd.). Obsahuje také část paměti, do které lze nahrát až 8 vlastních znaků. Tato funkce se zde však nevyužívá. V tab. 3.3 jsou popsány příkazy, které lze využít při komunikaci s displejem. Podrobnější popis všech funkcí a možností řadiče HD44780 a jeho mutací lze nalézt v literatuře [7], popřípadě [1].
- 25 -
Provozní Zapisovač Dat
Tomáš Kašný
Tab. 3.3 – seznam příkazů pro LCD Příkaz/data
RS
Čas provedení
7
6
5
4
Data bit 3
2
1
0
0 1
1 X S
1,64 ms 1,64 ms
Vymaž displej Návrat na začátek Volba režimu
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 1
Zapni/vypni displej Posun zobrazení/kurzoru
0
0
0
0
0
1
D
C
B
40 μs
0
0
0
0
1
R/L
X
X
40 μs
Nastavení komunikace Nastavení adresy CGRAM Nastavení adresy DDRAM Zápis dat do CG/DDRAM
0 0 1 1
0 0 1
0 1
1
DL
X
X
40 μs 40 μs 40 μs 40 μs
S /C
N 0 adresa CGRAM adresa DDRAM data pro CG/DDRAM
I /D
40 μs
Vysvětlivky k tab. 3.3. X – libovolná hodnota I/ D – inkrementace (1), dekrementace (0) S – režim displeje (0 – normální režim, 1- kombinovaný posun displeje) D – displej zapnut (1), vypnut (0) C – zobrazování kurzoru zapnuto (1), vypnuto (0) B – blikání kurzoru zapnuto (1), vypnuto (0) S/ C – posun displeje jsou-li data zapsána (1), posun kurzoru jsou-li data zapsána (0) R/ L – posun doprava (1), doleva (0) DL – 8-mi bitová komunikace (1), 4 bitová komunikace (0) N – dva řádky (1), jeden řádek (0)
3.6 Klávesnice Klávesnice je zde použitá pro obsluhu zapisovače. Skládá ze tří tlačítek, jejichž význam je “←“, “OK“ a “→“. Tlačítka “←“ a “→“ slouží pro výběr jednotlivých položek a tlačítko “OK“ má funkci potvrzení. Tlačítka musí být ošetřena proti zákmitům. Proto každé tlačítko disponuje monostabilním klopným obvodem. Mikrokontrolér je programován tak, aby reagoval na stisk tlačítka přivedením log.0. Monostabilní klopný obvod vytvořený pomoci časovače CM555, má při stisku tlačítka na výstupu log.1. Proto jsou na výstupech časovačů použity navíc invertory. Časová konstanta klopného obvodu je součástkami nastavena cca. na 250 ms. Je použit rezistor 47 kΩ a podle následující rovnice (3.2) je stanovena kapacita kondenzátoru:
T = 1,1 * R * C
kde:
⇒
C=
T 1,1 * R
⇒
C = 4,7 μF
T
časová konstanta klopného obvodu, T = 250 ms
R
rezistor 47 kΩ
C
kapacita elektrolytického kondenzátoru v μF - 26 -
(3.2)
Provozní Zapisovač Dat
Tomáš Kašný
Aby se zabránilo stisku více tlačítek najednou, jsou časovače CM555 navzájem propojeny logickou sítí, která zajišťuje, aby při stisku libovolného tlačítka došlo k blokaci ostatních tlačítek, vždy dva časovače se resetují signálem RESET. Tlačítka jsou přímo připojena ke vstupně/výstupní bráně PD, přesněji na vývody PD2, PD3 a PD4. Pro zjištění zda bylo nebo nebylo stisknuto tlačítko se nepoužívá přerušení, ale mikrokontrolér skenuje tlačítka jen pokud se očekává, že se musí tlačítko stisknout. Např. při pohybu v MENU se po stisku tlačítka na displeji zobrazí příslušná volba a mikrokontrolér čeká, které tlačítko bude stisknuto dále. Na obr. 3.11 je zobrazeno zapojení jednoho tlačítka (bez logické sítě), kompletní schéma je v příloze VI.
Obr. 3.11 – schéma zapojení tlačítka
3.7 RS-232 Mikrokontrolér je vybaven vlastní sériovou linkou RS-232. Ale je napájen 5 V a aby se mohl připojit k PC nebo k inerciální jednotce, na výstupu musí být správné napěťové úrovně platné pro protokol RS-232. Pro převod napětí na správné napěťové úrovně v obou směrech se použil obvod MAX232. Jde o standardní převodník pro RS-232, který byl navržen právě pro takovéto použití. Obsahuje dvě sady vysílač – přijímač, takže jeden obvod lze použít pro dvě sériová rozhraní RS-232. Výhodou obvodu je jeho cena, jednoduchá aplikace a jedno napájecí napětí 5 V. Nevýhodou je, že se musí použít externí elektrolytické kondenzátory. V provedení SMD je však i tato nevýhoda bezvýznamná. Konektor sériové linky zapisovače je přizpůsoben k přímému připojení k inerciální jednotce, z jejíhož konektoru se odebírá také napájecí napětí pro zapisovač. Aby se zapisovač mohl připojit k PC, musí se připojit pomocí kříženého kabelu, který je vybaven i napájecím konektorem pro zapisovač, viz. schéma zapisovače příloha VI.
- 27 -
Provozní Zapisovač Dat
Tomáš Kašný
3.8 Resetovací obvod Mikrokontrolér je vybaven vlastní Power-on reset funkcí, ale pro jistotu je zapisovač ještě doplněn samostatným resetovacím obvodem, který hlídá správnou úroveň napájejícího napětí. Je použit obvod TL7705, který je pro tuto funkci navržen. Jeho funkce je stejná jako u Power-on reset funkce. Obvod však dokáže eliminovat překmity, které mohou nastat při připojení napájejícího napětí. Na obr. 3.12 je schéma jeho zapojení.
Obr. 3.12 – schéma zapojení resetovacího obvodu TL7705
3.9 Napájení Zapisovač lze napájet z libovolného stejnosměrného zdroje napětí, který dodává alespoň napětí 6 V a je schopen dodat výkon alespoň 2 W. Zapisovač je osázen dvěma stabilizátory napětí, 78L05 a LE33. 78L05 slouží ke stabilizace hlavního napětí 5 V pro mikrokontrolér a ostatní periférie. LE33 dodává 3,3 V pro SD kartu a budič 74HC4050. Na obr. 3.13 je zobrazeno schéma napájecí části. Není zde použit žádný samostatný napájecí konektor. K napájení se používá přímo konektor CANNON 9 V 90, který slouží také jako komunikační konektor pro RS-232 rozhraní, viz schéma zapojení příloha VI.
Obr. 3.13 – napájecí část zapisovače
- 28 -
Provozní Zapisovač Dat
Tomáš Kašný
4. Software 4.1 Firmware Program pro mikrokontrolér byl napsán převážně v
Assembleru. Pouze pro
naprogramování různých výpočtů byl použit jazyk C. Kód Assembleru byl psán v programu AVR Studio 4, který je dodáván firmou Atmel přímo k jejím mikrokontrolérům z rodiny AVR. Obsahuje vlastní debuger, který byl použit k částečnému odlaďování výsledného programu. Většina odlaďování programu se prováděla pomocí vkládání přídavných funkcí přímo do programu mikrokontroléru (různé výpisy adres a hodnot na displej a následná analýza chyb). Instalační program programu AVR Studio 4 je k dispozici na přiloženém CD, v adresáři “programy“. V jazyce C se vytvářely pouze výpočty, které musí mikrokontrolér provádět. Jsou to hlavně výpočty adres sektorů, či výpočty důležitých adres pro správu souborového systému FAT. Pro programování v C se použil program CodeVisionAVR C Compiler. Ten umožňuje automatické generování kódu pro mikrokontroléry AVR. Každý výpočet, který byl napsán v jazyce C, se převedl do Assembleru a vložil se do původního kódu v AVR Studiu. Díky této funkci se mohlo zůstat u programování v Assembleru. Celý program pro mikrokontrolér je rozdělen celkem do 21 souborů. Program a jeho soubory jsou uloženy na přiloženém CD, v adresáři “firmware“. V každém souboru je část programu, která se věnuje určité oblasti. Následuje seznam jednotlivých souborů a jejich stručný popis: •
final.asm – hlavní program celého projektu, obsahuje definice proměnných a startovací proces, který obsahuje celou inicializační sekvenci. Na konci je seznam souborů, které se dále k tomuto hlavnímu souboru připojují při překladu.
•
LCD.INC – funkce pro ovládání LCD. Jsou zde obsaženy všechny texty, které se tisknou na LCD.
•
CEKEJ.INC – podpůrné funkce, které vytvářejí čekací smyčky. Ty se využívají např. při výpisech na LCD nebo v některých inicializačních procesech.
•
TL.INC – funkce pro čtení stavu tlačítek.
•
KL.INC – soubor obsahuje funkci pro zadávání textu na displej. Využívá se při vytváření nového souboru.
•
RS232.INC – funkce pro ovládání rozhraní RS-232.
- 29 -
Provozní Zapisovač Dat •
Tomáš Kašný
MENU.INC – tento soubor patří mezi nejdůležitější. Je v něm celé MENU zapisovače, včetně funkcí pro pohyb v něm. Obsahuje hlavní částí jednotlivých nabídek z Menu.
•
ODESLI.INC – funkce pro odeslání clusteru do PC.
•
ZAPIS.INC – obsahuje obslužnou funkci pro přerušení sériové linky a funkce pro zápis dat na SD kartu.
•
SPI_SD.INC – inicializační funkce pro SPI rozhraní a pro SD kartu.
•
SD_READING.INC – funkce pro čtení sektoru z SD karty.
•
SD_SENDING.INC – funkce pro odeslání sektoru do PC, doplnění funkce v souboru “ODESLI.INC“.
•
SD.INC – podpůrné funkce pro ovládání SD karty.
•
SD_FAT_INI.INC – inicializační funkce pro FAT, včetně funkcí pro vyhledávání volných clusteru ve FAT a volných položek v ROOT adresáři.
•
SD_VYPOCTY_C.INC – výpočty generovány programem CodeVisionAVR.
•
SD_ROOT.INC – funkce pro zápis do ROOT adresáře.
•
SD_WRITING.INC – funkce pro zápis sektoru na SD kartu.
•
SD_FAT.INC – funkce pro zápis do FAT tabulky.
•
TIMER.INC – inicializace časovače a funkce obsluhy přerušení časovače.
•
EEPROM_INI.INC – inicializační a kontrolní funkce pro E2PROM.
•
INERCE.INC – funkce pro obsluhu inerciální jednotky.
4.1.1 Struktura programu Vývojový diagram programu pro mikrokontrolér je na obr. 4.1. Při startu programu se provádí počáteční nastavení a inicializace jednotlivých periférií. Zakáže se globální přerušení a Watchdog Timer, smaže se RAM, podle potřeb se nastaví V/V brány a provedou se inicializační sekvence. Postupně se provedou následující inicializace: LCD, SPI, SD karta, FAT, EEPROM, RS-232 a TIMER. Po úspěšné inicializaci se skočí do hlavního MENU zapisovače. Odtud je možné zapisovač ovládat klávesnicí. NOVE MERENI – provede se založení nového souboru a inicializace inerciální jednotky. Povolí se přerušení pro přijímač RS-232 a časovač, který se používá pro měření času mezi odměry a hlídá interval “TimeOut“. Spustí se inerciální jednotka a začne měřici cyklus. Pokud dojde k přerušení od přijímače RS-232, znamená to že inerciální jednotka
- 30 -
Provozní Zapisovač Dat
Tomáš Kašný
posílá nová data. Obsluha přerušení přijímače RS-232 provede čtení dat z jednotky, výpočte se “zkrácený zápis“ a výsledek se uloží do proměnné VYSLEDEK. Obsluha přerušení se ukončí a vrátí se zpět do hlavního programu. Ten provádí kontrolu, zda neuplynul “TimeOut“ a zda nebylo zmáčknuto během měření tlačítko “OK“, kterým se měření ukončuje. Pokud k ani jedné z událostí nedošlo, pokračuje se v měřicím cyklu. Po ukončení měřicího cyklu se zakáže přerušení přijímače RS-232 a časovače, uloží se zbylá data a vrací se zpět do MENU. ODESLAT MERENI – provede se výběr měření, které se bude odesílat do PC, zapne se přerušení pro “TimeOut“ a čeká se na přijetí bajtu 0xF0. Pokud se bajt nepřijme do uplynutí “TimeOut“, ukončí se odesílání návratem do MENU. Po přijetí bajtu 0xF0 se odešle proměnná SIZE a potom vybrané měření. Po ukončení odesílání se provede návrat do MENU. STAV PAMETI – zobrazí volnou kapacitu SD karty v kB. Návrat do MENU se provede po stisku tlačítka “OK“. SMAZAT MERENI – položka submenu MAZANI. Vybere se měření a volba se potvrdí tlačítkem “OK“. Měření se smaže, aktualizuje se informace o volném místě na SD kartě a provede se návrat do MENU. SMAZAT PAMET – položka submenu MAZANI. Po potvrzení volby tlačítkem “OK“, se smaže ROOT adresář a FAT tabulka. Po aktualizaci volného místa se vrací zpět do MENU. RYCHLOST COM – položka submenu NASTAVENI. Vybere se nová rychlost sériové linky a potvrzením hlášky “ULOZIT?“ se volba uloží do E2PROM. Následuje návrat do MENU. VZORKOVANI – položka submenu NASTAVENI. Vybírá se nová vzorkovací frekvence, potvrzením hlášky “ULOZIT?“ se volba uloží do E2PROM a vrací se do MENU. RESTART – provede se softwarový restart zapisovače.
- 31 -
Provozní Zapisovač Dat
Tomáš Kašný
Obr. 4.1 – vývojový diagram programu pro mikrokontrolér
- 32 -
Provozní Zapisovač Dat
Tomáš Kašný
4.1.2 Inicializační proces Po startu programu se provádí nejdříve zakázání globálního přerušení a Watchdog Timeru. Pro zakázání Watchdog Timeru se použije následující sekvence: ;DISABLE WATCHDOG LDI R31,0x18 OUT WDTCR,R31 LDI R31,0x10 OUT WDTCR,R31
Dále se smaže RAM a nastaví vstupně/výstupní brány. Je nutné dát pozor na správné nastavení vstupů/výstupů pro vývody SPI sběrnice a RS-232 rozhraní. Ostatní vývody se nastavují jako výstupy, až na vývody PD2, PD3 a PD4, které slouží jako vstupy pro klávesnici. Následují inicializace jednotlivých periférií. První se inicializuje LCD displej, aby se mohla vypisovat případná chybová hlášení. Seznam chybových hlášení je uveden v příloze V. Na LCD se nastaví komunikace čtyřmi bity. Za tímto účelem byla napsána funkce LCD_INI, která provede příslušné nastavení a zprovozní LCD. Pokračuje se SPI inicializací, zapnutím SPI sběrnice a nastavením rychlosti 230,4 kHz. Tato malá rychlost je nutná pro inicializaci SD karty. Inicializační proces SD karty je popsán v kapitole 4.1.2.1 a inicializace FAT systému v kapitole 4.1.2.2. Inicializace E2PROM spočívá v kontrole údajů v jejím obsahu. Jsou zde uloženy dva bajty, používající se pro nastavení rychlosti sériové linky a vzorkovací frekvence. Oba se musí zkontrolovat, jestli nebyly pozměněny na neplatnou hodnotu. Pokud k takové změně došlo, nahlásí zapisovač chybu údaje v E2PROM paměti. Při chybném údaji o rychlosti sériové linky se vypíše na LCD chyba s kódem “5E“ a pro chybný údaj o vzorkovací frekvenci chyba s kódem “5C“. Stiskem “OK“ lze údaj v E2PROM opravit pomocí funkce SETUP (oprava nastavení rychlosti COM) nebo VZORKOVANI (oprava nastavení vzorkovací frekvence). Po opravě se provede nová kontrola. Tímto mechanismem lze odhalit vadu paměti E2PROM. Pokud jsou údaje v E2PROM ověřeny, spustí se inicializace rozhraní RS-232, která provede nastavení rychlosti a zapne vysílač. Přijímač je vypnut až do doby kdy se bude potřebovat. Ten se musí vždy po ukončení čtení vypnout, protože datový vstup přijímače má dvouúrovňový buffer. Po vypnutí přijímače se obsah bufferu smaže. Při nedodržení tohoto
- 33 -
Provozní Zapisovač Dat
Tomáš Kašný
postupu se při dalším čtení z přijímače přečte nejdřív obsah bufferu, ve kterém zůstaly neplatná data. Posledním krokem je inicializace časovače. Při ní se provede pouze patřičné nastavení řídicích registrů časovače. Povolí se přerušení časovače pro přetečení a nastaví se normální režim. Časovač se spustí až při vytvoření nového měření nebo odesílání souboru do PC. Aby se mohlo využívat přerušení musí se nejdříve povolit globální přerušení v registru SREG. Po startu či restartu mikrokontroléru je globální přerušení vždy vypnuto. Proto lze bez obav povolovat dílčí přerušení jednotlivých periférií. Po úspěšném provedení všech inicializací se na LCD objeví nápis “Provozni Zapisovac Dat Ver:1.0“, který indikuje úspěšný start zapisovače. Zapisovač přejde do nabídky MENU. 4.1.2.1 Inicializace SD karty Při inicializaci SD karty se vychází z inicializačního diagramu, viz. příloha II, ve kterém je zahrnuto rozpoznání typu karty a ověření napěťové kompatibility karty a rozhraní zapisovače. Je nutné dodržet podmínku, aby rychlost SPI sběrnice nebyla větší než 400 kHz. Inicializace se provádí následující sekvencí příkazů: 1. příkaz CMD0 – restartuje kartu a přepne do “nečinného stavu“. 2. příkaz CMD8 – pokud tento příkaz karta zná, kartu je ver.2 a vyšší. Pokud je tento příkaz pro kartu neznámý, karta je starší ver.1.x. a. starší karta – příkaz CMD58 přečte OCR registr a ověří se napěťová kompatibilita. Pokud je i tento příkaz neznámý, karta je buď poškozená nebo se nejedná o SD kartu. b. příkaz ACMD41 – přepne kartu do operačního módu. 3. novější karta – příkazem CMD8 se zároveň ověřuje napěťová kompatibilita karty. 4. příkaz CMD58 – není v tomto okamžiku nutný. 5. příkaz ACMD41 – příkaz posílá kartě informaci zda zapisovač podporuje HC karty, bit 30 v parametru příkazu. Bit nastaven na log.0 => zapisovač nepodporuje HC karty. Příkaz dále provede přepnutí karty do operačního módu. 6. příkaz CMD58 – zjištění zda je kartu typu SC (Standard Capacity) nebo HC (High Capacity). Pokud je karta typu HC, bude zapisovačem odmítnuta.
- 34 -
Provozní Zapisovač Dat
Tomáš Kašný
Pokud se provede inicializační sekvence bez problémů, je karta připravena k práci. Po inicializaci se SPI sběrnici přepne na max. rychlost 7,3 MHz. Patice karty je vybavena spínači pro zjištění zda je karta vložena a zda není uzamčená. Při každém přístupu na kartu se provádí automatická kontrola vložené karty a při zápisu na kartu se provede kontrola jejího uzamčení. Kontrola se provádí přímým čtením stavu na vstupních vývodech mikrokontroléru. LDI VALUE,0xC0 SBIC PINB,CARD_INSERT JMP PRINT_ERROR
;kontrola zda je karta zastrčená
LDI VALUE,0xC1 SBIC PINB,LOCK_CARD JMP PRINT_ERROR
;kontrola zda není karta zamknutá
Pokud je karta špatně zastrčená, vyvolá se chybové hlášení s kódem chyby “C0“ a v případě uzamknuté karty, se při zapisování na kartu vyvolá chyba s kódem “C1“.
4.1.2.2 Inicializace FAT Inicializace souborového systému FAT (dále jen FAT) se provádí bezprostředně po inicializaci SD karty. Základní součásti FAT je ROOT adresář, obsahující informace o všech souborech na disku a FAT tabulka (File Allocation Table). Tato tabulka představuje mapu datové oblasti disku, která je rozdělena na clustery (alokační jednotky), které představují nejmenší adresovatelný prostor FAT. Podle velikosti disku se mění velikost clusteru a tím je umožněno adresovat “libovolný“ disk, beze změny celkového počtu clusteru, které je nutno adresovat. Nevýhodou tohoto způsobu adresace je fakt, že soubor o velikosti 1B zabere celý cluster, jehož velikost se řádově pohybuje v kB. Cluster není složen z libovolného počtu bajtů, ale vždy minimálně z jednoho sektoru - nejmenší adresovatelná položka disku. Sektor se využívá z důvodů velké kapacity disků, která se musí vždy nějakým způsobem adresovat. V minulosti byli kapacity disků a datových médií mnohonásobně menší, ale menší byly rovněž možnosti adresace. Velikost jednoho sektoru byla stanovena na 512B a tato hodnota se používá dodnes. Nevýhodu tohoto rozdělení na sektory je fakt, že kvůli jednomu bajtu se musí přečíst celý sektor. Ale ve většině případech se potřebuje k práci větší část kódu programu (souboru). Celý sektor se nahraje do rychlé paměti RAM, která již pak podle potřeby dodává data procesoru. Rozdělení na sektory přináší značné zrychlení práce se soubory. Na tomto místě se musí zmínit dva různé formáty zápisu více bajtových záznamů (proměnných). Prvním formátem je little-endian (první bajt více bajtového záznamu
- 35 -
Provozní Zapisovač Dat
Tomáš Kašný
představuje nejnižší bajt LSB) . S tímto formátem pracují většina procesorů osobních počítačů (procesory Intel, AMD). Naproti tomu většina mikrokontrolérů pracuje s formátem big-endian (první bajt více bajtového záznamu představuje nejvyšší bajt MSB). Z tohoto důvodu je nutné provádět příslušné konverze. Ve FAT je zápis prováděn formátem little-endian, proto se jednotlivé záznamy musí číst zprava do leva. V této aplikaci se využívá pouze FAT16 a proto i následující popis je soustředěn pouze na tento formát FAT. Při inicializaci se vychází ze základního modelu systému FAT, který se skládá z několika oblastí, viz tab. 4.1. Tab. 4.1 – základní struktura FAT MBR – Master Boot Record Boot Sector rezervované sektory FAT 1 – File Allocation Table 1 FAT2 – File Allocation Table 2 ROOT Datová oblast
MBR (Master Boot Record) – obsahuje informace o jednotlivých oblastech (partition), které jsou na disku vytvořeny. Na datových médiích jako jsou SD karty se nachází pouze jedna oblast, MBR je zde zbytečná a proto se také vynechává (zde je uvedena pouze pro úplnost). Boot Sector – tento sektor se nachází na SD kartě na adrese 0x00000000. Jsou zde uvedeny všechny důležité informace a formátu karty. Tab. 4.2 ukazuje jejich stručný výčet. V ní jsou uvedeny také údaje s označením CHS, zkratka Cylinder-Head-Sector. Jde o starší způsob adresace dat pro pevné disky. Pro účely této práce jsou nepodstatné. Tab. 4.2 – struktura Boot Sectoru FAT16 Ofset Délka Popis 0x00 0x03 0x0B 0x0D 0x0E 0x10 0x11 0x13 0x15 0x16 0x18 0x1A 0x1C 0x20 0x2B 0x36 0x3E 0x01FE
3B 8B 2B 1B 2B 1B 2B 2B 1B 2B 2B 2B 4B 4B 11B 8B 448B 2B
skok na začátek zaváděcího sektoru ASCII řetězec názvu operačního systému velikost sektoru v B počet sektorů na cluster počet sektorů mezi Boot Recordem a začátkem FAT1 počet FAT tabulek počet položek v ROOT adresáři počet sektoru v partition, pouze pro FAT16 menší než 32MB popisovač média počet sektorů na jednu FAT počet sektoru na stopu, CHS počet hlav, CHS počet skrytých sektorů počet sektorů v partition/disku ASCII řetězec názvu disku ASCII řetězec názvu filesystému Boot Code značka Boot Sector, 0x55AA
- 36 -
Provozní Zapisovač Dat
Tomáš Kašný
FAT tabulka – obsahuje seznam clusterů, které představují mapu datové oblasti. Každý cluster je složen ze dvou bajtů. Tyto bajty slouží k adresaci dalšího clusteru, kde se nachází další část souboru. Tím se vytvoří seznam clusterů použitých pro uložení souboru. Druhá FAT tabulka slouží jako záložní v případě, že se detekují nesrovnalosti v první FAT tabulce. ROOT adresář – je složen z několika položek, jejichž počet udává slovo na ofsetu 0x11 v Boot Sectoru. Každá položka je složena ze 32B, v jednom sektoru je 16 položek. Význam jednotlivých bajtů v položce popisuje tab. 4.3. Tab. 4.3 – popis položky v ROOT adresáři Ofset
Délka [B]
Popis
0x00
8
osm znaků pro jméno souboru
0x08
3
tří znaková přípona souboru
0x0B
1
atributy souboru, adresáře
0x0C
1
reservováno
0x0D
1
čas vytvoření v jednotkách 10ms
0x0E
2
čas vytvoření (hodiny, minuty a sekundy)
0x10
2
datum vytvoření (rok, měsíc a den)
0x12
2
datum posledního přístupu
0x14
2
EA-index (pro OS/2 a NT)
0x16
2
čas poslední změny
0x18
2
datum poslední změny
0x1A
2
číslo prvního clusteru souboru
0x1C
4
velikost souboru
Podrobnější popis souborových systému FAT je uveden v literatuře [8]. Při inicializaci FAT se musí ověřit, formát FAT a velikost sektoru. Formát FAT se ověřuje přečtením bajtu z ofsetem 0x3A, kde musí být hodnota 0x36. Velikost sektoru se ověří na ofsetu 0x0B, kde musí být hodnota 0x00 a na ofsetu 0x0C musí být hodnota 0x02. Z Boot Sectoru se uloží následující hodnoty do proměnných, které se používají pro výpočty adres ve FAT: •
počet sektorů v clusteru, ofset 0x0D => SECTOR_IN_CLUSTER
•
reservované sektory, ofset 0x0E => RESERV_SECTOR
•
počet FAT tabulek, ofset 0x10 => FATS
•
počet sektorů na jednu FAT, ofset 0x16 => SECTOR_FAT
•
max. počet položek v ROOTu, ofset 0x11 =>MAX_ROOT
- 37 -
Provozní Zapisovač Dat
Tomáš Kašný
Nyní se provedou výpočty důležitých adres pro práci s celou FAT. První sektor FAT tabulky: FIRST _ SEC _ FAT = RESERV _ SECTOR * 512
(4.1)
Poslední sektor FAT tabulky: LAST _ SEC _ FAT = FIRST _ SEC _ FAT + (SECOTR _ FAT − 1) * 512
(4.2)
První sektor ROOT adresáře: FIRST _ SEC _ ROOT = LAST _ SEC _ FAT + (SECTOR _ FAT + 1) * 512
(4.3)
Poslední sektor ROOT adresáře: ⎛ MAX _ ROOT ⎞ LAST _ SEC _ ROOT = FIRST _ SEC _ ROOT + ⎜ − 1⎟ * 512 16 ⎝ ⎠
(4.4)
Začátek datové oblasti: DATA _ BLOCK = LAST _ SEC _ ROOT + 512
(4.5)
Dalším krokem inicializace FAT je zjištění počtu volných clusterů a počtu volných položek v
ROOT adresáři. K
tomu se použijí funkce SD_FREE_CLUSTER a
SD_FREE_ROOT, ze souboru SD_FAT_INI.INC. SD_FREE_CLUSTER načítá postupně každý sektor FAT tabulky a kontroluje hodnotu každého clusteru. Hodnota clusteru říká, zda je prázdný nebo použit. V tab. 4.4 je seznam možných hodnot clusteru a jejich význam.
Tab. 4.4 – hodnoty clusteru Hodnota
Popis
0x0000
prázdný cluster
0x0002 – 0xFFEF
cluster je součástí souboru nebo adresáře
0xFFF0 – 0xFFF6
vyhrazený cluster
0xFFF7
vadný cluster
0xFFF8 – 0xFFFF
poslední cluster souboru nebo adresáře
Každý volný cluster inkrementuje proměnnou FREE_CLUSTER. Ta je na začátku funkce vždy vynulována. Při běhu funkce se hlídá první volný cluster, jehož adresa se použije při založení nového souboru. Pro adresaci clusteru se musí znát adresa sektoru FAT, ve kterém je cluster umístěn, proměnná ACT_SEC_FAT a ofset vůči počátku aktuálního sektoru FAT, proměnná OFSET_SEC_FAT. Tyto dvě adresy se zkopírují do proměnných NEW_SEC_FAT a
- 38 -
Provozní Zapisovač Dat
Tomáš Kašný
NEW_OFSET_SEC_FAT a použijí se pro výpočet čísla clusteru NUM_ACT_CLUSTER, viz. rovnice (4.6). Adresy z předponou NEW_ slouží jako záloha adresy prvního volného clusteru a na konci funkce SD_FREE_CLUSTER se z těchto záloh obnoví obsah ACT_SEC_FAT a OFSET_SEC_FAT.
NUM _ ACT _ CLUSTER =
NEW _ OFSET _ SEC _ FAT − SD _ DATA − 1 + 2 NEW _ SEC _ FAT − FIRST _ SEC _ FAT + 2
(4.6)
NUM_ACT_CLUSTER obsahuje číslo clusteru, ve kterém soubor začíná, pokračuje nebo končí. Toto číslo se zapisuje do položky ROOT adresáře, jako první cluster souboru nebo do clusteru ve FAT tabulce. Tato proměnná je důležitá hlavně při čtení a mazání souboru, kdy se musí vědět, ve kterém clusteru soubor začíná, pokračuje a končí. Dále se stanoví adresa prvního sektoru clusteru, určeného proměnnou NUM_ACT_CLUSTER. Adresa se vypočte podle rovnice (4.7) a tento výpočet provede funkce VYP_ADR_CLUSTER. ADR _ CLUSTER = ( NUM _ ACT _ CLUSTER − 2) * SECTOR _ IN _ CLUSTER * 512 + + DATA _ BLOCK
(4.7)
SD_FREE_ROOT pracuje stejným způsobem jako SD_FREE_CLUSTER. U každé položky ROOT adresáře se kontroluje pouze první bajt. Pokud je tento bajt prázdný, hodnota 0x00, je položka nepoužitá. Jako nepoužitou položku lze akceptovat hodnotu 0xE5, která znamená, že soubor byl smazán. V obou případech se inkrementuje proměnná FREE_DIRECT, počítadlo volných položek. I zde se hlídá první volná položka, používající se při vytváření nového souboru. Pro adresaci položky v ROOT adresáři se používá proměnná ACT_SEC_ROOT a OFSET_SEC_ROOT. Adresa první volné položky se zálohuje do proměnné ZAL_ACT_SEC_ROOT a ofset může zůstat uložen v OFSET_SEC_ROOT. Při procházení sektoru se jako ofset využívá vždy registrový pár Y. Těmito dvěma funkcemi pro prohledávání FAT tabulky a ROOT adresáře je inicializace FAT ukončena.
- 39 -
Provozní Zapisovač Dat
Tomáš Kašný
4.1.2.3 Inicializace AHRS M3 Inicializační proces jednotky AHRS M3 spočívá v přečtení bloku parametrů z jednotky, která komunikuje přes sériovou linku rychlostí 115 200 b/s. Proto se musí upravit rychlost rozhraní RS-232 a provést re-inicializaci sériové linky mikrokontroléru. Protože přijímač RS-232 je vypnut, zapne se a po ukončení inicializace se vypne. Čtení bloku parametrů se provede příkazem ReadBlockPar, kód 0x11. V tomto bloku parametrů se zkontroluje první položka dle tab. 2.4, ve
které je uložená vzorkovací frekvence
v jednotkách Hz. Položka má délku slova a může nabývat hodnoty od 1 do 100. Porovnává se z nastavením vzorkovací frekvence zapisovače. Pokud jsou si obě hodnoty rovny, ukončí se inicializační proces jednotky. V případě neshody hodnot, se provede úprava vzorkovací frekvence v bloku parametrů podle nastavení zapisovače. Provádí se také kontrola druhé položky tab. 2.4, která představuje “inicializační čas“. Ten se nastaví na 30 s, aby měla jednotka dostatek času pro ustálení senzorů. Opravený blok se příkazem LoadBlockPar, kód 0x10, odešle do jednotky. Tato inicializace se provádí před každým startem nového měření.
4.1.3 Ovládání LCD Všechny funkce pro ovládání LCD displeje jsou v souboru LCD.INC. Mezi nejdůležitější patří samotný tisk znaku, funkce VYPIS a tisk hexadecilmání hodnoty, funkce TISK_CISLA. Výběr textu pro tisk se provádí ze seznamu textů, který je uložen v programu mikrokontroléru. Text se vybírá pomocí registru TEXT (R20). Voláním funkce LCD se provede výběr daného textu a nahrání jeho počáteční adresy do registrového páru Z. Po vybrání textu se provede funkce VYPIS. Ta se stará o správný posuv kurzoru displeje a v případě tisků dvou textů za sebou zabrání nulování registru POZICE (R19), určující aktuální pozici kurzoru. Funkce pro zápis dat a příkazu do LCD jsou shodné. Rozhodující je, která funkce se volá. LCDWDT pro zápis dat nebo LCDWCM pro zápis příkazu. Liší se pouze změnou bitu R/S, který nastavuje příjem LCD pro data nebo příkaz. Funkce TISK_CISLA tiskne číslo z registru VALUE (R18). Hodnota registru se převede z čísla na znaky pro hexadecimální výpis a tisk na LCD se provádí funkci LCDWDT.
- 40 -
Provozní Zapisovač Dat
Tomáš Kašný
4.1.4 Funkce pro práci s FAT Funkce pro práci s FAT se nacházejí v souborech SD_ROOT.INC a SD_FAT.INC. Jsou zde funkce, které slouží pro zápis, čtení nebo mazání položek a clusterů ve FAT. Funkce SD_ROOT_ZAPIS zapisuje nové položky do ROOT adresáře. Načte se příslušný sektor ROOT adresáře, jeho adresa je v proměnné ACT_SEC_ROOT. Proměnnou OFSET_SEC_ROOT se nastaví konkrétní adresa položky, na kterou se bude zapisovat. Zápis se provádí v tomto pořadí: 1. jméno souboru – uložené v proměnné _ZNAKY 2. přípona souboru – zapisuje se přípona PZD, nelze jí měnit 3. zápis atributů – všechny jsou nastaveny na nulu 4. zápis času a data založení a poslední změny – všude jen nulové hodnoty 5. zapsání prvního clusteru – číslo prvního clusteru je v proměnné NUM_ACT_CLUSTER 6. zapsání velikosti souboru – zapíše se nulová velikost souboru
Provede se dekrementace FREE_DIRECT a upravený sektor se zapíše do SD karty. Funkce
SD_ROOT_CANCEL
stornuje
nově
založený
soubor.
Proměnné
ACT_SEC_ROOT a OFSET_SEC_ROOT ukazují na položku, která se ruší. Aktuální sektor ROOT adresáře je stále uložen v RAM, proto lze změnu souboru provést bez načítání příslušného sektoru. První bajt položky se změní na hodnotu 0xE5, inkrementuje se zpět FREE_DIRECT a upravený sektor se nahraje do SD karty. Protože nebyl ještě proveden zápis do FAT tabulky, nemusí se upravovat. Funkce SD_UPDATE_SIZE_ROOT provádí updatu velikosti souboru v ROOT adresáři. Update proběhne během měření, vždy po uložení celého sektoru do SD karty a při standardním ukončení měření. Funkce SD_ROOT_DELETE maže celý ROOT adresář. Při mazání se nesmí smazat první položka v ROOT adresáři. Ta je zde vytvořená při formátování karty. Jejím smazáním by se přišlo o kořenový adresář, bez kterého by karta nemohla správně pracovat v PC. Ostatní položky se mohou vymazat. Funkce SD_ROOT_FILES vytváří seznam souborů uložených na SD kartě. Funkce při procházení souborů ignoruje všechny soubory, které nemají příponu PZD. Využívá se pro položky MENU zapisovače ODESILANI MERENI a SMAZANI MERENI, kdy se musí vybrat příslušný soubor na SD kartě. Funkce je naprogramována tak, aby postupně procházela
- 41 -
Provozní Zapisovač Dat
Tomáš Kašný
celý ROOT adresář a jakmile se dostane na konec, skočí zpět na začátek. Takto lze procházet ROOT adresář v obou směrech jako smyčku pomoci tlačítek “←“ a “→“. Tlačítkem “OK“ se provede potvrzení výběru souboru. Při potvrzení výběru se do proměnné SIZE uloží velikost souboru, do proměnné NUM_ACT_CLUSTER se uloží číslo prvního clusteru souboru a v proměnných ACT_SEC_ROOT a OFSET_SEC_ROOT je adresa vybrané položky (souboru) v ROOT adresáři. Následující funkce slouží pro práci s FAT tabulkou. Funkce SD_FAT_ZAPIS_FFFF zapisuje do vybraného clusteru hodnotu 0xFFFF. Využívá se při obsazování nového clusteru během měření. Adresa clusteru se získá z proměnných ACT_SEC_FAT a OFSET_SEC_FAT. Funkce SD_FAT_ZAPIS_CLUSTER zapisuje do aktuálního clusteru hodnotu nového prázdného clusteru, aby mohl pokračovat zápis souboru. Adresa aktuálního clusteru se získá z proměnných ACT_SEC_FAT a OFSET_SEC_FAT. Dále se provede zápis do nového clusteru, jehož adresa je v proměnných NEW_SEC_FAT a NEW_OFSET_SEC_FAT a nový cluster označí se jako obsazený. Aby se ušetřil čas, kontroluje se, zda nový cluster neleží ve stejném sektoru jako předchozí. Pokud ano, zkopíruje se NEW_OFSET_SEC_FAT do OFSET_SEC_FAT a provede se zápis 0xFFFF do nového clusteru. Upravený sektor se nahraje do SD karty. V případě, že aktuální a nový sektor nejsou shodné, provede se zápis aktuálního sektoru do SD karty a zkopírují se proměnné s předponou NEW_ do aktuálních adres (ACT_SEC_FAT a OFSET_SEC_FAT). Zavolá se funkce SD_FAT_ZAPIS_FFFF, která nový cluster obsadí. Funkce SD_FAT_DELETE provádí mazaní celé FAT tabulky. Při mazání FAT tabulky se musí přeskočit první dva clustery. Ty jsou vytvořeny při formátování karty. Jejím smazáním by se FAT tabulku poškodila a byla by nečitelná v PC. Poslední funkce SD_FAT_FAT provádí kopírování FAT1 tabulky do FAT2 tabulky. Funkce se spouští na konci měření, po smazání souboru a po smazání celé paměti. Primárně se zapisuje pouze do FAT1. Kopírování se provádí z bezpečnostních důvodů.
4.1.5 Zápis měření 4.1.5.1 Založení nového měření Nové měření se spustí výběrem položky NOVE MERENI z MENU zapisovače. Po potvrzení volby, se na 2 s zobrazí na LCD volné místo na SD kartě, “VOLNO:xxxxxxxkB“.
- 42 -
Provozní Zapisovač Dat
Tomáš Kašný
Pokud by na kartě nebylo žádné volné místo vypíše se chyba s kódem “FF“. Testování volného místa se provádí kontrolou proměnné FREE_CLUSTER a FREE_DIRECT. Na LCD se vytiskne text “NAZEV:“ a spustí se funkce KL, pomocí které se zadá jméno souboru. To může obsahovat až osm znaků. Znak „mezera“ slouží k ukončení zadávání jména souboru, pokud se nezadalo všech osm znaků. Zbývající znaky do osmi se automatický doplní na mezery. Funkcí SD_ROOT_ZAPIS se zapíše nový soubor do ROOT adresáře a na LCD se vytiskne text “START=OK“. Zmáčknutím tlačítka „←“ nebo „→“ se měření ukončí a soubor v ROOT adresáři se smaže pomocí funkce SD_ROOT_CANCEL. Tlačítkem “OK“ se odstartuje samotné měření. Do FAT tabulky se zapíše první cluster a začne se hledat nový cluster funkcí SD_NEW_CLUSTER, která prochází FAT tabulku od aktuální pozice a jakmile narazí na další volný cluster, uloží se do proměnných NEW_SEC_FAT a NEW_OFSET_SEC_FAT
adresa
tohoto
clusteru.
Pomocí
funkce
VYP_NUM_ACT_CLUSTER se provede výpočet rovnice (4.6). Nový cluster je připraven k použití.
4.1.5.2 Měřici cyklus Po založení souboru se zobrazí na LCD text “UKLADAM,KONEC=OK“. Provede se prvotní inicializace nového měření, nastaví se stavové bity, vynuluje proměnná SIZE a registr CITAC (R3). Spustí se inicializační proces jednotky AHRS M3 a provede se její nastavení. Zapne se přijímač sériové linky, spustí se časovač a zapne se jednotka AHRS M3 příkazem AHRS4. Jednotka od teď bude vysílat data v pravidelných intervalech, podle vzorkovací frekvence. Povolí se globálního přerušení instrukcí SEI a volá se funkce ZAPIS_MERENI, ve které probíhá samotný zápis měření. Dokud nebudou žádna data jednotkou vyslána, je zapisovač ve smyčce kdy čeká na příjem dat. V případě, že jednotka do cca. 4,5 s od spuštění časovače nevyšle žádna data, “TimeOut“ interval, předpokládá se porucha jednotky, ukončí se měření a vytiskne se chyba s kódem “D0“. Po odeslání prvního bajtu jednotkou je generováno přerušení od přijímače sériové linky. Toto přerušení provede obslužnou rutinu ZAPIS_BAJTY, ve které se zastaví časovač a registr TCNT1 se zkopíruje do proměnné ZPOZDENI. Časovač se vynuluje, znovu spustí a čtou se data z jednotky. Jednotka pošle celkem 36B, z toho se potřebuje pouze 12B. Prvních šest bajtů se nevyužije, potom se příjme již zmíněných 12B, které se uloží do proměnné NEW_DATA a příjme se zbylých 18B, které se opět nevyužijí.
- 43 -
Provozní Zapisovač Dat
Tomáš Kašný
Po přijetí dat se zapisuje časový index vypočítaný pomocí rovnice (4.8). Tu počítá funkce VYP_ZPOZDENI a výsledek je v jednotkách 100 μs. ZPOZDENI = ZAL _ POC _ BUFFER * VYP _ TIME + ZPOZDENI * 0,6944445
(4.8)
Konstanta 0,69444445 je dána pracovní frekvencí mikrokontroléru, použitou předděličkou pro časovač a jednotkou 100 μs. V případě že se provádí první odměr neprovádí se výpočet časového indexu, ale do proměnné VYSLEDEK se zapíše nulový čas. Po zapsání časového indexu do VYSLEDEK, se provádí výpočet “zkráceného zápisu“. Výpočet se provádí na základě znalosti dat z předchozího odměru, která jsou uložena v proměnné OLD_DATA. Pro každý senzor se provede výpočet přírůstku nové hodnoty senzoru (NEW_DATA) vůči předchozí hodnotě (OLD_DATA). Pokud je přírůstek v rozmezí od -127 do 127, lze ho uložit jako 1B. V případě že je přírůstek mimo uvedené meze, provede se zápis celého původního slova (2B). Aby se mohl rozeznat přírůstek (1B) od slova (2B), vkládá se před slovo jeden bajt o hodnotě 0x80. Tato hodnota by představovala přírůstek -128, který je už mimo meze přírůstku. Výsledek v podobě přírůstku senzoru nebo celého slova senzoru, se ukládá do proměnné VYSLEDEK. Tento proces výpočtu a uložení se provede šestkrát, pro každý senzor jednou. Pokud se zapisuje první odměr, výpočet zkráceného zápisu“ se přeskočí a přijatá data (NEW_DATA) se rovnou zapíšou do proměnné VYSLEDEK, která slouží jako buffer pro časové indexy a výsledná data. Při každém zápisu do proměnné VYSLEDEK se inkrementuje CITAC. Po zapsání všech výsledků do proměnné VYSLEDEK se zkopíruje obsah proměnné NEW_DATA do OLD_DATA pro další odměr a ukončí se obsluha rutiny přerušení. Provede se návrat do čekací smyčky funkce ZAPIS_MERENI (zde se provádí standardní návrat z obsluhy přerušení, ale nejpravděpodobnějším místem kam se mikrokontrolér bude vracet je právě tato smyčka). V čekací smyčce, která je zobrazena níže, se provádí kontrola CITACe. Pokud je nulový, smyčka se opakuje. Pokud nulový není, znamená to že v proměnné VYSLEDEK jsou data, čekající na zkopírování do proměnné SD_DATA, která slouží jako zásobník pro čtení a zápis sektoru na SD kartu. ZAPIS_MERENI: SBRC STAV_REG2,6 RJMP ZAPIS_KONEC SBRC STAV_REG2,1 RJMP ZAPIS_KONEC CLR REG OR CITAC,REG BRNE ZAPIS_POK11 RJMP ZAPIS_MERENI
;kontrola zda uplynul TimeOut interval ;kontrola zda buffer přetekl 256krát za sebou
;kontrola zda je CITAC nastaven ;pokud ano, skáče se na zápis dat ;pokud ne, kontroluje se dále stav CITACe
- 44 -
Provozní Zapisovač Dat
Tomáš Kašný
Pokud není CITAC nulový, zkopíruje se obsah VYSLEDEK do SD_DATA. Při každém zápisu do SD_DATA se inkrementuje proměnná SIZE, CITAC se dekrementuje a kontroluje se na nulový stav. Po vynulování CITACe se mikrokontrolér vrací zpět do čekací smyčky. Správná adresace v proměnných SD_DATA a VYSLEDEK je zajištěna dvěma registrovými páry X a Y. Výhodou registrového páru je, že mikrokontrolér s ním pracuje jako s jedním registrem. Tyto registrové páry jsou primárně určeny k nepřímé adresaci a mikrokontrolér má různé instrukce pro práci s těmito “16-ti bitovými“ registry. Po naplnění SD_DATA, se proměnná musí uložit do SD karty. Provede se zápis sektor a
následuje
update
velikosti
souboru
v
ROOT
adresáři.
Volá
se
funkce
SD_FAT_ZAPIS_CLUSTER, která připraví nový cluster a nastaví jej jako aktuální. Funkcí VYP_ADR_CLUSTER se provede výpočet adresy clusteru v datové oblasti. Funkce provádí výpočet rovnice (4.7). Pokud se zapsal poslední sektor clusteru, bude se hledat nový cluster. V tom případě se volá funkce SD_NEW_CLUSTER, která vyhledá nový volný cluster. Po ukončení hledání, se mikrokontrolér vrací do čekací smyčky.
4.1.5.3 Ukončení měření Měření lze standardně ukončit pouze jedním způsobem. Po vyprázdnění proměnné VYSLEDEK, se kontroluje, zda bylo zmáčknuto tlačítko “OK“. Pokud ano, provede se návrat z funkce ZAPIS_MERENI. Vypne se globální přerušení, jednotce AHRS M3 se pošle příkaz Stop, zastaví se časovač a vypne přijímač sériové linky. Následuje zápis posledního sektoru do SD karty a update velikosti souboru v ROOT adresáři. Nakonec se vyhodnotí, zda během měření nedošlo k přetečení bufferu (proměnná VYSLEDEK, kód chyby “BB“). Měření se může ukončit s chybou v případě, že zapisovač nedostane v časovém intervalu, cca. 4,5 s – “TimeOut“ interval, data a tiskne se chyba s kódem “D0“. I při této chybě se uloží data v proměnné SD_DATA a měření je standardně ukončeno, ale s chybou. Poslední možností ukončení měření je pomoci přetečení bufferu, viz kapitola 4.1.5.4. Při této chybě se měření standardně ukončí a tiskne se chyba s kódem chyby “BB“. Nestandardní ukončení může nastat např. při výpadku komunikace s SD kartou (karta vypadne nebo je uzamčená) nebo pokud bude SD karta dlouho vysílat BUSY signál. Ukončí se veškerá činnost a na LCD se vytiskne chyba s příslušným kódem. Při nestandardním ukončení dojde ke ztrátě dat z proměnné SD_DATA i VYSLEDEK.
- 45 -
Provozní Zapisovač Dat
Tomáš Kašný
4.1.5.4 Přetečení bufferu K přetečení bufferu může dojít hlavně během dlouhých operací s SD kartou. Buffer je však dostatečně velký, 225B, aby k přetečení nedocházelo. Musí se ovšem počítat i s touto možností. Buffer má vlastní počítadlo přetečení o velikosti jednoho bajtu, registr POC_BUFFER (R17), které počítá kolikrát za sebou nebyl buffer schopen přijmout data. Pokud se v následujícím odměru buffer uvolní, lze do něj zapisovat, počítadlo se vynuluje. Obsah počítadla se používá při výpočtu časového indexu (ve výpočtu se použije záložní proměnná počítadla ZAL_POC_BUFFER), kde každé přetečení bufferu znamená časový interval, proměnná VYP_TIME, jejíž velikost závisí na vzorkovací frekvenci. Tento časový interval se nastavuje spolu se vzorkovací frekvencí zapisovače v nabídce NASTAVENI, viz. kapitola 4.1.7. Časový index se spočítá rovnicí (4.8). Jakmile po uvolnění bufferu dojde ke správnému odměru, bude časový index zvětšen o čas, během kterého se data z jednotky zahazovala, buffer byl přeplněn. Tímto zabezpečením neztratí zapisovaná data souvislost. Pokud nastane případ kdy počítadlo bufferu přeteče, ukončí se okamžitě měření a provede se zápis SD_DATA do SD karty. V tomto okamžiku se však ztratí data v bufferu. Max. se může přijít o 23 odměrů z bufferu.
4.1.6 Odeslání měření Odeslání měření se provede výběrem položky ODESLANI MERENI z MENU zapisovače. Zapisovač zobrazí seznam souboru PZD, které jsou na kartě uloženy. Seznam zpřístupňuje funkce SD_ROOT_FILES. Pomoci tlačítek „←“ a „→“ se vybere soubor pro odeslání a tlačítkem “OK“ se potvrdí výběr. Zapisovač zobrazí text “ODESLAT DO PC?“. Pokud se tato hláška potvrdí “OK“, provede se odesílání souboru. V případě že se zmáčkne „←“ nebo „→“, vrací se zpátky do MENU. Jako první se odesílá údaj o velikosti souboru, proměnná SIZE a následují data souboru. Aby zapisovač mohl data odeslat, musí být připojen k PC, na němž je spuštěná aplikace PZD.exe. Pro odeslání velikosti souboru musí zapisovač dostat ověřovací bajt s hodnotou 0xF0. Zapisovač na tento bajt čeká, dokud neuplyne “TimeOut“ interval. Po jeho uplynutí se odesílání ukončí a vytiskne se chyba s kódem “D0“. Po příjmu ověřovacího bajtu, odešle zapisovač údaj o velikosti souboru do PC a časovač pro “TimeOut“ interval se vypne. Pro spuštění odesílání dat souboru musí PC poslat ověřovací bajt o hodnotě 0x0F. Příjmem
- 46 -
Provozní Zapisovač Dat
Tomáš Kašný
ověřovacího bajtu se data odešlou do PC. Odesílání dat do PC provádí funkce ODESLI_CLUSTER a SD_SEND. Adresy jednotlivých clusterů se musí hledat podle čísla clusteru. První číslo clusteru se získá z položky v ROOT adresáři příslušného souboru. Z proměnné NUM_ACT_CLUSTER, kterou naplní funkce SD_ROOT_FILES, se vypočítá pomocí rovnice (4.7) adresa clusteru v datové oblasti, funkce VYP_ADR_CLUSTER. Po odeslání celého clusteru se NUM_ACT_CLUSTER použije ke zjištění dalšího clusteru souboru. Volá se funkce VYP_NUM_SEC_FAT, která vypočte rovnici (4.9) a získá se číslo sektoru FAT, ve kterém se nachází hledaný cluster. V rovnici (4.9) se provádí celočíselné dělení. Funkcí VYP_NEW_SEC_FAT se vypočte rovnice (4.10) a výsledkem této rovnice je adresa sektoru hledaného clusteru. Poslední funkcí VYP_NEW_OFSET_SEC_FAT se provede výpočet rovnice (4.11), jejíž výsledek je ofset hledaného clusteru. NUM _ SEC _ FAT = NUM _ ACT _ CLUSTER div 256 NEW _ SEC _ FAT = NUM _ SEC _ FAT * 512 + FIRST _ SEC _ FAT NEW _ OFSET _ SEC _ FAT = ( NUM _ ACT _ CLUSTER − 256 * NUM _ SEC _ FAT ) * 2 + + 1 + SD _ DATA
(4.9)
(4.10)
(4.11)
Pomocí získané adresy se načte hodnota aktuálního clusteru a kontroluje se, zda aktuální cluster je poslední cluster souboru nebo ne. Pokud ne, dostane se nová hodnota proměnné NUM_ACT_CLUSTER a celý proces od funkce ODESLI_CLUSTER se opakuje. Během odesílání se může přihodit, že buffer na straně PC bude přeplněn a PC odešle kód 0xAA. Zapisovač při každém odesílání bajtu kontroluje zda v přijímacím bufferu není nějaký bajt. Pokud zachytí kód 0xAA, zastaví odesílání a čeká na příjem ověřovacího bajtu 0x0F, aby mohl pokračovat v odesílání. V tomto případě zapisovač čeká v nekonečné smyčce. “TimeOut“ interval by mohl být krátký a zbytečně by se mohlo ukončit odesílání. Pokud ovšem aplikace na PC přestane reagovat a je nutné jí restartovat, musí se restartovat také zapisovač.
- 47 -
Provozní Zapisovač Dat
Tomáš Kašný
4.1.7 Ostatní funkce zapisovače Následuje popis zbývajících funkcí nabídky MENU zapisovače. STAV PAMETI – tato položka MENU zapisovače na LCD zobrazí volnou kapacitu na
SD
kartě.
Zobrazí
se
text
“VOLNO:xxxxxxxkB“.
Je
volána
funkce
VYP_VOLNE_MISTO, která vypočte volné místo na základě počtu volných clusterů podle rovnice (4.12). VOLNE _ MISTO =
FREE _ CLUSTER * SECTOR _ IN _ CLUSTER 2
(4.12)
Po výpočtu volného místa, se výsledek převede funkcí PREVOD do textového tvaru a vytiskne se na LCD. SMAZANI MERENI – položka submenu MAZANI. Provádí se mazání jen jednoho souboru PZD. Zobrazí se seznam souborů PZD na kartě. Seznamem se může listovat tlačítky „←“ a „→“ a tlačítkem “OK“ se potvrdí výběr souboru. Na LCD se zobrazí hláška “OPRAVDU SMAZAT?“ a jejím potvrzením tlačítkem “OK“ se provede mazání. Pokud se zmáčkne tlačítko „←“ nebo „→“, mazání se stornuje a vrací se zpět do MENU. Mazání se provádí obdobnou sekvencí instrukcí jako odesílání měření. Při mazání se uvolňují jednotlivé clustery. Z NUM_ACT_CLUSTER se musí pomocí rovnic (4.9), (4.10) a (4.11) získat adresa clusteru ve FAT tabulce. Přečte se hodnota clusteru, pokud je posledním clusterem souboru, mazání se ukončí. Jinak se načte nová hodnota NUM_ACT_CLUSTER a původní cluster se uvolní. Zapíše se do něj 0x0000. Celý proces se opakuje. Po ukončení mazání se vytiskne text “USPESNE SMAZANO“ a provede se návrat do MENU. SMAZAT PAMET – položka submenu MAZANI. Tato volba provede mazání celé karty. K tomuto účelu jsou zde funkce SD_ROOT_DELETE a SD_FAT_DELETE. Provádí se pouze mazání ROOT adresáře a obsahu FAT tabulky. Datová oblast zůstane nedotčená, ale bez FAT tabulky jde pouze o směsici dat. Před mazáním se objeví na LCD hláška “OPRAVDU SMAZAT?“. Tato hláška se musí potvrdit nebo stornovat. Po ukončení mazání se vytiskne text “USPESNE SMAZANO“ a provede se návrat do MENU. RYCHLOST COM – položka submenu NASTAVENI. Nastavuje hodnotu proměnné BAUD, která se používá pro nastavení rychlosti sériové linky. Hodnota proměnné se musí zachovat i po vypnutí zapisovače, proto se ukládá do paměti E2PROM. Na výběr je celkem pět rychlostí: 9600 b/s, 19 200 b/s, 38 400 b/s, 57 600 b/s a 115 200 b/s.
- 48 -
Provozní Zapisovač Dat
Tomáš Kašný
Vybráním nové hodnoty se zobrazí na LCD text “ULOZIT?“. Uložení se potvrdí tlačítkem “OK“ nebo se volba stornuje tlačítky „←“ nebo „→“. Po uložení nové hodnoty v E2PROM, se uložená hodnota ověřuje funkcí EEPROM_INI, viz kapitola 4.1.2 a provede se re-inicializace rozhraní RS-232. Toto nastavení je použitelné pouze pro komunikaci mezi zapisovačem a PC. Pro komunikaci s jednotkou AHRS M3 se používá rychlost 115 200 b/s. Ta se nastaví automaticky při inicializaci jednotky. VZORKOVANI – položka submenu NASTAVENI. Funkce slouží k nastavení vzorkovací frekvence zapisovače v proměnné ACT_SAMPLE. Tato hodnota musí být zachována i při vypnutí zapisovače, proto se ukládá do paměti E2PROM. K výběru jsou čtyři vzorkovací frekvence: 20 Hz, 50 Hz, 80 Hz a 100 Hz. Vybráním nové hodnoty se na LCD zobrazí text “ULOZIT?“. Uložení se potvrdí tlačítkem “OK“ nebo se volba stornuje tlačítky „←“, či „→“. Po uložení nové hodnoty v E2PROM, se uložená hodnota ověřuje funkcí EEPROM_INI. Proměnná ACT_SAMPLE se používá pro nastavení vzorkovací frekvence jednotky AHRS M3 při její inicializaci. RESTART – funkce pro softwarový restart zapisovače. Provedou se všechny inicializace a všechny proměnné jsou smazány. Obsah všech registrů však zůstane nezměněn. Pokud je potřeba smazat i všechny registry, musí se provést hardwarový restart tlačítkem “RESET“.
4.2 Aplikace PZD.EXE Aplikace PZD.exe (dále jen aplikace) slouží ke stahování, úpravě a zobrazování dat z provozního zapisovače dat. Aplikace
je
uložena na
přiloženém
CD, v adresáři
“program PZD“, kompletní projekt této aplikace je v adresáři “program PZD-projekt“. Data ze zapisovače lze získat dvěmi způsoby: 1. pro přečtení dat se použije samotný zapisovač a potřebné soubory se přenesou do PC a zpracují. Stahování souboru pomoci zapisovače je výhodné pouze pro malé soubory o velikosti řádově do 1 MB. Max. přenosová rychlost zapisovače je zhruba 9,5 kB/s a soubor o velikosti 1 MB by se stahoval cca. 2 min. 2. SD karta se vyjme ze zapisovače a vloží se do čtečky karet v PC. Pro větší soubory je doporučeno použít čtečku karet, pokud jí PC disponuje. Zobrazování výstupních dat probíhá ve formě grafů.
- 49 -
Provozní Zapisovač Dat
Tomáš Kašný
Aplikace byla naprogramována v programovém prostředí LabWindows/CVI. Toto prostředí disponuje grafickým rozhraním pro vytváření vlastního grafického rozhraní aplikací, které se zde programují. Tato vlastnost výrazně usnadňuje vývoj celé aplikace. V knihovnách se nacházejí nejrůznější grafické prvky jako jsou tlačítka, přepínače, měřiče, grafy apod. V examplech jsou již hotové konstrukce některých složitějších funkcí a pomocí nápovědy je lze upravovat podle vlastní potřeby.
4.2.1 Hlavní dialogové okno Hlavní okno aplikace je zobrazeno na obr. 4.2 a je rozděleno na tři části: •
Načítání a generování souborů
•
Ukládání souboru
•
Zobrazování grafů
Obr. 4.2 – hlavní dialogové okno aplikace PZD.exe
- 50 -
Provozní Zapisovač Dat
Tomáš Kašný
Načítání a generování souborů – data se mohou načíst buď přímo ze souboru (karty) nebo se použije download přes sériovou linku. Pokud se zvolí sériová linka, zpřístupní se nastavení “COM portu“ a “rychlosti COM“. Samotné načtení se provede tlačítkem NAČTI. V případě načítání dat ze souboru, se otevře dialogové okno pro otevření souboru. Vybráním souboru se spustí funkce dekoduj, která uskuteční dekódování zkráceného zápisu, zapíše data do výstupního souboru “dec_data.dat“ a seřadí senzory v novém pořadí: časový index, akcelerometr X, akcelerometr Y, akcelerometr Z, senzor úhlové rychlosti X, senzor úhlové rychlosti Y, senzor úhlové rychlosti Z. Po ukončení funkce dekoduj se provede funkce generuj. Ze souboru “dec_data.dat“ se vytvoří soubor “data.txt“, ve kterém jsou všechna data v textové podobě. Data jsou zde přepočítaná podle zadaných konstant a ve zvolených jednotkách, viz. kapitola 4.2.2. Přepočítávání hodnot pro akcelerometry se provádí rovnicí (4.13). Podle nastavení se provede výpočet bez nebo s konstantou g. Rovnicí (4.14) se přepočítávají hodnoty pro senzory úhlových rychlostí. Soubor “data.txt“ se používá jako výchozí soubor pro vykreslování grafů a ukládání souborů.
kde:
zrychlení = data _ akc * konst _ akc * g
(4.13)
úhlová _ rychlost = data _ ϖ * konst _ ϖ
(4.14)
zrychlení
výsledné zrychlení akcelerometru
data_akc
výstupní data z akcelerometru jednotky
konst_akc
přepočtová konstanta akcelerometru, viz. kapitola 4.2.2
g
gravitační konstanta, viz. kapitola 4.2.2
úhlová_rychlost
výsledná úhlová rychlost senzoru úhlové rychlosti
data_ω
výstupní data ze senzoru úhlové rychlosti jednotky
konst_ω
přepočtová konstanta senzoru úhlové rychlosti, viz. kapitola 4.2.2
Pokud se data stahují ze zapisovače sériovou linkou, spustí se zmáčknutím tlačítka NAČTI funkce ini_COM, která provede inicializaci sériové linky a zobrazí se okno “RS-232“. Po inicializaci se spustí funkce read_COM, která přečte data ze zapisovače přes sériovou linku. Odstartování přenosu dat se provede tlačítkem START v okně “RS-232“.
- 51 -
Provozní Zapisovač Dat
Tomáš Kašný
Aplikace pošle zapisovači ověřovací bajt 0xF0 a zapisovač pošle čtyři bajty s velikosti souboru. Velikost souboru se uloží do proměnné SIZE. Tato proměnná se používá pro kontrolu, zda byl přijat celý soubor. Vyšle se ověřovací bajt 0x0F a zapisovač začne posílat vybraný soubor (soubor se musí vybrat přímo v zapisovači). Pokud dojde k přetečení bufferu v přijímači na PC, pošle aplikace zapisovači bajt 0xAA, kterým se pozastaví odesílání dat ze zapisovače. Pro obnovení odesílání dat, aplikace vyšle bajt 0x0F a zapisovač pokračuje v jejich odesílání. Po ukončení příjmu dat se uzavře COM port a spustí se funkce dekoduj a generuj. Po načtení dat, jakoukoliv cestou se za textem “Jméno vybraného souboru:“ zobrazí jméno souboru, který se právě načetl. Ukládání souboru – v této sekci lze provést uložení dat do vybraného souboru. Kromě souboru lze nastavit časový interval, který se bude ukládat. Časový interval se zadává v hodinách, minutách a sekundách do příslušných políček “od“ a “do“. Maximální hodnota času se doplní automaticky po načtení dat. Pokud by se tato maximální hodnota překročila, aplikace zadání opraví. Pro časový údaj “od“ platí pravidlo, že jeho hodnota musí být menší alespoň o jednu sekundu než je hodnota časového údaje “do“. Pro ukládaný soubor lze zvolit oddělovací znak a popis sloupců, viz. kapitola 4.2.2. Tlačítkem ULOŽ se provede uložení souboru. Zobrazovaní grafů – tato sekce slouží k výběru typu grafu a k jeho vykreslení. Grafy akcelerometrů a senzorů úhlových rychlostí se zobrazují zvlášť. Pokud se použije možnost zobrazení grafů “dohromady“, zobrazí se jeden graf se třemi průběhy. Při volbě “samostatně“ se zobrazí v jednom okně tři grafy, každý pro jeden senzor.
4.2.2 Nastavení Aplikace umožňuje nastavit několik parametrů, které se využívají při generování souborů. Na obr. 4.3 je zobrazeno okno Nastavení, které se otevře tlačítkem NASTAVENÍ v hlavním okně a je rozděleno na několik sekcí: •
oddělující znak
•
jednotky
•
gravitační zrychlení
•
převodní konstanty
•
popis sloupců ve výstupním souboru
•
pořadí příjmu dat ze senzorů
- 52 -
Provozní Zapisovač Dat
Tomáš Kašný
Obr. 4.3 – okno Nastavení
Oddělující znak – zde se zadává oddělující znak, který se použije při generování ukládaného souboru. Jako oddělující znak se může použít libovolný znak. Políčko nesmí být ale prázdné, jinak aplikace nepovolí uložení změn. Defaultně je nastaven znak „středník“. Jednotky – zde se vybírá jednotka pro zrychlení, buď m/s2 nebo násobky g. Výběr jednotky zrychlení ovlivňuje generování dat pro akcelerometry. Jednotka senzorů úhlových rychlostí je [dec/s]. Gravitační zrychlení – nastavení konstanty g je možné, jen tehdy, pokud se jako jednotka zrychlení použije m/s2. Defaultně je nastavena na hodnotu 9,814 m/s2. Převodní konstanty – používají se při generování souboru data.txt. Jsou závislé na specifikaci inerciální jednotky, která se použila pro měření. Popis sloupců ve výstupním souboru – ve výstupním souboru první řádek obsahuje názvy jednotlivých sloupců. Tyto názvy se zde mohou měnit, až na název prvního sloupce,
- 53 -
Provozní Zapisovač Dat
Tomáš Kašný
sloupec Čas [s]. Za názvem se tiskne jednotka, která je u akcelerometrů dána výběrem v sekci Jednotky a u senzorů úhlových rychlostí je [dec/s]. Pořadí příjmu dat ze senzorů – každá inerciální jednotka může vysílat data v různém pořadí. Zapisovač ukládá data v pořadí ve kterém je dostane od inerciální jednotky. Aplikace musí vědět v jakém pořadí jí data ze zapisovače přicházejí, aby se provedl správný výpočet. Pořadí ve výstupním souboru aplikace je neměnné, viz. kapitola 4.2.1. Uložení změn se provede tlačítkem OK. Před uložením se kontroluje, zda v políčku oddělovacího znaku je “nějaký“ znak a zkontroluje se, zda v pořadí příjmu senzoru není vybráno jedno pořadové číslo pro více senzorů (např. AccX a AccY mají nastavenou 1). Pokud se zjistí chyba v nastavení, aplikace změny neuloží, dokud se chyby neopraví. Nastavení lze stornovat.
4.2.3 Grafy Aplikace umožňuje vykreslovat grafy průběhů jednotlivých senzorů. Grafy akcelerometrů a senzorů úhlových rychlostí se vykreslují zvlášť. Je zde možnost výběru, zda se zobrazí grafy všech tří akcelerometrů “dohromady“ v jednom grafu nebo “samostatně“, každý akcelerometr ve vlastním grafu. Stejné možnosti mají i grafy pro senzory úhlových rychlostí. Každý graf disponuje ZOOMem časové osy. Do políček “od“ a “do“ se zadá požadovaný časový interval v sekundách a graf se překreslí. U každého grafu je možnost uložit si vybraný časový interval do souboru a to pro každý graf zvlášť nebo dohromady pro tři grafy, podle zvoleného typu grafu. Uložení dat se provede tlačítkem ULOŽ u příslušného grafu. Graf se ukládá v textové podobě. Pro generování výstupního souboru se používají hodnoty z okna Nastavení, viz. kapitola 4.2.2. Každý graf lze překreslovat nezávisle na ostatních grafech. Je možné otevřít všechny grafy a pracovat s nimi najednou. Musí se ovšem pracovat pouze z jedním datovým souborem. Pokud se provede načtení nového souboru dat a okna starých grafů zůstanou otevřená, budou se grafy v těchto oknech překreslovat podle nových dat, pokud se bude měnit nastavení zobrazeni (interval “od“ “do“) nebo se provede uložení grafu. Pokud se ovšem okno starého grafu neuzavře a nebude se již překreslovat či ukládat, může se načíst nový soubor dat a zobrazit nové grafy pro srovnání. Ukázky jednotlivých grafů jsou v kapitole 5.
- 54 -
Provozní Zapisovač Dat
Tomáš Kašný
5. Testování zapisovače K ověření funkce zapisovače byla použita inerciální navigační jednotka AHRS M3, jejíž popis je v kapitole 2.1. Testování se provádělo vzorkovací frekvencí 100 Hz a 20 Hz, čímž se ověřila funkce zapisovače v obou krajních hodnotách vzorkovací frekvence zapisovače. Hlavní testování probíhalo vzorkovací frekvencí 100 Hz. Inerciální jednotka se položila na stůl a na stole se vyznačila výchozí poloha jednotky. Během měření se jednotkou přibližně ve stejných časových intervalech, cca. každých osm až deset minut, pohybovalo tak, aby se projevila změna na akcelerometrech i na senzorech úhlových rychlostí. Na jednotku působí hlavně gravitační zrychlení, ale s jednotkou se prováděly i prudší pohyby a proto byly zaznamenány i zrychlení větší nebo menší než 1 g. Výstupy z akcelerometrů v podobě grafů, které byly vykresleny aplikací PZD.exe, jsou na obr. 5.1. Použitá jednotka zrychlení je násobky g.
Obr. 5.1 – samostatné grafy akcelerometrů při 100 Hz
- 55 -
Provozní Zapisovač Dat
Tomáš Kašný
Obr. 5.2 zobrazuje výstupy ze senzorů úhlových rychlostí, které byly získány otáčením jednotky kolem jejich vlastních os.
Obr. 5.2 – samostatné grafy senzorů úhlových rychlostí při 100 Hz
Změny se sledují vůči klidovému stavu, který je definován polohou na stole a v jednotlivých grafech představuje klidový stav nulovou hodnotu. Kromě akcelerometru v ose Z, který v klidovém stavu měří gravitační zrychlení. Celé hlavní měření trvalo necelých 2,5 hodiny. Na obr. 5.3 je zobrazena část společného grafu pro akcelerometry a na obr. 5.4 část společného grafu pro senzory úhlových rychlostí. U společných grafů je zobrazena jen část grafů kvůli lepší přehlednosti. Při zobrazení celé časové osy se jednotlivé průběhy překrývají a nelze je navzájem dobře rozeznat.
- 56 -
Provozní Zapisovač Dat
Tomáš Kašný
Obr. 5.3 – společný graf pro akcelerometry při 100 Hz
Obr. 5.4 – společný graf pro senzory úhlových rychlostí při 100 Hz
- 57 -
Provozní Zapisovač Dat
Tomáš Kašný
Pro úplnost se provádělo měření vzorkovací frekvencí 20 Hz. Postup měření byl stejný jako během
hlavního měření,
ale měření se vzorkovací frekvencí 20 Hz probíhalo
cca. 30 minut. Na obr. 5.5 jsou zobrazeny grafy akcelerometrů a na obr. 5.6 jsou grafy senzorů úhlových rychlostí. Pro ukázku funkce ZOOM časové osy, jsou na obr. 5.5 a obr. 5.6 zobrazeny části grafů akcelerometrů a senzorů úhlových rychlostí.
Obr. 5.5 – samostatné grafy akcelerometrů při 20 Hz
- 58 -
Provozní Zapisovač Dat
Tomáš Kašný
Obr. 5.6 – samostatné grafy senzorů úhlových rychlostí při 20 Hz
Soubory z naměřenými daty ze zapisovače, soubor MER100HZ.PZD obsahuje data z měření se vzorkovací frekvencí 100 Hz a soubor MER20HZ.PZD obsahuje data z měření se vzorkovací frekvencí 20 Hz, jsou uloženy na přiloženém CD v adresáři “testování“. V tomto adresáři se nacházejí také obrázky 5.1 až 5.6 ve své původní velikosti. Během měření podsvícení LCD displeje zapisovače bliká. Tato funkce slouží jako kontrola, že zapisovač pracuje během měření správně. Frekvence blikání podsvícení je závislá na rychlosti zápisu bloku naměřených dat (sektoru) na SD kartu. Z výstupních grafů akcelerometrů a senzorů úhlových rychlostí, obr. 5.1 až 5.6, vyplívá, že testování zapisovače proběhlo bez problémů a to při obou vzorkovacích frekvencích, 100 Hz a 20 Hz. Předpoklad byl, aby v klidovém stavu byl výstup všech senzorů, až na akcelerometr v ose Z, nulový. Akcelerometr v ose Z musí mít na výstupu v klidovém stavu zrychlení 1 g. Oba tyto předpoklady byly pro všechny senzory splněny. V případě pohybu jednotky se zrychlení a úhlové rychlosti na všech senzorech mění.
- 59 -
Provozní Zapisovač Dat
Tomáš Kašný
Celý zapisovač byl vyvíjen na vývojové desce USBmegaKIT a k ní se připojily postupně ostatní moduly: displej, klávesnice a paměť (SD karta). Na obr. 5.7 je fotka tohoto vývojového kitu i se všemi moduly.
Obr. 5.7 – provozní zapisovač dat – vývojový kit
- 60 -
Provozní Zapisovač Dat
Tomáš Kašný
6. Závěr Zadání diplomové práce vyžaduje návrh zařízení, schopného ukládat data z inerciální jednotky do externí paměti v časovém horizontu 20 až 30 minut. Takto získaná data dále zobrazit na PC a umožnit jejich další zpracování. Všechny požadavky, vyplívající ze zadání diplomové práce, jsou splněny. Zapisovač ukládá data z inerciální jednotky na SD kartu a umožňuje zpracování těchto dat v PC. Podle kapacity SD karty se může délka záznamu dat z inerciální jednotky pohybovat řádově v desítkách až stovkách hodin. Aplikace PZD.exe je schopna zaznamenaná data zpracovat a následně vygenerovat textový soubor, který je vhodný pro import do dalších programů. Zaznamenaná data aplikace PZD.exe může zobrazit pomocí grafů. V zapisovači je použit mikrokontrolér ATMEL ATmega16, jenž disponuje rozhraním RS-232, které se používá pro komunikaci s inerciální jednotkou a PC. Zapisovač umožňuje nastavit pět rychlostí sériové linky: 9600 b/s, 19 200 b/s, 38 400 b/s, 57 600 b/s a 115 200 b/s. Toto nastavení slouží pouze pro komunikaci zapisovače s PC a max. přenosová rychlost je zhruba 9,5 kB/s. Rychlost sériové linky pro komunikaci s inerciální jednotkou je 115 200 b/s a tato rychlost se nastavuje automaticky na začátku každého měření a na konci měření se vrátí zpět na původní hodnotu. Zapisovač podporuje souborový systém FAT16, pomocí kterého lze na SD kartě vytvářet, číst a mazat soubory. Podpora souborového systému umožňuje použít SD kartu v PC a pracovat se soubory vytvořenými zapisovačem. Tuto možnost lze využít v případě, že se pracuje s velkými soubory, cca nad 1MB. SD karta je k mikrokontroléru připojena přes SPI sběrnici a komunikace v SPI módu probíhá rychlostí 7,3 MHz. Zapisovač podporuje pouze SD karty typu SC (Standard Capacity), což omezuje použití karet do max. kapacity 2 GB. Při plném využití této kapacity, by byl zapisovač schopen zapsat záznam dlouhý 138 dnů, 2 hodiny, 1 minutu a 4,64 sekundy při vzorkovací frekvenci 20 Hz nebo záznam dlouhý 27 dnů, 14 hodin, 48 minut a 3,59 sekundy při vzorkovací frekvenci 100 Hz. Vzorkovací frekvence se mění přímo v zapisovači a lze vybrat ze čtyř hodnot: 20 Hz, 50 Hz, 80 Hz a 100 Hz. Aplikace PZD.exe byla vytvořena v programovacím prostředí LabWindows/CVI. Aplikace umožňuje načítaní dat buď ze souboru nebo přes sériovou linku přímo ze zapisovače. Aplikace načtená data zpracuje, převede do textové formy a takto zpracovaná data lze ukládat do libovolného souboru. Aplikace umožňuje zobrazit načtená data v grafech, které se vytvářejí zvlášť pro akcelerometry a zvlášť pro senzory úhlových rychlostí.
- 61 -
Provozní Zapisovač Dat
Tomáš Kašný
Další vývoj zapisovače by se mohl zabývat podporou HC SD karet (High Capacity) a podporou souborového systému FAT32. Dále by se mohlo zaměřit na komunikaci zapisovače s PC a umožnit komunikaci přes USB, popřípadě využití USB pro komunikaci s inerciální jednotkou.
- 62 -
Provozní Zapisovač Dat
Tomáš Kašný
Literatura [1]
MATOUŠEK, David. Práce s mikrokontroléry ATMEL AVR ATmega16. 4. díl. Praha : BEN – technická literatura, 2006. ISBN 80-7300-174-8
[2]
VÁŇA, Vladimír. Mikrokontroléry Atmel AVR – programování v jazyce C. Praha : BEN – technická literatura, 2006. ISBN 80-7300-102-0
[3]
MATOUŠEK, David. Vývojový kit USBmegaKIT. Praha : BEN – technická literatura, 2005. ISBN 80-7300-163-2
[4]
Innalabs: Attitude and Heading Reference System AHRS M2, M3, user’s manual. 2009. Dostupný z WWW: http://www.innalabs.com
[5]
ATMEL: Datasheet microcontroller ATmega16. 2006
[6]
SD Association: SD specifications PART 1, Physical layer. 2006
[7]
Samsung: Datasheet S6A0069. 2000
[8]
WIKIPEDIA.ORG: File Allocation Table. Dostupný z WWW: http://en.wikipedia.org/wiki/File_allocation_table (March 2009)
- 63 -
Provozní Zapisovač Dat
Příloha I Specifikace Innalabs AHRS M2 a M3
Tomáš Kašný
Provozní Zapisovač Dat
Příloha II SPI mód - inicializační diagram pro SD kartu
Tomáš Kašný
Provozní Zapisovač Dat
Příloha III Mechanické provedení SD karty
Tomáš Kašný
Provozní Zapisovač Dat
Příloha IV Schéma USBmegaKIT
Tomáš Kašný
Provozní Zapisovač Dat
Tomáš Kašný
Příloha V Seznam chybových hlášení zapisovače a jejich význam Kód chyby FF 9E C0 AA E0 EE CC BF B5 BC BD C1 00 BB D0 E1 BE 9C 0xxx xxxx b 0000 xxxx b 0000 xxx1 b
Popis chyby plná paměť špatný údaj o rychlosti sériové linky v E2PROM SD karta není zastrčená chyba “check pattern“ při inicializaci SD karty SD karta nedokončila správně “power-up“ rutinu SD karta je typu HC, není podporována počítadlo volných clusteru nebo volných položek podteklo nebo přeteklo špatný formát FAT špatná velikost sektoru v nastavení FAT, jiná než 512 napočítáno více než 65535 volných clusterů, nepřípustné pro FAT16 napočítáno více než 65535 volných položek, pro FAT16 je standardně 512 SD karta je uzamčená SD karta vysílá BUSY signál déle než 128 ms během měření min. jednou přetekl buffer => min. jeden odměr se vypustil uplynul interval TimeOut (cca. 4,5 s) při komunikaci s PC nebo s inerciální jednotkou nepovedená inicializace inerciální jednotky buffer přetekl 256 krát za sebou špatná údaj o vzorkovací frekvenci v E2PROM chybná odpověď R1, viz. obr. 3.7 (na LCD zobrazeno v hexa kódu) “Data Error Token“, viz. obr. 3.8 (na LCD zobrazeno v hexa kódu) Chyba v “Data Response Token“, viz. obr.3.10 a tab. 3.1 (na LCD zobrazeno v hexa kódu)
Seznam součástek - Provozní zapisovač dat Součástka C1, C26 C2, C3, C6, C7, C16, C17, C18, C19, C22, C24, C25, C33, C36, C37, C38, C39 C4 C5 C8, C20, C30, C31 C9, C10, C11, C12, C13, C14 C15 C21, C35, C40 C23 C27, C28, C29, C32 C34 R1, R2, R4, R10, R12, R13, R14, R15, R18, R21, R22 R3, R6 R5, R16 R7 R8, R9 R11 R17, R19, R20 D1 D2 J1 J2 J3 J4 L1 POL1 Q1 Q2, Q3 Q4, Q5 S1, S2, S3, S4 SD1 SW1, SW2 U1 U2 U3 U4 U5 U6 U7 U8, U12, U13 U9 U10 U11 U14 Y1 Y2 Y3
hodnota 470uF/16V 100nF 33nF 6,8uF/10V 10nF 27pF 1nF 4,7uF/16V 100uF/25V 22uF/16V 47uF/16V 10k 470R 10R 1k5 27R 2k2 47k SMD LED RED LED 5mm RED JUMPER LCD - MC1601A-SYL/H USB B 90 CAN 9 V 90 33uH RXE050 IRFD9120 BC848 BC858B mikro spinac SD card slot SW DIP-4 AT89C52/FP ATmega16-16AU FT232BM 93LC46B TL7705 74HC4050 74HC00 CM555 74HC04 MAX232 L78M05/TO220 LE33/TO92 6MHz 24MHz 14,7456MHz