Doel:€250.00
Donaties:€50.00

Per saldo:€-200.00

Steun ons nu!

Laatst bijgewerkt
op 03-01-2024

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

NS 8400 van Werps door MathynK
Vandaag om 07:05:15
De (3d) knutsels van Ronald. door Jan-Peter
Vandaag om 00:04:32
U-vorm beperkte ruimte (H0 C-rails) door hmmglaser
28 maart 2024, 23:42:04
Onlangs gespot - gefotografeerd, de foto's door GerardvV
28 maart 2024, 23:37:18
US diorama in H0 door Wim Vink
28 maart 2024, 23:31:57
Al mijn goede ideeën... door bask185
28 maart 2024, 23:12:12
Gebruik je Arduino zonder te "programmeren" ;) door bask185
28 maart 2024, 22:51:58
21 april Het stoomgenootschap door bloemenvelden door Seinhuis
28 maart 2024, 22:46:29
7 april De Karel on tour door Seinhuis
28 maart 2024, 22:44:31
Raadplaatje door Magic
28 maart 2024, 22:23:21
LokSound 4 decoders, files verbeteren (voor Roco b.v. TEE RAm, NS2400, etc) door Biesje
28 maart 2024, 22:06:44
Geluid NS Mat'46 vs NS Mat'54 door Rob Bennis
28 maart 2024, 21:54:12
Engelse wagon uit 1930 opgegraven in Antwerpen door willem2
28 maart 2024, 21:52:45
NS GLY omspuiten en opschriften door Rob Ellerman
28 maart 2024, 21:45:55
De Hondsrugbaan door cor_b
28 maart 2024, 21:40:07
welk jaar ging Marklin OVP voor wagons van blauw naar wit door Railman
28 maart 2024, 21:36:50
Mallnitzer Tauernbahnstrecke ÖBB N Spoor door Schachbrett
28 maart 2024, 21:22:18
Mijn eerste H0-modeltreinbaan in aanbouw door puntenglijder
28 maart 2024, 21:15:13
Bouw van materieel 40 treinstellen door Rob Bennis
28 maart 2024, 21:09:04
30 maart Modelspoorbeurs Houten & HCC Kennisdag door basjuh1981
28 maart 2024, 20:54:43
Hengelo in 1981-1982, maar dan anders: Kassenberg in N door 1200blauw
28 maart 2024, 20:32:41
Welke Vallejo kleur voor drijfstangen van een DB stoomlocomotief? door Ronald69
28 maart 2024, 20:00:39
Toon hier je nieuwe (model-) spooraanwinst(en)... door arnout
28 maart 2024, 19:53:27
Punt- en hartstukken door Klaas Zondervan
28 maart 2024, 19:41:21
MARDEC, de Multifunctionele ARduino dcc DECoder. door bord4kop
28 maart 2024, 19:34:37
Piko NS 2015 stroomafname probleem door Ben
28 maart 2024, 19:08:30
Bauarbeiten im gange door ruudns
28 maart 2024, 18:50:26
HSM D1715 door vpeters1984
28 maart 2024, 17:34:25
Beekdaelen in H0 door Stieven76
28 maart 2024, 17:17:41
Ombouw/Pimpen Bolle neuzen door bollen neus
28 maart 2024, 15:58:15
  

Auteur Topic: DCC++ centrale en arduino: ervaringen?  (gelezen 28649 keer)

GP20

  • Offline Offline
  • Berichten: 52
Re: DCC++ centrale en arduino: ervaringen?
« Reactie #15 Gepost op: 04 oktober 2018, 18:52:39 »
Update:

Heb inmiddels de potmeter vervangen door een encoder, heeft wat moeite gekost. De encoder code werkte bij mij niet. Ik heb daarom een code van de Arduino pagina afgehaald en die in een nieuwe DCC++ Throttle sketch verwerkt.

Noodstop werkt ook voor zover mogelijk, loc wordt stilgezet en ingestelde snelheid op 0. De baanspanning gaat ook op 0. Door het laatste zullen de locs direct stilstaan, dat is nodig want een eventuele 2e Throttle kan ik niet direct beinvloeden vanuit de andere Throttle. (of ze moeten heen en weer kunnen praten maar da's een ander project)

Ik wil nog een functie inbouwen dat als ik rangeer ik een knop kan induwen om de loc direct stil te zetten (niet de noodstop maar meer een "rangeerstop").
Daarom zou ik graag het DCC commando weten van de STOP knop in de rijregelaar van JMRI.

Kan iemand me daaraan helpen?
Het zou een dergelijk commando moeten zijn <t1 3 0 1> Het is alleen zo dat met letterlijk dit commando de loc uitrolt en niet direct stopt.

EDIT:
Denk dat ik hem heb: <t1 3 -1 0of1>

morgen testen, vanavond geen tijd helaas.


« Laatst bewerkt op: 04 oktober 2018, 19:23:37 door GP20 »
mvg, Leo

bask185

  • Offline Offline
  • Berichten: 4009
Re: DCC++ centrale en arduino: ervaringen?
« Reactie #16 Gepost op: 05 oktober 2018, 08:21:56 »
Ik kan weinig informatie over precies dit puntje vinden. Ik heb deze doorgelezen
http://www.modelspoorh0.nl/downloads/ESU%20Lokprogrammer%20Versie%20271.pdf
http://www.esu.eu/uploads/tx_esudownloads/51982_LokPilot_V40_Family_ESUKG_EN_User-manual_Edition_3_eBook.pdf

Er is ook een universeel E-stop commando waar alle locs op reageren maar dat willen we natuurlijk niet. En dit kon ik ook ff niet vinden

Ik weet  dat ik bij mijn M* een trein meteen kan stoppen als ik van rijrichting wissel. Ik weet niet of daarvoor ook nog een aparte E-stop instructie wordt gestuurd.

Voor zover ik weet, hebben nagenoeg alle decoders die optrek- en remvertraging, ook een schakelbare functie die dit uit zet. Deze is, dacht ik, standaard actief. Dan luistert je loc direct naar je regelaar. Bij esu lopi V4 is het F4. Ik weet niet of dit uitkomst voor je biedt?

Train-Science.com
Train-Science github
It ain't rocket science ;-)

bask185

  • Offline Offline
  • Berichten: 4009
Re: DCC++ centrale en arduino: ervaringen?
« Reactie #17 Gepost op: 05 oktober 2018, 08:26:55 »
O.o ik heb iets gevonden:
http://web.archive.org/web/20091027154943/http://www.geocities.com/OzDCC/dcctut02.htm

Citaat
Baseline Packets

There are many types of packets used in a DCC system but for the moment we will only look at what are called the Baseline Packets. Compliance with these packets is mandatory in a DCC system which means that all Command Stations and Decoders must use or recognise them. There are many other optional packets and these are described in the Extended Packet and the Service Mode Recommended Practices. The optional packets will be discussed in future articles. In the packet examples given below the bit values 1 and 0 are mandatory for that type of packet whilst bit values such as A, D, E etc are alterable values for that packet which are defined in the text.

Speed & Direction Packet for Mobile Receivers

1111111111 0 0AAAAAAA 0 01DUSSSS 0 EEEEEEEE 1

Preamble Address Byte Data Byte Error Byte

The address byte contains the binary address that can be from 0 to 127depending on the value of "AAAAAAA". It is permissible for command stations to address a reduced range of addresses, some have as little as eight addresses but more commonly ninety-nine. The zero at the start of the byte allows address space for other non compulsory packets such as those for accessory control.

The data byte starts with the bits "01" again to allow space for non compulsory packets such as function control (lights, bells, couplers etc). The next bit (bit 5 labelled D) provides for direction, "1" indicates move forward, "0" reverse. Bit 4, called the "U bit", is undefined in the baseline standard and was originally used by Lenz for headlights but is now used as the least significant bit for 28 speed control.

The speed control, bits 0 - 4 and labelled SSSS, allow for sixteen values. The first, "0000", is a Stop command. Emergency stop has the value "0001" while the rest of the values from "0010" to "1111" are the speed steps 1 to 14. Hence the fourteen speeds of the baseline DCC system.

A Stop command utilises any programmed inertia whereas the Emergency Stop brings the loco to an immediate undignified halt
Train-Science.com
Train-Science github
It ain't rocket science ;-)

GP20

  • Offline Offline
  • Berichten: 52
Re: DCC++ centrale en arduino: ervaringen?
« Reactie #18 Gepost op: 05 oktober 2018, 08:32:45 »
Bedankt voor het meedenken.

De emergencystop heb ik zo gemaakt: hier worden alle aanwezige locadressen aangestuurd.
void emergencyStop(){
//  int xxx = 0;
  for (int xyz = 0; xyz <= maxLocos - 1; xyz++) {          // do this to make sure every loco keeps stationary after restarting the layout
    LocoAddress[xyz] = EEPROM.read(xyz * 2) * 256;
    LocoAddress[xyz] = LocoAddress[xyz] + EEPROM.read(xyz * 2 + 1);
    Serial.print("<t1 ");
    Serial.print(LocoAddress[xyz] );                       // locoID);
    Serial.print(" ");
    Serial.print(LocoSpeed[LocoAddress[xyz]] = -1 );
    Serial.print(" ");
    Serial.print(LocoDirection[LocoAddress[xyz]] );
    Serial.write(">");
  }
  LocoSpeed[ActiveAddress] = 0;
  rotaryHalfSteps = 0;
  actualRotaryTicks = 0;
  doMainLCD();
  delay(50);                                               // give some time to write the DCC command to the base station before shutting off the power
  //Serial.print("<0>");
  }


De rangeerstop werkt alleen voor de actieve loc en ziet er zo uit: (Omdat de digitale pinnen allemaal gebruikt zijn deze functie op een analoge ingang gezet)
switchValue = analogRead(switchPin);

  if (switchValue > 512) {
    Serial.print("<t1 ");
    Serial.print(LocoAddress[ActiveAddress] );              // locoID);
    Serial.print(" ");
    Serial.print(LocoSpeed[ActiveAddress] = -1 );
    Serial.print(" ");
    Serial.print(LocoDirection[ActiveAddress] );
    Serial.write(">");
    LocoSpeed[ActiveAddress] = 0;
    rotaryHalfSteps = 0;
    actualRotaryTicks = 0;
    doMainLCD();
    delay(50);                                             // give some time to write the DCC command to the base station before doing something else

« Laatst bewerkt op: 05 oktober 2018, 08:35:44 door GP20 »
mvg, Leo

dimo1_dimo1

  • Offline Offline
  • Berichten: 3377
Re: DCC++ centrale en arduino: ervaringen?
« Reactie #19 Gepost op: 05 oktober 2018, 09:47:51 »
Als je alle locs wilt aansturen was het geloof ik ook mogelijk om dcc adres 0 te gebruiken. Dit werkt enkel voor snelheid commando's.
groeten,
Auke

bask185

  • Offline Offline
  • Berichten: 4009
Re: DCC++ centrale en arduino: ervaringen?
« Reactie #20 Gepost op: 05 oktober 2018, 12:49:06 »
Ik spot per toeval een foutje in je code.

Je wilt een digitaal signaal (5V) inlezen in een analoge pin. Dat kan, maar je moet wel digitalRead(switchPin) gebruiken. analogRead() stuurt namelijk een 10 bits getal teurg. Bij 5V houdt dat in dat het getal 1023 in switchValue wordt geladen, terwijl je hier een 1 in wilt hebben.

Als je switchValue declareert (aanmaakt) als een 'bool' ipv een 'int' of een 'byte' dan geeft de compiler misschien een foutmelding omdat je geen 1023 in een boolean zou moeten kunnen stoppen. 
Train-Science.com
Train-Science github
It ain't rocket science ;-)

GP20

  • Offline Offline
  • Berichten: 52
Re: DCC++ centrale en arduino: ervaringen?
« Reactie #21 Gepost op: 05 oktober 2018, 14:50:08 »
Daarom staat er bij if > 512 (dus 1023 en dat is groter dan 512, had bijna ieder ander getal kunnen zijn maar ligt lekker in het midden), kleiner dan 512 is 0.

Het werkt nu goed maar ik kan het misschien verfraaien met een digitalRead. Ook wil ik het nog in een aparte functie gieten, dan is het consistent met de rest van de code. Alles in de void loop behalve dit roept nu een functie aan.

Bedankt voor de check.

Ik kan overigens de fout met de horn in de code niet ontdekken (F2 op de keypad).
Ik denk erover om een timer in de code te zetten die binnen de standaard tijd van een seconde of 10 denk ik, nogmaals het commande geeft en het dan "geforceerd" stopt. Hopelijk blijven de andere commando's dan zuiver.

Als je alle locs wilt aansturen was het geloof ik ook mogelijk om dcc adres 0 te gebruiken. Dit werkt enkel voor snelheid commando's.

Die ga ik ook testen!

Kan je hier trouwens een filmpje direct op het forum plaatsen? of moet dat via YT?
« Laatst bewerkt op: 05 oktober 2018, 15:31:10 door GP20 »
mvg, Leo

dimo1_dimo1

  • Offline Offline
  • Berichten: 3377
Re: DCC++ centrale en arduino: ervaringen?
« Reactie #22 Gepost op: 05 oktober 2018, 16:09:49 »
Je kan alleen een YouTube filmpje hier delen.
groeten,
Auke

GP20

  • Offline Offline
  • Berichten: 52
Re: DCC++ centrale en arduino: ervaringen?
« Reactie #23 Gepost op: 06 oktober 2018, 11:13:24 »
Ok.

Ik heb nog een vraag over de wisselaansturing.

Als ik via de Throttle de wissels ga aansturen, dan heb ik denk ik per wissel een decoder nodig die net zoals een loc zijn signaal en energie van de rails haalt.

Als dit zo is is mijn vraag wat een wisseldecoder ongeveer kost en kun je met een wisseldecoder een servo aansturen of moet je dan een "standaard" spoeltje hebben?

Het zou fijn zijn om ook draadloos de wissels op de layout te kunnen bedienen, anders moet je steeds naar de plek toe lopen.
mvg, Leo

dimo1_dimo1

  • Offline Offline
  • Berichten: 3377
Re: DCC++ centrale en arduino: ervaringen?
« Reactie #24 Gepost op: 06 oktober 2018, 11:37:54 »
Daar zijn verschillende oplossingen voor. Zelfs op de Arduino gebaseerd: https://arduino-dcc-stationary-decoder.readthedocs.io/en/master/
Hier op het forum zijn ook wat van dit soort initiatieven geweest. Ik geloof dat één daarvan de mardec is: https://forum.beneluxspoor.net/index.php?topic=68257.15
groeten,
Auke

henk

  • Online Online
  • Berichten: 21631
Re: DCC++ centrale en arduino: ervaringen?
« Reactie #25 Gepost op: 06 oktober 2018, 11:40:48 »
En verder staat dergelijke basale informatie meestal wel in de encyclopedie.
https://encyclopedie.beneluxspoor.net/index.php?title=Wissels_digitaliseren
Het is heel Nederlands om iets heel Nederlands te vinden.

meino

  • Offline Offline
  • Berichten: 2088
Re: DCC++ centrale en arduino: ervaringen?
« Reactie #26 Gepost op: 06 oktober 2018, 11:42:58 »
Hallo

aangezien je al met een Arduino aan de gang bent, zou ik in plaats van een wissel decoder hier ook een Arduino voor gebruiken. Die kan met een bibliotheek ook als decoder werken. Het voordeel is dat die dan op meerdere wissel adressen kan reageren, zodat je met een Arduino meerdere wissels kunt aansturen. Afhankelijk hoe je de wissels zelf aanstuurt, voor servo's via een PWM output, voor reguliere wisselaandrijving via een relais, bepaal je of een UNO of een Mega nodig is.
Ik kan je wel een schets hiervoor toesturen.

Groet Meino
A clean desk is a sign of an empty mind

Kranenberg
De CanBus komt naar Kranenberg

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: DCC++ centrale en arduino: ervaringen?
« Reactie #27 Gepost op: 06 oktober 2018, 12:42:02 »
Hoi @GP20 / Leo,

Welkom op het forum! Had het draadje tussen neus en lippen al gezien maar was helaas eerder te druk om te gaan zitten voor een reactie :-\

Maar ja, er zijn er wel meer met DCC bezig hier ;D Ik heb alleen zelf nog nooit met DCC++ gewerkt. Ook staat DCC op dit moment op een laag pitje. Iets met de te veel andere (microcontroller) projecten ::) Maar het blijft leuk  (y)

Wat punten die ik tegen kwam in het draadje:

@bask185, een 4017 gebruiken is best slim (y) maar ik betwijfel of het de moeite waard is. Naast dat de Arduino clones al super goedkoop zijn ga je met 10 servo's makkelijk voorbij de specificatie van een 20ms verversings-cyclus. Ook is het daarmee lastig een servo af te koppelen (geen puls te sturen) wat je naar mijn idee zou willen tegen het brommen. En ze vaak heb je ook geen tien servo's bij elkaar op de baan. Want lange draden zijn echt af te raden. En waar er wel tien liggen kosten 2/3 Arduino's ook geen drol ;D Met andere woorden, geen commentaar maar denk er nog eens over voor je het maakt.

Wat betreft H-bruggen, de L298 is nog steeds de meest gangbare in de hobby wereld op dit moment. Goedkoop en een booster van 4A mee te maken. Ik wilde zeggen dat de "43A" BTS7960 wel een beetje duur en overpowered is maar ik zie dat de prijs aardig gedaald is. Zelf was ik daarom aan het kijken naar de LMD18200. Voordeel van de LMD18200 en BTS7960, ze zijn een stuk nieuwer en efficiënter (= minder verlies = minder hitte). Maar met de huidige prijs van de BTS7960 bestel ik er ook eens één ;D Dank je!

En misschien ten overvloede, digitaal hoeft niet per se 18V te zijn. 16V of 18V zijn vaak wel de spanningen die mensen/bedrijven vaak noemen maar het mag alles tussen de 7V en 22V zijn.
wordt de polariteit (blijft wel tussen 0 en +18v, dus niet -18V zoals bij M*) gewisseld.
Ligt er maar net aan waar je de referentie legt ;D Voor de loc wissels de spanning wel degelijk tussen xV en -xV. Maar vergeleken met een referentie voor de sturing (bijvoorbeeld de GND) zal je inderdaad geen 18V hebben. Maar niet alleen Marklin doet dat overigens en heet een common ground (gemeenschappelijke "aarde"*) booster waar dit H-brug booster is. Misschien was dit gesneden koek maar voor de mensen die mee lezen :angel:

En wat betreft rotary encoder, daar ben ik zelf ook een fan van! Vind een MultiMaus een fijn apparaat maar had daar zo graag een rotary encoder gezien! En vergeleken met een scherm is er geen vergelijking, op een scherm heb je geen haptische waarneming. (Ook al zijn de grote jongens er wel mee bezig) Voor encoders heb ik zelf wel eens Click Encoder gebruikt. Voordeel van deze library boven een hele hoop andere is dat de meeste overdreven de interrupt pinnen gebruiken ::) Ook ondersteund de library "acceleration/versnelling" ofwel sneller door waardes stappen als je sneller draait. Nadeel van de library, ik vind hem nogal lelijk geschreven... En het click deel is gewoon nutteloos. ::)

En analoog zo'n membraan toetsenbordje inlezen kan inderdaad mooi. Maar op zich is 8 pinnen voor 12 toetsen natuurlijk al best okay. :angel: En als je een schakelaar/drukknop matrix maakt met diodes kan je ook meerdere knoppen indrukken (en dus ook schakelaars gebruiken) en ze goed lezen. Via de analoog-lezen methode is dat een stuk lastiger.

Voor wissels zou ik gewoon aanraden om wisseldecoders te maken. Grote fout van veel beginners is alles in één systeem te willen proppen. Het sleutelwoord is modulair. Maakt het geheel makkelijker te bouwen en uit te breiden. Zeker als je aan de "centrale" kant voor voor een bus gaat voor meerdere inputs. Dit kan iets als LocoNet of XpressNet wat meer gebruikt wordt maar je zou ook simpel I2C kunnen zijn als de modules naast elkaar zitten. Immers is (TTL) I2C absoluut niet geschikt voor lengte maar prima voor twee naast elkaar geplaatste Arduino's.

Ik wil nog een functie inbouwen dat als ik rangeer ik een knop kan induwen om de loc direct stil te zetten (niet de noodstop maar meer een "rangeerstop").
Veel centrales (en ook decoders dit optrek/afrem vertraging gebruiken!) doen dit als je van rijrichting wisselt. Misschien hier ook een idee? Je zou zelfs kunnen doen dat als je de encoder in drukt dat de snelheid 0 maakt. Druk je hem in als de snelheid 0 is dan wissel je van richting. Richting omwisselen op snelheid (maar goed, wanneer wil je dit afgezien van loc "noodstop" optrek/afrem vertraging) is dan twee keer klikken.

Als ik via de Throttle de wissels ga aansturen, dan heb ik denk ik per wissel een decoder nodig die net zoals een loc zijn signaal en energie van de rails haalt.
Neuh, niet per se. Je kan ook meerdere aan één decoder hangen. Een DR4018 doet er bijvoorbeeld 8. Bij gebruik van servo's wil je de kabels tussen servo en decoder wel kort houden! En bijna alle gebruikelijke decoders hebben losse ingang voor de voeding om geen "digitale stroom" op te snoepen voor wissels.

En probleem van de hoorn snap ik alleen niet helemaal. Ligt waarschijnlijk aan mij ;D Je kunt geen andere functies aansturen als je de hoorn gebruikt?

voor servo's via een PWM output
Nee hoor ;) Servo's kunnen aan elke pin. Hardnekkig misverstand maar voor servo's wordt alleen Timer1 gebruikt waardoor de PWM van pin 9 en 10 niet meer werkt. Maar heeft verder niets met de hardware PWM te maken.


Timo

* De Nederlandse term aarde is nogal verwarrend omdat wij niet zo'n mooi onderscheid maken tussen "Ground/GND" (V- referentie) en "(Protective) Earth/PE (randaarde) zoals in het Engels.
Verzonden vanaf mijn desktop met Firefox

meino

  • Offline Offline
  • Berichten: 2088
Re: DCC++ centrale en arduino: ervaringen?
« Reactie #28 Gepost op: 06 oktober 2018, 12:52:41 »
@timo
Citaat
Nee hoor ;) Servo's kunnen aan elke pin. Hardnekkig misverstand maar voor servo's wordt alleen Timer1 gebruikt waardoor de PWM van pin 9 en 10 niet meer werkt. Maar heeft verder niets met de hardware PWM te maken.

Hoe codeer je dat in de Arduino, dat zou ik wel willen weten, want dat kan ik wel gebruiken?

Groet Meino
A clean desk is a sign of an empty mind

Kranenberg
De CanBus komt naar Kranenberg

Timo

  • Team encyclopedie
  • Offline Offline
  • Berichten: 4656
Re: DCC++ centrale en arduino: ervaringen?
« Reactie #29 Gepost op: 06 oktober 2018, 13:12:20 »
Servo myServo;

myServo.attach(A2);
Met andere woorden, je kunt gewoon elke pin opgeven. De Servo library gebruikt gewoon digitalWrite().

Nu is de Servo library wel een hardware afhankelijke library dus op de niet-AVR platformen kan de implementatie dus anders zijn.


Timo
Verzonden vanaf mijn desktop met Firefox