Produkty Novinky Články Návody Kontakty

Realizace

Na obrázku 1.9 jsou zobrazeny součástky, které budeme potřebovat (viz tabulka 1.4). Nejprve umístíme a zapájíme samotné součástky. Začneme integrovaným obvodem U1, který umístíme vpravo od konektoru P1 kousek pod vodičem napájení (přesné umístění viz obrázek 1.10) a zapájíme jej.
Značka Ks Název Objednací kód Cena/ks
R1 - R4 4 Rezistor 2k2, 5%, 0.125W GES05301139 1,95 Kč
D1 - D4 4 LED 3mm, rudá, 2mA GES05100498 1,50 Kč
U1 1 74HCT573 (8bit D-latch, budič sběrnice) GES05000438 6,90 Kč
Tabulka 1.4 4x LED - seznam součástek
Pak umístíme LED diody D1 - D4 seříznutou stranou k integrovanému obvodu tak, aby mezi diodami zůstal vždy jeden pin integrovaného obvodu volný (jinak by se nám tam LED diody stejně nevešly), a zapájíme je. Odpory R1 - R4 umístíme tak, aby jeden jejich vývod byl už přímo spojen s napájením a druhý byl hned u vývodu příslušné LED diody. Odpory zapájíme. Spoje mezi diodami a odpory vytvoříme přidáním většího množství cínu mezi pájecí plošky s vývody diod a odporů. Stejně vytvoříme i spoje mezi katodou každé diody a příslušným pinem integrovaného obvodu. Přesné umístění součástek a referenční výsledek naší snahy je vidět na obrázku 1.10.
obrázek hwkit-4xled-soucastky
Obrázek 1.9 4x LED - obsah nákupního košíku
obrázek hwkit-4xled-pajeni-soucastek
Obrázek 1.10 4x LED - pájení součástek
V dalším kroku začneme přidávat spoje mezi součástkami. Jako první zapájíme drátky, které spojují piny integrovaného obvodu U1 s vodiči datové sběrnice. Drátky budou končit jednu dírku před pinem integrovaného spoje. Důvod bude zřejmý v dalším kroku.
Potom spojíme tyto drátky s piny integrovaného obvodu U1. Použijeme stejnou metodu jako při spojování pinů odporové sítě s konektorem P1 - odizolujeme si kus drátku, přípájíme jej k pinu integrovaného obvodu, pak jej připájíme k drátku spojujícím integrovaný obvod s datovou sběrnicí a nakonec jej štípacími kleštěmi zakrátíme (viz obrázek 1.11). Podobným způsobem protáhneme i datovou sběrnici dál od pinů odporové sítě RN1 k druhým koncům drátků vedoucím od pinů integrovaného obvodu U1. Delší drátky datové sběrnice navíc pro jistotu přípájíme přibližně uprostřed jejich délky. Zafixujeme tak holé vodiče v jejich poloze. Tím zabráníme jejich možnému nechtěnému zkratování při manipulaci s HW přípravkem.
Dále propojíme pin 11 (/LE) integrovaného obvodu U1 s vodičem, resp. signálem Init řídící sběrnice (zelený drátek na obrázku 1.11). Pomocí drátku na straně spojů pak tento pin připojíme na vývod konektoru P1 na plošném spoji.
obrázek hwkit-4xled-pajeni-spoju
Obrázek 1.11 4x LED - pájení spojů
Nakonec připájíme drátky přivádějící napájecí napětí a zem na piny integrovaného obvodu U1. Na obrázku 1.11 je vidět provedení trěchto spojů. Napájecí napětí je oranžovým drátkem přivedeno na pin 20 integrovaného obvodu, zem pak modrým drátkem na pin 1 (/OE). Zem je dále spojkou přivedena i na pin 10 (GND) integrovaného obvodu U1. To kvůli tomuto spoji musely vodiče datové sběrnice končit jednu dírku před samotným integrovaným obvodem.

Oživení

Nejprve vizuálně zkontrolujeme provedení všech spojů. Zvláště se zaměříme na zkraty mezi piny integrovaného obvodu a vodiči datové sběrnice.
Dále zkontrolujeme, že napájení a zem jsou přivedeny na správné piny integrovaného obvodu, tedy že jeho napájení není přepólované.
Po vizuální kontrole můžeme připojit napájecí napětí +5V. Nejprve propojíme zem se zemnící svorkou zdroje a pak napájecí vodič s kladným pólem zdroje. Nikdy ne naopak.
Po připojení napájecího napětí musí LED diody D1 - D4 zůstat zhasnuté. Na vstupy integrovaného obvodu U1 totiž díky odporům z odporové sítě RN1 přivádíme log. 1. Rozdíl napětí mezi výstupy integrovaného obvodu a napájecím napětím je tak malý, resp. téměř nulový, že nestačí na rozvícení LED diod. Pokud ovšem diody poblikávájí a intenzita jejich svitu záleží na doteku rukou apod., tak je někde chyba ve spojích (studený spoj, chybějící spoj, atd.). Zkontrolujeme v prvé řadě propojení společného vývpdu odporové sítě s vodičem napájecího napětí a přeměříme úrovně napětí na pinech integrovaného obvodu.
Posledním testem je postupné rozsvěcování LED diod D1 - D4. Drátkem s odizolovanými konci postupně propojujeme piny 2, 4, 6 a 8 integrovaného obvodu U1 se zemí (dostupnou např. na pinu 10 integrovaného obvodu), čímž přivádíme log. 0 na vstupy U1. Vždy se musí plným jasem rozsvítit odpovídající LED dioda. Další ověření funkčnosti provedeme až při implementaci ovladače zařízení led4x.

Ovladač

Vzorový kód ovladače zařízení led4x, včetně projektu v Eclipse je ke stažení zdeInformationhttp://www.ucsimply.cz/products/modsam9260/#Zdrojové kódy. Tento zdrojový kód vznikl doplněním kostry ovldače dskel, kterou jsme si připravili v části o vývoji ovladačů. Zdrojový kód ovladače zařízení led4x můžeme v počítači s Linuxem buď naimportovat do Eclipse a zkompilovat jej v prostředí Eclipse nebo můžeme kompilaci provádět přímo v příkazové řádce příkazem make.
Postup importu projektu ovladače do Eclipse:
  1. V Eclipse v hlavním menu zvolíme File->Import....
  2. V otevřeném dialogovém okně vybereme ve složce General položku Existing Projects into Workspace a stiskneme tlačítko Next.
  3. V dalším okně zvolíme Select archive file a vložíme cestu k archivu zdrojového kódu ovladače a stiskneme tlačítko Finish.
  4. Projekt ovladače se naimportuje do aktuálního pracovního prostoru Eclipse.
  5. Ověříme, že v makefile ovladače je v proměnné KDIR uvedená správná cesta ke stromu zdrojových kódů jádra. Přípomínám, že ovladač musí být kompilován vůči jádru, do kterého ho pak budeme zavádět.
Zdrojové kódy ovladače máme naimportovány. V následujícím textu si zdrojové kód ovladače stručně rozebereme, abychom si objasnili funčknost ovladače.
Ovladač pro zařízení led4x umožňuje uživatelskému programu zápisem 8bitové hodnoty rozsvěcet čtyři LED diody, které jsou ovládány bity 0, 2, 4 a 6 této 8bitové hodnoty. Zařízení si naposledy zapsanou hodnotu pamatuje díky D-latchům integrovaného obvodu U1. Zápis řídící hodnoty je možné provést systémovým voláním write().
Pomocí systémového volání read() lze posledně zapsanou hodnotu do LED diod také vyčíst.
Ovladač také nabízí možnost aktivovat blikání LED diod, kdy aktuální hodnota LED je po určité době vždy negována. Perioda blikání i zapínání/vypínání blikání je z uživatelského prostoru ovladatelné přes ioctl příkazy Led4x_SetPeriod a Led4x_EnBlinking.
Hodnota, která rozsvěcuje LED diody, je ukládána do sdílené proměnné chráněné spinlockem. Důvod je ten, že blikání LED diod je realizováno v uživatelské funkci časovače blinkTimer. Tato funkce je spouštěna z kontextu SW přerušení, kde probíhá obsluha časovače, zatímco zápis/čtení poslední hodnoty LED diod systémovými voláními write()/read() běží na kontextu uživatelského procesu. Proto je nutné změnu hodnoty udržující poslední stav LED diod provádět výlučně v kritické sekci. To práve zajišťuje spinlock a funkce spin_lock_bh() a spin_unlock_bh(). Použitá varianta funkcí, kterými se zamyká/odemyká spinlock, označená jako _bh, vypíná pouze SW přerušení. HW přerušení zůstavají povolená. Vypnutím pouze SW přerušení se zajistí, že během přístupu na proměnou z uživatelského procesu nebude časovač obsloužen, resp. jeho uživatelská funkce nebude volána a zároveň výkonnost systému z pohledu obsluhy I/O požadavků nebude snížena.
Místo spinlocku by šla použít atomická proměnná, spinlock je zde spíše pro demonstraci jeho použití.
Při inicializaci ovladače je ještě před zavedením ovladače do jádra (rozuměj zveřejněním jeho funkcionality) nastavena výchozí hodnota LED diod - jsou zhasnuty.
Pro účely testování ovladače a zařízení led4x je k dispozici i jednoduchá testovací aplikace testled4x, která je ke stažení zdeInformationhttp://www.ucsimply.cz/products/modsam9260/#Zdrojové kódy.
Tato aplikace otevře zařízení /dev/led4x a zapíše do něj hodnotu uvedenou jako první parametr při spuštění testovací aplikace. Dále nastaví peridou blikání uvedenou jako druhý parametr (v milisekundách) a spustí blikání LED diod. Běh programu lze ukončit stiskem klávesy Enter. Při ukončování zavře testovací program zařízení /dev/led4x, což způsobí volání funkce ovladače led4x_release(), kde dojde k deaktivace časovače zajišťujícího blikání LED diod.

Test ovladače

Zapneme napájecí napětí pro HW přípravek, pak zapneme pokusné PC. Ovladač zavedeme do jádra na pokusném PC. V adresáři /dev se musí objevit soubor zařízení led4x. V opačném případě příkaz insmod zahlásí chybu.
Spustíme testovací program testled4x a ověříme funčnost ovladače i samotného zařízení. Například:
$ ./testled4x 5 500
kde hodnota 5 je hodnota zapsaná na LED diody a hodnota 500 je perioda blikání v milisekundách. LED diody by měly začít blikat tak, že svítí vždy dvě diody (LED1 a LED2), které po půl sekundě zhasnou, a rozsvítí se druhé dvě (LED3 a LED4).