Dette er ikke en revolusjonerende nyhet eller noe jeg har funnet på selv. Men jeg fikk så lyst til å lage en sniffer for å vite hvilke meldinger som går fra kommandosentralen til dekoderene. Og bakgrunnen for det behovet er at jeg vil lage både stasjonære dekodere og betjeningsenheter basert på Arduino mikroprosessorer. Og da må jeg ha kontroll over kommunikasjonen både på DCC signalet og på kommandobussen.
Litt søking på nettet, og man finner stort sett samme måte å tappe DCC signalet fra skinnegangen på. En enkel krets med en optokopler, en diode og noen motstander er det som skal til. En problemstilling som dukket opp er at "alle" bruker en rask optokopler, 6N137 el.l, og jeg har ikke den på lager. Den jeg har liggende er PC817, og "mange" rapporterer at den virker ikke. Den er for treg.
Nå tar man den problemstillingen kun som en utfordring. Bildene under illustrerer hvordan pulsene i DCC signalet ser ut før og etter PC817 optokopleren. Man ser inngangsiden med de (relativt sett) fine firkantpulsene til venstre og utgangen med den halverte, likerettete pulsen til høyre. Ideelt sett skulle man sett firkanter på utgangen og. 
Iht NMRA standarden skal en halv 1-bit puls være på 58us (+/- 6us), og en halv 0-bit puls være på 100us (nedre grense 90us, øvre grense 10ms). På mitt upresise skop målte jeg ca 30us for 1-bit og 76us for 0-bit. Men pulsene var detekterbare og skillbare, så det er bare å tilpasse programvaren til de målte pulsverdiene, så bruk av PC817 optokopler er ikke noe problem.
Den nødvendige programvaren er det flere muligheter for. Det finnes biblioteker, men jeg fant et godt utgangspunkt uten bruk av biblioteker på https://rudysmodelrailway.wordpress.com/2015/10/23/dcc-sniffer-packet-analyser-with-arduino/" rel="nofollow - https://rudysmodelrailway.wordpress.com/2015/10/23/dcc-sniffer-packet-analyser-with-arduino/ (Cred til Rudy!) Jeg måtte initielt fikse noen feil i programvaren (indekser i ringbuffer og loknumre over en viss verdi), men den største endringen er at programvaren var satt opp til å vise monitoreringen i seriell overvåker på den PC-en man hadde Arduinoen koplet til, mens jeg ønsket en løsning med visning på en TFT-skjerm uavhengig av PC. Noen andre endringer ble det og etter hvert. Jeg måtte og sette meg inn i NMRA-standardene (og de er ikke alltid helt klare og heller ikke det man kan kalle lettlest litteratur.
Men det ble nå et resultat til slutt. Jeg har brukt en Arduino Mega med et TFT-shield påkoplet. Et lite kretskort er laget for å være grensesnitt mot DCC. En Uno eller Nano kan ikke brukes da skjermen bruker den pinnen som i utgangspunktet ble brukt til inngangssignalet. En Mega gir fysisk tilgang til andre pinner med nødvendig interruptfunksjon.
------------- Helge F.
|