Do dnes jsem používal DCC sniffer na XP a přechodem na W10 jsem tuto možnost ztratil. Proto jsem si navrhl vlastni sniffer pro DCC a Loconet. Původní program snifferu DCC používal železo zvukové karty a ta už prostě na 64-bit platformě nefunguje. Proto jsem si musel navrhnout železo vlastní.
Už mám nějaké zkušenosti a tak hned druhý pokus byl celkem dobrý. Prvý pokus byl s Atm328 a soft UART a to nebylo dobré. Každé přerušení pokazilo soft UART a použít zákaz přerušení mi zas blokovalo příjem DCC. Druhý pokus jsem udělal na Atm162, který má dva USART a tím jsem se vyhnul problémům s příjmem a vysíláním. Jako bonus jsem získal spoustu pinů pro tlačítka a LEDky.
Základem obvodu je ATM162 na 11,0592 MHz, který zabezpečuje pro USART0=16666 Baudu a pro USART1=230400 Baudu v celkem přijatelné toleranci 1.4% a 0%. Jiné krystaly jsem ani nezkoušel. Jako převodník USB/TTL jsem použil FT230X. Mám ho odzkoušený a nemám důvod ho měnit. Zapojení je opravdu jednoduché a už bylo několikrát na tomto webu popsané v různých variantách. Procesor Atm162V není vhodný, funguje jen do 8MHz. Elektrolyty 33uF jsou naležato. Indukčnost L1 - DS10 je 6 závitů na feritové perle s dírkou. Obvod je na jednostranné desce bez drátových propojek v systému dělicích čar.
Rozmístění součástek na desce
Mám krabičku z Číny, s tím si hádám každý poradí, různých krabiček je na webu dostatek.
Napájení se zabezpečuje přes USB, je tam +5V a byla by škoda to nevyužít. Přes USB se posílají data do počítače na 230400 Baudech a je to docela kritické, menší rychlosti nestíhají ani náhodou. Posílám totiž už zpracované data, které dokáže zobrazit terminál COM, který zvládne 230400 B.
Já používám Termite 3.3. Vstupné údaje jdou přes konektor RJ12 6/6, který se používá na rozvod X3 Loconetu, kde je na pinech 1 a 6 RailSyn a na pinech 3 a 4 Loconet. Tyto signály jsou přivedeny na Atm162, kde se zpracují. V PC je nutné nastavit port COMx, kde se budou data přijímat. Dělá se to v Správci zařízení. Taky terminál je nutné nastavit na 230400 B a příslušný port.
Volba toho, co se zobrazuje se dělá tlačítky a indikuje LEDkami. Obvod musí být připojen oběma kábelmi, jinak nefunguje.
Nebylo to až tak složité, jako se muselo neustále počítat, aby to Atm162 časově zvládla. Tím myslím, že datové řetězce vysílané v ASCII do PC mají od 30 do 100 byte a to je dost problém. To se používá ve výpise v binárním kódu DCC, kdy existují i 7-bajtové pakety. Protože jsem použil procesor se dvěma USART a tak s tím nejsou problémy. Soft UART je úplně mimo.
Rutina zpracování DCC musí být extrémně rychlá, proto je celá napsaná v ASM.
Největší problém byl obsloužit, vypočítat a vypsat čas CD Backoff, protože používám hard USART a nejsou tam záchytné body na odpočet tohoto času. Musel jsem použít vnořené přerušení, abych to dokázal. V tomto mají klony 2051 výhodu v nastavení priorit přerušení.
Jinak přesnost výpočtu CD Backoff je asi 1%, teda +/- 5uS, to je způsobeno zaokrouhlováním při výpočtech. Nechtělo se mi používat desetinnou tečku, tedy Single formát číslic, protože to extrémně zpomaluje program.
Dost mi chybí registr GPIOR0, který používám na příznaky a tak jsem zneužil EEARL registr, protože EEPROM nepotřebuji.
Obvod používá 3 tlačítka a 5 LEDek na ovládání a zobrazení. Zapnutý stav na USB indikuje první LED zelená. Připravený stav indikuje RGB LED červenou barvou. Červená znamená, že obvod je zastaven.
Volba režimu DCC se volí prvním tlačítkem odspodu. Rozsvítí se zelená RGB dioda a pak se načítají DCC pakety v binárním kontextu. Nuly mezi bajty jsou vynechané i jednička na konci paketu.
pr=10; 11000011 11101000 00111111 10000100 10010000 pr=10; 11000011 11101000 10010000 10111011 pr=10; 11000011 11101000 10110001 10011010 pr=10; 11111111 00000000 11111111 pr=10; 11000011 11101000 00111111 10000100 10010000 pr=10; 11000011 11101000 10010000 10111011 pr=10; 11000011 11101000 10110001 10011010 pr=10; 11111111 00000000 11111111
Pokud předtím stisknete třetí tlačítko, rozsvítí se bílá LEDka a zobrazují se pakety DCC v popisném režimu.
pr=10; A=1000; Sm=<<; Sp=4 pr=10; A=1000; F0+00001 pr=10; A=1000; F5+0001 pr=10; IDLE pr=10; A=1000; Sm=<<; Sp=4 pr=10; A=1000; F0+00001 pr=10; A=1000; F5+0001 pr=10; A=1000; F9+0001 pr=10; A=1000; F13+00000100 pr=10; A=1000; F21+00000001 pr=10; IDLE
pr = počet bitů preambule A = Adresa loko Sm = směr jízdy Sp = rychlost F0+ = bity funkcí F4, F3, F2, F1, F0 F5+ = bity funkcí F8, F7, F6, F5 F9+ = bity funkcí F12, F11, F10, F9 F13+ = bity funkcí F20 > F13 F21+ = bity funkcí F28 > F21
Volba režimu Loconet se zvolí druhým tlačítkem odspodu a rozsvítí se modrá LED na RGB diodě. Tím spustíte načtení Loconet paketů. Údaje se zobrazují v HEX formátu. Jsem na to zvyknutý a nevadí mi to. Udělal jsem to hlavně pro testování CD Backoff, které se zobrazuje na konci každého řádku. Hodnoty nad 20mS jsou nedůležité. To je čas mezi příkazy.
{BF 07 04 43} CD Backoff > 20mS {E7 0E 02 23 04 00 00 07 00 07 00 00 00 33} 1331 uS {BA 02 02 45} 5616 uS {E7 0E 02 33 04 00 00 07 00 07 00 00 00 23} 1328 uS {EF 0E 02 33 04 04 00 07 08 07 00 1A 14 29} 5620 uS {B4 6F 01 25} 1329 uS {BB 7B 00 3F} 5614 uS {EF 0E 7B 04 6B 7F 47 0F 6F 00 40 00 00 12} 1328 uS {A0 02 04 59} CD Backoff > 20mS {BF 03 75 36} CD Backoff > 20mS {E7 0E 03 23 75 00 00 07 00 03 00 00 00 47} 1334 uS {BA 03 03 45} 6324 uS {E7 0E 03 33 75 00 00 07 00 03 00 00 00 57} 1329 uS {EF 0E 03 33 75 06 20 07 08 03 00 1B 14 7E} 6321 uS {B4 6F 01 25} 1322 uS {BB 7B 00 3F} 6324 uS {EF 0E 7B 04 63 7F 48 0F 6F 00 40 00 00 15} 1331 uS {A0 03 06 5A} CD Backoff > 20mS
Komentovaný výpis Loconetu se vypíše po stisknutí třetího tlačítka a rozsvícení bílé LEDky.
BF zadost o slot pro adr =900 E7 odpis slotu=1; stat=0x23; adr=900; SPD=0; DIRF=00000; SND=0000; ID =0 BA oziveni slotu 1 E7 odpis slotu=1; stat=0x33; adr=900; SPD=0; DIRF=00000; SND=0000; ID =0 EF zapis do slotu=1; stat=0x33; adr=900; SPD=0; DIRF=00000; SND=0000; ID =3348 B4 opcode=0xEF; L_OPCODE=0x6F; hlaska=0x01 BB zadost o vypis slotu=123 EF hodiny= 11:13; nas=4x BF zadost o slot pro adr =501 E7 odpis slotu=2; stat=0x23; adr=501; SPD=0; DIRF=00000; SND=0000; ID =0 BA oziveni slotu 2 E7 odpis slotu=2; stat=0x33; adr=501; SPD=0; DIRF=00000; SND=0000; ID =0 EF zapis do slotu=2; stat=0x33; adr=501; SPD=0; DIRF=10000; SND=0001; ID =3476 B4 opcode=0xEF; L_OPCODE=0x6F; hlaska=0x01 BB zadost o vypis slotu=123 EF hodiny= 11:14; nas=4x
Zde jsou vypsány údaje pro dva ovladače 501 a 900 adresy, při prvním přihlášení s pakety 0xBA. Taky jsou oživeny hodiny na slotu 123.
Foto obvodu
K tomuto článku nebol doposiaľ priradený žiadny komentár!