Doel:€250.00
Donaties:€187.50

Per saldo:€-62.50

Steun ons nu!

Laatst bijgewerkt
op 28-06-2022

Vacature: secretaris bestuur
Algemeen

De stichting

Recente berichten

Van Dapol spoor 0 class 08 naar NS 500/600 door Pauldg
Vandaag om 14:56:39
NS modelbaan Hoekdam H0 door DH1-3104
Vandaag om 14:53:18
Mijn eerste H0-modeltreinbaan in aanbouw door Wim Vink
Vandaag om 14:51:48
Kleine H0-modelbaan, DB tijdperk III door Dennis1984
Vandaag om 14:22:09
Rondom Charlois door Alewijn
Vandaag om 14:06:22
Wel remgeluid, maar lok rijdt door door bellejt
Vandaag om 13:44:04
Toon hier je nieuwe (model-) spooraanwinst(en)... door Forever Rocofan
Vandaag om 13:32:55
Testbaan door C-rails
Vandaag om 13:25:27
Ervaringen met bezorgdiensten (PostNL, DHL, etc) door Tramfan
Vandaag om 13:20:49
NS 5500 / HSM 700 spoor 0 / 1 door rolfm
Vandaag om 13:12:55
LS models ICR door Duikeend
Vandaag om 12:54:03
Spoor op industrieterrein Lage Weide door spoorzeven
Vandaag om 12:50:12
Station Markelo in schaal 0 door WesleyMunnik
Vandaag om 12:44:53
Bahnstrecke 5867 door 741230
Vandaag om 12:22:38
Havenbaantje, Duitse havenstad, periode 2e wereldoorlog. door jerrytrein
Vandaag om 12:03:04
BNLS Werkspoorr - Roco BB-300 omgebouwd naar NS periode 1949-1951 door Duikeend
Vandaag om 11:13:29
Raadplaatje door spoorzeven
Vandaag om 10:05:35
Onlangs gespot - gefotografeerd, de foto's door Dave.......
Vandaag om 09:45:01
NS-200 Sik. Bouwproject in Spoor- 0 en Spoor-1. door FritsT
Vandaag om 09:24:37
Korneschans. Een fictief Duits Nederlands grensstation. door Jeroen Water
Vandaag om 08:50:33
Update: baan in de tropen door Hans Grasmaijer
Vandaag om 08:11:57
"Litter Bin" voor Brits spoor en Britse modelspoorprojecten door JohanDC
Vandaag om 07:55:22
Rijnstraat door Rob Moerkerken
Vandaag om 06:59:55
Bauarbeiten im gange door 741230
Vandaag om 06:39:46
Wie maakt de Nedmag trein compleet met de juiste wagens? door T.Spat
28 juni 2022, 23:21:09
iTrain 5.1 door Dirk
28 juni 2022, 21:49:38
RhB H0m, Albulisch door Boertje
28 juni 2022, 21:40:21
La vie...Sud-Est; zolderbaan met thema zuidoost Frankrijk door Eegtrain
28 juni 2022, 21:38:27
Aandrijving Roco 2200 door Lokführer Bas
28 juni 2022, 21:27:28
Alt Wutachbahn - Sau-Schwänzle-bahn Weizen - Zollhaus - Blumberg door Eric v C
28 juni 2022, 20:38:03
  

Auteur Topic: MARDEC, de Multifunctionele ARduino dcc DECoder.  (gelezen 299590 keer)

MartinH0

  • Offline Offline
  • Berichten: 474
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, MartinH0

Het treinenleven begint bij adres 3

NTeering

  • Offline Offline
  • Berichten: 991
    • 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

  • Offline Offline
  • Berichten: 2184
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 »

NTeering

  • Offline Offline
  • Berichten: 991
    • 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

  • Offline Offline
  • Berichten: 2184
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


NTeering

  • Offline Offline
  • Berichten: 991
    • 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: 474
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, MartinH0

Het treinenleven begint bij adres 3

bask185

  • Offline Offline
  • Berichten: 2184
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

MartinH0

  • Offline Offline
  • Berichten: 474
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, MartinH0

Het treinenleven begint bij adres 3

NTeering

  • Offline Offline
  • Berichten: 991
    • 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: 474
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, MartinH0

Het treinenleven begint bij adres 3

MartinH0

  • Offline Offline
  • Berichten: 474
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, MartinH0

Het treinenleven begint bij adres 3

bask185

  • Offline Offline
  • Berichten: 2184
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  ;)

erikkral

  • Offline Offline
  • Berichten: 221
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 »