BeneluxSpoor.net forum

Vraag en antwoord => Digitaal => Topic gestart door: mcs51 op 28 July 2022, 12:09:37

Titel: Arduino Wisseldecoder Rocrail
Bericht door: mcs51 op 28 July 2022, 12:09:37
Hallo,
Ik probeer met het voorbeeld "NMRADccAccessoryDecoder_Pulsed_8" uit de Aruino NMRA DCC library een wisseldecoder te maken.

Via Rocrail, een MS2 en een CC-Schnitte zet ik DCC data op de rails.
Ik heb in Rocrail een demo baantje gemaakt met 2 wissels op adressen 1 & 2 en in Rocrail explicit NMRA DCC als protocol gekozen.
Klik ik op de wissels in het Rocrail scherm, dan zie ik op het scherm van de MS2 dat die wissel om gaat.
Omgekeerd is ook ok, bedienen op de MS2, wissel op PC scherm gaat om.

Echter in de Serial Monitor van de Arduino komt geen boodschap dat er een wissel commando gezien werd  :-[
Nochthans staan CV1 en 9 op standaard waarden 1 en 0 waardoor het eerste adres van deze Arduino 1 is, right?

Compileer ik de code zodanig dat ALLE DCC boodschappen getoond worden, dan krijg ik wel data te zien bij elke wisselbediening zowel op de PC (Rocrail) als op de MS2
Bij wissel 1 groen 4 maal "81 F9 78" en 2 maal "81 F1 70"
Bij wissel 1 rood 4 maal "81 F8 79" en 2 maal "81 F0 71"

Bij wissel 2 groen 4 maal "81 FB 7A" en 2 maal "81 F3 72"
Bij wissel 2 rood 4 maal "81 FA 7B" en 2 maal "81 F2 73"

Het feit dat er data te zien is, doet mij geloven dat mijn hardware om het DCC signal van de rails te "plukken" wel ok is, right again??

Maar wat heb ik niet goed gedaan met de Arduino dat hij die data niet als wissel data ziet ?  ???  ?

Dan nog een vraagje :
Hoe moet ik de data van CV1 en CV9 aanpassen om een ander basis adres te hebben?
Is mij niet duidelijk in de "NMRADccAccessoryDecoder_Pulsed_8" code

Bedankt voor elke input want ik zit een beetje vast  :-\
en voor een wissel is dat NOOIT goed  ;D


Met vriendelijke groet
Alain
Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: bask185 op 28 July 2022, 12:32:59
Het lijkt mij op het eerste oog dat het adres van de Arduino niet is wat het moet zijn.

Ik word niet wijzer van de uitgepoepte data. De adressen althans. Mijn ervaring met de nmra DCC library is dat die wel goede getallen uitpoepte.

Heb je een link naar de source code? Je mag ook je project in een zip stoppen en dat naar me mailen. Adres staat bij het vlinder logo onder mm account naam.

Mvg,

Bas
Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: mcs51 op 28 July 2022, 13:06:04
Dank u wel Bas voor de snelle reactie!

Ik zal u de code doormailen maar het is 100% het voorbeeld "NmraDccAccessoryDecoder_Pulsed_8" uit de NmraDcc lib.
Ik heb er geen letter aan gewijzigd.
Dus wanneer je die lib geïnstalleerd hebt, heb je die code ook.

Daar ik default waardes gebruik van dat voorbeeld, heb ik ook wisseladressen 1 en 2 gebruikt in Rocrail en de MS2 (die trouwens ook op DCC staat wat magneetartikelen betreft).


Alain
Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: mcs51 op 28 July 2022, 19:49:17
Het verhaal van een beetje speurwerk… …

Base adres wijzigen is geen probleem meer.
In de struc FactoryDefaultCVs de gewenste waardes ingeven en bij power up komt er in de serial monitor venster het gewenste base address.

Maar een Turnout message, neen die krijg ik nog steeds niet  :'(

Moet ik het NMRA adres niet omzetten naar MADA ?  ???  ?
Dus bijvoorbeeld NMRA DCC adres 100 = MADA Adres 25, poort 4

Dit zo geconfigureerd in Rocrail
NMRA DCC 1 = MADA Adres 1 poort 1
NMRA DCC 2 = MADA Adres 1 poort 2
Noppes, niet te doen alles blijft werken tussen MS2 en Rocrail maar geen Turnout message te zien in de Serial Monitor window van de Arduino.


Dan voor de fun eens zot gedaan en wissel 1 in Rocrail verzet naar NMRA DCC adres 513 = MADA Adres 129, poort 1
Arduino CV1= 1 en CV9= 2 is base adres 513
Maar nog steeds geen muziek  :'( :-\ :'(
Wel gaat de MS2 wissel op adres 1 niet meer mee met Rocrail, zoals te verwachten  :)


Tja zoals ik reeds zei, alle inputs welkom!!
Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: bask185 op 28 July 2022, 22:44:44
Ik heb volgende week maandag pas tijd helaas  :-\.

Ik heb er ook weinig ervaring mee, dus ik kan je ook niet vertellen wanneer of of ik een oplossing heb   :P.

Maar ik denk er wel uit te komen  ;D

Mvg,

Bas



Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: mcs51 op 29 July 2022, 07:39:38
Altijd positief blijven Bas, that's the spirit!!

Mocht je al kunnen bevestigen dat dit voorbeeld (NmraDccAccessoryDecoder_Pulsed_8.ino) "as such" wel of niet werkt met andere zuiver DCC hardware zou dit al ok zijn.
Dan weet ik dat mijn hardware wel ok is en dat het probleem in de adressering ligt.


Alvast bedankt
Alain
Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: AlbertG op 29 July 2022, 08:21:02
Ik gebruik een DCC++ EX centrale met bijbehorende software en het zou maar zo kunnen dat deze gebruik maakt van dezelfde DCC bibliotheek.
In Rocrail moet ik daarvoor het MADA adresschema volgen, dat is de DCC standaard.

Zomaar een gedachte:
Stuurt de MS2 het adres wel op deze manier verder? Als die er PADA van maakt is het logisch dat je decoder niet reageert lijkt me.


Succes
Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: mcs51 op 29 July 2022, 10:08:32
Dag Albert,

Wanneer je #include <NmraDcc.h> in de code van de DCC++ EX centrale kan vinden, dan gebruikt die inderdaad dezelfde library.
Met een "Find" opdracht in de Arduino code zal je het snel weten.

Ik denk dat ik goed zit met MADA omdat ik een LDT TT_DEC decoder heb en die werken in adres bereik 14 (209 tem 224) of 15 (225 tem 240)
Met 100% dezelfde hardware en Rocrail heb ik "losse" wissels in een baanplan gezet met MADA conversie van de adressen 209 tem 224
Door die "wissels" te bedienen doet de draaischijf wat ik verwacht
Dus denk ik dat ik met MADA goed zit, of niet?

Alain
Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: Karst Drenth op 29 July 2022, 13:33:17
In Rocrail moet ik daarvoor het MADA adresschema volgen, dat is de DCC standaard.

Stuurt de MS2 het adres wel op deze manier verder? Als die er PADA van maakt is het logisch dat je decoder niet reageert lijkt me.

Kan iemand, of jij Albert, eens precies uitleggen wat het op zich heeft met MADA/PADA/TADA etc... Ik heb geen idee wat Rob gerookt heeft toen hij dat heeft bedacht...  ;D ;)
DCC heeft 1 lineair adresbereik van 1-2048. En ik ken geen DCC centrale-protocol dat dat lineaire bereik niet ondersteund, sterker alleen (!!) maar lineair.

Grtzz,
Karst
Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: mcs51 op 29 July 2022, 13:57:48
Ik heb een Arduino Mega met DCC++ (geen EX) uit de kast gehaald ter vervanging van de de MS2, CC-Schnitte & Rocrail

Dan, slechts 1 wissel aangemaakt in de Mega met ID= 1, Address= 1 en SubAddress= 1 (dus <T 1 1 1>)

Dan power up de DCC++ en de wissel aangestuurd met
<T 1 1> = rood = afslaan
<T 1 0> = groen = rechtdoor

and guess what  ??? ??? ??? ???


Juist dezelfde data in de Serial Monitor van de Arduino met de test wisseldecoder software

5 messages 81 FB 7A bij <T 1 1>
5 messages 81 FA 7B bij <T 1 0>

maar geen enkele Turnout messages grrrrrrr
 
Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: bask185 op 29 July 2022, 16:21:41
Citaat
Ik heb geen idee wat Rob gerookt
;D Die gedachte heb ik dus bij dit...

Citaat
81 FB 7A
Waarom niet iets begrijpbaars als:

"turnout command: address 4, curved"

0xFA is 250 decimaal. Ik zou dus verwachten 0x04
0xFB is 251 decimaal,  "  "    "            "            0x05

255 - 251 = 4
255 - 250 = 5

Ik weet niet of dat normaal is in DCC. Bij loks in ieder geval niet en ik word ook niet gelukkiger van de matige beschrijving in Nmra documentatie..

Mvg

Bas.

Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: meino op 29 July 2022, 16:35:51
Er staat me vaag bij, dat er iets is met de adressen van wisseldecoders. Dat had geloof ik te maken met de index waarde zoals die oorspronkelijk door Lenz was gebruikt. Moest je er geen 4 bij optellen?

Groet Meino
Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: mcs51 op 29 July 2022, 16:41:59
;D Die gedachte heb ik dus bij dit...
Waarom niet iets begrijpbaars als:

"turnout command: address 4, curved"

Mvg

Bas.


Euh… …
Kijkend naar de code van het voorbeeld sketch verwacht ik wel een duidelijke tekst in de Serial Monitor Window… …
Zie // This function is called whenever a normal DCC Turnout Packet is received
void notifyDccAccTurnoutOutput( uint16_t Addr, uint8_t Direction, uint8_t OutputPower )
{
#ifdef  NOTIFY_TURNOUT_MSG
  Serial.print("notifyDccAccTurnoutOutput: Turnout: ") ;
  Serial.print(Addr,DEC) ;
  Serial.print(" Direction: ");
  Serial.print(Direction ? "Closed" : "Thrown") ;
  Serial.print(" Output: ");
  Serial.print(OutputPower ? "On" : "Off") ;
#endif
  if(( Addr >= BaseTurnoutAddress ) && ( Addr < (BaseTurnoutAddress + NUM_TURNOUTS )) && OutputPower )
  {
    uint16_t pinIndex = ( (Addr - BaseTurnoutAddress) << 1 ) + Direction ;
    pinPulser.addPin(outputs[pinIndex]);
#ifdef  NOTIFY_TURNOUT_MSG
    Serial.print(" Pin Index: ");
    Serial.print(pinIndex,DEC);
    Serial.print(" Pin: ");
    Serial.print(outputs[pinIndex],DEC);
#endif
  }
#ifdef  NOTIFY_TURNOUT_MSG
  Serial.println();
#endif
}

Maar blijkbaar herkent de sketch  geen Turnout command en aangezien ik “ALLE DCC Messages” gevraagd heb
// You can print every DCC packet by un-commenting the line below
#define NOTIFY_DCC_MSG

krijg ik die 3 bytes te zien bij elke turnout actie die ik doe

Dus aan de ene kant is het wel DCC omdat de sketch erop ingaat maar blijkbaar geen turnout command?!!?
Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: AlbertG op 30 July 2022, 08:31:41
Kan iemand, of jij Albert, eens precies uitleggen wat het op zich heeft met MADA/PADA/TADA etc...

Hier de link naar de Engelstalige Rocrail wiki waar het wordt uitgelegd
https://wiki.rocrail.net/doku.php?id=addressing-en#bus (https://wiki.rocrail.net/doku.php?id=addressing-en#bus)

Het komt voort uit het feit dat verschillende centrales verschillende adresseringsschema's hanteren.
Zo werkt de DCC++ EX centrale (maar ook de oorspronkelijke (DCC++) met het volgende commando om een wissel te definiëren:
<T id address subaddress>, dus een adres en een subadres, in Rocrail het Adres (van de module) en de Poort (1 t/m 4) op die module.

Maar ik zie nu in dat dat in de nieuwste DCC++ EX software vervangen is door:
<T id DCC address subaddress> en
<T id DCC linearaddress>

Bron:
https://dcc-ex.com/reference/software/command-summary.html#turnouts (https://dcc-ex.com/reference/software/command-summary.html#turnouts)

Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: mcs51 op 30 July 2022, 09:20:45
Opgelost !  (y) !

Er zat een "vergetelheidje" van Alex in dat voorbeeld

On line 137 of the sketch change:

Dcc.init( MAN_ID_DIY, DCC_DECODER_VERSION_NUM, CV29_ACCESSORY_DECODER, 0 );
To look like:
Dcc.init( MAN_ID_DIY, DCC_DECODER_VERSION_NUM, FLAGS_OUTPUT_ADDRESS_MODE | FLAGS_DCC_ACCESSORY_DECODER, 0 );
en dan werkt alles perfect!
Merk wel dat de ontvangen hex codes nog steeds dezelfde zijn maar nu kan de sketch ze blijkbaar ook correct vertalen en de pinnen van de Arduino aansturen.


Maar ik heb nu een volgende vraag voor Rocrail specialist @AlbertG
Met Rocrail krijg ik 4 boodschappen om een spoel van een wissel aan te sturen onmiddelljk gevolgd door 4 boodschappen om de spoel terug uit te schakelen.
Lijkt logisch omdat we slechts een puls van x ms wensen op de spoelen van een wissel.
Echter die puls wordt beheerd door de Arduino wisseldecoder, Rocrail hoeft zich daar niets van aan te trekken, enkel een commando wissel x naar positie y geven, meer niet.

Is dit mogelijk?

Ik heb de optie "Schakeltijd" al uitgevinkt en die tijd ook op 0 gezet maar die 4 "OFF" messages blijven maar komen  :-\


Ok, ik geef toe dat het geen kwaad kan maar aangezien ze overbodig zijn en Rocrail de optie heeft om ze uit te schakelen zou ik ze niet meer verwachten.
Dat zijn trouwens ook 4 overbodige boodschappen die de communicatie maar overbelasten.


Alvast bedankt voor jullie inputs tot nu!

Met vriendelijke groet
Alain
Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: AlbertG op 30 July 2022, 14:13:27
Hoi Alain,
Fijn dat je het opgelost hebt. Ik snap absoluut niets van de code die je opschrijft maar dat is prima zo.

Bij Rocrail eigenschappen, tabblad Auto kun je rechtsonder de (globale) schakeltijd instellen. Ik heb geen idee wat er gebeurt als je die op 0 zet. Ik heb me daar nooit druk om gemaakt. Het lijkt me logisch dat als je iets 'aan' zet, dat je het ook weer 'uit' zet.

Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: mcs51 op 30 July 2022, 15:43:19
Dag Albert,
Bedankt voor het aanwijzen van die 500ms maar die heeft ook geen invloed op de 4 "OFF" messages.
Die blijven maar komen  :-*

Je hebt 100% gelijk, wanneer men iets aan legt moet het ooit weer eens af gelegd worden, zeker met deze hoge energieprijzen  :angel:
Echter; de wisseldecoder legt die spoel terug af!
Dus Rocrail hoeft zich daar niets meer van aan te trekken.
Des te meer wanneer Rocrail de mogelijkheid bied om de schakeltijd AF te leggen met een vinkje.

 :-X Garantie heeft persoon A de user interface gemaakt en persoon B de code geschreven zonder rekening te houden met dat vinkje  :-X
Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: AlbertG op 30 July 2022, 20:46:08
Echter; de wisseldecoder legt die spoel terug af!

Volgens de Rocrail wiki is dat ook de enige juiste methode.

Als je vind dat die opdrachten er niet zouden moeten zijn kun je het best een incident melding maken op het Rocrail forum.
Persoonlijk maak ik me niet zo druk over die paar extra opdrachten. Als ik kijk wat mijn PC verder allemaal doet op de achtergrond stellen die paar opdrachten niets voor.
Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: mcs51 op 31 July 2022, 07:57:10
Dank u wel Albert voor deze info!
Ik zal eerst de wisseldecoder volledig bouwen en testen, dan zien we wel... ...


Het is niet de PC waar ik mee inzit, wel het aantal boodschappen over de rails gaan, DCC, MM, mfX
Je kan de rails als een ethernet kabel zien, op een  bepaald moment krijg je er geen speld meer tussen.
Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: mcs51 op 28 August 2022, 13:04:26
Dag op dag 1 maand later print operationeel  (y)
dmv een Arduino Uno DCC wisselcommando's naar een Arduino Mega met DCCpp Basestation code gestuurd
De Mega zet de wisselcommando's op de rails, de wisseldecoder print pikt die terug op en stuurt, niet 8 wissels, maar wel 16 relais aan, is ook een magneetartikel hé  :angel:
Contact van relais komt dan terug naar de Arduino Uno die controleert of wel de juiste relais aangesproken werd.
Is dit zo, dan gaat de code naar de volgende relais
Is dat niet zo, dan stopt de sequentie en wordt die spoel om de 20 seconden aangestuurd om aan te geven waar de boel is vastgelopen.
Zie video op joeptjoep
https://www.youtube.com/watch?v=Cbl4h3NmOD0 (https://www.youtube.com/watch?v=Cbl4h3NmOD0)

Op die print heb ik 3 Arduino nano's elk 24 uren laten lopen zonder probleem
de blauwe Arduino Nano Every
de groene Arduino R3
de zwarte, wanne-be Arduino, Joy-It


(https://images.beneluxspoor.net/bnls_2022/DrieNanos-630b4c4467f65.jpg) (https://images.beneluxspoor.net/bnls_2022/DrieNanos-630b4c4467f65.jpg)

Bottom line: de zoveelste home-made DCC wisseldecoder is een feit!
Titel: Re: Arduino Wisseldecoder Rocrail
Bericht door: AlbertG op 30 August 2022, 08:23:36
Gefeliciteerd met het resultaat. Mooi dat het werkt.