Programovatelný paralelní interface pro platformu Pi

Všetko čo sa týka mikropočítačov + Sekcia Arduino

Moderátori: psichac, Moderátori

Používateľov profilový obrázok
Gavin Milarrr
Ultimate člen
Ultimate člen
Príspevky: 2533
Dátum registrácie: 06 Okt 2008, 00:00
Bydlisko: Liberec
Vek: 47

Programovatelný paralelní interface pro platformu Pi

Príspevok od používateľa Gavin Milarrr » 06 Nov 2017, 12:53

Po delší době jsem dovedl UR-Pi do reprodukovatelné podoby, takže:

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.
Připojení pinů 8255 -- skládání signálů
Připojení pinů 8255 -- skládání signálů
Připojení ostatních pinů a zapojení výstupního konektoru
Připojení ostatních pinů a zapojení výstupního konektoru
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...
UR Pi zespoda
UR Pi zespoda
UR Pi zeshora
UR Pi zeshora
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
nastaví vše na zápis a 70ns držet řídící signál (/RD, resp /WR). Transgap se nedá nastavit bez uvolnění modulu

Kód: Vybrať všetko

rmmod urpi
, řídící slovo lze kdykoli zapsat jako char na zařízení /dev/UR_CW. Porty mají vytvořena zařízení /dev/UR_PA, /dev/UR_PB a /dev/UR_PC. Dostupnost zařízení pro čtení a zápis je dána aktuálním řídícím slovem, z /dev/UR_CW lze smysluplně číst jen pokud použijete CMOS verzi PPI (MHB8255AC například).

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...
Prílohy
urpi.tar.gz
zdrojový kód modulu
(7.52 KiB) 38 stiahnutí
curpi.pdf
DPS -- strana součástek
(14.66 KiB) 44 stiahnutí
0
Naposledy upravil/-a Gavin Milarrr v 09 Nov 2017, 18:22, upravené celkom 2 krát.
Taky vás štve debilita a sopláctví? Na http://efis.tul.cz/forum běží experimentální odblbené fórum.

Používateľov profilový obrázok
Gavin Milarrr
Ultimate člen
Ultimate člen
Príspevky: 2533
Dátum registrácie: 06 Okt 2008, 00:00
Bydlisko: Liberec
Vek: 47

Re: Programovatelný paralelní interface pro platformu Pi

Príspevok od používateľa Gavin Milarrr » 09 Nov 2017, 13:20

up... já vím, že se to nemá, ale jinak je moje práce odsouzena k zapomnění..
0
Taky vás štve debilita a sopláctví? Na http://efis.tul.cz/forum běží experimentální odblbené fórum.

Používateľov profilový obrázok
mac26
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1298
Dátum registrácie: 01 Feb 2010, 00:00
Bydlisko: Martin

Re: Programovatelný paralelní interface pro platformu Pi

Príspevok od používateľa mac26 » 09 Nov 2017, 14:19

Urcite si prestudujem zdrojaky, mam rozrobene nieco podobne cez USB.
LCD 20*4 + Nejake tlacitka a LED. Cele to bezi na PIC cez USB-HID.

Ku LCD som urobil maly program v C ale porty by som rad urobil takto cez modul.
0

Používateľov profilový obrázok
Gavin Milarrr
Ultimate člen
Ultimate člen
Príspevky: 2533
Dátum registrácie: 06 Okt 2008, 00:00
Bydlisko: Liberec
Vek: 47

Re: Programovatelný paralelní interface pro platformu Pi

Príspevok od používateľa Gavin Milarrr » 09 Nov 2017, 14:52

Oproti USB se tady dá dosáhnout řádově vyšší přesnosti časování. Ideální by samozřejmě byl jednodeskový osmibit, ale to je jaksi mimo bastlířské možnosti. Tohle je konstruováno tak, aby si to mohl doma každý postavit svépomocí, proto ta jednostranná deska. Jak jsem uvedl, existuje další verze s posuvným registrem jako řadičem datové sběrnice, ale k ní jsem ještě nezačal psát ovladač. Tam by časování bylo ještě přesnější, protože nezávislé na aritmetice toho ARM.
0
Taky vás štve debilita a sopláctví? Na http://efis.tul.cz/forum běží experimentální odblbené fórum.

Používateľov profilový obrázok
mac26
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1298
Dátum registrácie: 01 Feb 2010, 00:00
Bydlisko: Martin

Re: Programovatelný paralelní interface pro platformu Pi

Príspevok od používateľa mac26 » 09 Nov 2017, 15:47

Urcite je to rychlejsie aj presnejsie, ale mne ide skor o to, aby sa to dalo pripojit ako ku jednodoskacu, tak aj ku klasickemu PC
0

Používateľov profilový obrázok
Gavin Milarrr
Ultimate člen
Ultimate člen
Príspevky: 2533
Dátum registrácie: 06 Okt 2008, 00:00
Bydlisko: Liberec
Vek: 47

Re: Programovatelný paralelní interface pro platformu Pi

Príspevok od používateľa Gavin Milarrr » 15 Nov 2017, 08:59

Verze 2A, prozatím schéma:
UR PI verze 2A
UR PI verze 2A
Zjednodušeno a ověřeno: /WR a /RD mohou být otevřeny i po dobu sestavování/načítání slova ze sběrnice, rychlost čtení je řádově vyšší než rychlost změny na běžné periferii. pokud by to přece jen dělalo problémy, např. při digitalizaci, lze /RD a S1 rozvázat. Dostal jsem se na reakční dobu 50ns, což je zhruba limit použitého PPI. Posuvný registr 74LS299 jsem schválně použil ve verzi HCT, abych ověřil i jeho přenosové možnosti. Zajímavost: načítá a zapisuje obráceně, levým posuvem, protože na desku by se jinak nevešel. Novou DPS dodám o víkendu, až si ověřím i možnosti čtení, stejně tak i doladěný ovladač.

EDIT: přiřazení GPIO je samozřejmě orientační, pokud si přetaháte desku jinak, nezapomeňte v ovladači přepsat konstanty.
0
Taky vás štve debilita a sopláctví? Na http://efis.tul.cz/forum běží experimentální odblbené fórum.

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok