Kameře na letounu bylo věnováno několik málo řádků v předchozím
příspěvku. Touto problematikou se dále zabývám a tak bych rád doplnil několik
dalších informací.
Nejprve upřesním samotné zapojení kamery. Parametry modulu
jsou nastavovány pomocí registrů dostupných po I2C sběrnici, tou je možné pouze
kameru inicializovat (v požadovaném nastaví). Samotnou obrazovou informaci
zprostředkovává 8 datových pinů a 4 řídící.
Pro chod kamery je nezbytně nutné připojení hodin (EXTCLK),
které určují „frame rate“ ale současně musí
být aktivní i při inicializaci kamery! V případě, že odešleme kameře
požadavek na nastavení registru s absencí hodinového signálu, modul
potvrdí (potvrzením je myšleno nastavení ACK bitu do „0“) pouze svojí adresu (0x3C)
a adresu registru a tudíž i hodnotu, kterou chceme zapsat, nepotvrdí. Zbylé 3 řídící piny jsou výstupní a jedná se o hodinový
výstup (DCLK), jehož frekvence je poloviční oproti EXTCLK a s náběžnou hranou
pulzu se čte byte z DOUT0-DOUT7 (neplatí pro každý pulz)
Další dva výstupy (HD, VD) slouží jako příznaky nového řádku
a nového obrázku. Frame rate, se tedy odvíjí od frekvence hodinového signálu.
Při testování bylo nastaveno EXTCL na 15MHz, což po
připojení sondy osciloskopu způsobilo značné rušení I2C sběrnice, stačilo i
připojení drátku s délkou jednotek centimetrů a data na I2C byla rušena.
Tuto skutečnost píši jako varování pro ty, co ve svých aplikacích s tímto modulem
budou navrhovat DPS.
STM32F103, ke kterému je kamera připojena má za úkol čtení
obrazových dat, ale i jeho zpracování do podoby vektoru pohybu obrazu. Použití
MCU nemá periferii pro připojení kamery, a aby stihl data přečíst i zpracovat,
je třeba tyto data načítat pomocí DMA, které poskytne čas, pro zpracování.
DMA tedy „Direct Memory Access“ nám dovoluje přímý přístup
do paměti z paměti, nebo nějaké periferie (a opačně) bez interakce
samotného výkonného jádra procesoru. Samotný přenos dat je trigrován například
těmito periferiemi:
Přenos bohužel nelze
trigrovat externím přerušením, proto je zatím myšlenka triigeru postavena na
timeru (TIM1_CH1 – připojený na DCLK), ten by měl pracovat v režimu input capture
mode. V tomto režimu je pin timeru nastaven jako vstup, který dovoluje vyvolání
přerušení či DMA request.