Poslední aktualizace 12.5.2019 

      
 

   Expandér programovatelných pinů

Ú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í.
2. Hlavní smyčku programu si označíme jako "main:" a návěští je na řádku číslo 5.
3. Přečteme si ze sériového portu dva bajty, které uložíme do proměnných b0 a b1. Vše je na řádku č. 6
4. Instrukce na řádku 6 si všimneme podrobněji. C.6 znamená, že sériová data čteme ze špičky C.6. V závorce jsou čísla (254,254,118,224). Těmto číslům říkáme hodnoty qualifier, Pokud je program přijme správně, přijme rovněž bajty b0 a b1 a dosadí je do těchto proměnných. Pokud se hodnota qualifier liší, data b0 a b1 se ukládat nebudou. Toto používám k adresaci konkrétního čipu. Čipy mají podobné programy, které se liší v jediné hodnotě qualifier. V mé úloze jsem u prvního čipu použil číslo 118, u druhého 119, atd.
5. Pokud se nám přijaté hodnoty qualifier a hodnoty naprogramované shodují, jsou přijatí b0 a b1. Program běží na řádky 15 a 16. Jsou nastaveny pomocí instrukcí outpinB a outpinC všechny piny portu B a piny portu C mimo C.6.
6. Na řádku 18 je pausa 100 ms a skok na řádku č. 20 vrací program na začátek hlavní smyčky.

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í:

S ... seriový port, na který se pošlou data (ttyUSB0 až ttyUSB3 a ttyS0 až ttyS3)
Q ... bajt qualifier, v popsané úloze hodnota 118, případně další čipy mají 119, 120, 121, atd.
Byte0 a Byte 1 jsou bajty, jejichž hodnoty se zapíšou do proměnných b0 a b1; podle těchto hodnot se nastaví instrukcemi outpinsB a outpinsC špičky portů B.0 až B.7 a C.0 až C.7 (mimo C.6) na odpovídající logickou úroveň.

Ř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.

Zařízení lze použít s PC nebo notebookem (použijí se USB to RS 232 převodníky) nebo s jednodeskovými SBC (Tinker Board, Raspberry), pak použijeme UART, který je na 40 špičkovém konektoru.

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. Až bude chvilka, popíšu svůj router pro směrování povelů z PC aplikací do konkrétních UARTů nebo SPI rozhraní. Jak jsem uvedl v úvodu, PICAXE byly po ruce a byl jsem s nimi schopen rychle dělat. Perspektivní jsou však adresovatelné SPI expandéry. Ale to už je další generace tohoto zařízení.
2. Tento router povelů mám jen jeden a ovládám s ním hlavně měřicí přístroje, anténní přepínače a dva dálkově ovládané anténní tunery. Anrénní tunery jsou typu L článek. Kapacity a indukčnosti se nastavují pomocí 2 x 8 pinů (tedy 256 hodnot pro každou veličinu, vyvedeno z portů B) a směr řazení LC nebo CL je realizován výstupem z portu C, podobně jako relé, které odpojují trvale tuner od anténního napáječe.
3. Když jsem psal a zkoušel program ve vlaku, zkoušel jsem jen s 8 špičkovým PICAXE 08M2 na malé bastfuš desce.
4. Jedna z verzí expandéru je udělaná jako deska s možností osadit šest čipů 20M2, které lze připojit ke 2 USB portům (vpravo na boku jsou plošky pro 2 konektory Canon DB9), lze však osadit jen jeden port a propojit s druhou sadou čipů. Propojuje se napájení (+5V Vcc) a signal DATA (sériová data s úrovní TTL). Deska je oboustranná, strana s paticemi je pouze měď. Nakonektoru DB9 jsou použity špičky 5 (GND), 4 (+5V Vcc) a 3 (RX Data). Deska vypadá takto:

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):

6. Deska pro 6 čipů byla pro zkoušku expandéru osazena pouze dvojicí čipů, maximální počet spínaných pinů je 30. Na obrázku vpravo je viděr rezistor SMD 1206 mezi špičkami č.2 (TxD) a GND u každého čipu.
Špičky B0 až B7 jsem zkoušel pomocnou destičkou s dioadami LED.
7. Expandér se choval mravně, adresace vždy vybrala správný čip.
8. Už jsem odvykl ručnímu vrtání děr a v případě popsané konstrukce jejich zahlubování na straně patic. Je to pracné. Mnohem jednodušší pro mě je koncepce s čipy Picaxe 20M2 v SMD pouzdrech, s relátky a spínacími hexfety na jediné společné desce. Mnoho vrtaných děr, mnoho propojovacích plochých kabelů s kolík. konektory. Nebrat. Návrh jednoúčelového expanderu, např. pro dálkově řízený anténní tuner s přepínačem nebo expandér s malým počtem relé (např. 32 spínačů) na PC přeci jenom bolí méně, hi.
 

 


 

   TU 73, Mira, ok1ufc