Jedná se o způsob, jak k počítačům platformy Pi nebo jakýmkoli jiným disponujícím čtyřicetipinovým GPIO konektorem připojit PPI 8255. Postupně byly vytvořeny celkem čtyři varianty, zde je prezentována první, druhá místo přímého připojení datové sběrnice na GPIO používá obousměrný posuvný registr, čímž se ušetří čtyři GPIO piny. Pro první je připraven i modul do jádra, kde se dá nakonfigurovat i odlišné připojení pinů.
Na následujícím obrázku je uvedeno "schéma", tedy způsob poskládání signálu /CS a automatický reset po zapnutí napájení. Ostatní zapojení je uvedeno v tabulce.
Výstupní konektor měl původně kopírovat zapojení známé z Didaktiku Gama, resp. UR-4, ovšem to by vyžadovalo podstatně složitější oboustranný plošný spoj a mým záměrem bylo vytvořit DPS tak, aby se dala zhotovit bez problémů doma. Abych to demonstroval, pro všechny prototypy jsem obrazec nažehloval z tisku na křídovém papíře ze starých katalogů. Stačí trochu cviku, netlačit na žehličku a nechat ji hřát na teplotu určenou pro hedvábí. Alespoň jsem přeházel pořadí pinů portu C, aby odpovídalo logice věci.
Co se programování týče, odkazuji na datasheety obvodu I8255, resp. na československý katalog TESLA, poslední vydání, pátý díl. Při zápisu a čtení je potřeba dbát následujících podmínek:
1) Zápis i čtení musí pro libovolnou kombinaci bitů trvat stejně dlouho. V modulu je to dáno převodními vektory o 256 složkách, které transformují přepínací slovo GPIO pinů a následně i kombinaci. Výpočtem nebylo možné stejně dlouhý převod zajistit. U posuvného registru tento problém odpadá.
2) Zápis musí probíhat v následující sekvenci: nastavení datové sběrnice -- nastavení adresy -- zapisovací pulz. Délka zapisovacího pulzu je dána katalogovými hodnotami. Čtení obdobně: nastavení adresy -- čtecí pulz -- přečtení hodnoty ze sběrnice. Je dobré číst těsně před ukončením čtecího pulzu, aby na sběrnici byla opravdu aktuální hodnota. Signál /CS se automaticky aktivuje se zpožděním daným Millerovou kapacitou diod, což postačuje pro běžné rychlosti čtení i zápisu.
3) Obvod lze doplnit generátorem přerušení, který zajistí minimální rozdíl mezi časy přístupu ke sběrnicím. Na softwarové přerušení příliš spoléhat nelze.
Obvod lze kombinovat s PiTFT displeji, pokud oželíte podsvícení. Obvyklé zvukové karty HiFiBerry vám fungovat nebudou, jsou dokumentovány dost zoufale a vyžadují více GPIO pinů, než je uvedeno v datasheetu. Možná pátá revize...
EDIT: doplněn zdrojový kód modulu, zkompilovaný modu urpi.ko pro jádro 4.9.60+ a univerzální Makefile. Pokud přetaháte plošňák na jiné GPIO, změňte jejich přiřazení na začátku kódu. Pro kompilaci stačí mít kernel v provozuschopném stavu (make prepare && make scripts), modul kompilujte příkazem "make" přímo v adresáři. Do jádra ho vložíte "insmod urpi.ko", můžete uvést parametry "cwd" pro nastavení řídícího slova 8255 (implicitně 155, tedy režim 0, všechny porty naslouchají) a "transgap" pro přenos (implicitně 100ns). Tedy:
Kód: Vybrať všetko
tar -xvzf urpi.tar.gz
make
insmod urpi.ko cwd=128 transgap=70
Kód: Vybrať všetko
rmmod urpi
EDIT2: DPS v pdf, zrcadlená pro ev. svícení -- pokud ji chcete nažehlovat, musíte ji nejdřív přezrcadlit zpět. Součástek je tak málo, že pokládačka snad ani nemá smysl...