|
||||||||||||
|
Úvod Popsaný expandér programovatelných pinů je rovněž extrémně vidláckou konstrukcí. Původně jsem uvažoval o využití čipů MCP23S17_Expanders IO. Tyto čipy umožňují přijímat data vysokou rychlostí (až 10Mb/s) z rozhraní SPI. Dva bajty dat reprezentují na logických výstupech - dvakrát 8 pinů. Čipy mají možnost být nakonfigurovány jako adresovatelné a na fyzickou adresu jsou vyčleněné 3 piny. Lze tedy adresovat až 8 čipů na jednom rozhraní, což prakticky znamená realizovat 8 x 16 = 128 programovatelných výstupů. Jenže, znáte to. Najednou není čas a musíte zařízení udělat hned, tj. za odpoledne a s tím, co máte. Koncepce expandéru s PICAXE 20M2 Já jsem měl k dispozici několik čipů PICAXE 20M2. Jedná se o programovatelné mikropočítače, které naprogramujete bez programátoru. Program napíšete v Basicu. Sada instrukcí je bohatá. S jedním čipem 20M2 neudělám 2x8 pinů, jako s expandérem MCP23S17, pouze 15 pinů, organizovaných tak, že port B je celý, tj. lze použít bity B0 až B7. Port C už celý není. Pin C.6 lze použít pouze jako vstupní. Proto byl v mém vidláckém projektu použit pro sériový vstup dat. Piny C.0, C1, ...C.5 a C.7 jsou výstupní. Na jedno sériové rozhraní lze připojit několik čipů. Jsou naprogramovány podobně, nikoliv stejně! Program každého z nich se liší v hodnotě jediného bajtu. Tímto způsobem dělám vidlácké adresování čipů daty poslanými po seriové lince. Každý čip přijme data ze sériové linky. Vstupy čipů jsou spojeny paralelně. Data však zpracová pouze ten čip, který přijme správně tzv. hodnoty "clarifier". V takovém případě nastaví logické hodnoty na portech B a C. V ostatních případech program nedělá s výstupy nic. Schéma
Schéma zapojení je jednoduché. Každý čip musíme napájet. Vodiče +Vcc a GND jsou kresleny černou barvou. Sériové vstupy jsou spojené paralelně a jsou kreslené červenou barvou. Porty B.0 až B.7 jsou kreslené modře. Porty C.0 až C.5 a C.7 jsou kreslené zelenou barvou. Na schématu nejsou kreslené blokovací kapacity (100 nF u čipu) a 100 nF + 10 mikroF u napájecího konektoru. Všechny byly u prototypů SMD, velikost 1206. Program Komentovaný výpis programu (pdf), lze stáhnout tady. Program je jednoduchý, vidlácký a má s komentáři 25 řádek (funkční část je do deseti řádek):
Pokusím se o stručný popis myšlenkových pochodů při algoritmizaci: 1. Nastavíme výstupní piny na
úroveň low. Moje zkušenost - nastavuji jeden po druhém instrukcemi na
řádku 23 a 24. Tím se současně nastaví piny jako výstupní. Simulátor Editor programů pro PICAXE obsahuje simulátor. Použitý program lze celý odzkoušet pomocí vestavěného simulátoru. Programátor Čipy PICAXE by se daly programovat přímo na desce, kde jsou použité. Já je používám velice často právě pro jednoduché úlohy, jako je tato. Jde o vidláckou konstrukci, kde je v zapojení více čipů, které jsou adresované programem. Na schématu jsou namalované 3 čipy, které expandují na 45 programovatelných výstupů (špiček, pinů portů B a C). Protože každý čip se liší jediným bajtem v programu, programoval jsem je v jednoduchém programátoru, který obsahoval pouze tyto části: patici s páčkou, do které jdou zastrčit typy PICAXE 08M2, 14M2, 20M2 (mají stejnou konfiguraci pinů Vcc, GND, RX, TX). Čipy jsem programoval jeden po druhém a po naprogramování jsem si je označil značkou (laková fixka) na pouzdře. Pohled na vidlácký programátor:
Programátor používá delší patici s páčkou (28 špiček, jinou jsem neměl). Vpravo pod paticí jsou špičky s jumperem, na kterých lze přepnout posílání dat do programovací špičky nebo do C.6 (u 20M2). To se hodí, pokud si chcete vyzkoušet funkci naprogramovaného HW, než ho zasunete do patic expandéru. Vpravo je převodník FTDI USB na RS232, kterým se z PC programuje PICAXE nebo se posílají sériová data. Vedle patice jsou špičky, na které lze připojit analyzátor nebo logickou sondu, když HW zkoušíte v patici programátoru. Závěr Jak jsem psal, řešení je
vidlácké. Jeho silnou stránkou je, že program si vymyslíte asi za 10 minut
a zhruba za stejnou dobu ho napíšete. Pokud desky zařízení osadíte 5 čipy
PICAXE a osadíte čtyři seriové porty, které jsou na jednodeskovém Asus
Tinker Board, jste schopni řídit 5 x 15 x 4 = 300 výstupů. A to už je
slušná bedna s relátky. Pokládka kabelů je drahá. Moje řešení spočívá v
rozšíření WiFi bezdrátovým extendrem, ke kterému je připojen jednodeskový
Asus Tinker Board velikosti kreditky. Ten funguje jako tzv. TCP server s
funkcí směrování povelů. Povely směruje na jednotlivé sériové porty UART
(já mám osazen zatím jenom jeden). K UARTu je připojen popsaný extender,
jehož výstupy jsou vyvedené z portů B a C na desky spínačů (unipolární
HEXFET a relé). Spínání portů jsem už popsal. Funguje to tak, že po síti
IP se posílají zprávy, které mají tento formát: S Q Byte0 Byte1 a
aplikace, která je vysílá, volá TCPSocket na konkrétní IP adrese a s
konkrétním IP portem. Význam 4 bajtů povelu je následující: Řešení je popisem myšlenkových
pochodů, kdy musíme v časovém stresu rychle vyrobit funkční prototyp
zařízení, které umožňuje řídit velké množství relé po IP síti. Pozornému
čtenáři neušlo, že jsem volil řešení poměrně pomalé a ani jsem se
nevěnoval snadnému zvýšení rychlosti sériového přenosu dat. Poznámky 1. Program není univerzální. Pro jiný čip musíme změnit několik hodnot. Např. pro čip 14M2 vypadá program takto:
2. Čip PICAXE 14M2 může mít maximálně 11 programovatelných výstupů, B.0 až B.5 (6ks), C.0, C.1, C.2 (3ks), C.4, C.5 (2ks). V programu na obrázcích jsem zapomněl v proceduře "piny_na_low" nastavit pin C.5. Přišel jsem na to až při simulaci. Z terminálu simulátoru jsem poslal na oba porty číslo 255. Měly by se rozsvítit všechny výstupní piny - viz obr. níže. Jenže tomu tak nebylo, pin C.5 ani nehnul, protože jsem na něj zapomněl, nebyl nastaven na low C.5, tím pádem nebyl deklarovaný jako výstupní a příkazem outpinsC = 255 nešel nastavit.
Předpokládám, že jste si v terminálu všimli, jaké bajty jsem odesílal: 254,254,118,224,255,255; právě dva poslední, s hodnotami 255,255 rozsvítí všechny výstupy (high), pokud by měly hodnotu 0,0, byly by všechny výstupy zhasnuté. Na reálném HW odešleme do PICAXE data např. z terminálu Herkules a podíváme se např. sondou, zda se výstupy na čipu nastavily. Abych si toto mohl vyzkoušet, mám na programátoru propojku, kterou přepnu do polohy příjmu dat. Na programátoru mám také patici se špičkami, abych měl vyvedených všech 20 špiček čipů do velikosti 20M2. Takže v programátoru čip naprogramuji i fyzicky vyzkouším, zda reaguje na sériová data. Expandér programovatelných pinů se dobře hodí na rozšíření špiček jednodeskového computeru Asus Tinker Board (nebo Raspberry). Tinker Board má 4 ks UART. UART1 je na špičkách 8 a 10, používám ho se zemí na špičce 14, ostatní UARTy jsou rozfrcané po celém konektoru, pohromadě je ještě UART4.
S takovým množstvím UARTů jsme připraveni realizovat stovky programovatelných výstupů, které nám ovládají např. relé. A to bez ovládacího kabelu, přes WiFi. Zatím 73 a P.S.: 1.
5. U každého čipu jsou blokovací kapacity 100nF SMD, velikost 1206, u každého konektoru DB9 jsou blokovací kapacity 4M7 SMD, velikost 1206. Vedle čipů jsou vždy z obou stran kolíkové lišty, na které jsou vyvedeny oba porty B a C a také +5V a GND (z USB portu). Rovněž jsem ošetřil vstupy čipů na pinu č. 2 rezistorem proti GND (není nakreslen ve schématu a ani na desce):
|
||||||||||||
| TU 73, Mira, ok1ufc | ||||||||||||