České vysoké učení technické v Praze Fakulta elektrotechnická Katedra počítačové grafiky a interakce
bakalářská práce
Soustava synchronizovaných kamer Jakub Dražan
Vedoucí práce: Ing. Adam Sporka, Ph.D.
Studijní program: Softwarové technologie a management, Bakalářský Obor: Web a multimedia Květen 2013
Poděkování Poděkování za impuls k vytvoření této práce patří vedoucímu bakalářské práce panu Ing. Adamu Sporkovi, Ph.D. Během realizace jsem se setkal s ochotou mnoha pracovníků školy, ale také společností. Poděkování patří Bc. Jiřímu Svatoňovi z Katedry radioelektroniky při konzultaci systému GPS pro časovou synchronizaci zařízení, studentovi a kolegovi z týmu CTU CarTech Miro Rýzkovi za pomoc při návrhu plošného spoje pro aplikaci CMOS snímacího čipu a v neposlední řadě Ing. Karlu Duškovi Ph.D. a Ing. Ivaně Beshajové Pelikánové Ph.D. z katedry elektrotechnologie za zapájení kamery na desku plošného spoje. Poděkování patří i týmu CTU CarTech za poskytnutí techniky k oživení kamery a jejímu testování. Dále pak Janu Kučerovi ze společnosti UAM Czech Republic za konzultaci při výběru mikroprocesorové vývojové desky pro tuto práci. Tuto bakalářskou práci bych rád věnoval svému otci, Josefu Dražanovi, který nás opustil dne 29. dubna 2013.
Prohlášení Prohlašuji, že jsem předloženou práci vypracoval samostatně, a že jsem uvedl veškeré použité informační zdroje v souladu s Metodickým pokynem o dodržování etických principů při přípravě vysokoškolských závěrečných prací. V Praze dne 24. května 2013 ............................................................................................ v
Abstrakt Tato bakalářská práce se zabývá teoretickým návrhem a realizací autonomního zařízení, sloužícího k pořizování videozáznamů s přesným časovým UTC razítkem v rámci soustavy těchto zařízení. V této práci je v počátku rozebrána problematika časové synchronizace zařízení a dnešní dostupná řešení. Práce obsahuje podrobný popis sběrnice I2C a komunikace mezi mikrokontrolerem a CMOS čipem po této sběrnici, včetně detailní dokumentace užitého signálu DCF77 k synchronizaci. V části druhé uvádím návrh vlastního řešení za pomocí těchto systémů, kterými bylo zařízení realizováno a testováno.
Klíčová slova Bakalářská práce; Soustava kamer; Kamera; CMOS; I2C; DCF77; Micro .NET Framework; FEZ Panda 2
Abstract This thesis aims to design and implement an autonomous device. Such a device is capable of recording a video with incorporated UTC timestamp with the precision of one hundredth of second. The timestamp is synchronized by the DCF77 signal. In the first part of the thesis, we analyze current solutions of time synchronization, the I2C bus and the microcontroller – CMOS communication over the I2C bus. In the second part, we will design our own autonomous device using the components and approaches from the previous part. We design our device in a way that is capable of working either alone or as a part of a swarm.
Keywords Bachelor thesis; Flat; Camera; CMOS; I2C; DCF77; Micro .NET Framework; FEZ Panda 2 vi
Obsah 1. Úvod
1
1.1. Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2. Motivace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
2. Specifikace
2
2.1. Cíl práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2.2. Přínos projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2.3. Cena produktu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
3. Současná řešení synchronizace
3
3.1. Nastavení data a času . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
3.2. Synchronizace obrazu
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
3.2.1. Manuální synchronizace . . . . . . . . . . . . . . . . . . . . . . .
3
3.2.2. Zvukový impuls . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
3.2.3. Elektrický impuls - Genlock . . . . . . . . . . . . . . . . . . . . .
4
4. Návrh vlastního řešení
5
4.1. Od zapnutí po uložení obrazu . . . . . . . . . . . . . . . . . . . . . . . .
5
4.2. Možnosti synchronizace zařízení . . . . . . . . . . . . . . . . . . . . . . .
5
4.2.1. Ethernet - NTP
. . . . . . . . . . . . . . . . . . . . . . . . . . .
5
4.2.2. GPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
4.2.3. Rodina dlouhovlných signálů . . . . . . . . . . . . . . . . . . . .
6
DCF77
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
MSF60
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
WWVB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
4.3. Zpracování a přenos obrazu . . . . . . . . . . . . . . . . . . . . . . . . .
7
4.3.1. Datový tok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
4.3.2. Processing a úložiště . . . . . . . . . . . . . . . . . . . . . . . . .
7
4.3.3. Kodek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
4.4. Přínos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
4.5. Očekávané nasazení
8
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5. O použitých systémech
9
5.1. DCF77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
5.1.1. O vysílači . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
5.1.2. Dosah a příjem . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
5.1.3. Příjímač . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
5.1.4. Struktura signálu . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
5.1.5. Dekódování bitů . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
5.1.6. Použití . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14 vii
5.2. CMOS čip TCM8240MD . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
5.2.1. Konstrukce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
5.2.2. Bayerův filtr . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
5.2.3. Registry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
5.2.4. Řídící I2C sběrnice . . . . . . . . . . . . . . . . . . . . . . . . . .
18
Vodiče SCL a SDA . . . . . . . . . . . . . . . . . . . . . . . . . .
18
Rozeznávané informace . . . . . . . . . . . . . . . . . . . . . . .
18
Dva režimy komunikace . . . . . . . . . . . . . . . . . . . . . . .
19
5.3. Mikrokontroler FEZ PANDA 2 . . . . . . . . . . . . . . . . . . . . . . .
20
5.3.1. Parametry desky FEZ Panda 2 . . . . . . . . . . . . . . . . . . .
20
Hlavní parametry . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
Napájení
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
Provozní podmínky . . . . . . . . . . . . . . . . . . . . . . . . . .
21
5.3.2. .NET Micro Framework . . . . . . . . . . . . . . . . . . . . . . .
21
6. Výroba 6.1. Příprava plošných spojů a osazení . . . . . . . . . . . . . . . . . . . . . .
22
6.1.1. DPS CMOS čipu . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
6.1.2. Stabilizovaný zdroj 2,6 V; I > 100 mA . . . . . . . . . . . . . . .
23
6.1.3. Stabilizovaný zdroj 1,6 V; I > 100 mA . . . . . . . . . . . . . . .
25
7. Implementace
26
7.1. DCF77 ovladač . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
7.2. I2C ovladač . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31
7.2.1. Metody řízení SCL a SDA . . . . . . . . . . . . . . . . . . . . . .
31
7.2.2. Metody pro tvoření paketu . . . . . . . . . . . . . . . . . . . . .
32
7.2.3. Metody kompletního komunikačního řetězce . . . . . . . . . . . .
32
7.3. Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
8. Testování
viii
22
34
8.1. Zapojení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
8.1.1. Stabilizátor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
8.1.2. Kamera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
8.1.3. DCF77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
8.2. Nastavení provozního režimu kamery . . . . . . . . . . . . . . . . . . . .
35
8.3. Ověření funkčnosti synchronizace . . . . . . . . . . . . . . . . . . . . . .
37
8.4. Ověření příjmu obrazových dat . . . . . . . . . . . . . . . . . . . . . . .
38
8.5. Přiřazení časové značky snímku . . . . . . . . . . . . . . . . . . . . . . .
39
8.6. Důkaz synchronosti mezi více zařízeními . . . . . . . . . . . . . . . . . .
39
8.7. Testování vlivů rušení . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
9. Závěr 9.1. Parametry prototypu . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41 41
Přílohy A. Obsah přiloženého CD
42
A.1. Toshiba TCM8240MD - datasheet . . . . . . . . . . . . . . . . . . . . .
42
A.2. Toshiba TCM8240MD - appsheet . . . . . . . . . . . . . . . . . . . . . .
42
A.3. DCF77 receiver - datasheet . . . . . . . . . . . . . . . . . . . . . . . . .
42
A.4. CTU FEL - SynchroCamera - projekt Visual Studio 2012 . . . . . . . .
42
A.5. Bakalářská práce v elektronické podobě . . . . . . . . . . . . . . . . . .
42
Literatura
43
Seznam obrázků
44
Seznam výpisů kódu
45
ix
Zkratky 4VGA
4x Video Graphics Array
BCD
Binary Coded Decimal
CEST
Central European Summer Time
CET
Central European Time
CIF
Common Intermediate Format
CMOS DPS
Complementary Metalâ“Oxideâ“Semiconductor c Deska plošnĂ○ho spoje
DVB-T
Digital Video Broadcasting â“ Terrestrial
I2C
I-squared-C bus
Genlock
Generator locking
GPS
Global Positioning System
NMEA
National Marine Electronics Association
NIST
National Institute of Standards and Technology
NPL
National Physical Laboratory
NTP
Network Time Protocol
QCIF
Quarter Common Intermediate Format
QQVGA
Quarter-Quarter Video Graphics Array
QVGA
Quarter Video Graphics Array
SMD
Surface Mount Device
SPI
Serial Peripheral Interface
SQCIF
Sub Quarter Common Intermediate Format
SXGA
Super eXtended Graphics Array
VGA
Video Graphics Array
UART
Universal asynchronous receiver/transmitter
UDP
User Datagram Protocol
UTC
Coordinated Universal Time
x
Kapitola 1. Úvod 1.1. Úvod Náplní této práce je návrh autonomního záznamového zařízení, zpracovávající obraz v reálném čase s přesnou časovou značkou pro každý pořízený snímek. Kromě samotného návrhu je v této práci brán zřetel především na realizaci tohoto synchronního časového zařízení s funkcí sběru obrazových dat.
1.2. Motivace Téma práce vzniklo na základě požadavku nasazeného systému pro sběr videozáznamu, na přesnou časovou synchronizaci obrazů z několika autonomních zařízení. Dnešní trh je doslova zaplaven IP kamerami a dalšími běžně užívanými digitálními záznamovými zařízeními. Jejich použití pokrývá většinu požadavků dnešní doby pro monitorování objektů, streaming apod. Produkt, navrhnutý v této práci si klade za cíl v reálném čase přiřazovat časová razítka jednotlivým snímkům videozáznamu do metadat a to během zpracování obrazu ze samotného čipu, nikoliv až v postprodukci, kdy by byla hodnota časové značky ovlivněna dobou zpracování obrazu. Tato informace přiřazená k obrazu otvírá nové možnosti postprodukce jako takové v soustavě několika kamer. Problém je velice příbuzný synchronizaci obrazů při natáčení stereoskopického videa, ovšem v našem případě se jedná o soustavu kamer, které se mohou nacházet vzdálené i několik desítek či stovek metrů v exteriéru. Výstup z kamery lze využít pro algoritmizované pořízení slowmotion záběrů či pro plynulé přepínání obrazu zasebou seřazených kamer.
1
Kapitola 2. Specifikace Tato kapitola pojímá rozsáhlejší motivaci pro realizaci autonomního záznamového synchronního zařízení z hlediska dnešního trhu a použití takového produktu.
2.1. Cíl práce Na základě poznatků z praxe, navrhnout a vytvořit autonomní záznamové zařízení, které bude v soustavě stejných zařízení synchronizované přesného času UTC.
2.2. Přínos projektu Na rozdíl od dnes dostupných zařízení je produkt vyvíjený v této práci přiřazovat digitální časové značky každému snímku z videosekvence. Je minimalizováno zpoždění přiřazení časového razítka snímku od vzniknutí snímku samotného a především uživatel bude oproštěn od manuálního nastavování data a času na kameře. Zařízení je synchronizováno automaticky bez nutnosti internetového připojení, či přítomnosti jiné digitální linky.
2.3. Cena produktu Během vývoje kamery byl brán zřetel také na celkové náklady, které i přes fakt, že se jedná o prototyp, by měly být srovnatelné se podobnými produkty na trhu, v případě maloobjemové výroby. Během vývoje byly použity některé vývojové desky a další komponenty, které by při komerční produkci byly nahrazeny na míru navrženými výrobky.
2
Kapitola 3. Současná řešení synchronizace Kapitola se zabývá dnešními dostupnými řešeními časové synchronizace nahrávek z kamer vůči sobě a přiřazení přesného času a datu.
3.1. Nastavení data a času Ve valné většině komerčních produktů je jediná možnost nastavení data a času manuální, s přesností na minuty. V případě kamer připojených do ethernetu může probíhat synchronizace data a času vůči serveru. Není však zaručeno správné nastavení serveru nebo vlastního zdroje času vůči přesnému času. V mnoha aplikacích, však není přesné datum a čas stěžejní, jako pouze synchronizace počátku nahrávání sekvencí.
3.2. Synchronizace obrazu Výtah současných známých a aplikovaných řešení problematiky korespondujícího začátku natáčení záznamu více zařízeními.
3.2.1. Manuální synchronizace Od raných filmařských let sloužila klapka před kamerou k označení videosekvence a jejího přiřazení ke scéně. Podobným způsobem můžeme synchronizovat obraz několika kamer snímající stejný bod, např. rozsvícením majáku. Předpokladem je stejná snímkovací frekvence jednotlivých kamer a viditelnost na stejný bod, v našem případě maják. Toto řešení je však velmi nepraktické a vyžaduje manuální synchronizaci obrazů při postprodukci.
3.2.2. Zvukový impuls Možným řešením synchronizace obrazu (startu pořízení nahrávek) je i zvukový synchronizační impuls. V praxi se ovšem nepoužívá (pouze experimentálně) z důvodu rychlosti šíření zvuku a problémů při vyhodnocování hluku v okolí. Takový systém musí neustále vyhodnocovat zvuky okolí a analyzovat, zda ve vzduchu není šířena synchronizační zvuková stopa. Toto řešení je náročné na výpočetní výkon zařízení a jeho citlivost. 3
Kapitola 3. Současná řešení synchronizace
3.2.3. Elektrický impuls - Genlock Genlock je moderní systém impulsové synchronizace více kamer, dostupný především v dražších záznamových produktech. Genlock se často používá pro synchronizaci kamer při pořizování stereoskopického videa, kde je synchronizace obrazů jedním z hlavních kritérií. Genlock signál je mezi zařízeními šířen pomocí triaxial kabelu, obdobdy koaxiálního kabelu, obohaceného o lepší stínění pro lepší šíření signálu. Tento synchronizační signál je díky vodičovému vedení šířen se zanedbatelným zpožděním, ovšem z instalačních důvodů není vhodný do exteriérů, kde se záznamová zařízení nacházejí ve větší vzdálenosti od sebe. S tímto systémem by se tedy jednalo o závislou soustavu kamer.
4
Kapitola 4. Návrh vlastního řešení V této části se zabývám teoretickým rozborem a zhodnocením systémů, kterými v další části práce budu realizovat samotné autonomní záznamové zařízení. Pojednávám i o ostatních systémech, jejichž použití by připadalo v úvahu, ovšem nejsou k aplikaci vhodné.
4.1. Od zapnutí po uložení obrazu Zařízení by po zapnutí mělo pracovat v následujících krocích: 1. Zapnutí a inicializace zařízení. 2. Inicializace kamery. 3. Časová synchronizace zařízení. 4. Přepnutí kamery ze stand-by režimu. 5. Příjem obrazového snímku a zaznamenání časové značky. 6. Odeslání snímku ze zařízení do paměti nebo ethernetu. 7. Skok na krok č. 5.
4.2. Možnosti synchronizace zařízení 4.2.1. Ethernet - NTP Využití ethernetu, pro nastavení přesného času je možné za pomocí NTP (Network Time Protocol), založeného na UDP protokolu klient-server, který poskytuje dva servery ptbtime1.ptb.de a ptbtime2.ptb.de k získání přesné časové informace. Servery jsou nastavovány na základě atomových hodin, ze kterých je signál přenášen optickými vlákny a korigován dle DCF77. Výhodou je rychlost synchronizace po zapnutí zařízení, pokud je pro zařízení dostupný jeden z uvedených serverů. Protože chceme zajistit autonomitu našeho nahrávacího zařízení, je toto řešení nevhodné z hlediska nutnosti připojení zařízení do ethernetu.
4.2.2. GPS V dnešní době jeden z nejrozšířenějších lokačních systémů, který lze pro časovou synchronizaci velice dobře využít. Běžné moduly s dostupnou pořizovací cenou začnou po 5
Kapitola 4. Návrh vlastního řešení svém zaměření posílat data po UART sběrnici v kódování ASCI, formátu NMEA. Tento formát je zvolen pro jednodušší práci se zařízeními a pro jeho snadnou dekódovatelnost. Zanedbává ovšem přesnost předávaných informací v čase. Často je ale možné četnost předávání informací nastavit po interfacu (I2C, SPI..) jako závislost od vstupního hodinového signálu. GPS k účelům časové synchronizace využívá i letecký průmysl či DVB-T přijímače. Takové GPS přijímače jsou zpravidla vybaveny funkcí Time-marking. Užitím systému GPS lze dosáhnout časové přesnosti až 40 ns, ovšem bez přihlédnutí k době zpracování informace. Pro naši aplikaci se řešení za pomocí GPS zdá jako nevhodné, protože je zde požadavek na přímou viditelnost k obloze. Fakt, že anténa může být od přijmače vzdálená až 25 metrů nepovažuji za kompenzaci z hlediska užívání. Dále není zaručena doba zaměření v případě, že se systém nachází ve stavu cold-start (běžná doba zaměření až okolo 20 minut). Dalším omezením je i cena přijímače, která se v případě, že požadujeme přesné zpracování času (Time-marking) bez meziprocesů, jako je převod dat do NMEA, pohybuje přes 2000 Kč.
4.2.3. Rodina dlouhovlných signálů Rodina signálů DCF, MCF a WWVB je založena na dlouhých vlnách a přenáší informace až do vzdálenosti 1500 km od vysílače. Tento způsob přenosu signálu má velkou výhodu v propustnosti překážkami. Tyto signály se dnes běžně užívají pro automatické nastavování domácích hodin a spotřebičů, včetně korekce časového pásma a letního/zimního času. V signálech jsou kromě datumu, přesného času a odchylky od UTC přenášeny i další pomocné informace, jako je předpověď počasí či jiné mimořádné zprávy. Všechny tři uvedené systémy (DCF, MCF a WWVB) pracují na stejném principu, cyklicky se opakujícím vysílání 58 bitů, kde padesátý devátý a šedesátý bit slouží jako synchronizační značka. Po zapnutí zařízení může tedy v nejhorším případě synchronizace trvat 119 sekund, v nejlepším sekund 60. V jednotlivých systémech se však liší detailz zakódování informací. DCF77 Vysílač DCF77 je umístěn v Mainflingenu, nedaleko německého Frankfurtu. Data jsou řízena atomovými hodinami z Fyzikálně-technického institutu v Braunschweigu. Signál je amplitudově modulován na nosné frekvenci 77,5 kHz. MSF60 Vysílač MSF60 je umístěn na severu Velké Británie, je součástí radiové stanice v Anthornu. Signál je vysílán opět na dlouhých vlnách a amplitudově modulován na nosné frekvenci 60 kHz. Data jsou kódovány dle standardu organizace NPL, který se liší od kódování DCF77. Organizace NPL tento vysílač spravuje. 6
4.3. Zpracování a přenos obrazu WWVB Vysílač WWVB je umístěn nedaleko města Fort Collins v americkém Coloradu. Stejně jako u signálu MSF, i zde jsou data modulovány amplitudovou modulací s nosnou frekvencí 60 kHz. Kódování přenášených dat je zajištěno standardem organizace NIST, která vysílač také spravuje.
4.3. Zpracování a přenos obrazu Protože chci zajistit co nejmenší zpoždění přiřazení časové značky pořízenému snímku (na základě tohoto požadavku jsme zavrhnuli běžné GPS přijmače pro synchronizaci), je potřeba sestrojit kameru tzv. od píky. Proto jsem se rozhodl pro užití CMOS čipu, který bude předávat data obrazová data přímo mikrokontroleru, který je zpracuje a přiřadí snímku časovou značku.
4.3.1. Datový tok Vzhledem k tomu, že budeme přijímat obrazová data v surové podobě přímo z CMOS čipu, vystavujeme se obrovskému datovému toku při rozlišení větším, než VGA. K popsání jednoho snímku VGA, uvažujme 8 bitů na pixel. Při popsání jednotky pixelu jedním 1 bytem to znamená 307 200 bytů na frame. Při udržení standardu 30 FPS by to znamenalo datový tok přibližně 9 MB za sekundu.
4.3.2. Processing a úložiště Množství dat popsané v předchozím odstavci datového toku vyžaduje adekvátní procesor pro zpracování takového objemu dat. Navíc ukládat tyto data v nezkomprimované podobě by bylo velice náročné i na parametry úložiště řídícího mikrokontroleru, který by musel disponovat vyrovnávací pamětí min. jako je velikost zpracovávaného snímku. Řešením je užité CMOS čipu takového, který data bude předávat, již ve zkomprimované podobě, přičemž si zachová přijatelnou snímkovací frekvenci. Tímto krokem výrazně snížíme vytížení celé linky, bez vedlejšího efektu zpoždění zpracování dat čipem. Při rozlišení odpovídající dnešním požadavkům, např. 1240x1024 px se ovšem datovému toku kolem 9 MB nevyhneme i při in-time kompresi na palubě čipu. Je proto nutné myslet i na paměť s odpovídající rychlostí zápisu. Takovému požadavku vyhový běžná flashpaměť s rychlostí zápisu okolo 20 MB za sekundu. Naopak požadavku nevyhový např. SD karta s rychlostí zápisu 4 MB za sekundu a to i vzhledem k její běžné maximální kapacitě. Zpracování jednoho framu záznamu bude tedy probíhat v následujících krocích: ∙ Zaznamenání časové značky - start framu, ∙ Příjem obrazu mikrokontrolerem z čipu a uládání streamu dat do paměti, ∙ Zaznamenání časové značky - konec framu, 7
Kapitola 4. Návrh vlastního řešení ∙ Zprůměrování časových značek a přiřazení výsledku na konec datového streamu framu.
4.3.3. Kodek Jako výstupní formát obrazu jsem pro tuto práci zvolil JPEG, jelikož vybraná kamera zvládne jeho kompresy sama před posláním dat v reálném čase, což zjednodušší z hlediska vývoje práci a přiřazení časové značky každému ze snímků. Jediná přijatelná komprese je právě na palubě CMOS čipu, pokud to umožňuje. Cenově dostupný mikrokontroler pro tuto aplikaci běžně nedisponuje dostatečnou operační pamětí pro bufferování dat jednoho snímku a jeho následnou komprimaci. V případě, že by CMOS čip nepodporoval kompresi, zpracovávalo by zařízení data nezkomprimovaná.
4.4. Přínos Přínos navrhnutého zařízení spočívá v mechanické nezávislosti jednotlivých kamer, jejichž obraz lze dále procedurálně zpracovávat a vytvářet závislosti. Při použití synchronizačních signálů na dlouhých vlnách se každé zařízení samo nastaví a nebude limitováno umístěním v interiéru ani vzdáleností mezi jednotlivými zařízeními. Musí se pouze přihlédnout k faktu, kde bude zařízení nasazováno, zda se bude jednat o Střední Evropu či USA apod., vzhledem k dosahu jednotlivých vysílačů. Kromě přesného relativního porovnávání jednotlivých snímků vůči sobě získáme tedy i přidanou hodnotu ve formě absolutního porovnání vzhledem k UTC.
4.5. Očekávané nasazení Zařízení bude po pilotní zkoušce nasazeno k testování do projektu Net-o-peer. Několik záznamových zařízení z této práce by mělo dovolit pořízování videozáznamů, které lze díky časové značce automatizovaně zpracovávat a vytvářet zajímavé videosekvence průjezdů jezdců. Pro nasazení v této aplikaci se předpokládá, že vytvořená data budou ukládána na lokální úložiště kamery a budou dostupná ethernetovou linkou.
8
Kapitola 5. O použitých systémech V této části se zabývám detailním rozborem vybraných systémů a produktů, kterými bude záznamové zařízení realizováno.
5.1. DCF77 Obecný popis DCF77 jsem uvedl v kapitole č. 4. Nyní představím praktickou implementaci tohoto signálu a kódování informace, kterou přenáší.
5.1.1. O vysílači Díky vysoké hladině spodních vod v blízkosti řeky Main, kde je vysílač umístěn, jsou zajištěny optimální podmínky pro šíření dlouhých vln. Signál byl v minulosti vysílán starším typem elektronkového vysílače. Od roku 1998 je nahrazen tranzistorovým o stejném výkonu přibližně 50 kW. Předchozí vysílač je plně funkční, jako záložní. Všesměrová anténa tohoto vysílače dosahuje 150 metrů výšky. Výška záložní antény je ještě o 50 metrů vyšší.
9
Kapitola 5. O použitých systémech
5.1.2. Dosah a příjem
Dosah signálu z vysílače je přibližně 1500 km. Díky amplitudové modulaci na dlouhých vlnách je zajištěno dobré šíření signálu i v budovách a méně přístupných prostorách přes přirozené překážky. Nevýhodou je poměrně vysoká citlivost signálu na rušivé vlivy, jako kovové stavební prvky budov, bouřky, spínané zdroje atd.
Obrázek 1. Dosah signálu DCF77
10
5.1. DCF77
5.1.3. Příjímač Pro naši aplikaci jsem vybral hotový přijmač, naladěný na kmitočet 77,5 kHz. Jeho nasazení je velice jednoduché. Po zapojení antény a přivedení napájecího napájení v toleranci 3 až 5 V, začne přijmač přivádět signál na datovou linku, ze které už dle prodlevy mezi hranami obdelníkového signálu čteme, zda se jedná o logickou 0 nebo logickou 1. Přijmač je k zakoupení u britské pobočky společnosti PV Electronics. Obdoba tohoto produktu existuje i pro signál MSF a WWVB na frekvenci 60 kHz. Cena přijmače se pohybuje okolo 320 Kč. Toto zařízení je schopno snášet provozní teploty v rozsahu -20 až 70 ∘ C.
Obrázek 2. Přijímač DCF77 společnosti PV Electronics UK
11
Kapitola 5. O použitých systémech
5.1.4. Struktura signálu Přijmané informace jsou kódovány v BCD. ∙ M - minutová značka (vždy 0), ∙ R - typ antény 0 - normální anténa 1 - náhradní anténa, ∙ A1 - změna CET <=> CEST (oznámena hodinu před) 0 - nenastává změna 1 - změna, ∙ Z1 + Z2 - Časová zóna 01 - CET 10 - CEST, ∙ A2 - přestupná sekunda (oznámena hodinu před) 0 - nenastává změna 1 - změna, ∙ S - počátek kódované časové informace (vždy 1), ∙ P1, P2, P3 - kontrolní bity (sudá parita) ∙ bity č. 21-27 | minuta, ∙ bity č. 29-34 | hodina, ∙ bity č. 36-41 | den, ∙ bity č. 45-49 | měsíc, ∙ bity č. 50-57 | rok
Obrázek 3. Struktura minutového paketu DCF77
12
5.1. DCF77
5.1.5. Dekódování bitů Na datovém vstupu rozpoznáváme každou sekundu logickou 0 nebo logickou 1, dle úrovně nosné vlny aplitudové modulace. Na začátku každé sekundy amplituda nosné vlny poklesne po dobu 100 ms nebo 200 ms na přibližně 25% svého maxima. Každou minutu je potom tento pokles vynechán (nahrazení šedesátého bitu v paketu), čímž je indikován nadcházející nultý bit nového paketu. Zaznamenání synchronizačního bitu může tedy trvat v nejhorším případě až 60 sekund. Samotné čtení paketu potom trvá dalších 59 sekund. Interval doby pro přijetí kompletní informace může tedy nabývat hodnot v intervalu <60 s;119 s>.
Obrázek 4. Struktura amplitudově modulovaného signálu DCF77
Výpis kódu 5.1 Nastavení datového portu a handleru DCF77 InterruptPort port = new InterruptPort((Cpu.Pin)FEZ_Pin.Interrupt.Di0, true, Port.ResistorMode.PullUp, Port.InterruptMode.InterruptEdgeBoth) //param1: fyzický port mikrokontroleru //param2: zapnutí Glitch filtru //param3: zaˇ razení pull-up rezistoru (nutné k vyhodnocování logických hodnot) //param4: reakce interrupt handleru na hranu (vzestupná/sestupná/obˇ e) //pˇ riˇ razení metody k eventhandleru pˇ ríchozí hrany port.OnInterrupt += new NativeEventHandler(m_RadioSignal_OnInterrupt); public void m_RadioSignal_OnInterrupt() { bool actBit = m_RadioSignal.Read(); // po pˇ reˇ ctení hodnoty m˚ užeme nastavit hodiny a sledovat, jak dlouhá prodleva nastane do pˇ ríchodu další hrany, dalšího volání metody m_RadioSignal_OnInterrupt ... }
13
Kapitola 5. O použitých systémech Pro docelení představy o parsování dat uvádím ukázku kódu k dešifrování čísla měsíce, včetně kontroly sudé parity za předpokladu, že již máme naplněné a vyhodnocené celé pole m_DataBits. Výpis kódu 5.2 Dekódování minuty z datového paketu bool isOk = false; int count = 0; for (int i = 21; i <= 28; i++) { bool bit = m_DataBits[i]; if (bit) count++; switch (i) { case 21: if (bit) m_Minute += 1; break; case 22: if (bit) m_Minute += 2; break; case 23: if (bit) m_Minute += 4; break; case 24: if (bit) m_Minute += 8; break; case 25: if (bit) m_Minute += 10; break; case 26: if (bit) m_Minute += 20; break; case 27: if (bit) m_Minute += 40; break; } } OK = count % 2 == 0;
5.1.6. Použití Signál DCF77 se používá v běžně dostupných domácích zařízení, jako jsou meteostanice či hodiny. Z hlediska průmyslu jsou tímto signálem synchronizovány např. dopravní semafory na silničních komunikacích, železniční systémy či energoměry, využívající tento signál ke změně tarifů energie. 14
5.2. CMOS čip TCM8240MD
5.2. CMOS čip TCM8240MD Aby se vyvíjené zařízení dostalo až k úplnému zrození obrazových dat a minimalizovalo se tak zpoždění při přiřazení časové značky, rozohdl jsem se nevyužít kamery jako hotového produktu, nýbrž CMOS čipu. Jako zajímavá alternativa se jevil produkt společnosti Toshiba s typovým označením TCM8240MD, řízený po sběrnici I2C s osmibitovou paralelní datovou linkou. Fyzická velikost tohoto čipu je 10x10x7 mm. Zásadním důvodem výběru, právě tohoto produktu byla pořizovací cena 243 Kč s DPH, při nabídce maximálního rozlišení obrazu 1290x1040px, rychlosti 15 snímků za sekundu (FPS) a možnosti komprese snímků do formátu JPEGu přímo na čipu (avšak pouze pro nejvyšší rozlišení obrazu). Další podporovaná rozlišení jsou: ∙ 4VGA - 1280x960 px, ∙ SXGA - 1280x1024 px, ∙ VGA - 640x480 px, ∙ QVGA - 320x240 px, ∙ QQVGA - 160x120 px, ∙ CIF - 352x288 px, ∙ QCIF - 176x144 px, ∙ SQCIF - 128x96 px
Obrázek 5. CMOS čip Toshiba TCM8240MD
15
Kapitola 5. O použitých systémech
5.2.1. Konstrukce Kamera disponuje 24 konektory po obvodových hranách, což je vzhledem k rozměrům zařízení velká koncentrace pinů. Tělo kamery je plastové a proto je vyžadováno velice opatrné zacházení, především při tepelné manipulaci s čipem.
Obrázek 6. Rozvržení a označení pinů na CMOS čipu
Pin č.
Označení
I/O
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
DOUT3 DOUT2 DOUT1 DOUT0 GND PVDD RESET SCL GND SDA GND DVDD EXTCLK STROBE HBLK VBLK GND IOVDD DCLK GND DOUT7 DOUT6 DOUT5 DOUT4
O O O O I I I I/O I I O O O I O O O O O
Popis Data output Data output Data output Data output (LSB) GND Power supply 2.8+/-0.2V or 2.5+/-0.2V Reset pulse to initialize Clock for I2C bus GND Data for I2C bus GND Power supply 1.6+/-0.1V External clock input Trigger pulse for flash strobe Horizontal data blanking period Vertical data blanking period GND Power supply 2.8+/-0.2V or 2.5+/-0.2V Clock for output data GND Data output (MSB) Data output Data output Data output
Tabulka 1. Popis výstupních kontaktů kamery
16
5.2. CMOS čip TCM8240MD
5.2.2. Bayerův filtr Použitý typ kamery používá k vyhodnocení barvy jednotlivých pixelů snímku Bayerův filtr. Tento filtr má vyhrazen právě jeden jasový snímač pro jeden snímaný pixel. Každý jasový snímač, však zpracovává pouze jednu vybranou barevnou složku palety RGB, proto je k vyhodnocení výsledné barvy konkrétního pixelu obrazu, zapotřebí interpolovat tuto hodnotu s hodnotami úrovně jasu sousedících snímačů s dalšími barevnými kanály palety RGB. Zelená složka (G) je zdvojena, kvůli vyšší citlivosti lidského zraku na tuto barvu. Bayerův filtr je patentem společnosti Eastman Kodak z roku 1976.
Obrázek 7. Bayerův filtr
5.2.3. Registry Aby kamera vracela požadovaná data po paralelní osmibitové sběrnici, je zapotřebí korektně nastavit osmibitové registry kamery. Konkrétní rozpis registrů se nachází v dokumentaci kamery. Bohužel význam hodnot už zdokumentován není. Hodnoty registrů se čtou a nastavují pomocí sběrnice I2C.
17
Kapitola 5. O použitých systémech
5.2.4. Řídící I2C sběrnice Sběrnice I2C se používá pro komunikaci mezi dvěma a více mikroprocesory. V této komunikaci se vždy nachází řídící mikroprocesor označovaný jako Master a ostatní účastníci jako Slave.
Obrázek 8. Příklad zapojení několika Master a Slave zařízení na sběrnici I2C
Vodiče SCL a SDA Komunikace probíhá vždy po dvou vodičích, SCL a SDA na konkrétní sedmibitovou adresu Slave zařízení: ∙ SCL | Vodič SCL je taktovací hodinový signál, který se na základě rychlosti požadované komunikace taktuje v intervalu <100 kHz; 400 kHz>. ∙ SDA | Vodič SDA je datový, po kterém probíhá přenášení dat. V klidovém stavu jsou signály na obou vodičích na úrovni logické 1, také jinak na úrovni HIGH. Přenášení dat probíhá obdobou zápisu do posuvných registrů na základě taktovací frekvence.
Obrázek 9. Nastavení hladin SCL a SDA při přenosu Slave adresy
Rozeznávané informace Po sběrnici se posílají a indikují čtyři druhy informací: ∙ START | SDA přejde z logické 1 na logickou 0, SCL zůstává na úrovni logické 1., ∙ STOP | SDA přejde z logické 0 na logickou 1, SCL zůstává na úrovni logické 1., ∙ DATA | Přivedení 8 bitů na SDA rychlostí taktovací frekvence SCL, první bit je bit s nejvyšší váhou., ∙ ACK | Přijímač potvrdí přijetí každého datového bytu (8 bitů) nízkou úrovní SDA (logická 0) a to do doby, než je zaznamenán devátý hodinový impuls na SCL.
18
5.2. CMOS čip TCM8240MD Dva režimy komunikace Při komunikaci používá sběrnice I2C dva režimy: 1. WRITE | Master oznámí Slave zařízením START a v následující DATA instrukci zašle 7 bitů adresy Slave zařízení pro kterou je určeno - osmý, poslední bit s nejnižší váhou je nastaven na hodnotu 0. Oslovený Slave odpoví ACKem v případě přijetí informace a čeká na další DATA (1 byte) s adresou registru, do kterého se má zapisovat. Po přijetí adresy, Slave odpoví ACKem a očekává 1 až N bytů, které začne zapisovat do registru od uvedené adresy registru. Adresa registru tedy udává počáteční adresu zápisu. Slave po přijetí každého DATA balíčku odpovídá příkazem ACK a očekává další DATA do doby, než Master vyšle příkaz Stop.,
Obrázek 10. Komunikační I2C řetězec pro akci WRITE
2. READ | Instrukce Read začíná instrukcí Write. Nejprve je potřeba nastavit hodnotu registru ze kterého se má číst. Master vyšle příkaz Start, následuje 7 bitů adresy Slave zařízení, pro kterou je příkaz určen + osmý bit obsahující hodnotu 0 (definice příkazu WRITE). Slave odpoví příkazem ACK a očekává byte DATA s adresou registru. Po jeho příjetí opět odpoví Masteru ACKem. Master nyní, však vyšle znovu příkaz START a adresu Slave zařízení, ovšem osmý bit nastaví na hodnotu 1 (definice příkazu READ). Slave odpoví ACKem a po jeho přijetí Master očekává DATA (8 bitů) z daného registru. Přijetí Master potvrzuje ACKem. Pokud Master po potvrzení přijetí ACKem, nevyšle následně instrukci STOP, Slave vrátí DATA z následujícího registru a situace se opakuje.
Obrázek 11. Komunikační I2C řetězec pro akci READ
∙ 0 1 1 1 1 0 1 | Slave adresa kamery TCM8240MD., ∙ 0 1 1 1 1 0 1 0 | Slave adresa kamery, včetně osmého bitu pro zápis., ∙ 0 1 1 1 1 0 1 0 | Slave adresa kamery, včetně osmého bitu pro čtení.,
19
Kapitola 5. O použitých systémech
5.3. Mikrokontroler FEZ PANDA 2 Vývojová deska FEZ Panda 2 od společnosti GHI Electronics je postavená na populárním základu Arduino a je kompatibilní s jeho moduly. Základem Pandy je procesor architektury ARM s taktovací frekvencí 72 MHz. Pro velký objem dat, který bude zpracovávat naše aplikace během krátkého času by se hodila vyšší taktovací frekvence, ovšem k ověření postupů a zprovoznění prototypu nám i tato frekvence a osmibitová architektura dostačuje. Zrychlení hardwaru by obnášelo pouze vyměnu vývojové desky za jinou, např. FEZ Cerb40 s taktovací frekvencí 168 MHz a 32 bitovou architekturou, včetně větší operační paměti. Rozhodnutí pro Pandu z hlediska vývoje padlo především kvůli vlastnění této vývojové desky. Abstrakci nad implementací programu aplikace zajišťuje .NET Micro Framework, na kterém tyto vývojové desky pracují a kód je tak z 90% přenositelný mezi jednotlivými deskami.
Obrázek 12. Pohled na vývojovou desku FEZ Panda 2
5.3.1. Parametry desky FEZ Panda 2 Hlavní parametry ∙ Procesor ARM7, 72MHz, 32-bit ARM7 processor. ∙ Flash 512 KB, (148 KB pro aplikace). ∙ RAM 96 KB RAM (62 KB pro aplikace). ∙ Kompatibilita s Arduino „shieldy“. ∙ USB pro run-time debugging. ∙ Micro SD socket (podpora SDHC) ∙ 54x digitálních I/O portů. ∙ 6x 10 bitových analogových vstupů. ∙ 10-bitový analogový výstup. ∙ 6x hardwarových PWM kanálů. 20
5.3. Mikrokontroler FEZ PANDA 2 ∙ 2x CAN kanály. ∙ 4x UART. ∙ Real Time Clock (RTC). ∙ Přístup k registrům procesoru. ∙ Podpora ethernetu. ∙ Multi-Threading. ∙ Podpora XML. ∙ FAT File System. ∙ Podpora šifrování AES a XTEA. Napájení ∙ Možné přes USB nebo externím stejnosmerným zdrojem 6 - 9 V. ∙ Dostupné napájení 3.3 V a 5.5 V (DC). ∙ Digitální vstupy přijmají logickou jedničku v intervalu <3.3 V; 5 V>. ∙ Odběr proudu 103 mA. ∙ Odběr proudu při nečinnosti 65 mA. ∙ Odběr proudu při hybernaci 3.75 mA. Provozní podmínky ∙ Minimální provozní teplota: -20 ∘ C. ∙ Maximální provozní teplota: 65 ∘ C.
5.3.2. .NET Micro Framework .NET Micro Framework je open-sourcová platforma založená na souboru technologií .NET, aplikovaná do světa embedded aplikací. Tento framework umožňuje efektivní vytváření aplikací na low-endových zařízeních určených pro vestavěné aplikace, jako jsou např. řízení domu, sběr dat, meteostanice, roboti apod. Díky jednoduchému rozhraní je velice snadné zpracovávat logické hodnoty z výstupů periferií, vyhodnocovat je a odpovídat na ně, obdobně jako v naší aplikaci. Tato aplikace je postavena na verzi .NET Micro Frameworku 4.2 .
21
Kapitola 6. Výroba V této části se zabývám popisem výroby navrhnutého autonomního záznamového zařízení.
6.1. Příprava plošných spojů a osazení Protože kamera TCM8240MD se pyšní velice malými rozměry, jsou i její plošky konektorů velice malé. Dokonce tak malé, že mikropájkou by je bez rizika slití kontaktů nebylo možné zapájet. Bylo tedy zapotřebí připravit plošný spoj k osazení, ze kterého bude následně možné vyvést konektory pro připojení k programovatelné vývojové desce. Vzhledem k faktu, že čip vyžaduje dvě hladiny napájecího napětí a ani jedno z požadovaných 2,6 V a 1,6 V není napětí, které lze odebírat z vývojové desky, bylo nutné vytvořit lineární stabilizátory ke snížení napětí z 3,3 nebo 5 V.
Obrázek 13. Kamera osazená na navrhnutém DPS
6.1.1. DPS CMOS čipu Pro aplikaci CMOS čipu bylo nutné navrhnout ve vývojovém prostědí DPS optimální desku plošného spoje k osazení. Po základním oměření kamerky posuvným měřítkem a porovnáním hodnot s dokumentací, vznikl první návrh. Po tisku obrysů 22
6.1. Příprava plošných spojů a osazení navrženého DPS proběhlo porovnání rozměrů s kamerkou přiložením k vytištěným obrysům. Na třetí pokus byl návrh odladěn. Vzhledem k mezerám mezi kontakty menšími, než 1 mm, byla výroba DPS zadána externí společnosti, i z důvodu natažením masky na DPS, což umožňuje mnohem jednodušší a efektivnější zapájení kamerky na DPS. Vzhledem k minimální hranici zakázky na plochu 100x100 mm, jsem nechal DPS vyrobit děvět, vzhledem k rozměru jedné DPS 30x30 mm. Osazení zajistila ujala katedra elektrotechnologie na FEL ČVUT, kdy se s nahřátím spodní části kamery povedlo malé kontakty zapájet bez újmy čipu.
Obrázek 14. Porovnání návrhu DPS kamery a jeho prototypu
6.1.2. Stabilizovaný zdroj 2,6 V; I > 100 mA
Ke stabilizaci napětí na 2,6 V zdroje jsem se rozhodl použít lineární stabilizátor jako integrovaný obvod. Pro toto napětí byl ovšem k dostání bez objednání pouze stabilizátor s maximálním proudovým zatížením 100 mA, stabilizátor 78L02-TO92. Kamera si ovšem dle dokumentace může vyžádat průtok proudu na hranici 150 mA. V případě napájení více vstupů z tohoto stabilizátoru i proud větší. Rozhodl jsem se tedy stabilizátor posílit tranzistorem, který v případě maximálního zatížení stabilizátoru začne přebírat zbylou proudovou zátěž. Jako filtrační kondenzátory byly na vstupu použity kapacity 0,33 𝜇F a na výstupu 0,1 𝜇F. Odpor R1 byl vypočítán na základě vzorce:
𝑅1 =
𝑉𝐵𝐸𝑄1 𝐼𝑅𝐸𝑄 − 𝐼𝑄1 · 𝛽𝑄1 23
Kapitola 6. Výroba
Obrázek 15. Schéma návrhu výkonového stabilizátoru do 800 mA
Po dosazení dat z dokumentace tranzistoru BC327 (PNP) do vzorce, byl zvolen rezistor R1 o odporu 12 Ω. Stabilizátor jsem před nasazením proudově testoval. Jako kritické se zdály být následující proudové hodnoty - 100 mA, kdy dochází k otevírání tranzistoru a přechodu proudové zodpovědnosti právě na tranzistor. Další hodnotu jsem zvolil 250 mA, kdy by měl obvod udržovat stále nápetí 2.6 V bez omezení. Zátěž, kterou pro tyto dvě proudové hodnoty musím zatížit výstup obvodu jsem spočítal Ohmovým zákonem I = U/R . Jako vhodné testovací zátěže se tedy zdály rezistory s odporem 26 Ω (I = 100 mA) a 10,4 Ω (I = 250 mA). Test potvrdil, že integrovaný obvod napěťově neomezuje výstup, na kterém se nachází stabilně napětí 2,6 V. Napájecí napětí stabilizátoru bylo 5 V z vývojové desky FEZ Panda 2.
Obrázek 16. Výroba stabilizovaného zdroje 2,6 V
Po dokončení stabilizátoru jsem otestoval zatížení odporem samotného integrovaného obvodu 78L02-TO92. Při průchodu proudu přes 100 mA začalo docházet k napěťovému omezení. Výstupní napětí kleslo až pod hladinu 2 V. 24
6.1. Příprava plošných spojů a osazení
6.1.3. Stabilizovaný zdroj 1,6 V; I > 100 mA Stabilizátor na výstupní napětí 1,6 V měl být takřka totožný s předchozím. Bohužel integrovaný obvod s těmito parametry není v ČR běžně skladem. Jeho provedení je navíc pouze pro povrchovou montáž (SMD). Momentálně je tedy stabilizátor APEC APE8865Y5-16-HF-3TR na cestě. K testování bylo jako náhradní řešení zvoleno použití laboratorního zdroje.
25
Kapitola 7. Implementace V této části se zabývám popisem výroby navrhnutého autonomního záznamového zařízení.
7.1. DCF77 ovladač V implementační části jsem si připravil třídu DCF77 pro příjem a dekódování frankfurstkého signálu. Požadavky na třídu byly, aby při založení její instance byl předán v konstruktoru port vývojové desky, na který třída pověsí handler události OnInterrupt, poslouchající na náběžnou i sestupnou hranu (tato vlastnost se nastavuje při inicializaci jako parametr instance InterruptPort). Výpis kódu 7.1 DCF77 - konstruktor public DCF77(InterruptPort port) { m_RadioSignal = port; m_RadioSignal.OnInterrupt += new NativeEventHandler( m_RadioSignal_OnInterrupt); m_BitCounter = -1; m_DataBits = new bool[60]; for (int i = 0; i < 60; i++) { m_DataBits[i] = false; } }
V tomto konstruktoru je předán port, na kterém zařízení kontroluje změnu úrovně signálu pomocí handleru. V případě zaznamenání změny úrovně signálu je volána metoda m_RadioSignal_OnInterrupt(). Dříve definovaná proměnná m_BitCounter je nastavena na -1. Tato proměnná udává počet přijatých bitů v každém z minutových cyklů. Zůstává na hodnotě -1 do přijetí synchronozační značky. Prvky pole m_DataBits jsou nasetovány na výchozí hodnotu false. 26
7.1. DCF77 ovladač
Výpis kódu 7.2 DCF77 - vyhodnocení úrovně signálu public void m_RadioSignal_OnInterrupt(uint port, uint state, DateTime time) { if (m_RadioSignal.Read()) { m_HighTime = time; Program.LED.Write(true); TimeSpan span = m_HighTime - m_LowTime; if (span > new TimeSpan(0, 0, 1)) { Debug.Print("DCF77 synchronization mark in " + DateTime. Now.ToString()); if (m_BitCounter != 59) { m_BitCounter = 0; } } } else { m_LowTime = time; Program.LED.Write(false); TimeSpan span = m_LowTime - m_HighTime; Debug.Print("m_BitCounter: " + m_BitCounter); if (m_BitCounter == 59) { if (m_Synchronize && !m_DataBits[0] && m_DataBits[20] && DecodeTime() && DecodeDate()) { try { DateTime now; now = new DateTime(m_Year, m_Month, m_Day, m_Hour, m_Minute, 0); now = now.AddHours(-m_UtcDiferences); //m_Synchronize = false; Debug.Print("Synchro OLD " + DateTime.Now. ToString("dd.MM.yyyy HH:mm:ss.sss")); Debug.Print("Synchro UTC " + now.ToString("dd.MM .yyyy HH:mm:ss.sss")); Utility.SetLocalTime(now); Program.StartCamera(); m_Synchronize = false; } catch (Exception e)
27
Kapitola 7. Implementace
{ Debug.Print("Exception caught during time synchronization: " + e.Message); } } m_BitCounter = 0; } if (m_BitCounter >= 0) { if (m_BitCounter < 60) { if (span.Ticks > 1500000) { m_DataBits[m_BitCounter] = true; } else { m_DataBits[m_BitCounter] = false; } ++m_BitCounter; } } } }
Metoda m_RadioSignal.Read() vrátí logickou hodnotu, odpovídající znegované úrovni signálu na vstupu poslouchaného portu v době vyvolání události - změny. Pokud se jedná o ukončení úrovně HIGH, tj. signál přesel do úrovně LOW, zaznamenáme si do pomocné proměnné m_HighTime čas události a rozsvítíme pomocnou indikační SMD LED na vývojové desce. Nyní si spočítáme rozdíl času posledního náběhu hrany na úroveň HIGH (m_LowTime) od poslední změny na LOW (m_HighTime). Pokud je tento rozdíl větší, než 1 sekunda, víme, že jsme obdrželi synchronizační značku DCF77 a můžeme začít zapisovat data od nultého bitu dále. Při
následující
události
OnInterrupt
obdržíme
návratovou
hodnotu
m_RadioSignal.Read() false. Přejdeme tedy do druhé části podmínky, kde si zaznamenáme čas náběhu hrany na HIGH do proměnné m_LowTime. Přeskočíme první podmínku, protože přečtení 59 bitů jsme ještě nedosáhli, momentálně máme m_BitCounter roven nule. Skočíme tedy do druhé podmínky a zároveň vnitřní podmínky pro m_BitCounter < 60 (z důvodu růšení signálu, kdy může během sekundy přijít i více, než 10 změn hrany). Ze spočítaného rozdílu m_LowTimem_HighTime jsme zjistili dobu trvání snížené úrovně amplitudy nosné vlny. Pokud byla větší, než 0,15 sekundy, zapíšeme přijatý byt jako logickou jedničku. Pokud této podmínce nevyhový, nastavíme jej na logickou nulu. Dle dokumentace logická nula odpovídá prodlevě 0,1 sekundy a logická jednička prodlevě 0,2 sekundy. Po28
7.1. DCF77 ovladač rovnání doby trvání poklesu amplitudy vůči času 0,15 sekundy se tak jeví jako optimální ze statistického hlediska. Na závěr navýšíme počítadlo m_BitCounter o jedničku, které nyní bude ukazovat na pozici následujícího přijímaného bitu. Ve chvíli, kdy dostáváme vzestupnou hranu signálu a zároveň jsme již přijali všech 58 bitů (m_BitCounter == 59), zahájíme dekódování přijatých informací. Pro zahájení dekódování musí být nastavena proměnná m_Synchronize na logickou hodnotu 1 (implicitně 0). Nastavení v našem programu probíhá zmáčknutím harwarového tlačítka na vývojové desce FEZ Panda 2. Dále již probíhá kontrola korektnosti přijatých informací. Nultý bit musí zůstat nastavený na logickou 0 a bit číslo 20 na logickou 1 (viz. popis struktury dat 5.1.4). Pokud jsou tyto podmínky splněny, zahájíme samotné dekódování. Výpis kódu 7.3 DCF77 - dekódování času a časové zóny private bool DecodeTime() { Debug.Print("Decoding time..."); m_Minute = 0; m_Hour = 0; m_UtcDiferences = 0; // Decode minutes bool OK = true; if (OK) { // Check parity int count = 0; for (int i = 21; i <= 28; i++) { bool bit = m_DataBits[i]; if (bit) count++; switch (i) { case 21: if (bit) m_Minute += 1; break; case 22: if (bit) m_Minute += 2; break; case 23: if (bit) m_Minute += 4; break; case 24: if (bit) m_Minute += 8; break; case 25: if (bit) m_Minute += 10; break;
29
Kapitola 7. Implementace
case 26: if (bit) m_Minute += 20; break; case 27: if (bit) m_Minute += 40; break; } } OK = count % 2 == 0; Debug.Print("Decode minutes: " + OK.ToString()); } // Decode hour if (OK) { // Check parity int count = 0; for (int i = 29; i <= 35; i++) { bool bit = m_DataBits[i]; if (bit) count++; switch (i) { case 29: if (bit) m_Hour += 1; break; case 30: if (bit) m_Hour += 2; break; case 31: if (bit) m_Hour += 4; break; case 32: if (bit) m_Hour += 8; break; case 33: if (bit) m_Hour += 10; break; case 34: if (bit) m_Hour += 20; break; } } OK = count % 2 == 0; Debug.Print("Decode hours: " + OK.ToString()); } // Decode CET&CEST
30
7.2. I2C ovladač
if (OK) { if (m_DataBits[18]) m_UtcDiferences = 1; if (m_DataBits[17]) m_UtcDiferences = 2; OK = (m_DataBits[17] != m_DataBits[18]); Debug.Print("Decode timezone: " + OK.ToString()); } return OK; }
Hodnoty času jsou ukládány do instančních proměnných. V posledním bloku kódu je nastavována korekce dekódovaného času vůči UTC. Pokud dekódování času i datumu proběhne v pořádku (kontrola sudé parity), program spustí kód uvnitř podmínky z výpisu kódu 7.2 ?? obalené v try-catch bloku, kde se vytvoří se instance třídy DateTime, nastavená na hodnotu dekódovaných dat. Tato instance se zkoriguje o odečtení hodnoty z proměnné m_UtcDiferences. Tento čas se potom přiřadí statickou metodou SetLocalTime() z třídy Utility mikrokontroleru jako aktuální. V tento moment je hodnota m_Synchronize nastavena na logickou nulu. Další synchronizaci je tedy nutné opět vyvolat hardwarovým tlačítkem na vývojové desce. Zároveň je zavolána statická metoda hlavní třídy Program, metoda StartCamera(), která spustí příjem obrazu z kamery. Jako
základ
třídy
DCF77
byl
použit
kód
z
knihovny
GHIElectronics.NETMF.Hardware;
7.2. I2C ovladač Vývojová deska FEZ Panda 2 má v sobě hardwarovou podporu pro I2C. Během testování se mi, však tento vestavěný ovladač/třída neosvědčila a to především při debugování, kdy byla nedostatečně analyzovatelná odpověď Slave zařízení (ACK). Vytvořil jsem tedy vlastní softwarový ovladač I2Cdriver, který přesně odpovídá krokům v komunikaci sběrnice I2C. Jako základ jsem použil softwarový I2C ovladač, dostupný z http://www.ghielectronics.com/community/ codeshare/entry/236
7.2.1. Metody řízení SCL a SDA Seznam následujících funkcí je nejnižší úrovní nastavující signál na vodičích SCL a SDA sběrnice I2C. Za pomocí těchto metod je sestavován požadavek na START, STOP i DATA. – void ClearSCL() | Nastaví SCL do klidového stavu (logická 1)., 31
Kapitola 7. Implementace – void ClearSDA() | Nastaví SCL do klidového stavu (logická 1)., – bool ReadSCL() | Nastaví SCL do stavu akce (logická 0) a vrátí logickou hodnotu stavu SCL., – bool ReadSDA() | Nastaví SDA do stavu akce (logická 0) a vrátí logickou hodnotu stavu SDA., – bool ReadBit() | Volá ReadSCL(), zavede timeout, zkontroluje odezvu, přečte hodnotu na SDA, zavede timeout, zavolá ClearSCL() a vrátí logickou hodnotu z SDA.
7.2.2. Metody pro tvoření paketu Střední úrovní našeho ovladače jsou metody Transmit a Receive, které již používají metody pro vytvoření instrukcí START, STOP, kombinující uvedené metody nejnižší úrovně, které tyto metody používají i samostatně. – bool Transmit(bool sendStartCondition, bool sendStopCondition, byte byteToSend), – byte Receive(bool sendAcknowledgeBit, bool sendStopCondition)
7.2.3. Metody kompletního komunikačního řetězce Za pomoci předchozích dvou dílčích metod, již dokážeme sestavit celý komunikační řetěz pro komunikaci WRITE i READ, uvedený v 5.2.4 . Řetězec komunikaci pro instrukci WRITE by tedy vypadal následovně: *následující
kód
předpokládá
existenci
statické
proměnné
typu
byte Program.CameraAddressWrite a Program.CameraAddressRead s kompletní Slave adresou včetně osmého bitu jako příznaku pro čtení nebo zápis Výpis kódu 7.4 I2Cdriver - sestavení instrukce WRITE public string Write(byte address, byte data) { bool tr1 = Transmit(true, false, Program.CameraAddressWrite); bool tr2 = Transmit(false, false, address); bool tr3 = Transmit(false, true, data);
if(!tr1&&!tr2&&!tr3) return "Write " + data.ToString() + " to address " + address .ToString(); else return "Write is interrupted"; }
Při pohledu na implementaci metody by měl být význam zasílaných zpráv a příznaků metodou Transmit, v korespondenci se komunikačním řetězcem z 5.2.4, zcela zřejmý. Obdobou je potom sestavení instrukce komunikačního řetězce pro čtení. 32
7.3. Program
Výpis kódu 7.5 I2Cdriver - sestavení instrukce READ public string Read(byte address) { bool tr1 = Transmit(true, false, Program.CameraAddressWrite); bool tr2 = Transmit(false, false, address); bool tr3 = Transmit(true, false, Program.CameraAddressRead); byte data = Receive(true, true); if (!tr1 && !tr2 && !tr3) return "Receive data: " + data.ToString(); else return "Read is interrupted"; }
7.3. Program Název této třídy „Program“ je vyžádaný kompilátorem vývojové desky FEZ Panda 2. Je to výchozí inicializovaná třída. V této třídě kromě inicializace předchozích ovladačů zavádím metody pro inicializaci registrů CMOS čipu do požadovaného stavu. Zároveň v této třídě je zaveden handler na zmáčknutí hardwarového tlačítka mikrokontroleru, reagující na sestupnou hranu. Zmáčknutí tohoto tlačítka nastaví instanci DCF77 proměnou m_Synchronize na logickou 1, čímž je povolena synchronizace.
33
Kapitola 8. Testování V závěrečné fázi práce se věnuji testování a ověření všech doposud předvídaných nebo zjištěných faktů.
8.1. Zapojení K zapojování elektronických součástí jsem si vytvořil propojovací kabely s vyvedenými konci na pin lišty, které jsem podle potřeby upravoval, separoval a spojoval. Vývojová deska je má výstupy také osazeny pin lištami, celá soustava je tedy kompatibilní.
Obrázek 17. Pohled na kompletní prototyp připravený k testování
34
8.2. Nastavení provozního režimu kamery
8.1.1. Stabilizátor Stabilizátor 2,6 V jsem připojil na napájecí výstup vývojové desky FEZ Panda 2 s napěťovou hladinou 5V a společnou zemí. Zemění ostatních součástí bude společné přes tento stabilizátor.
8.1.2. Kamera Z výstupů kamery jsem jako první uzemnil všechny kontakty označené jako GND. Jako další jsem zapojil vstupy IOVDD a PVDD na stabilizované napětí 2,6 V. Pro napájení vstupu DVDD napětím 1,6 V jsem použil laboratorní zdroj. Po vyrobení stabilizátoru bude zapojení obdobné, jako se stabilizátorem na 2,6 V.
8.1.3. DCF77 Destičku plošného spoje jsem dle dokumentace zapojil vstupem Vdd na kladný pól stejnosměrného napětí 5V vývojové desky FEZ Panda 2. Výstup GND jsem přivedl na společnou zem. Datový vodič Tcon jsem připojil na port vývojové desky Di3. Po připojení antény začala vestavěná SMD LED indikovat příjem demodulovaného signálu.
8.2. Nastavení provozního režimu kamery Vzhledem k návrhu řešení, jsme pro naše testování vybrali režim kamery s maximálním rozlišením SXGA a JPEG kompresí přímo v čipu. Pro takové nastavení kamery musíme upravit hodnoty následujících registrů kamery, k čemuž použijeme náš ovladač I2Cdriver, popsaný v kapitole 7.2: *pozor, pokud nejsou na čip přivedeny externí taktovací hodiny EXTCLK o frekvenci 6 - 20 MHz dle zvoleného módu obrazu, kamera se nachází ve stand-by režimu, což znamená, že sběrnice I2C se ohlásí po startu a adresování ACKem, ovšem ignoruje jakoukoliv další instrukci! – Adresa 0x04 | DOUTOFF (bit 0) | implicitně 0x01 hodnota 0x00 : Data Out hodnota 0x01 : Data Stop, – Adresa 0x04 | PICMODE (bity 4 a 5) | implicitně 0x00 hodnota 0x00 : 4VGA(1280x960) hodnota 0x01 : SXGA (1280x1024), – Adresa 0x04 | PICSIZE (bity 2 až 0) | implicitně 0x00 hodnota 0x00 : 4VGA or SXGA hodnota 0x01 : VGA hodnota 0x02 : QVGA hodnota 0x03 : QQVGA hodnota 0x04 : CIF 35
Kapitola 8. Testování hodnota 0x05 : QCIF hodnota 0x06 : SQCIF, – Adresa 0x0E (bity 7 až 0) hodnoty B0 / AB / AC reference Full / QVGA / VGA,QQVGA,SQCIF,CIF,QCIF, – Adresa 0x11 (bity 7 až 0) hodnoty 6A / 4A / 4A reference Full / QVGA / VGA,QQVGA,SQCIF,CIF,QCIF, – Adresa 0x14 (bity 7 až 0) hodnoty 33 / 34 / 33 reference Full / QVGA / VGA,QQVGA,SQCIF,CIF,QCIF
Obrázek 18. CMOS čip TCM8240MD s konektory
36
8.3. Ověření funkčnosti synchronizace
8.3. Ověření funkčnosti synchronizace Po zapnutí zařízení začíná DCF77 přijímat signál. V debuggovacím režimu vývojé desky sleduji na konzoli díky výpisům postup synchronizace: 1. Čekání na synchronizační značku. 2. Přijetí synchronizační značky a zpracovávání 58 bitů. 3. Přečtení synchronizační značky a dekódování bufferovaných informací. 4. Nastavení přijatého data a času jako lokálního v zařízení, porovnání s datem před synchronizací. Pozorováním a zápisem výstupů bylo ověřeno, že v případě dobrého příjmu zařízení se synchronizace opakuje pravidelně po 60 sekundách, v případě nastavení proměnné m_Synchronize na logickou 1. Ověření funkce bylo úspěšné.
Obrázek 19. Testování příjmu a funkce DCF77
37
Kapitola 8. Testování
8.4. Ověření příjmu obrazových dat Z časových důvodů neproběhlo sestavení finálního obrazu z čipu, nýbrž pouze ověření, že tyto data se skutečně objevují na výstupu paralelní datové osmibitové sběrnice a že k těmto datům dokážeme přiřadit časové razítko. Počátek framu indikuje vzestupná hrana VBLK, která je na úrovni logické 1 po celou dobu trvání framu. Za tuto dobu nastane osm vzestupných hran na vodiči HBLK. Logická úroveň 1 na vodiči HBLK indikuje přítomnost dat na výstupech čipu DOUT0DOUT7. Zachycením všech 7 vysokých úrovní HBLK během jednoho framu jsem dokázal, že kamera je funkční a na výstup produkuje správná data. Režim SXGA a 4VGA ovšem vyžaduje taktovací frekvenci EXTCLK 20 MHz. Bohužel se mi nepodařilo sehnat signálový generátor obdelníkového průběhu o této frekvenci s trváním nástupu a sestupu hrany do 5 ns (jak vyžaduje dokumentace čipu), proto byl tento režim testován na frekvenci 10 MHz, kde bylo možné dokázat funkci, ale data reálně nebylo možné vyhodnotit do obrazu. Taktovací frekvence 20 MHz by mělo být schopné dosáhnout i implementací PWM na vývojové desce FEZ Panda 2. K tomuto kroku jsem se bohužel z časových důvodů, již nestihl dostat.
Obrázek 20. Logické úrovně VBLK, HBLK a DOUT0-DOUT7 při příjmu obrazových dat s kompresí JPEG
38
8.5. Přiřazení časové značky snímku
8.5. Přiřazení časové značky snímku Při zjištění vzestupné hrany VBLK (počátek framu) si zaznamenáme přesný čas. Při sestupné hraně si opět zaznamenáme čas této události. Časové značky zprůměrujeme a dostaneme reálné časové razítko získaného framu. V praxi bychom toto časové razítko přilepili do datové části JPEGu metadat, ovšem nikoliv do standardního data vytvoření souboru v ITPC či EXIF profilu, ale do položky Popis v ITPC profilu, kde můžeme uvést časové razítko s přesností na tisíciny sekundy, které jsme schopni naším zařízením dosáhnout.
Výpis kódu 8.1 Obraz - vyhodnocení časové značky static void VBLK_OnInterrupt(uint port, bool state, DateTime time) { if (!state) { VBLKstart = DateTime.Now; Debug.Print("START OF FRAME"); LED.Write(true); } else { VBLKend = DateTime.Now; Debug.Print("END OF FRAME | Timestamp: " + AverageDateTime( new DateTime[] {VBLKstart,VBLKend}).ToString("yyyy-MM-dd HH:mm:ss.sss")); LED.Write(false); } }
8.6. Důkaz synchronosti mezi více zařízeními Vzhledem k faktu, že prototyp jsem vyrobil pouze jeden, nemohu zařízení porovnat vedle sebe, zda by přiřazovali stejná časová razítka framům se stejným pořadím vytvoření od synchronizace zařízení se signálem DCF77. Podle teorie by zpracování framu mělo trvat na obou nezávislých zařízeních stejně dlouho. Vzhledem k faktu, že počáteční impuls ke generování obrazu dostávají obě zařízení ve stejný okamžik, dá se taková soustava považovat za synchronní s tolerancí v setinách sekund na každý frame. Tato tolerance se bude snižovat se vzrůstající hodnotou snímkování za sekundu, která je nyní 15. Produkt této bakalářské práce tedy dosáhl tolerance synchronosti 0.066 sekundy na frame (při 15 fps). 39
Kapitola 8. Testování
8.7. Testování vlivů rušení Během testování jsem objevil náchylnost antény příjmače DCF77 na rušení, především od osobních počítačů. Od zařízení vyzařující tyto vysoké frekvence je proto potřeba mít anténu ve vzdálenosti, alespoň dva metry. S ostatními omezeními, způsobenými rušením cizími signály jsem se nesetkal.
Obrázek 21. Bezpečná vzdálenost při testování - obrana proti rušení
40
Kapitola 9. Závěr Cílém této bakalářské práce bylo prozkoumat dnešní řešení synchronizace videozáznamů. Touto částí tématu se zaobírala první část práce, na kterou navazoval návrh vlastního řešení. Ve třetí části byla pozornost věnována výrobě prototypu autonomního záznamového zařízení, jehož hlavní náplní je nezávislá časová synchronizace s UTC tak, aby zařízení bylo schopno přiřazovat časové značky pořízeným snímkům z obrazového čipu. Práce se ve své finální části často ubírala cestou pokusů a bádání, vzhledem k nedostatečné dokumentaci CMOS čipu TCM8240MD výrobce Toshiba, což vývoj prototypu poměrně zbrzdilo. I přes tento fakt se, ale podařilo sestavit funkční prototyp záznamového zařízení. Řídící logika zařízení pro synchronizaci a vyhodnocení dat je připravena k nasazení do produkčního prostředí, nezávisle na zvoleném kamerovém čipu, který je možné zaměnit za čip jiných parametrů a doimplementovat pouze jeho řízení a příjem dat. V případě nárůstu datového toku je možné zrychlit řídící mikrokontroler výměnou za rychlejší a přizpůsobit se tak lepšímu CMOS čipu, s vyšším snímkováním obrazu za sekundu nebo vyšším rozlišením. Celkový stav práce považuji za úspěšný, i přes to, že nasazení kamery do akce ještě nějaký čas potrvá.
9.1. Parametry prototypu – Tolerance časové značky snímku: 0,066 sekundy – Nejkratší možná doba synchronizace od inicializace mikrokontroleru: 60 sekund – Nejdelší možná doba synchronizace od inicializace mikrokontroleru: 119 sekund – Maximální rozlišení snímku: 1280x1024 px – Maximální počet snímků za sekundu: 15 – Napájecí napětí zařízení: 6 - 9 V nebo přes USB
41
Příloha A. Obsah přiloženého CD A.1. Toshiba TCM8240MD - datasheet A.2. Toshiba TCM8240MD - appsheet A.3. DCF77 receiver - datasheet A.4. CTU FEL - SynchroCamera - projekt Visual Studio 2012 A.5. Bakalářská práce v elektronické podobě
42
Literatura [1] Historické hodiny s digitrony řízené signálem DCF77. Jakub Rollinek [online]. 2011 cit. [2013-05-27]. Dostupné z: https://dspace.vutbr.cz/ bitstream/handle/11012/778/BBCE_Rollinek.pdf [2] Vysílání časového signálu a DCF77. HW.cz [online]. 2002 cit. [2002-0301]. Dostupné z: http://www.hw.cz/teorie-a-praxe/dokumentace/ vysilani-casoveho-signalu-a-dcf77.html [3] MSF Radio Time Signal. NPL [online]. 2013 cit. [2013-02-21]. Dostupné z: http://www.npl.co.uk/science-technology/time-frequency/ time/products-and-services/msf-radio-time-signal [4] WWVB. Wikipedia: the free encyclopedia [online]. 2013 cit. [2013-05-13]. Dostupné z: http://en.wikipedia.org/wiki/WWVB [5] Sběrnice I2C, o co jde a jak pracuje. DH servis [online]. 2013 cit. [2013-05-24]. Dostupné z: http://www.dhservis.cz/iic.htm [6] Genlock. Wikipedia: the free encyclopedia [online]. 2013 cit. [2013-03-22]. Dostupné z: http://en.wikipedia.org/wiki/Genlock [7] Bayer filter. Wikipedia: the free encyclopedia [online]. 2013 cit. [2013-05-23]. Dostupné z: http://en.wikipedia.org/wiki/Bayer_filter
43
Seznam obrázků 1.
Dosah signálu DCF77 . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.
Přijímač DCF77 společnosti PV Electronics UK . . . . . . . . . . .
11
3.
Struktura minutového paketu DCF77 . . . . . . . . . . . . . . . . .
12
4.
Struktura amplitudově modulovaného signálu DCF77 . . . . . . . .
13
5.
CMOS čip Toshiba TCM8240MD . . . . . . . . . . . . . . . . . . .
15
6.
Rozvržení a označení pinů na CMOS čipu . . . . . . . . . . . . . .
16
7.
Bayerův filtr
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
8.
Příklad zapojení několika Master a Slave zařízení na sběrnici I2C .
18
9.
Nastavení hladin SCL a SDA při přenosu Slave adresy . . . . . . .
18
10.
Komunikační I2C řetězec pro akci WRITE . . . . . . . . . . . . . .
19
11.
Komunikační I2C řetězec pro akci READ . . . . . . . . . . . . . .
19
12.
Pohled na vývojovou desku FEZ Panda 2 . . . . . . . . . . . . . .
20
13.
Kamera osazená na navrhnutém DPS
. . . . . . . . . . . . . . . .
22
14.
Porovnání návrhu DPS kamery a jeho prototypu . . . . . . . . . .
23
15.
Schéma návrhu výkonového stabilizátoru do 800 mA . . . . . . . .
24
16.
Výroba stabilizovaného zdroje 2,6 V . . . . . . . . . . . . . . . . .
24
17.
Pohled na kompletní prototyp připravený k testování . . . . . . . .
34
18.
CMOS čip TCM8240MD s konektory . . . . . . . . . . . . . . . . .
36
19.
Testování příjmu a funkce DCF77 . . . . . . . . . . . . . . . . . . .
37
20.
Logické úrovně VBLK, HBLK a DOUT0-DOUT7 při příjmu obra-
21.
44
zových dat s kompresí JPEG . . . . . . . . . . . . . . . . . . . . .
38
Bezpečná vzdálenost při testování - obrana proti rušení . . . . . .
40
Seznam výpisů kódu 5.1. Nastavení datového portu a handleru DCF77 . . . . . . . . . . . .
13
5.2. Dekódování minuty z datového paketu . . . . . . . . . . . . . . . .
14
7.1. DCF77 - konstruktor . . . . . . . . . . . . . . . . . . . . . . . . . .
26
7.2. DCF77 - vyhodnocení úrovně signálu . . . . . . . . . . . . . . . . .
27
7.3. DCF77 - dekódování času a časové zóny . . . . . . . . . . . . . . .
29
7.4. I2Cdriver - sestavení instrukce WRITE . . . . . . . . . . . . . . . .
32
7.5. I2Cdriver - sestavení instrukce READ . . . . . . . . . . . . . . . .
33
8.1. Obraz - vyhodnocení časové značky . . . . . . . . . . . . . . . . . .
39
45
Seznam tabulek 1.
46
Popis výstupních kontaktů kamery . . . . . . . . . . . . . . . . . .
16