DCC Sniffer |
Post Reply ![]() |
Author | |
hflesche ![]() Medlem i MJF ![]() Joined: 15 november 2004 Location: Norway Status: Offline Points: 106 |
![]() ![]() ![]() ![]() ![]() 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å 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.
|
|
![]() |
|
hflesche ![]() Medlem i MJF ![]() Joined: 15 november 2004 Location: Norway Status: Offline Points: 106 |
![]() ![]() ![]() ![]() ![]() |
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.
|
|
![]() |
|
hflesche ![]() Medlem i MJF ![]() Joined: 15 november 2004 Location: Norway Status: Offline Points: 106 |
![]() ![]() ![]() ![]() ![]() |
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.
|
|
![]() |
Post Reply ![]() |
|
Tweet |
Forum Jump | Forum Permissions ![]() You cannot post new topics in this forum You cannot reply to topics in this forum You cannot delete your posts in this forum You cannot edit your posts in this forum You cannot create polls in this forum You cannot vote in polls in this forum |