ShowDCC - un "sniffer" pt. DCC

dac

Well-Known Member
Trenulist
15 Septembrie 2007
1.298
1
Bucuresti
LOCATION
Bucuresti
Cautand pe net o modalitate de a vizualiza comenzile transmise de centrala digitala catre sine, am dat peste ShowDCC - o solutie simpla, eleganta si accesibila oricui.

ShowDCC nu necesita cine stie ce echipamente sofisticate, osciloscoape, etc.; foloseste pur si simplu intrarea de microfon a placii de sunet a PC-ului, interconectata la sine prin intermediul unui mic adaptor.



Nici adaptorul in sine nu este o mare inginerie, dar asigura protectia intrarii de microfon fata de nivelul mare al tensiunii DCC. Am gasit 2 variante de adaptor; eu am ales-o pe prima si pt. a nu avea surprize neplacute am "imbracat-o" in banda autovulcanizanta.



Inca de la primele teste ShowDCC se comporta surprinzator de bine: mai pierde cate un bit pe ici pe colo, dar nu e bai si in 99.9% din cazuri identifica perfect pachetele de date.
Am pornit asadar centrala Roco, nerabdator sa vad ce comenzi transmite. Fara nici o tasta atinsa sau buton rotit, centrala trimite intruna pachete "idle".



Rotesc butonul de reglare a vitezei si apar primele pachete de comenzi; se observa intercalarea lor cu pachete idle. (Comanda este de modificare a vitezei pe 7biti deci 128 trepte, adresata decodorului cu adresa 99)



Trimit comenzi de viteza si catre o a doua locomotiva; interesant, pachetele idle dispar, centrala alternand comenzile catre cele 2 decodoare.



Am crescut apoi progresiv numarul locomotivelor comandate (la 20 ma plictisisem deja); conform asteptarilor, centrala trimite pe rand cate un pachet catre fiecare apoi o ia de la inceput; practic, cu cat sunt dirijate mai multe locomotive simultan, cu atat scade frecventa de "refresh" a decodoarelor.



De remarcat ca odata ce o locomotiva a fost folosita, centrala continua sa ii trimita pachete chiar daca ele reprezinta viteza zero, pachete ce contribuie la scaderea refresh-ului. Aceasta poate constitui o cauza a aparitiei intarzierii intre momentul initierii unei comenzi si executarea ei efectiva de catre decodor. De aceea, producatorii limiteaza nr. maxim de decodoare ce pot fi refresh-ate simultan (de ex. Piko la 12).

Am testat apoi trimiterea comenzilor catre decodoare accesorii (macazuri/semafoare). Spre deosebire de comenzile catre locomotive care sunt repetate permanent, cele catre accesorii sunt transmise un timp limitat (23 ori), intercalate cu comenzi catre locomotive.



In final, semnalul DCC prezent la intrarea de microfon poate fi si inregistrat si analizat in programe de editare sunet de genul Cool Edit. Iata o secventa de 8 biti (00011011)

 

dac

Well-Known Member
Trenulist
15 Septembrie 2007
1.298
1
Bucuresti
LOCATION
Bucuresti
Diode de comutatie 1n4148. Cred insa ca merg si diode "obisnuite" 1n400x, frecventele DCC nefiind prea mari.
 

dac

Well-Known Member
Trenulist
15 Septembrie 2007
1.298
1
Bucuresti
LOCATION
Bucuresti
Pai o sa ma "joc" si cu o Digi1 Piko ce zace prin sertare si cam atat, ca pe NanoX am maritat-o demult... (acolo ar fi fost interesant, dar poate o analizeaza altcineva, ca adaptorul asta nu e greu de facut)
 

dac

Well-Known Member
Trenulist
15 Septembrie 2007
1.298
1
Bucuresti
LOCATION
Bucuresti
Am continuat testele cu ceea ce imi scapase ieri: comenzile pt. activare functii locomotive. Si aici surpriza mare: daca pt. refresh-ul vitezei se transmite continuu cate UN pachet pt. fiecare decodor, ei bine pt. refresh-ul functiilor se pot transmite continuu pana la PATRU pachete suplimentare.

Asta pt. ca functiile sunt transmise grupat:
F0-F5 = grup 1,
F6-F8 = grup 2,
F9-F12 = grup2bis,
F13-F20 = grup "future expansion"

Asadar, impreuna cu pachetul pt. viteza ("advanced operation"), in total CINCI pachete pt. refreshul unei singure locomotive :!:



Se observa ca pachetele destinate aceluiasi decodor (adresa1) sunt grupate impreuna si transmise in ordine viteza-grup1-grup2-grup2b-grupfe indiferent de ordinea activarii. Succesiunea lor continua chiar daca functiile sunt inactive si viteza zero.



Nu e de mirare deci, ca frecventa de refresh scade drastic atat cu cresterea nr. de locomotive comandate simultan, dar mai ales cu nr. functiilor folosite. Astfel, 25 de locomotive ce necesita 5 pachete simultan beneficiaza de un singur refresh pe secunda. Asta este totusi un caz extrem, in practica nr. de locomotive este mult mai mic, la fel si functiile folosite; iar delay-urile care apar nu depasesc 0,1 - 0,2 secunde.
 

dac

Well-Known Member
Trenulist
15 Septembrie 2007
1.298
1
Bucuresti
LOCATION
Bucuresti
Am "adulmecat" putin si centrala Piko Digi1 si de la bun inceput apar primele diferente fata de cea Roco: imediat dupa pornire, Piko Digi1 nu transmite pachete idle; in loc, centrala trimite pachete catre primele 4 adrese (viteza zero in format 28 trepte, F1-F8 stinse si F0 - lumini - aprinse)

Interesanta este gruparea comenzilor de acelasi tip catre toate decodoarele spre deosebire de Roco care grupeaza comenzi de tip diferit catre acelasi decodor. De remarcat si alternanta viteza -> F0-F4 -> viteza -> F5-F8.

Pe masura ce se comanda noi decodoare, se pastreaza gruparea dupa tip, in ordinea adaugarii lor.

Apare si prima limitare: numai primele 12 decodoare comandate beneficiaza de refresh; o noua comanda adresata unui al 13-lea decodor, scoate din lista de refresh pe cel mai vechi (adresa 4 inlocuita cu 111 in imaginea de mai sus).

M-am distrat apoi cu comenzi trimise catre adresa zero; in cazul centralei Piko asta inseamna folosirea infamului "zero-stretching" care prin debalansarea semnalului DCC ar permite comandarea unei locomotive fara decodor (analog).

Se observa modificarea "analog level" in partea din stanga-jos a ferestrei cat si o avalansa de erori: se pare ca ShowDCC prezinta aceeasi intoleranta ca si Basic-ul ESU. :D Mai grav este faptul ca, odata pornit "zero-stretching-ul" erorile nu au disparut decat dupa resetarea centralei, oricat m-am chinuit sa aduc la normal comenzile catre loco zero.

In final am testat si comenzi catre decodoarele accesorii (macazuri):

In mod ciudat, transmiterea acestora are loc cat timp este tinuta apasata tasta respectiva, :?: cu diminuarea corespunzatoare a refresh-ului locomotivelor; in plus si inserarea lor intre comenzile catre locomotive este "dubioasa"...
 

LiviuM

Well-Known Member
Trenulist
11 Martie 2011
397
0
Salut,
Dupa cum ma laudam la introducere, ma prefac ca produc o centrala DCC. Merge binisor cu decoderele de locomotive din comert, asa ca m-am aventurat la decodoarele de accesorii de la Paco si cu astea am ceva probleme.
Senzatia mea e ca nu le adresez cum trebuie, de-aia voiam sa te rog, daca mai tii minte, sa-mi zici si mie adresa reala de la decodorul testat de tine in penultima poza din primul post de pe topicu asta (linia albastra din penultimul screen-shot).
Pentru ca desi ShowDcc zice adresa 11, mie din codul hexa (0x83 0xFC) imi iese adresa 3.

Multumesc,
Liviu
 

dac

Well-Known Member
Trenulist
15 Septembrie 2007
1.298
1
Bucuresti
LOCATION
Bucuresti
Nu mai tin minte exact ce decodor am comandat, dar banuiesc ca ShowDCC stie ce spune; pt. adresarea decodoarelor accesorii citeste aici http://www.nmra.org/standards/DCC/standards_rps/RP-921%202006%20Aug%2021.pdf sau aici http://wiki.rocrail.net/doku.php?id=addressing-en-flat

Banuiesc ca adresarea e la nivel de port MADA unde
MADA = (adr-1) x 4 + port +1 adica
MADA = 2 x 4 + 2 + 1 = 11
 

LiviuM

Well-Known Member
Trenulist
11 Martie 2011
397
0
Merci de explicatii / linkuri, deja s-a facut ceva lumina.
Eu stiam numai varianta de la NMRA si aveam probleme cu scos adresa din ShowDcc din adresa modul + porturi. Tot nu m-am prins de ce nu reusesc sa vorbesc cu modulele de la Paco, da' macar inteleg ce-mi zice ShowDcc (m-am jucat si eu cu el, da' nu reuseam sa interpretez informatiile).
 

dac

Well-Known Member
Trenulist
15 Septembrie 2007
1.298
1
Bucuresti
LOCATION
Bucuresti
Eu am montat cateva decodoare servo-point Paco, care merg perfect cu centrala Roco. Verifica sa nu fie un ecart de 4 unitati intre adresa comandata si cea setata in decodor.
 

LiviuM

Well-Known Member
Trenulist
11 Martie 2011
397
0
Ultima data cand am incercat cate ceva am reusit sa fac ceva "sa miste" la unul din decoderele de semafoare (UniSemaf parca), ca am "baleiat" mai multe adrese. M-am uitat si cu ShowDcc la adresele la care a reactionat modulul, da' nu-mi iesea deloc "decodarea".
Acum am ceva mai multe sanse sa inteleg ceva; mai ramane sa-mi gasesc si timpul necesar.
 

LiviuM

Well-Known Member
Trenulist
11 Martie 2011
397
0
He, he, inca o data multumiri nenumarate!
Acum ca am stiut ce sa caut am reusit sa fac UniSemaforul lui Paco sa clipoceasca.
Iupii! Pana la urma se pare ca centraluta mea chiar trimite comenzi DCC pe sarme (am ars bufferul de iesire, asa ca in sine nu trimite deocamdata nimic).

PS Scuzati offtopicul.
 

dac

Well-Known Member
Trenulist
15 Septembrie 2007
1.298
1
Bucuresti
LOCATION
Bucuresti
Si totusi exista o diferenta intre adresa decodor accesorii indicata de ShowDCC si cea transmisa efectiv de centrala Roco !

Aceasta intrucat ShowDCC numara adresele de modul incepand cu 1, in timp ce Roco MMaus numara adresele incepand cu 0. Apare astfel un ecart de 4 unitati, adresa 15 transmisa de centrala fiind citita 11 de ShowDCC.

Interesant ca si centrala Piko foloseste adresele de la 1 in sus desi NMRA specifica clar ca adresele module pot incepe de la 0.

Asadar, cand ShowDCC indica adresa 0 (adresa broadcast :!: ) de fapt Roco acceseaza decodorul cu adresa 4, iar cand centrala trimite comenzi catre decodorul 1, ShowDCC arata adresa -3 :D
 

LiviuM

Well-Known Member
Trenulist
11 Martie 2011
397
0
Eu cred ca e legat de diversele reprezentari ale adreselor. De pe pagina de la rocrail pe care mi-ai zis-o mai sus, reiese ca pentru ca determinarea unei din alta sa aiba "coerenta", adresele NMRA si cele PADA/MADA trebuie sa inceapa de la 1. Daca te uiti acolo, toate adresele NMRA sunt referite de la 1...
Problemele apar cu adresa (NMRA) 0 - care e fix cea transmisa de centrala Roco atunci cand ShowDCC indica -3.
Nu sunt sigur c-am fost suficient de coerent (si nici nu stiu daca-i important). Daca e cazul, detaliez.
 

dac

Well-Known Member
Trenulist
15 Septembrie 2007
1.298
1
Bucuresti
LOCATION
Bucuresti
Te referi la adresele de modul; vad si eu ca pe pagina Rocrail numerotarea incepe cu 1 (asa cum se asteapta si ShowDCC), insa centrala Roco numeroteaza incepand cu 0 (asa cum specifica de altfel NMRA).
 

LiviuM

Well-Known Member
Trenulist
11 Martie 2011
397
0
Da, ma refeream la adresa de modul (numai cei 9 biti specificati de NMRA).
Din pacate, daca la locomotive NMRA e mai strict cu adresele, la accesorii nu zice (parca) nimic, asa ca fiecare face ce vrea.
 

dac

Well-Known Member
Trenulist
15 Septembrie 2007
1.298
1
Bucuresti
LOCATION
Bucuresti
Uite aici http://www.nmra.org/standards/DCC/standards_rps/RP-921%202006%20Aug%2021.pdf alin. 40, si alin. 400-475

Adresele accesorii pot fi intre 0-511 (pe 9 biti), sau 0-2047 (pe 11 biti); in ambele cazuri ultima adresa are valoare de broadcast.