BeneluxSpoor.net forum
Vraag en antwoord => Digitaal => Topic gestart door: Paul66 op 30 oktober 2019, 11:25:14
-
Hallo medetreiners,
Ik ben dan wel nieuw op beneluxspoor maar toch al lang met treinen bezig.
Ik heb een digitale centrale gebouwd op een printplaat van 10x11cm die naar mijn mening voor heel veel mensen interessant kan zijn. Deze centrale is samengesteld uit gedachtegoed van Robert Evers en bedenksels van mij zelf. wie geïnteresseerd is in zelf iets in elkaar knutselen is van harte welkom om een kijkje te nemen op mijn homepage.
http://members.home.nl/pamali/
-
Hey,
Ik heb een vraagje. Ik zit nu op werk en mijn pauze is alweer voorbij :P maar heb jij misschien software omtrent het MM2 protocol die je wilt delen?? Ik heb zelf ook een DCC centrale vanuit scratch en datasheet en een beetje hulp hier op het forum gemaakt, maar ik ben marklinist en 3/4 van mn materieel rijdt niet op DCC (tnx marklin) (y).
Ik wil MM2 nog implementeren maar ik heb echt een chronisch tijd gebrek.
Mvg,
Bas
-
Hallo Bas,
Met software kan ik je helaas niet helpen. De door mij gebruikte software komt van Robert Evers. Als je even zoekt op mijn homepage vindt je de link naar hem. Je zou deze vraag aan hem moeten stellen. Ik weet wel dat op zijn homepage ergens iets te vinden is wat betreft software waarmee je je eigen decoders voor dcc of motorola kunt maken. Misschien dat je daar al iets aan hebt. Programmeren is iets waar ik me in een grijs verleden mee heb bezig gehouden maar dat kunnen hele volksstammen beter dan ik. Ik kan je wel vertellen dat Robert zeer hulpbereid is, want hij heeft ook aanpassingen gemaakt voor mijn gemaakte hardware.
Succes met je ontwerp!
Paul
-
Robert Evers = http://members.home.nl/robert.evers/ :) :)
Hieronder de Lite versie (test opstelling, foto niet je van het) van mij.
Van links naar rechts de
- WMC https://github.com/MDRRC/WMC
- XMC https://github.com/MDRRC/XMC
- ENC28J60 module voor netwerk verbinding voor de WMC of Roco Wifi muis
- MDRRC-II Lite versie http://members.home.nl/robert.evers/mdrrc2Light.htm
(https://images.beneluxspoor.net/bnls/ScreenShot103019.jpg) (https://images.beneluxspoor.net/bnls/ScreenShot103019.jpg)
Paul heeft de Lite versie ge-integreerd met een booster en dat op één print gekregen met bijv.
- Booster
- Kortsluiting detectie
- Ge-integreerde ACK detector
- Programmeer relais
- Optie voor aparte booster voor wissels e.d.
(y)
Hieronder de opgebouwde print die Paul me ter beschikking heeft gesteld echter nog zonder de IC's....
Denk dat de kosten rond de 25 .. 40 euro zijn voor print en onderdelen (trafo's uitgezonderd) , maar dan kun je met
Koploper / RocRail lekker je treinen laten rijden met MM/DCC zonder een hele flinke investering te moeten doen (y)
(https://images.beneluxspoor.net/bnls/ScreenShot103019-002.jpg) (https://images.beneluxspoor.net/bnls/ScreenShot103019-002.jpg)
Mvg
Robert
-
Paul en Robert,
Leuke en praktische oplossing.
Ik volg zo goed mogelijk jullie ontwikkelingen. Zelf rij ik nog steeds met MRdirect, wat voor mezelf nog steeds goed voldoet en waar ik ook nog regelmatig iets aan verbeter.
Succes, Marco
-
Beste Paul,
Erg leuk!
Ik ben zelf ook bezig geweest met Robert Evers idee. Maar dan via Hans Kuijpers die er toen een nieuw printje voor ontworpen had i.p.v. het originele printje van Evers zelf. Zo konden er wat meer gangbare elektronische onderdelen gebruikt worden. Deze versie van de centrale werkt al weer plusminus 5 jaar prima. Via updates is het nu mogelijk extra locs in de centrale te zetten. En er zijn extra functies bijgekomen.
Het bedieningskastje heb ik niet gebouwd. Daar gebruik ik mijnaloude multimuis voor! Maar misschien ga ik die er in de toekomst toch bij hobbyen.
-
Ik heb een vraagje. Ik zit nu op werk en mijn pauze is alweer voorbij :P maar heb jij misschien software omtrent het MM2 protocol die je wilt delen??
MM2 bedoel je Motorola 27 stappen? Dat is een trucje wat bij lastgeregelde en sinusmotoren decoders niet werkt.
Het principe is dat je de tussenliggende stappen (bv tussen stap 3 en 4 bij 14 rijstappen) instelt door het commando 4 na ca 200 msec laat volgen door stap 3. Dit natuurlijk wel in Motorola New formaat. Door de traagheid van de motor draait die dan op stap 3,5.
En van bv stap 10 naar 9, stap 9 en na ca 200 msec stap 10.
Het is een truc voor met name oudere Marklin decoders. Mijn ervaring daarmee is dat het niet echt de moeite loont om dat te implementeren.
M.vr.gr. Marco
-
Ik bedoel Motorola 2 zoals M* mobile station "het doet". Ik moet dat hele protocol nog uitpluizen
-
Ik moet dat hele protocol nog uitpluizen
Voor zoverre niet bekend staat het hier uitgelegd
https://www.modeltreno.com/motorola.html
Mvg
Robert
-
https://www.modeltreno.com/motorola.html
Dat heb ik 20 ? Jaar geleden ook gebruikt om mijn centrale te maken.
M.vr.gr. Marco
-
Die info heb ik ook gebruikt om e.e.a. aan de praat te krijgen.
Moet zeggen dat sommige multi protocol decoders de hele timing kwa verzenden van een data pakket aan de laars lappen, als ze maar een pakket zien.
En andere decoders willen echt timing strak zien...
Ik heb zelf ook een DCC centrale vanuit scratch
Arduino? Dan moet je zelf even aan de gang, want MM signaal generatie met Arduino niet veel gezien (eigenlijk niet tot nu toe).
Alleen een Arduino MM decoder
https://github.com/cpfair/marklin-motorola-decoder
Maar de truc voor MM signaal generatie is eigenlijk gelijk als bij DCC, zorg ervoor dat de bits met correcte timing op de rails komen en zorg ervoor dat de tijd tussen de pakketten klopt...
Grootste grap is MM adres, daarvoor heb ik een tabel gemaakt die een decimaal adres omzet naar MM adres... Zal wel anders (simpel) kunnen :)
Mvg
Robert
-
Maar de truc voor MM signaal generatie is eigenlijk gelijk als bij DCC, zorg ervoor dat de bits met correcte timing op de rails komen en zorg ervoor dat de tijd tussen de pakketten klopt...
Grootste grap is MM adres, daarvoor heb ik een tabel gemaakt die een decimaal adres omzet naar MM adres... Zal wel anders (simpel) kunnen :)
Die timing komt wel goed. Ik heb een timer ISR zonder prescaler lopen dus die kan ik vrij nauwkeurig inregelen. Ik maak ook gebruik van een erg dynamische state machine.
State(assemblePacket) state = awaitPacketSent;
State(awaitPacketSent){
if(newInstructionFlag) state = newPacketSent;
else state = nextAddres; }
State(nextAddres){
if(lastAddresFlag) state = nextPacketType;
else state = assemblePacket; }
State(newPacketSent){
if(newPacketSentFlag) state = assemblePacket;
else state = nextPacketType; }
State(nextPacketType) state = assemblePacket;
Het is een gedeelte van een switch case waarbij 'State' een macro is. In deze switch-case call ik een functie (de State) die iets uitvoert zoals bijv. de dcc pakketten samenstellen. Wanneer een state klaar is, returnt deze true en wordt de volgende state geselecteerd.
Ik kan deze makkelijk uitbreiden om ipv DCC pakketjes, MM2 pakketjes te maken. En ik moet het ISR aanpassen om de nieuwe timing waardes te gebruiken.
De grootste opstakel waar ik tegen aan hik is om die MM2 pakketten te samen te stellen (en in tweevoud versturen als ik het me goed herrinner). Ik zit nu te wachten op onderdelen dus ik wou er stiekum wel een beetje aan beginnen.
Ik heb mijn handcontroller en centrale zover dat ze goed data heen en weer sturen. De handcontroller stuurt iets op en de DCC centrale zet op de handcontroller's scherm wat de wijziging is. Zo weet je altijd 100% zeker dat dat wat je stuurt, goed is ontvangen.
daarvoor heb ik een tabel gemaakt die een decimaal adres omzet naar MM adres... Zal wel anders (simpel) kunnen
Een lookup-tabel is wel altijd het snelst qua executie tijd.
Ik had potverdrie net een oude Itead Mboard opgehaald bij mijn ouders met een BT Bee en dat stomme ding doet het niet. Hij maakt een "kortsluit" achtig geluid wanneer ik de baan spanning er op wilt zetten, ook als er niks is aangesloten.
(https://i.imgur.com/dvyT8Sl.jpg)
Het board leek me perfect, had 3/4 van de 4 componenten die je nodig heb. Ingebouwde H-brug, ingebouwde 5v en 3v3 regulators en een socket voor o.a. een BT module. Ik denk dat dit ding het niet leuk vindt hoe ik hem gebruikt. Normaliter PWM je de enable pin om een DC motor te laten draaien. Maar nu PWM ik de direction pinnen. Ik vermoed dat er een condensator roet in het eten gooit. Met m'n scope meet ik ook maar 3V ipv 15V, maar die scope is volgens mij niet helemaal lekker ::).
(https://i.imgur.com/aTWink0.jpg)
De timing ziet er nog wel goed uit. Maar helaas, het treintje wilt niet rijden :-\
(https://i.imgur.com/NX11KOx.jpg)
Deze doet het gelukkig wel goed.
(https://i.imgur.com/HkB6Jr5.jpg)
-
Dag Bas,
Ik zou de ISR routine zodanig herschrijven dat je gebruik maakt van een vast timerinterval. Voor DCC is dit dan 58us. In de bitstroom die je buitenstuurt via de transmitbuffer krijg je dan 01 of 0011 afhankelijk of je een 1 of 0 wil buitensturen. De transmit buffer wordt dan wel wat groter. De encoding doe je in je statemachine buiten je ISR. Het aantal bits in je transmitbuffer geef je dan mee als een variabele aan de ISR routine. Nu is de lengte vast ingebakken in de ISR routine wat al een probleem is omdat een DCC pakket 3-6 bytes kan zijn. Volgende stap is Motorola. Als je een timerinterval neemt van 14us als basis dan kan je van hieruit zowel motorola alsook DCC timing opwekken ( 4 * 14us is 56us voor half 1 bittijd voor DCC). Zowel voor DCC als Motorola zit je iets naast de timing maar mijn ervaring is dat het werkt ( half kloktijd van motorola is 13us). De info in het transmitregister wordt dan 00001111 en 0000000011111111 voor een DCC 1 en een 0. Dit is de basis van je multiprotocol centrale. De verplichte wachttijden tussen frames zijn ook counts die meegegevan worden als variabele. Als je het netjes wil doen dan pak je alles in een struct. Dit is een generieke bitframe generator die elk protocol aankan met minimale overhead in de ISR routine.
Volgende stap is dan een pool van transmit structs maken ( circulaire buffer van structs) die je na elkaar verstuurt ( refresh cycles, etc). Nadeel van deze aanpak is dat het RAM gebruik wat hoger is maar door de eenvoudige ISR routine met zeer weinig testen kan je heel wat uit de microcontroller persen.
Dit is het principe dat ik toepas in mijn DCC Multiprotocol Command Station. Meer info zie Elektor september 2008. Microcontroller is een ARM7 maar een Arduino moet dit ook wel kunnen mits de ISR de hoogste prioriteit heeft en de globale interrupts niet ( te lang) gemaskeerd worden.
Mvg, Patrick Smout
-
Hierbij enkele foto's van de door mij gebouwde LITE // Centrale. Na vele uren noeste arbeid is het een "echte "centrale geworden. In het kastje van ELV elektronik in Leer (D) heb ik het volgende ondergebracht:
De LITE // centrale
Een ringkerntrafo 230 / 2x12v 3,3A voor spanningsvoorziening Lite en Booster
Een China boostermodule (L298N module) voor de aansturing van mijn wissels e.d.
Extra geschakelde voedingsmodule 12v 3A voor spanningsvoorziening van wissels (L298N module)
ENC28J60 module voor koppeling met router / wifi
Schermpje 128x128 pixels voor statusinformatie
USB - Serieel omzetter
Op front
toetsen RESET en BUT voor het eenvoudig updaten van de LITE //
toets 1 / 0 voor in / uit schakelen van de centrale
schakelaar voor in / uitschakelen 230v netspanning
Op achterzijde
aansluiting voor USB kabel
aansluiting Hoofdrail / Programmeerrail / Wissels e.d.
Netwerkaansluiting
2x XPress aansluiting
S88 aansluiting
230v aansluiting via euro-aansluiting
De drie toetsen op het front heb ik direct achter de frontfolie aangebracht waardoor een mooi glad front is ontstaan. Op de gemarkeerde vlakjes drukken betekent de minitoetsjes die hier achter zitten bedienen.
(https://images.beneluxspoor.net/bnls/3_30.jpg) (https://images.beneluxspoor.net/bnls/3_30.jpg)
(https://images.beneluxspoor.net/bnls/12k_1.jpg) (https://images.beneluxspoor.net/bnls/12k_1.jpg)
(https://images.beneluxspoor.net/bnls/19k_1.jpg) (https://images.beneluxspoor.net/bnls/19k_1.jpg)
-
Kan iemand de timing van die trits uitleggen, ik vind dit erg verwarrend. Vooral de definities... In de manual staat:
trinary "1": a pair of long pulses
------- -------
- -
1234567812345678
trinary "0": a pair of short pulses
- -
------- -------
1234567812345678
en:
base clock duration (locos): 26 us (microseconds) = 1/38400 (approx.)
Comment: this is the clock frequency of the old 6020
double frequency (solenoid and old function decoders): 76800 baud
half clock duration (solenoid and old function decoders): 13 us
base pulse duration (locos): 8 x (base clock duration) = 208 us
half pulse duration (solenoids): 8 x (half clock duration) = 104 us
binary "1": a long pulse
Ik zie dat ons forum niet monospaced it. Is elk '-' en elke '_' nu 13us? Een trit duurt dan precies 2 * 8* 13 = 208us dat klinkt logisch. Als ik nu bijvoorbeeld een trinary '0' stuur, moet ik dan baanspanning toggelen om: 13us, 91us (7 * 13us), 13us en weer 91us?
EDIT: volgens mij lees ik het verkeerd en moet 13 vervangen door 26us
-
code monospace
0123456789ABCDEF
Niet als citaat maar als code dus het # knopje
Groeten,
Daan
-
Leuk project ;), het wordt tijd dat ik zelf ook zoiets in elkaar probeer te fruniken in de toekomst. Dat het wissel ook automatisch bediend wordt, is ook handig. Want een wissel openrijden leidde in het verleden bij mij tot ontsporingen.
De DCC/Motorola centrale van Evers is me immers ook gelukt om die in elkaar te bouwen. Al kreeg ik het programma in het begin niet in de centrale geprogrammeerd. Mijn computer ontdekte een virus die bij het programma zat. Maar het draait allemaal inmiddels al weer een geruime tijd prima! (y)
-
EDIT: volgens mij lees ik het verkeerd en moet 13 vervangen door 26us
Timing staat op Klaas zijn site bijv.
https://people.zeelandnet.nl/zondervan/digispan.html
Mvg
Robert
-
Moderator: als je reageert op het laatste bericht, graag de REAGEER-knop gebruiken, niet de CITAAT-knop, anders komen alle berichten dubbel onder elkaar te staan..
Ja ik zie het, het moest idd 26us zijn. Dit hebben ze wel slim gedaan. Zo doen adressen recyclen door loc timings te verdubbelen.
Hmm het ziet er nu veel makkelijker uit ;D