MODELLJERNBANEFORENINGEN I NORGE (MJF) - forum

  FAQ FAQ  Søk i forum   Arrangement   Registrer ny bruker Registrer ny bruker  Logg inn Logg inn

DCC Sniffer

 Svar Svar
Forfatter
  Tråd Søk Tråd Søk  Innstillinger for tråd Innstillinger for tråd
hflesche Se rullemeny
Medlem i MJF
Medlem i MJF


Medlem siden: 15 november 2004
Land: Norway
Status: Utlogget
Points: 62
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér hflesche Sitér  SvarSvar Direkte Link til dette innlegget Tråd: DCC Sniffer
    Sendt: 04 januar 2020 kl. 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.
Til toppen
hflesche Se rullemeny
Medlem i MJF
Medlem i MJF


Medlem siden: 15 november 2004
Land: Norway
Status: Utlogget
Points: 62
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér hflesche Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 09 februar 2020 kl. 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.
Til toppen
hflesche Se rullemeny
Medlem i MJF
Medlem i MJF


Medlem siden: 15 november 2004
Land: Norway
Status: Utlogget
Points: 62
Innstillinger for innlegg Innstillinger for innlegg   Thanks (0) Thanks(0)   Sitér hflesche Sitér  SvarSvar Direkte Link til dette innlegget Sendt: 16 mars 2020 kl. 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.
Til toppen
 Svar Svar
  Del innlegg   

Forum: Forumtillatelser Se rullemeny

Forum Software by Web Wiz Forums® version 11.06
Copyright ©2001-2016 Web Wiz Ltd.

Denne siden ble generert på 0,078 sekunder.