Doel:€250.00
Donaties:€88.00

Per saldo:€-162.00

Steun ons nu!

Laatst bijgewerkt
op 03-06-2025

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

Schets Weistra regeling met arduino UNO door keesg
Vandaag om 19:29:23
Mooi weer om buiten te spelen door sncf231e
Vandaag om 19:13:07
Länderbahn en Reichsbahn locomotieven. door puntenglijder
Vandaag om 19:05:08
Vitrinekast door Frits C
Vandaag om 19:03:57
Grootspoor in Frankrijk door ruben derks
Vandaag om 19:00:16
Mijn eerste H0-modeltreinbaan in aanbouw door MOVisser
Vandaag om 18:53:44
Bentheimer Eisenbahn, gisteren, vandaag en morgen. door Hans Reints
Vandaag om 18:41:20
Artikelen "Het matblad" door ES44C4
Vandaag om 18:24:12
Schwarzburg-Neuffen-Bahn door NS264
Vandaag om 18:15:26
Aanbrengen van (kleine) nummerplaten en dergelijke door prutser
Vandaag om 18:12:21
lampjes in huizen willekeurig schakelen door Bert55
Vandaag om 18:09:34
Verwijderen van het nummer op Roco 1631 – tips gezocht door Jeroen Water
Vandaag om 17:59:56
Fleischmann Anna ombouw. door jerrytrein
Vandaag om 17:32:09
Raadplaatje door HIJ
Vandaag om 17:24:22
Märklin baanplan uitprinten op ware schaal door MOVisser
Vandaag om 17:16:11
Van British Railways Class 58 naar ACTS 5814 in 0 door BartvD
Vandaag om 16:29:02
"Litter Bin" voor Brits spoor en Britse modelspoorprojecten door JurS
Vandaag om 16:17:47
zondag 17 augustus De Karel over enkelspoor door Forever Rocofan
Vandaag om 16:03:46
Toon hier je nieuwe (model-) spooraanwinst(en)... door prutser
Vandaag om 16:01:24
Alt-Wutachtalbahn 2025 door Eric v C
Vandaag om 14:13:01
Ronald doet de Fork Challenge! door Ronald Halma
Vandaag om 14:03:45
De overeenkomst tussen een Ovaalramer en een Motorpost. door FritsT
Vandaag om 14:00:27
Show je werkplek door cor_b
Vandaag om 13:47:28
Bauarbeiten im gange door Ronald Halma
Vandaag om 13:12:05
Eerste hulp bij Freecad door Eric v C
Vandaag om 12:43:20
De bouw van 'Ommelanden' (H0) door Jan Pieter
Vandaag om 11:03:34
Sfeer op je modelbaan door william_2
Vandaag om 10:28:30
Haperende/Gevoelige Sik: wat te doen? door Noordernet
Vandaag om 07:28:45
Spoor op industrieterrein Lage Weide door Thom
Vandaag om 02:36:02
Wohnzimmer AW werkrapporten door Ferdinand Bogman
01 August 2025, 22:35:24
  

Auteur Topic: Zelfbouw decoders: vraag aan de loconet experts  (gelezen 4288 keer)

AP3737

  • Offline Offline
  • Berichten: 330
Re: Zelfbouw decoders: vraag aan de loconet experts
« Reactie #15 Gepost op: 06 February 2024, 20:42:34 »
Dank voor de mail. Dat lijkt helder.

Heb je een logic analyzer? Dat was één van de beste aankopen die ik afgelopen jaren heb gedaan. Sinds ik dat ding heb, test ik daarmee al mijn software (en hardware) uitvoerig. Ik loop dan vaak tegen dingen aan die ik zo niet verwacht had.

Groet, Aiko

bask185

  • Offline Offline
  • Berichten: 5003
Re: Zelfbouw decoders: vraag aan de loconet experts
« Reactie #16 Gepost op: 07 February 2024, 08:38:35 »
Ik heb er wel een, al 5 jaar. Hij zit nog steeds in het plastic  ::). De laatste keer dat ik er een gebruikte was iets van 8j terug om een I2C bus te monitoren. Ik dacht dat die van mij 5V tollerant was, ik durf daar niet zo maar een loconet of rs485 bus aan te hangen zonder extra elektronica.
Train-Science.com
Train-Science github
It ain't rocket science ;-)

bask185

  • Offline Offline
  • Berichten: 5003
Re: Zelfbouw decoders: vraag aan de loconet experts
« Reactie #17 Gepost op: 14 July 2024, 22:43:45 »
Ik wilde al een lange tijd een paar van die dingen afmaken en op een plankje schroeven. Ik bedacht me nu iets vet slims, om gewoon geen plankje te pakken maar wat tape te gebruiken. If it works...

Ik heb afgelopen week de RJ12s er op gezet en vanavond een aangepast programma er in geschoten. De enige aanpassing is dat elke melder om de 10s alle 'states' toggle't van stand.



In dit fimpje zie je eerst 5 bezetmelders die exact tegelijk hun 16 statussen willen opsturen. Je ziet dat dat niet helemaal goed gaat. Halverwege het filmpje trek ik er 1 tussen uit en dan doen de overige 4 het wel goed.
<a href="https://www.youtube.com/v/b3mqEoR5gBw" target="_blank" class="new_win">https://www.youtube.com/v/b3mqEoR5gBw</a>

Nu zijn 5 x 16 melders die in dezelfde milliseconde (en misschien wel microseconde, het begin althans) verstuurd moeten worden ook wel erg uitzonderlijk. Als ik naar een normale iTrain baan kijk, dan heb ik er wel vertrouwen in dat de throughput meer dan toereikend is. En ik vind het toch netjes dat 4 nagenoeg identieke apparaten die op bijna exact hetzelfde tijdstip willen versturen er toch uit kunnen komen.

Wat code betreft, heb ik dit lapje wat ik continu aanroep
void updateOccupancyStatus()
{
    static uint8 index ;

    if( io[index].newState != io[index].oldState )
    {
        LN_STATUS status ;
        uint8     type      = io[index].type ;
        uint8     address   = io[index].address ;
        uint8     state     = io[index].newState ;

        if( type == ACCESSORY ){status = LocoNet.requestSwitch( address, 1, state ) ;
                                status = LocoNet.requestSwitch( address, 0, state ) ; }
        else                   {status = LocoNet.reportSensor(  address,    state ) ; }
                                //status = LocoNet.reportSensor(  address,    state ) ; }

        if( status == LN_DONE ) // if message has transmitted succesfully...
        {
            io[index].oldState = io[index].newState ; // ...update status
   
            if( ++ index == nInputs ) index = 0 ;     // and go to next object
        }
    }
    else
    {
        if( ++ index == nInputs ) index = 0 ; // if object's state has not changed, go to next object.
    }
}
Telkens als een melder van state verandert, moet die de bus op. Dat doe ik dan zo snel als mogelijk. Na het aanroepen van het verzenden bekijk ik de status. En is die dan LN_DONE, dan verhoog ik de index naar de volgende bezetmelder. Zo wordt er geen bezetmelder overgeslagen.

Ik ben alleen nog aan het bedanken, wat nog handig is om te testen.

Hoewel ik niet denk dat het zal helpen, is om een vaste interval toe te voegen tussen iteraties van die functie. Ik dacht als ik bijvoorbeeld om de 10ms of zelfs 20ms die functie aanroept, dat het dan misschien beter zal gaan. Het kan ook niet echt kwaad om die tijd er tussen te zetten, dus baadt het niet, schaadt het niet.

Ik denk ook een kleine tijds differentiatie toevoegen van enkele milliseconde. Ik dacht misschien als apparaat 1 op 10000ms stuurt en apparaat 2 op 10010ms (en dit voor alle 7) dat het dan misschien veel beter gaat.

En in plaats van 16 melders per keer, wil ik alle 7 apparaten slechts 1 melder laten sturen.

Mvg,

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

Bert55

  • Offline Offline
  • Berichten: 912
Re: Zelfbouw decoders: vraag aan de loconet experts
« Reactie #18 Gepost op: 15 July 2024, 09:30:22 »
Je maakt mooi spul Bas maar dat plakband vind ik persoonlijk een beetje jammer voor de uitstraling.
Met vriendelijke groet, Bert
Märklin, DCCnext, ECOS
Witmoosdorf afgebroken, Witmoos 2 wordt opgestart na de verhuizing

AP3737

  • Offline Offline
  • Berichten: 330
Re: Zelfbouw decoders: vraag aan de loconet experts
« Reactie #19 Gepost op: 15 July 2024, 09:52:29 »
Hi Bas

Leuk  (y)
Nu zijn 5 x 16 melders die in dezelfde milliseconde (en misschien wel microseconde, het begin althans) verstuurd moeten worden ook wel erg uitzonderlijk.
Hmm, daar ben ik niet zo zeker van. Op mijn eigen baan heb ik tussen de 60 en 70 (zelfbouw) terugmelders (RS-Bus). Als de terugmeld bus actief wordt (spanning op de bus is aan, centrale geeft aan dat hij ready is), sturen alle terugmelders zo snel mogelijk de huidige status (bezetmelding, wissels) terug. De RS-Bus is een polling bus, dus dat gaat wel goed. Loconet is echter CSMA/CD, en dan zou het wel eens niet goed kunnen gaan. Daarom zou ik bij Loconet altijd een kleine vertraging (afhankelijk van het Loconet adres??) inbouwen.

Je geeft aan dat je test met 5 hardware devices, en per hardware device 16 software melders. Dat is volgens mij toch wat anders dan 80 hardware melders, verspreid over een lange bus. In dat laatste geval zou je op 80 plaatsen CSMA/CD toepassen, en nu op "slechts" 5. Bij CSMA/CD speelt de looptijd van het signaal namelijk ook een rol: hoe langer het duurt tussen het versturen van een signaal en het detecteren van dat signaal, hoe groter de kans op collissions. Als je slechts een heel korte bus hebt, dan is de kans op collisions veel kleiner.

Als je het echt goed wil testen, dan zou je toch eens een scoop op de bus moeten zetten. Daarnaast zou je de loconet bekabeling lang moeten maken (200 meter?), en de decoders over de bus verspreiden.

Even wat hardop rekenen en een getallen voorbeeld (ik hoop dat ik me niet verreken en een factor 1000 mis zit  ;))
Lichtsnelheid is 300000 km/s = 300km/ms = 300m/us.
De snelheid van een electrisch signaal in een koperen geleider is ongeveer 0,7 x de lichtsnelheid. Dus in 1us legt het signaal ongeveer 200m af. De Loconet spec zegt, dat je binnen 2us nadat je carrier free detecteert, moet beginnen met zenden. Je hebt dus (bij 200m kabel) een "onzekerheids interval" van 3us waarbinnen collissions kunnen voorkomen. In de praktijk zal deze tijd waarschijnlijk hoger zijn, omdat je hard/software misschien niet snel genoeg is (een 328 ISR kost meerdere us).
Ik zou daarom precies willen weten hoe snel de hard/software is, dus een scoop en logic analyzer gebruiken om te meten. Een redelijke combinatie USB scoop/analyser kost by Ali 60 Euro, dus dat valt best mee.

Duikeend

  • Team forummoderators
  • Offline Offline
  • Berichten: 2574
Re: Zelfbouw decoders: vraag aan de loconet experts
« Reactie #20 Gepost op: 15 July 2024, 10:18:44 »
erg leuk om te volgen! helaas mis ik de kennis om mee te doen maar lees het graag  (y)

Je maakt mooi spul Bas maar dat plakband vind ik persoonlijk een beetje jammer voor de uitstraling.


daar komt hij wel achter als over een tijdje die tape helemaal vergaan is en vastgekoekt is aan zijn printjes  ;)


Groetjes, Ferenc

mijn knutsels, 1500 in parts en een
hondekop

meino

  • Offline Offline
  • Berichten: 2323
Re: Zelfbouw decoders: vraag aan de loconet experts
« Reactie #21 Gepost op: 15 July 2024, 11:04:01 »
Bas,

Ik ken de CAN specs niet goed genoeg om daar iets specifieks over te kunnen zeggen. Maar het aloude Ethernet is mij iets beter bekend. Dat werkt ook met CD (colection detection). Daar is het voorgeschreven dat als een node een collision detecteert, dat hij een random tijd moet wachten voor hij het opnieuw gaat proberen. Dat is om er voor te zorgen dat er geen race conditie ontstaat tussen twee of meer nodes die op het zelfde moment willen zenden. Zit dat wel goed in je code? Vijf zenders die op het zelfde moment willen zenden vind ik niet veel. Ik werk ook met de CAN bus en heb bij het opstarten wel meer nodes die tegelijkertijd gaan zenden. Tot nu toe geen problemen gezien, maar ik werk dan wel met standaard CAN bus kaartjes waar de kaart het hele gebeuren afhandelt.

Groet Meino

bask185

  • Offline Offline
  • Berichten: 5003
Re: Zelfbouw decoders: vraag aan de loconet experts
« Reactie #22 Gepost op: 15 July 2024, 12:51:51 »
Dat plankje was ook niet echt mooi hoor  :P. Ik had ff snel iets nodig om ze bij elkaar te houden, m'n kid sliep al dus dat betekent geen accuboor. Ik denk dat ik ze alsnog op het plankje zet. Ik moet er alleen rekening meehouden dat mijn pogopins er op gaan voor updates.

Citaat
Daar is het voorgeschreven dat als een node een collision detecteert, dat hij een random tijd moet wachten voor hij het opnieuw gaat proberen
Dit is volgens mij ook de enige manier waarop je identieke apparaten die gelijktijdig dingen gaan verzenden, toch in goede banen kan geleiden.

Ik denk sws dat ik alle apparaten ook hun beginstand laat opsturen, waarbij ik een adres afhankelijke opstart vertraging inbouw. En tevens wanneer een ik een status binnen krijg die != aan LN_DONE dat ik eventjes wacht met een random tijd. Het start adres kan je in arduino's randomSeed() functie proppen.

Ik heb 20 melders totaal liggen, dus ik vlam nog even door  8).

void updateOccupancyStatus()
{
    static uint32 interval = 1 ;                        // default interval of 1ms

    REPEAT_MS( interval )                               // best macro ever, creates an interval
    {
        static uint8 index ;

        if( io[index].newState != io[index].oldState )
        {
            LN_STATUS status ;
            uint8     type      = io[index].type ;
            uint8     address   = io[index].address ;
            uint8     state     = io[index].newState ;

            if( type == ACCESSORY ){status = LocoNet.requestSwitch( address, 1, state ) ;
                                    status = LocoNet.requestSwitch( address, 0, state ) ; }
            else                   {status = LocoNet.reportSensor(  address,    state ) ; }
                                    //status = LocoNet.reportSensor(  address,    state ) ; }

            if( status == LN_DONE )
            {
                io[index].oldState = io[index].newState ;
   
                if( ++ index == nInputs ) index = 0 ;

                interval = 1;                             // if status is OK, maintain 1ms interval
            }
            else
            {
                interval = random( 5, 50 ) ;              // in event of collission, wait with random interval
            }
        }
        else
        {
            if( ++ index == nInputs ) index = 0 ;
        }
    }
    END_REPEAT
}

Tijd voor middagwandeling  (y)

Mvg,

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

meino

  • Offline Offline
  • Berichten: 2323
Re: Zelfbouw decoders: vraag aan de loconet experts
« Reactie #23 Gepost op: 15 July 2024, 13:07:50 »
Het start adres kan je in arduino's randomSeed() functie proppen.

Dat lijkt me een goed idee. De random() functie is niet erg random, wel bruikbaar.

Oh ja, nog wat, op welke snelheid stuur je de CAN aan. De MCP kaartjes die ik gebruik werkten voor geen meter op 1Mbit, dus staat bij mij de bus op 500Kbit.

Groet Meino
« Laatst bewerkt op: 15 July 2024, 13:10:54 door meino »

bask185

  • Offline Offline
  • Berichten: 5003
Re: Zelfbouw decoders: vraag aan de loconet experts
« Reactie #24 Gepost op: 15 July 2024, 13:30:04 »
Het is loconet, meino. Geen Can. Ben wel van mening dat Can beter of eigenlijk makkelijker is. Loconet draait op ik dacht 16knl nog iets bps uit mn hoofd. iig niet zo snel als 500k  ;D
Train-Science.com
Train-Science github
It ain't rocket science ;-)

reinderlf

  • Traintastic!
  • Offline Offline
  • Berichten: 104
    • traintastic.org
Re: Zelfbouw decoders: vraag aan de loconet experts
« Reactie #25 Gepost op: 15 July 2024, 13:55:21 »
LocoNet is 16k5 baud, niet erg snel, voordeel is wel dat je makkelijk aftakkingen kan en mag maken :)

CAN is zeker een mooi systeem (een auto zit er vol mee), dan wordt al die collision stuff geregeld in hardware :) Nadeel is wel dat het relatief duur is (qua componenten) t.o.v. andere bussen.
Voor de meeste tranceivers "mag" je "maar" tot 32 nodes.

Er zijn wel wat apparaten met een CAN bus, maar die hebben allemaal een eigen standaard vermoed ik.
Z21 heeft CAN, Marklin CS heeft CAN, ECoS link is ook CAN gok ik en dan is er nog LCC.
Nu kun je dat in theorie wel mixen op een bus, maar dan moet je wel een node hebben die dat allemaal snapt, misschien ben je dan beter af met een gateway naar een meer common systeem zoals LocoNet.

bask185

  • Offline Offline
  • Berichten: 5003
Re: Zelfbouw decoders: vraag aan de loconet experts
« Reactie #26 Gepost op: 15 July 2024, 14:12:24 »
Ik heb een toepassing gevonden voor...  een goto  ;D.
 
void setup()
{
    LocoNet.init(LNtxPin) ;

    loadEEPROM() ;

    randomSeed( io[0].address ) ;                                        // <---
    startupDelay = random( 1, 1000 ) ;                                   // <---

    for( int i = 0 ; i < nInputs ; i ++ ) input[i].begin() ;

    pinMode(13, OUTPUT) ;
}

void loop()
{
    waitStartDelay : if( millis() <= startupDelay ) goto waitStartDelay ; // <---
   
Ik moet hier een macro voor maken voor in m'n macros.h  ;D
#define startupDelay( interval ) PIGS_CAN_FLY: if( millis() <= interval ) goto PIGS_CAN_FLY;
Ik vind loconet wel erg fijn omdat die kabels zo makkelijk zelf te maken zijn.  ::) Dat kost zo weinig

Mvg,

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

Karst Drenth

  • Offline Offline
  • Berichten: 10481
  • NS blauw, groen, rood, bruin, grijs en standgroen
    • Plan U op Sleutelspoor
Re: Zelfbouw decoders: vraag aan de loconet experts
« Reactie #27 Gepost op: 15 July 2024, 14:24:47 »
@Bas

ipv zelf van alles en nog wat zelf (proberen) te bedenken, zou je ook de LocoNet-PE eens goed kunnen doorlezen. Daar staat precies in wat je moet doen en laten mbt het verzenden van pakketjes... ook wanneer je een carrier detecteerd, wanneer een collision, wat dan te doen en hoe dat op te lossen c.q. moet retry-en.

Overigens, zelf als je dat uit die LocoNet-PE allemaal implementeert, krijg je nog steeds bij een "groot" systeem, dat het voorgeschreven aantal retry's bij collision, niet voldoende is en je dus toch pakketjes gaat missen.

Grtzz,
Karst, met inmiddels 20 jaar ervaring in deze materie ;)

bask185

  • Offline Offline
  • Berichten: 5003
Re: Zelfbouw decoders: vraag aan de loconet experts
« Reactie #28 Gepost op: 15 July 2024, 14:38:54 »
Dat is pas de volgende stap. Deze decoders gebruiken de open source mrrwa library van Alex Shepperd en dit draadjes gaat precies daar over.
Train-Science.com
Train-Science github
It ain't rocket science ;-)

meino

  • Offline Offline
  • Berichten: 2323
Re: Zelfbouw decoders: vraag aan de loconet experts
« Reactie #29 Gepost op: 15 July 2024, 17:26:48 »
    waitStartDelay : if( millis() <= startupDelay ) goto waitStartDelay ; // <---
Ik moet hier een macro voor maken voor in m'n macros.h  ;D


BS;
while( millis() <= startupDelay ){}
Doet het zelfde en is nog korter en duidelijker. Ken u klassieken, zeker nooit https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf gelezen.
Alleen slechte programmeurs hebben het goto statement nodig.

Groet Meino