MODELLJERNBANEFORENINGEN I NORGE (MJF) - forum

  New Posts New Posts RSS Feed - DCC Sniffer
  FAQ FAQ  Forum Search   Events   Register Register  Login Login

DCC Sniffer

 Post Reply Post Reply
Author
hflesche View Drop Down
Medlem i MJF
Medlem i MJF


Joined: 15 november 2004
Location: Norway
Status: Offline
Points: 103
Post Options Post Options   Thanks (0) Thanks(0)   Quote hflesche Quote  Post ReplyReply Direct Link To This Post Topic: DCC Sniffer
    Posted: 04 januar 2020 at 16:41
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å 
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.
Back to Top
hflesche View Drop Down
Medlem i MJF
Medlem i MJF


Joined: 15 november 2004
Location: Norway
Status: Offline
Points: 103
Post Options Post Options   Thanks (0) Thanks(0)   Quote hflesche Quote  Post ReplyReply Direct Link To This Post Posted: 09 februar 2020 at 13:44
Hva er forskjellen mellom en "sniffer" og en "lytter"? Tja, det kan man sikkert debattere i det vide og brede. Men nå har jeg nå laget meg noe jeg kaller en "DCC lok lytter" i tillegg til min tidligere omtalte "DCC Sniffer".

Først en liten oppdatering fra forrige innlegg. Jeg har nå fått 6N137 optokopler i hus og tatt den i bruk. Så da kan jeg operere med et inngangssignal som har fine firkantpulser og ikke sagtennene som produseres med PC817 optokopler. Om dette har noe betydning for detekteringen av signalene, skal jeg la være usagt. Jeg kan ikke observere at den ene eller den andre gir bedre deteksjonsevne.
Men her er signalene slik de nå vises på skopet:


Så over til selve lytteren.
Behovet for en DCC lok lytter utledes av et ønske om å kunne følge med statusen på en mobil dekoder. Man kan tenke seg at man vil se på et annet lok enn det man har i håndkontrolleren, eller at man har en annen person som lokfører og vil monitorere hva vedkommende gjør.
Nå finnes det jo andre løsninger som dekker et slikt behov. Store PC-skjermer og avansert programvare. Men jeg vil ha en liten skjerm, og ta "selvgjort er velgjort" til følge. Er det ikke det som er noe av kjernen i hobbyen?

Lytteren er basert på en Arduino Nano som viser dekoderstatus på en 16x4 skjerm. Fire linjer gir mulighet for å vise adresse og fart, samt alle funksjonataster fra F0 til F28.
Egetprodusert kretskort med grensesnitt mot skinnegangen for å tappe DCC-signalene.

En liste holder oversikt over dekoderene. Når strømmen slås på (eller Arduinoen resettes), er listen tom. For hver mottatte melding oppdateres status på dekoderen i listen, og nye dekodere legges til etter hvert som de er blitt aktivert. Det er begrenset med minne i Arduinoen, så jeg har satt en grense på 20 dekodere i listen. Har ikke undersøkt hvor langt jeg kan tøye denne grensen utover at 100 var altfor mange for minnekapasiteten, men på mitt anlegg er det ikke behov for mer enn 20, snarere færre.
To trykknapper ved siden av skjermen gjør det mulig å bla opp og ned gjennom dekoderlisten. For den valgte dekoderen blir status holdt oppdatert hvis nye meldinger kommer til.

Her er skjermen:

Helge F.
Back to Top
hflesche View Drop Down
Medlem i MJF
Medlem i MJF


Joined: 15 november 2004
Location: Norway
Status: Offline
Points: 103
Post Options Post Options   Thanks (0) Thanks(0)   Quote hflesche Quote  Post ReplyReply Direct Link To This Post Posted: 16 mars 2020 at 19:35

Praktisk anvendelse av DCC Snifferen: Verifisering av at korrekte DCC-meldinger sendes ut på basis av kommandoer fra en Arduino til kommandostasjonen.

 

Brukerens behov: slå på markeringslys på alle lokomotiver når hovedbryter for anlegget slås på.

 

Jeg kjører NCE systemet. Der benyttes det en RS-485 buss fra trottlene til kommandostasjonen. Jeg satte opp en Arduino Nano tilkoplet RS-485 grensesnitt og benyttet meldingsprotokollen som gjelder for NCE's USB interface.

Ved oppstart poller kommandoenheten alle trottler på kommandobussen en for en De som svarer blir pollet oftere enn de som ikke responderer. Arduinoen har fått sitt hardkodete trottelnummer. Når den polles, svarer den med en melding om å slå på F0 for en gitt dekoder inntil den har rotert gjennom alle programmerte dekodere. Alle mine dekodernumre (loknumre) er hardkodet i Arduinoens programvare, så ved eventuelle endringer må jeg laste inn ny programvare (men det er en enkel sak).

 

Dekoderene er programmerte og lysoppsett er slik at F0 slår på markeringslys. Her vises bilde fra snifferen med de meldingene som går ut ved oppstart.



Har og implementert en nødstopp-knapp. Når den trykkes, initieres stopp-meldingene i Arduinoen, og den svarer med de når den polles. En melding pr dekoder inntil alle lok har fått sendt stoppordre. 

Her er tilhørende bilde fra snifferen:


Helge F.
Back to Top
 Post Reply Post Reply

Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 12.05
Copyright ©2001-2022 Web Wiz Ltd.

This page was generated in 0,043 seconds.