Hlavní stránka

SlotTime controller

Přemýšlel jsem o tom, jak spolehlivě snímat časy na kolo, mezičasy a neustále jsem měl při tom na mysli, že počítač s paralelním nebo game portem není to pravé ořechové – především díky windows a způsobu, jakým lze s těmito porty pracovat. Operační systém, jestliže není založen na realtimovém jádru prostě není schopen přesného, nebo spolehlivého měření. Navíc – při rychlostech jakých dráhové modely dosahují nemusí počítač stihnout zachytit změnu stavu na portu – stačí, aby si zaswapoval, nebo dejme tomu právě kontroloval na webu zda není k dispozici nějaká záplata či zrovna bloudil v jiné části programu a věnoval se třeba výpočtu aktuální pozice jezdců a jejich zobrazení.

Samozřejmým východiskem je použití externího měřícího zařízení, které bude komunikovat s PC pomocí nějakého jednoduchého protokolu a PC v tomto řetězci bude pouze řídící a zobrazovací částí. Jestliže není zcela podstatné, kdy dorazí naměřené výsledky, není důvod se obávat o přesnost a lze použít i méně výkonný počítač. Přenos dat po sériové lince je totiž již z principu neztrátový – existuje zde hardwarová vyrovnávací paměť, do které jsou data přijímána i v době, kdy operační systém dělá něco jiného.

Začal jsem tedy s návrhem zařízení založeného na jednočipu řady x81 a sériové komunikaci a povedlo se mi vytvořit funkční prototyp. Deska zpracovávající signály snímačů byla oddělena a celé to obsahovalo zbytečně moc integrovaných obvodů.



Souběžně s tím jsem začal programovat vlastní aplikaci pro MS-DOS, ale když jsem byl asi tak v polovině prací, dostal jsem dost zajímavý nápad, který stál za to prozkoumat – proč nevyužít existující software ? Deska kterou jsem navrhl trochu připomínala obdobné zařízení RaceControl, takže jsem hledal, jakým způsobem komunikuje a narazil na knihovnu jnutl.dll a popis jejího rozhraní. Sériovou komunikaci samotného RaceControlu jsem samozřejmě neměl možnost nikde získat (neznám nikoho, kdo by toto zařízení vlastnil), ale neměl by být problém vyměnit jnutl.dll za vlastní, z hlediska rozhraní kompatibilní, ale vnitřně zcela odlišnou. Tuto knihovnu totiž používá i známý SlotCar Manager, který je všeobecně uznávaný za velmi kvalitní a hlavně – je to giftware, takže lze dobrovolně poslat nějaké drobné autorovi a software máme legálně. Knihovna jnutl.dll je dodána výrobcem RaceControlu, takže i když je to malinko licenčně sporné, výměna snad nebude až takovým prohřeškem.

Překlad německého popisu jnutl.dll mi dal docela zabrat – pořád mi nebylo zcela jasné dost věcí, ale nakonec jsem to pochopil – samotná knihovna nekomunikuje, pouze se jí předávají data ze sériového portu a knihovna vrací, zda už má dost informací o událostech (například průjezdu). Tehdy jsem přišel na to, že budu muset prototyp upravit – používají se i další signály sériového portu a průběžně se posílá i základní čas (asi kvůli zobrazování, nebo jako test, že je zařízení živé). V prototypu obsahovala časová smyčka cyklus, který se vykonával 4800x za sekundu a již tam nebyla rezerva pro další kód. Tak jsem prototyp zahodil a navrhl to znovu a ještě jednodušeji – na bázi AT-TINY 2313. Tím jsem navíc vstoupil i do oblasti programování AVR. Napsat něco tak jednoduchého přímo v assembleru bylo dobrou průpravou – něco málo jsem se o AVR naučil a výsledek je funkční, jednodušší a levnější než původní prototyp.



Jak to celé funguje ? Jednočip je taktovaný na 11.0592 MHz, což znamená, že za sekundu tento jednočip provede 11 059 200 jednoduchých instrukcí. Proč takové číslo ? Především – je to číslo dělitelné 4800 – základní přesností měření zařízení je 1/4800 sekundy a současně jde i o komunikační rychlost (4800 bps) sériového rozhraní, které se používá. Krystal s tímto taktem se právě proto velmi často používá a je běžně dostupný. Samotná komunikace musí být na této rychlosti, protože pro použití kombinace RaceControl a jnutl.dll je to jediná rychlost, která je podporována a proto ani programy, které spolupracují s jnutl.dll jinou rychlost neumí. Nám to však nevadí – pro ten objem dat který potřebujeme přenášet je to rychlost dostatečná. Z praktického hlediska obslužný software (SlotMan) nahodí před závodem signál DTR, čímž dá připojenému zařízení signál, že má zahájit posílání dat. Protokol (dá-li se tomu tak říkat) jsem navrhl velmi jednoduchý – v podstatě existuje pouze 9 důvodů proč zařízení pošle čas – buď posílá průběžný čas protože nemá v bufferu žádnou jinou informaci, nebo jde o zakrytí či odkrytí infračervené závory vodítkem. Jakmile obslužný software shodí DTR, zařízení vymaže buffer s neodeslanými daty a čeká na zahájení dalšího měření. Vnitřně je zajištěno pomocí timeru, že každý průchod smyčkou až do jejího dalšího zavolání je dlouhý přesně 11059200 / 4800 = 2304 tiků. Při každém průchodu se incrementuje počítadlo času o 1 a tento údaj je pak předáván obslužnému programu. Ten již s tímto počítá a jnutl.dll i v těchto jednotkách čas řídícímu programu vrací.

Popis zapojení je opravdu jednoduchý – AT-TINY 2313 je v základním zapojení s externím krystalem a připojeným konektorem pro programování v zapojení (ISP). Mám ověřeno, že pomocí USB programátoru AVRUSB500V2 lze měřící modul i napájet a to nejen během programování, ale i následně během testování – jednoduše se zapojí programátor do USB, SlotTime controller na ISP kabel, natáhne se dovnitř firmware a bez jakýchkoliv restartů, přepojování se pomocí připojeného sériového kabelu může ihned komunikovat a měřit (ideální pro ladění programu). 4 IR závory, které slouží ke měření času průjezdu jsou připojeny pomocí svorkovnic přes tranzistory na vstupy jednočipu. Napájení je navrženo pro maximální univerzálnost a „blbuvzdornost“ tak, že je na vstupu usměrňovací můstek a za ním klasické zapojení stabilizátoru 7805. To znamená, že lze SlotTime Controller napájet téměř čímkoliv od cca 7V nahoru a to jak střídavě, tak stejnosměrně. Lze tak použít dostupné napětí třeba z napájení dráhy. V případě stejnosměrného napájení je jedno, kam se připojí kladná větev a kam zem (nelze to přepólovat). K PC se SlotTime Controller připojuje pomocí prodlužováku sériového portu (není třeba žádné křížení, úpravy apod.). Mezi PC a AT-TINY 2313 je klasický obvod MAX232, který převádí velmi bezpečně úrovně dle standardu rozhraní RS-232. Osazeno je i tlačítko RESET, ale je pravděpodobně zbytečné – nikdy jsem jej neměl potřebu použít. Deska plošných spojů je navržena jako jednostranná, aby se dala snadno vyrobit i v domácích podmínkách.

Spojení s infrazávorami TCST-2103 (TCST1103) je realizováno pomocí 3 vodičů (2 ze 4 vývodů jsou na infrazávoře spojeny). Mechanická montáž závor bude zřejmě individuální podle typu dráhy, ale pro dráhu Cartronic kterou mám, to bylo poměrně jednoduché – stačilo proříznout a profrézovat v místě prolisů upevňujících troleje mezeru co nejhlouběji to jde a pro jistotu lehce zabrousit vršek snímače, aby snímací štěrbina sedla v drážce co nejvýš a nebyl problém s nízkými vodítky. Snímače jsem zalepil tavnou pistolí a připojil krátký třížilový kablík, který jsem po montáži dílu dráhy (ve stolu musí být samozřejmě otvory) zespodu zakončil svorkovnicí (tzv. Čokoládou).



Spolupráce se SlotCar Managerem (nejnovější verze) dosáhneme prostou výměnou jnutl.dll za novou, která je určena pro SlotTime Controller. Jakmile připojíme snímače, propojíme desku na sériový port a zapneme napájení, musíme ve SlotManu v nastavení RaceControlu nadetekovat, který snímač je na kterou dráhu a jakou zde plní funkci (dělá se to ručním přerušením paprsku v daném snímači po výběru funkce v nastavení). Pokud vše funguje, není nic dalšího třeba nastavovat. Současně lze použít až 4 SlotTime Controllery, takže by neměl být problém obsloužit takto až 16 snímačů – pro 4 dráhu například čas na kolo, mezičas a ještě čerpání paliva pomocí dvou snímačů umístěných nějakých 20 cm za sebou. SlotCar Manager umí měřit až pro 8 drah, takže se dá celkem snadno a levně měřit i na velkých drahách.

Náklady na 1 ks tohoto zařízení myslím nepřesáhnou 300 Kč včetně DPS, sériového kabelu a snímačů, takže si kvalitní měření může dovolit každý – stačí si zde stáhnout podklady, jnutl.dll a firmware pro jednočip a pustit se do stavby. Stlačit náklady ještě níž lze i tak, že se namísto svorkovnic přímo připájí vodiče do desky, neosadí se tlačitko pro reset (pro provoz není nutné) a namísto ISP konektoru a programování procesoru pomocí ISP se osadí již naprogramovaný procesor - pak by se dalo mluvit i o nákladech okolo 200 Kč. V případě, že by se použilo stabilizované napětí 5V (například z USB portu), bylo by možné vyházet i můstek B1, kondenzátory C13, C10, C11 a stabilizátor 7805. Napájení by pak bylo možné připojit vodiči například místo C11.

Použití na USB pomocí externího převodníku USB-RS232 je samozřejmě možné – jen je třeba vybrat takový převodník, který umožňuje v nastavení ovladače zvolit, že se má tvářit jako COM1 .. COM4 a také musí podporovat řídící signály DTR/DSR, což by ale měla být samozřejmost. Technicky vzato by bylo možné upravit celé zapojení tak, aby namísto MAX232 byl osazen rovnou obvod FT232, což by mělo umožnit přímé připojení na USB. Problém tohoto obvodu je, že je dostupný pouze v SMD verzi a to s poměrně malou roztečí nožiček (viz AVRUSB500V2 kde je použit) a to už by pak bylo vhodné to zmenšit a udělat v SMD celé a rovnou to z USB i napájet. Hodně by se to tím změnšilo.



Vše co je třeba pro výrobu DPS, osazení, naprogramování procesoru, zdrojové soubory z DEMO verze Eagle a náhrada jnutl.dll je uloženo zde:

Při programování procesoru je třeba zvolit takové nastavení fuses, aby byl používán externí krystal a frekvence nebyla dělena (maximální rychlost zpracování instrukcí) - pozn. časem se pokusím doplnit trochu podrobněji až osadím a oživím další kus a budu znovu řešit nastavení fuses.

Seznam součástek:

počet označení hodnota označení v katalogu GM electronics skladové číslo cena/ks cena celkem
Keramické kondenzátory:
2 ks C1, C2 22p CK 22P/500V 120-018 1.20 Kč 2.40 Kč
4 ks C3,C9,C10,C11 100n CK 100N/63V 120-060 1.20 Kč 4.80 Kč
Elektrolytické kondenzátory:
4 ks C4,C5,C6,C7 1u E1M/100V 123-011 1.00 Kč 4.00 Kč
1 ks C8 10u E10M/50V 123-058 1.00 Kč 1.00 Kč
2 ks C12,C13 100u E100M/35V-HB 123-617 1.50 Kč 3.00 Kč
Rezistory:
4 ks R6,R7,R8,R9 220R RRU 220R 119-059 0.40 Kč 1.60 Kč
1 ks R18 680R RRU 680R 119-060 0.40 Kč 0.40 Kč
4 ks R2,R3,R4,R5 1k RRU 1 119-043 0.40 Kč 1.60 Kč
5 ks R1,R14,R15,R16,R17 10k RRU 10K 119-041 0.40 Kč 2.00 Kč
4 ks R10,R11,R12,R13 33k RRU 33K 119-133 0.40 Kč 1.60 Kč
Tranzistory:
4 ks T1,T2,T3,T4 BC547 BC547B 210-026 1.00 Kč 4.00 Kč
Integrované obvody:
1 ks IC1 AT-TINY 2313 v DIL20 ATTINY2313-20PU 432-202 43.00 Kč 43.00 Kč
1 ks IC2 MAX232 v DIL16 MAX232CPE 433-100 19.00 Kč 19.00 Kč
1 ks IC3 7805 - stabilizátor 5V v pouzdru TO220 7805-STM 330-149 7.50 Kč 7.50 Kč
Led:
1 ks LED1 Led 3mm L-934SRD-E 511-946 2.00 Kč 2.00 Kč
Usměrňovač:
1 ks B1 můstkový usměrňovač 1.5A B250C1500 227-004 3.00 Kč 3.00 Kč
Krystal:
1 ks Q1 11.0592MHz crystal v pouzdru HC49 QM 11.059MHZ 131-077 9.90 Kč 9.90 Kč
Mechanické díly:
1 ks CON1 Canon do pl. Spoje – samice CAN 9 Z 90 801-041 9.00 Kč 9.00 Kč
1 ks CON2 svorkovnice 2 pinová AK 500/2-DS-5.0-V-GREY 821-017 5.00 Kč 5.00 Kč
4 ks CON3,4,5,6 svorkovnice 3 pinová AK 550/3-DS-3.5-V-GREY 821-007 12.60 Kč 50.40 Kč
1 ks CON7(ISP) 6 pin. Konektor se zámkem do pl. spoje přímý samec MLW06G 800-083 21.50 Kč 21.50 Kč
1 ks S2 tlačítko do plošného spoje P-B1720A 630-091 3.00 Kč 3.00 Kč
Externě připojené součástky:
4 ks Optické snímače TCST-1103 TCST1103 523-174 14.00 Kč 64.00 Kč
1 ks kabel 9V/9Z 2m (RS232) prodlužovák Canon 9 CAB230 652-063 38.10 Kč 38.10 Kč

Celková cena součástek: cca 300 Kč

Upozorňuji, že zařízení ani DPS na zakázku nevyrábím – není to v mých silách a časových možnostech, takže prosby typu „za kolik ...“ raději ani nezkoušejte.

Zároveň upozorňuji, že podklady zde zveřejněné nesmí být použity k výrobě zařízení za účelem prodeje !