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 Ivo tB
Vandaag om 00:08:14
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
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: MARDEC, de Multifunctionele ARduino dcc DECoder.  (gelezen 348114 keer)

MartinH0

  • Offline Offline
  • Berichten: 588
Re: MARDEC, de Multifunctionele ARduino dcc DECoder.
« Reactie #1575 Gepost op: 05 februari 2022, 17:18:00 »
 (y)  heeft ook geen haast
Met vriendelijke groet, Martin

NTeering

  • Offline Offline
  • Berichten: 1024
    • ARduino Controlled MOdel RAilway
Re: MARDEC, de Multifunctionele ARduino dcc DECoder.
« Reactie #1576 Gepost op: 09 februari 2022, 12:05:05 »
Ik heb het probleem van Martin kunnen reproduceren.
3 Leds op poorten 1, 3 en 4 met mode 8 (flikkeren) en adressen 1, 2 en 3 en grenswaardes van 10 en 200.
In config mode werken ze alle drie met de T-functie.
In normal mode werkt alleen poort 1.
De commando's voor de poorten 3 en 4 ziet Mardec wel en laat dat ook zien in Putty.
Alleen gaat er niks flikkeren.
En daar begrijp ik helemaal niks van.
In zowel config als normal mode wordt dezelfde code gebruikt.

Maar Martin zal toch niet de eerste met dit probleem zijn?
Daarom ook maar eens getest met Mardec 6.1. Het enige verschil is de Mynabay library versus de NMRA library.
Tot mijn verbazing was dat de 'oplossing'. Wel na verwisselen van de DCC-draden.
Alle drie de PWM poorten konden worden aangestuurd in normal mode.

Nu nog uitzoeken wat hier aan de hand is.
Iemand een suggestie?

mvg
Nico

bask185

  • Online Online
  • Berichten: 4009
Re: MARDEC, de Multifunctionele ARduino dcc DECoder.
« Reactie #1577 Gepost op: 09 februari 2022, 14:27:19 »
Misschien past een van de libraries een van de timers settings aan om de pulselengtes te meten waar de andere library gewoon micros() gebruikt om de pulslengtes te bepalen. Arduino doet standaard alle timers te configureren zodat alle hardware PWM kanalen, micros() en millis() gelijktijdig kunnen werken.

Mvg,

Bas

EDIT:
Ik heb even gegoogled naar de NMRA DCC library en in commentaar vond ik dit stukje
// DCC Receive Routine
//
// Howto:    uses two interrupts: a rising edge in DCC polarity triggers INTx
//           in INTx handler, Timer0 CompareB with a delay of 80us is started.
//           On Timer0 CompareB Match the level of DCC is evaluated and
//           parsed.
//
//                           |<-----116us----->|
//
//           DCC 1: _________XXXXXXXXX_________XXXXXXXXX_________
//                           ^-INTx
//                           |----87us--->|
//                                        ^Timer-INT: reads zero
//
//           DCC 0: _________XXXXXXXXXXXXXXXXXX__________________
//                           ^-INTx
//                           |----------->|
//                                        ^Timer-INT: reads one
//
// new DCC Receive Routine without Timer0 ........................................................
//
// Howto:    uses only one interrupt at the rising or falling edge of the DCC signal
//           The time between two edges is measured to determine the bit value
//           Synchronising to the edge of the first part of a bit is done after recognizing the start bit
//           During synchronizing each part of a bit is detected ( Interruptmode 'change' )

Ze hebben blijkbaar ooit timer0 gebruikt en zijn daar later van af gestapt ofzo?

EDIT2:
Verderop staat dit stukje commentaar
// Bit evaluation without Timer 0 ------------------------------
    uint8_t DccBitVal;
    static int8_t  bit1, bit2 ;
    static unsigned int  lastMicros = 0;
    static byte halfBit, DCC_IrqRunning, preambleBitCount;
    unsigned int  actMicros, bitMicros;
    #ifdef ALLOW_NESTED_IRQ
    if (DCC_IrqRunning)
    {
        // nested DCC IRQ - obviously there are glitches
        // ignore this interrupt and increment glitchcounter
        CLR_TP3;
        #ifdef DCC_DEBUG
        DccProcState.NestedIrqCount++;
        #endif
        SET_TP3;
        return; //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> abort IRQ
    }
    #endif
    actMicros = micros();
    bitMicros = actMicros-lastMicros;
Er staat duidelijk dat ze dus van timer0 naar micros() zijn geswitched, hoewel micros() volgens mij ook op timer0 draaide dacht ik. Technicallity  ::)

Derde EDIT... nu ik toch bezig was.
De MynaBay library maakt alleen maar gebruik van micros()

void DCC_Decoder::DCC_Interrupt()
{
    unsigned long ms = micros();
    gInterruptTime[gInterruptTimeIndex] = ms - gInterruptMicros;
    gInterruptMicros = ms;
    gInterruptChaos += gInterruptTimeIndex;
    gInterruptTimeIndex ^= 0x01;   
}

Het verklaart alleen niet waarom het wisselen van de DCC draden enige relevantie heeft  ???
« Laatst bewerkt op: 09 februari 2022, 14:39:13 door bask185 »
Train-Science.com
Train-Science github
It ain't rocket science ;-)

NTeering

  • Offline Offline
  • Berichten: 1024
    • ARduino Controlled MOdel RAilway
Re: MARDEC, de Multifunctionele ARduino dcc DECoder.
« Reactie #1578 Gepost op: 09 februari 2022, 14:42:19 »
Het heeft waarschijnlijk inderdaad te maken met de Timers van de Arduino.
In de 2.0.x versies van de library staat in de Readme.md:

The library currently supports the AVR ATTiny84/85 & ATMega88/168/328/32u4 and Teensy 3.x
using the INT0/1 Hardware Interrupt and micros() ONLY
and no longer uses Timer0 Compare Match B, which makes it much more portable to other platforms.


Deze versies zijn echter te groot voor Mardec. Maar ik kan ze testen met een uitgeklede Mardec versie.

Nico

bask185

  • Online Online
  • Berichten: 4009
Re: MARDEC, de Multifunctionele ARduino dcc DECoder.
« Reactie #1579 Gepost op: 09 februari 2022, 15:06:13 »
Zit je door je Flash of door je Ram heen?
Flash zijnde programma 32k geheugen
Ram zijnde 2k variabele geheugen

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

NTeering

  • Offline Offline
  • Berichten: 1024
    • ARduino Controlled MOdel RAilway
Re: MARDEC, de Multifunctionele ARduino dcc DECoder.
« Reactie #1580 Gepost op: 09 februari 2022, 17:11:57 »
Mardec laat zich toch compileren en linken met NMRA 2.0.x versies.
Alleen werken ze geen van allen. Het DCC-signaal wordt niet herkend.

Waarom draden wisselen nuttig kan zijn:
https://forum.beneluxspoor.net/index.php?topic=99750.msg3222252163#msg3222252163

Bij verder testen met de library van Karst blijkt dat poorten 1 en 9 wel werken maar poort 3 en 4 niet.
Mijn kennis reikt niet ver genoeg om uit te zoeken waarom een recente versie het niet doet ondanks dat er kennelijk wel met micro's gewerkt wordt en niet meer met Timer0 zoals in de library van Karst.

Nico



MartinH0

  • Offline Offline
  • Berichten: 588
Re: MARDEC, de Multifunctionele ARduino dcc DECoder.
« Reactie #1581 Gepost op: 09 februari 2022, 19:13:27 »
Hoi Nico,

Is Mardec 6.1 nog beschikbaar? Dan kan ik wel alle PWM signalen gebruiken toch? Ik gebruik toch geen railcom en kan dan verder met m'n RGB kleuren experiment.
Met vriendelijke groet, Martin

bask185

  • Online Online
  • Berichten: 4009
Re: MARDEC, de Multifunctionele ARduino dcc DECoder.
« Reactie #1582 Gepost op: 10 februari 2022, 08:42:52 »
Citaat
3 Leds op poorten 1, 3 en 4 met mode 8 (flikkeren) en adressen 1, 2 en 3 en grenswaardes van 10 en 200.
In config mode werken ze alle drie met de T-functie.
In normal mode werkt alleen poort 1.
De commando's voor de poorten 3 en 4 ziet Mardec wel en laat dat ook zien in Putty.
Nico!

Nog een vraagje, hoe verhouden jouw poort nummers zich tot de pinnen van de atmega?

Ik zie dit stukje staan voor een atmega328 maar ik snap niet hoe 1, 3, 4, 9 zich vertaalt naar 3, 5, 6, 11
const  byte pwmports[] = {0,1,0,1,1,0,0,0,0,1,0, 0, 0, 0, 0, 0, 0}; //valid pwm poort 1,3,4,9=pin 3,5,6,11
//       port=              1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

De PWM van pinnen 5 en 6 die het niet meer doen draaien beide op timer 0, dat is dus dezelfde timer die NMRA DCC gebruikt.
In de functie SetupNormal() wordt dit aangeroepen
Dcc.init(MAN_ID_DIY, VERSION_ID, FLAGS_OUTPUT_ADDRESS_MODE | FLAGS_DCC_ACCESSORY_DECODER, CV_MULTIFUNCTION_EXTENDED_ADDRESS_MSB);En deze funtie voert de volgende regel uit en deze regel sloopt effectief het PWM op pin 5 en 6
TCCR0A &= ~((1<<WGM01)|(1<<WGM00));

Dit gebeurt nooit in config mode en daarom werkt PWM van 5 en 6 wel in config mode en niet in run mode.

De enige oplossing is dus een van de andere libraries gebruiken die met micros() werken.

Als geen van die libraries werkt, zou ik met micros() eens proberen te achterhalen hoe vaak de dcc update() / process() functie wordt aangeroepen. Als de taken in je loop teveel tijd in beslag nemen, kan het voorkomen dat de update() functie misschien te laat wordt aangeroepen. Een simpele fix zou zijn om de dcc update /process functie op meer plaatsen te zetten binnen void NormalMode()

Ik weet nog niet op dit punt, of het te traag aanroepen van de update() het it doesnt bloody work probleem daadwerkelijk kan veroorzaken. Er wordt immers wel gebruik gemaakt van een extern interrupt. ???

Ik ga nog even verder neuzen.

Mvg,

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

MartinH0

  • Offline Offline
  • Berichten: 588
Re: MARDEC, de Multifunctionele ARduino dcc DECoder.
« Reactie #1583 Gepost op: 10 februari 2022, 09:48:57 »
Bas,


als ik dit goed begrijp zou er dus nooit een PWN signaal uit pin 3 en 4 komen in de normal mode.
Maar die werken wel als ik de andere PWM pins in b.v. single shot vervang. Vanavond nog maar eens testen.
Met vriendelijke groet, Martin

NTeering

  • Offline Offline
  • Berichten: 1024
    • ARduino Controlled MOdel RAilway
Re: MARDEC, de Multifunctionele ARduino dcc DECoder.
« Reactie #1584 Gepost op: 10 februari 2022, 13:39:29 »
@Bas
Citaat
maar ik snap niet hoe 1, 3, 4, 9 zich vertaalt naar 3, 5, 6, 11
Dit array wordt alleen gebruikt om te controleren of het poortnummer wel een PWM pin is.
De omzetting naar Arduino-pinnen gebeurt in het array:
const byte p[MAXTERM] = {0,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19};
//       port=             1 2 3 4 5 6 7 8  9  10 11 12 13 14 15 16

Je hebt er duidelijk meer kennis van dan ik.
Ik dacht ook wel dat de andere libraries (zonder Timer0) mogelijk niet zouden werken door de veel hogere snelheid in normal mode.
Met een display van micros() zal ik eens kijken hoe vaak de dcc.process wordt aangeroepen.

mvg
Nico

MartinH0

  • Offline Offline
  • Berichten: 588
Re: MARDEC, de Multifunctionele ARduino dcc DECoder.
« Reactie #1585 Gepost op: 10 februari 2022, 15:03:19 »
Ik had eerder tijd en heb het net getest.

Bas heeft gelijk!

De uitgangen 3 en 4 die in de config mode goed werken doen niets in de normal mode. Ook niet als pin 1 en 9 in een "niet-PWM" mode staan.

@Bas; als je wat wil uitproberen kan dit. Ik heb een testopstelling met alle hard- en software mogelijkheden. We wonen in dezelfde stad zie ik...
Met vriendelijke groet, Martin

MartinH0

  • Offline Offline
  • Berichten: 588
Re: MARDEC, de Multifunctionele ARduino dcc DECoder.
« Reactie #1586 Gepost op: 11 februari 2022, 12:47:36 »

Mardec 6.1 net getest en werkt prima met alle vier PWM uitgangen.
Ik kan weer verder met mijn RGB experimenten  :laugh:


Nico, bedankt  (y) 
Met vriendelijke groet, Martin

bask185

  • Online Online
  • Berichten: 4009
Re: MARDEC, de Multifunctionele ARduino dcc DECoder.
« Reactie #1587 Gepost op: 11 februari 2022, 16:30:08 »
Nico,

Ik had nog een brainfart. Ik heb nooit zelf gebruik gemaakt van de mardec software, maar van wat ik tot nu toe gezien heb in source code, zou je ook gebruik kunnen maken van de overige PWM pinnen zodat je ze alles 6 kan benutten.

Die pwm pinnen die werken nameliijk gewoon tot het moment dat je ergens servo.attach() gaat gebruiken. Dus zolang iemand geen gebruik maakt van een of meerdere servo's...... zou men 2 extra pwm pinnen kunnen gebruiken.

Dan heb je in mardec 6.2 ::) alleen nog maar een mogelijkheid nodig om die pinnen als dusdanig in te kunnen stellen. Ik weet niet of deze wijziging volstaat?
const  byte pwmports[] = {0,1,0,1,1,0,0,1,1,1,0, 0, 0, 0, 0, 0, 0}; //valid pwm poort 1,3,4,9=pin 3,5,6,11
//       port=              1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Als je nog hulp nodig heb met je mardec SW te laten compileren met een andere DCC library moet je het me maar laten weten. Ik denk niet dat het lastig is om wat onnodige features uit die libraries te slopen voor wat meer programma en of variabele ruimte.

Mvg,

Bas

P.S.
Je hebt op 36 plaatsen in mardec.ino vergeten om de F() macro toe te passen in de print(ln) functies  ;)
Train-Science.com
Train-Science github
It ain't rocket science ;-)

erikkral

  • Offline Offline
  • Berichten: 343
Re: MARDEC, de Multifunctionele ARduino dcc DECoder.
« Reactie #1588 Gepost op: 06 juni 2022, 11:27:41 »
Ik heb een vraag maar ik wete niet waar ik het moet zoeken.

Het probleem is dat Rocrail na het opstarten de wissels die met Mardec zijn aangesloten, het bij de eerste keer bedienen het niet doen.
Bij een tweede keer de wissel omleggen, doet ie het vanaf dan wel.

Om uit te sluiten waar het probleem ligt, heb ik de Multimaus er even bij gepakt. En daar zie ik het zelfde gebeuren: Bij de eerste keer drukken gaat de wissel niet om, bij een tweede keer wel.
Ik heb dit filmpje gemaakt.

Ik heb tijdens de test de Mardec aangesloten op Putty, om te kijken hoe de pakketen daar binnenkomen.
Daar zie ik de eerste keer (dus wanneer ik de wissel voor het eerst probeer om te leggen) geen melding verschijnen.
Pas bij de tweede keer drukken, dus als ik de wissel weer recht leg (maar er gebeurt dan in feite niets omdat de wissel al recht ligt) zie ik een melding verschijnen dat er een DCC pakketje ontvangen is.

De centrale is een DR5000.
Heeft iemand een idee?
« Laatst bewerkt op: 06 juni 2022, 11:30:40 door erikkral »

Jack van der Werf

  • Nieuwe gebruiker
  • Offline Offline
  • Berichten: 8
Re: MARDEC, de Multifunctionele ARduino dcc DECoder.
« Reactie #1589 Gepost op: 04 september 2022, 18:20:38 »
Hallo Erik,

Ik herken dit effect wel en gebeurt ook bij aansturing van uit mijn TwinCenter en IBII.

Bij eerste bediening van een wissel gaat hij inderdaad niet om.

Het is echter bij mij geen probleem omdat ik met Koploper rij en die eerst alle wissels en seinen initialiseert.

Het zit dus niet in Rocrail. Geen idee wat het veroorzaakt.

Groet Jack van der Werf, Emmeloord.