Home   Contact
Basis boards   CS & power
Stack boards   Bouwinstructies
Prijslijst   Site in English
 
 

Bouwinstructie basis board
DCC-EX I2C V2.2


Basis board DCC-EX I2C,
klik

 

Inhoudsopgave van deze pagina

Deze pagina heeft de volgende secties (scroll down):

  • Functionaliteit
  • Stuklijst
  • Codering weerstanden
  • Het bouwen
  • Volgende stappen en 1e test
  • Upload definitieve IOExpander sketch
  • Wel of geen pullups?
  • Update software DCC-EX Command Station
  • I2C-bekabeling, meerdere units
  • Commando's in de seriële monitor
  • Adressering in Rocrail en iTrain
  • Volgende stap: stack board
  • Het eindresultaat
  • Aansluitingen

 

Functionaliteit

Het basis board DCC-EX I2C client is een 16-kanaals input en output device voor uitgaande DCC of DCC-EX commando's of binnenkomende sensoren en terugmeldingen. Deze seriële DCC-EX unit wordt via een een gangbare 3-aderige draadverbinding (bv AWG26 of 28, ongeveer 0,14mm2, maximaal 2 meter) met het DCC-EX Command Station verbonden. En op deze I2C-bus kun je meerdere DCC-EX I2C clients doorverbinden (one-to-many). Hou de I2C-bedrading verder zo kort mogelijk (maar dat geldt voor veel soorten modelspoorbekabeling). Plaats I2C-clients dus in de buurt van het DCC-EX Command Station.

Een DCC-EX Command Station V5 op een Mega 2560 is dus een vereiste voor het gebruik van DCC-EX I2C-clients. DCC-EX I2C-clients werken niet vanaf andere centrales zoals Märklin CS, ESU Ecos, Uhlenbrock, et cetera. Het is echt één geheel eigen DCC-EX systeem.

Te gebruiken met de stack boards: wissels, ontkoppelen, servo's, DC-outputs, relais en pins, seinen LED, stroomdetectie, test en debug.

De moeilijkheidsgraad van deze bouwinstructie is 3.

 

Stuklijst

Controleer even of je alles compleet hebt:

  • PCB basis board DCC-EX I2C V2.2
  • Nano V3 ATmega328 USB-C
  • Header 15P female (4)
  • Header 2P male1
  • Led 3mm groen
  • Schroefterm. KF301 2P 5.0mm
  • Schroefterm. KF128 3P 2.54mm
  • Weerstand 220Ω

1 Het kan zijn dat de 2P (polige) male header niet los in de verpakking van het basis board zit. In dat geval blijft de benodigde header over uit het op maat breken van de pinnen van het stack board (bv wissels). Die pinnen leveren we meestal in 40-polige uitvoering en als je daar de 2x 15P vanaf breekt blijven er 10 pinnen over.

 

Codering weerstanden

Er bestaan 2 veel gebruikte versies van kleurcodering voor weerstanden. Je zult veelal beige of blauwe weerstanden tegenkomen:

 


Codering weerstanden,
klik

 

Voor het buigen van de aansluitdraden van een weerstand (of een diode) kun je een stukje karton gebruiken van 2mm dikte (achterzijde schrijfblok). Als je beide aansluitdraden om de rand van het karton buigt dan past de weerstand precies in de footprint op het PCB (weerstanden hebben geen polariteit, het maakt dus niet uit welk pootje in welk gaatje in de footprint op het PCB zit):

 


Weerstand buigen

 

Het bouwen

  1. Alle onderdelen worden op de zichtzijde van het board geplaatst en aan de onderzijde gesoldeerd.
     
  2. Monteer eerst de weerstand 220Ω op R1.
     
  3. Plaats dan de led. Het lange pootje van de led (+) moet links en het korte pootje van de led (-) moet rechts (- is de zijde met de witte verdikte rand in de footprint).
     
  4. Plaats de 2-polige header pins (-5v+).
     
  5. Soldeer nu de KF301 2P en KF128 3P schroefterminals en de 4 stuks 15-polige female headers op het PCB.
     
  6. Soldeer, indien van toepassing, de 2 stuks 15-P male headers op de Nano (plaats ze langs onder op het board en soldeer ze aan de zichtzijde vast). Laat het zwarte blokje met de 6 pinnen weg, monteer deze niet. Ze zijn niet nodig en maken het aansluiten van accessoires op het stack board soms lastig. Plaats tot slot de Nano in de daarvoor bestemde headers op het basis board, met de USB aansluiting aan de linker zijde (zie onderstaande afbeelding).
     
  7. Controleer je soldeerwerk nog even visueel op slordigheden, onbedoelde kortsluitingen tussen 2 soldeerpunten of niet gesoldeerde contacten.
     
  8. Aansluiten:

    Verbind de Nano via de blauwe KF301 schroefterminal met een 5v DC spanning, let daarbij goed op + en - (staat op het PCB aangegeven).
     
    De USB-aansluiting wordt alleen gebruikt om de sketch te uploaden. Tijdens normaal gebruik op de modelbaan kan deze kabel weer verwijderd worden.
     
    Verbind de lijn SCL A5 van de Nano met pin SCL 21 van het Command Station.
     
    Verbind de lijn SDA A4 met pin SDA 20 van het Command Station.
     
    Verbind de lijn GND van de Nano met GND van het Command Station
     
    Gebruik normale aansluitdraden van bv 0,14mm2 (AWG26). Dat kunnen losse draden zijn of een 3-aderige kabel.

 


Klik voor vergroten

 

Volgende stappen en 1e test

  1. Het board is nu klaar voor een eerste test.
     
  2. Zorg ervoor dat er een CH340 (of CH341) driver op de PC geïnstalleerd is (zoek in Google). Deze Windows driver zorgt voor de verbinding tussen het Arduino board en de PC met de Arduino IDE.
     
  3. Is de Arduino IDE (V2, Integrated Development Environment) op je PC geïnstalleerd? Zo niet, dan kun je die downloaden vanaf Arduino.cc. Download de versie voor jouw systeem en start vervolgens de installatie.
     
  4. Haal de Nano van het basis board af en verbind de Nano via een USB-kabel met de PC.
     
  5. Start de Arduino IDE op de PC.
     
  6. Selecteer in de Arduino IDE het juiste board (Nano) en de juiste COM-poort.
     
  7. Download deze testsketch en unzip het bestand in je map met Arduino projecten. Open daarna de file met de Arduino IDE.
     
  8. In regels 20-25 van de code van deze sketch staan 5 pinmappings. Uncomment (dus zonder //) de pinmapping voor je board (DCC-EX, DCC-EX I2C, DCC-decoder, LocoClient of LocoBuffer en zorg ervoor dat de andere 4 pinmappings wel // ervoor hebben staan in de code (C++ code met // ervoor wordt niet uitgevoerd). Zie afbeelding:

 


Pinmapping instellen,
klik

 

  1. Controleer in de Arduino IDE de instelling bij:

    [Tools]
    [Processor]
     
    Daar moet ATmega328p of ATmega328P (Old Bootloader) geselecteerd zijn.
     
  2. Upload de sketch vervolgens naar de Nano.
     
  3. Indien de sketch niet naar de Nano upload, controleer dan de volgende dingen:
     
    1. Is er een CH340-driver op de PC geïnstalleerd (USB)?
       
    2. Is de USB-kabel oké? Probeer eens een andere kabel. Sommige USB-kabels hebben maar 2 aders en zijn alleen geschikt om iets op te laden. Normale USB-kabels hebben 4 aders (2 datalijnen, 5V en gnd).
       
    3. Is het juiste board geselecteerd in de Arduino IDE (Nano)?
       
    4. Is de juiste COM-poort geselecteerd in de Arduino IDE?
       
    5. Switch in de Arduino IDE bij...:
       
      [Tools]
      [Processor]
       
      ...eens van ATmega328P naar ATmega328P (Old Bootloader) of andersom.
       
    6. Is Rocrail (of andere modelspoorsoftware) actief naast de Arduino IDE? Soms conflicteren deze op het gebruik van COM-poorten als ze tegelijkertijd gebruikt worden.
       
  4. Plaats de Nano terug op het basis board. Indien je beschikt over een stack board test en debug, dan kun je dat nu op het basis board plaatsen in H1 en H2.
     
    Heb je geen stack board test en debug dan kun je ook losse led's (met een weerstand) of een multimeter gebruiken om de outputs te testen. Plaats nog geen ander stack board! Dat doe je pas als je de definitieve sketch hebt geupload naar het basis board.
     
  5. Als alles goed is gemonteerd en geïnstalleerd dan loopt er nu een testprogramma op de Nano dat poorten 1 tm 16 steeds kort aan/uit schakelt (DCC-decoder, DCC-EX, DCC-EX I2C en LocoClient). Of led's 1 en 2 branden continu en de led's 3-16 knipperen afwisselend (LocoBuffer). Op het stack board test en debug branden/knipperen de led's 1 tm 16 één voor één, en in de seriële monitor (rode kader) van de Arduino IDE verschijnt een melding dat alles goed werkt (let op: zorg ervoor dat de baudrate van de Arduino IDE hetzelfde is ingesteld als de genoemde baudrate van de sketch (void setup, zie rode kaders). zie afbeelding:

 


Baudrate instellen,
klik

 

  1. Algemene informatie over de werking van Arduino boards en de verschillende modellen kun je op deze pagina raadplegen. En mocht je meer willen leren over het programmeren van Arduino boards in C++ dan kun je bv terecht op deze website (Bas on Tech).

 

Upload de definitieve IOExpander sketch

  1. Installeer eerst (als je dat nog niet gedaan hebt) de laatste nieuwe EX-IOExpander software in de Arduino IDE.
     
  2. Download die software hier: Github IOExpander.
     
  3. Pak de Zip uit in de map met je Arduino projecten (dus niet de map met de libraries).
     
  4. Open nu de sketch EX-IOExpander in de Arduino IDE. Er worden ook aanvullende bestanden in de IDE geladen. Deze sketch staat in de projectenmap van de Arduino IDE. Upload die sketch naar het Nano board.
     
  5. In de seriële monitor van de Arduino IDE verschijnt een melding dat alles werkt.
     
  6. Plaats nu het stack board dat je bij dit basis board wil gebruiken op het basis board.

 

De IOExpander sketch heeft een aantal default instellingen die standaard reeds ingesteld zijn:

  • I2C-adres 0x65 voor 1e device
  • Adres (virtual pin) 800 (tm 819)

Een 2e I2C IOExpander device krijgt (hex) adres 0x66 en virtuele pinnen 820-839, de 3e adres 0x67 en virtuele pinnen 840-859), et cetera. Om hexadecimale getallen om te rekenen naar decimale getallen vermenigvuldig je het 1e getal met 16 (0 tm 15 zijn 16 getallen inclusief de 0) en tel je er vervolgens het 2e getal bij op. 66 hex wordt dus 102 decimaal. Het hexadecimale stelsel telt van 0 tm F:

Dec 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Hex 0 1 2 3 4 5 6 7 8 9 0A 0B 0C 0D 0E 0F

  

Op de website van DCC-EX vindt je nog veel meer aanvullende informatie over de EX-IOExpander!

 

Wel of geen pullups?

In sommige situaties is het noodzakelijk om een kleine wijziging in de EX-IOExpander software aan te brengen qua pullups. Dit wordt veroorzaakt door hele kleine verschillen in de specificaties van Nano's. Die kunnen er zijn zonder dat je dit aan de buitenkant kunt zien. Doe dit dus pas als de setup hierboven (punt 1 tm 6) een niet werkende communicatie oplevert! In dat geval wordt punt 4 uit de lijst hierboven:

  1. Open nu de sketch EX-IOExpander in de Arduino IDE. Samen met deze sketch worden er nog een aantal andere bestanden geopend.
     
    Selecteer het bestand myConfig.example.h
     
    Zoek daarin de volgende regel:
     
    #define DISABLE_I2C_PULLUPS
     
    Voor deze regel staat // (de pullups staan dus default aan). Haal deze // in de code weg zodat de regel actief wordt (uncomment) en de pullups UIT worden gezet (disable).
     
    Upload de sketch naar de Nano.
     
    Gebruik nooit het kladblok om de file te editen maar doe dit binnen de Arduino IDE. De bestandsextensie wordt in het kladblok .txt en de file wordt dientegevolge onbruikbaar voor Arduino!

 

Update software DCC-EX Command Station

Om EX-IOExpander te gebruiken dien je over de meest recente end-user-versie van CommandStation-EX te beschikken (V5.0.0 of hoger).

  1. Die kun je hier downloaden (zip).
     
  2. Installeer de software uit het zip-bestand op dezelfde manier zoals je net de EX-IOExpander hebt geïnstalleerd (dus unzip in de map met Arduino projecten).
     
  3. Open nu de sketch CommandStation-EX in de Arduino IDE. Samen met deze sketch worden er nog een flink aantal andere bestanden geladen.
     
  4. Selecteer het bestand myHall.cpp
     
  5. Zoek in de code: void halSetup() {
     
  6. Zet in een nieuwe regel direct na het stukje code zoals bij punt 5 genoemd:
     
    EXIOExpander::create(800, 18, 0x65);

     
  7. Plaats het motor shield op de Mega centrale en sluit eventuele andere boards ook aan (LCD, Wifi shield, servo drivers, port expansions, etc).
     
  8. Upload de CommandStation-EX sketch naar de Mega met de Command Station software erop.

Bovenstaande punten 1-8 gelden dus voor de Mega die als Command Station dient en niet voor de DCC-EX I2C unit die je net gebouwd hebt en waar deze pagina van de bouwbeschrijving over gaat! De Command Station moet hier worden voorbereid op het gebruik van de I2C-client(s).

Gebruik nooit het kladblok om de file te editen (zoals bij bovenstaande punten 4-5-6) maar doe dit binnen de Arduino IDE. De extensie wordt in het kladblok .txt en de file wordt dientegevolge onbruikbaar voor Arduino!

 

I2C-bekabeling, meerdere units

Op het basis board DCC-EX I2C-client zit een groene 3-polige KF128 schroefterminal voor de I2C-bedrading. Deze terminal verbindt de clients onderling:

  1. Verbind de ader SCL A5 van de I2C-client met pin SCL 21 van het Command Station of met SCL A5 van een andere I2C client die al op het Command Station aangesloten is.
     
  2. Verbind de ader SDA A4 van de I2C-client met pin SDA 20 van het Command Station of met SDA A4 van een andere I2C client die al op het Command Station aangesloten is.
     
  3. Verbind tot slot de GND van de I2C-client met de GND van het Command Station of een andere I2C client.

Indien je meerdere clients wilt aansluiten dan lus je de 3-aderige bedrading dus gewoon 1-op-1 door naar de volgende unit.

Een volgende I2C-unit (IOExpander) op dezelfde bus moet dan wel weer apart geconfigureerd worden qua I2C-adres (dat adres wordt dan 0x66, 0x67, 0x68 etc):

  • Sketch EX-IOExpander:
     
    Aanpassen van het standaard I2C-adres in de file myConfig.example.h:
     
    de coderegel:
     
    #define I2C_ADDRESS 0x65
     
    wordt dan vervangen door:
     
    #define I2C_ADDRESS 0x66 (of 0x67, 0x68 etc).
     
  • Sketch CommandStation-EX:
     
    File myHall.cpp, definitie van de virtuele pinnen en het I2C-adres aanvullen met een 2e IOExpander (beide coderegels zijn dan dus nodig):
     
    EXIOExpander::create(800, 18, 0x65);
    EXIOExpander::create(820, 18, 0x66);
    Et cetera

Gebruik nooit het kladblok om de file te editen maar doe dit binnen de Arduino IDE. De extensie wordt in het kladblok .txt en de file wordt dientegevolge onbruikbaar voor Arduino!

Het aantal apparaten en de kabellengte op een I2C-bus wordt in de I2C-specificatie alleen beperkt door de totale capaciteit, die bij 400 kHz niet meer dan 400 pF mag zijn. Bij deze capaciteit en de optimale pullup waarde is de tijd die nodig is om de buslijnen van de LAAG naar de HOOG status te trekken aanzienlijk, vergeleken met de pulslengte. Bij een hogere pullup waarde (bijvoorbeeld 10 kOhm) zal de maximaal toegestane capaciteit lager zijn. Als u met een hogere capaciteit moet werken (bijvoorbeeld door langere kabels), dan is het mogelijk om de I2C-kloksnelheid te verlagen. Op het DCC-EX Command Station gaat de werking dan correct door, zelfs met I2C-snelheden van 32 kHz of lager.

 

Commando's in de seriële monitor

De EX-IOExpander heeft een aantal commando's die je via de command line van de seriële monitor in de Arduino IDE kunt ingeven:

 
Commando
 
 
Functie
<D> Toggle diagnostics
<D HAL SHOW> Show settings
<W 0x65> Write I2C-address 0x65
<R> Read I2C-address
<E> Erase I2C-address
<Z> Reboot
<T A> Toggle test analog inputs
<T I> Toggle test digital inputs
<T O> Toggle test outputs
<T P> Toggle pullups
<T> Show current testmode
<V> Show Vpinmapping

 

Om servo's en LED-dimmer te testen gebruik je het commando <T S vpin value profile> (zie ook link). Het <Z> commando werkt niet op Nano's met een old bootloader, gebruik in dat geval de resetknop van de Nano.

 

Adressering

DCC-EX I2C-clients werken met virtuele adressen (Vpins) vanaf 800. Meestal gebruiken die FADA-adressering. Deze inputs en outputs moeten op het Command Station gedefinieerd worden. Rocrail en iTrain verschillen hier van elkaar.

 

Rocrail

De laatste stap is nog het definiëren van de input- en outputpinnen in de DCC-EX Command Station. Open in Rocrail: Bestand - Rocraileigenschappen - Centrale, en klik op de naam van jouw Command Station. Maak vervolgens op het tabblad I/O de input- (met pullup) en outputpinnen aan met de adressen zoals je die gedefinieerd hebt en sla ze op. Sluit en herstart Rocrail vervolgens om dit af te ronden:

 


Input en outputs via Rocrail definiëren, klik

 

Je kunt de pinnen ook direct in het Mega CommandStation-EX instellen buiten Rocrail om. Hier onder staat bij 'iTrain' hoe je dat kunt doen.

 

iTrain

iTrain kan geen input- en outputpinnen op een DCC-EX I2C unit programmeren in de EEprom. Deze moet je dus handmatig via de Arduino IDE instellen. Volg daarvoor de volgende stappen:

  1. Sluit de DCC-EX unit via een USB-kabel aan op de PC en start de Arduino IDE.
     
  2. Stel in de IDE indien nodig het juiste board en de juiste COM-poort in.
     
  3. Open de seriële monitor (cntrl-shft-m) en type de onderstaande oranje tekst in de commandline van de seriële monitor (+ enter).
     
  4. Indien je outputs wilt definiëren (bv wissels, seinen, ontkoppelaars, licht, etc):
     
    <Z ID PIN IFLAG>
     
    <Z 800 2 0>
    <Z 801 3 0>
    <Z 802 4 0>
    <Z 803 5 0>
    <Z 804 6 0>
    <Z 805 7 0>
    <Z 806 8 0>
    <Z 807 9 0>
    <Z 808 10 0>
    <Z 809 11 0>
    <Z 810 14 0>
    <Z 811 15 0>
    <Z 812 16 0>
    <Z 813 17 0>
    <Z 814 18 0>
    <Z 815 19 0>


    Waarbij IFLAG het gedrag van de pin aangeeft: 0 = normaal, 1 = inverted.
     
    Sluit af met <E> om de config op te slaan in de EEprom van de stack module.
     
  5. Indien je inputs wilt definiëren (bv voor stroomdetectie):
     
    <S ID PIN IFLAG>
     
    <S 820 2 0>
    <S 821 3 0>
    <S 822 4 0>
    <S 823 5 0>
    <S 824 6 0>
    <S 825 7 0>
    <S 826 8 0>
    <S 827 9 0>
    <S 828 10 0>
    <S 829 11 0>
    <S 830 14 0>
    <S 831 15 0>
    <S 832 16 0>
    <S 833 17 0>
    <S 834 18 0>
    <S 835 19 0>

     
    Waarbij IFLAG het gedrag van de pin aangeeft: 0 = normaal, 1 = pullup.
     
    Sluit af met <E> om de config op te slaan in de EEprom van de stack module.
     
  6. Aanvullend: klik op deze link voor een overzicht van alle commando's die je via de command line van de seriële monitor van de Arduino IDE kunt gebruiken bij stack modules DCC-EX.

 

Volgende stap: stack board

Zie voor verdere instructies en de volgende stappen de bouwbeschrijvingen sectie 2 van de stack boards die op dit basis board passen (zoals wissels, terugmelding, ontkoppelen, seinen, servo's, outputs, etc).

 

Het eindresultaat

 

Aansluitingen

Dit basis board heeft de volgende aansluitingen:

  • USB-C (Nano), deze wordt aangesloten op de USB-poort van de PC om de sketch te kunnen uploaden. Tijdens normaal gebruik hoeft de USB-kabel niet aangesloten te zijn (dan moet de 5v (zie volgende punt) wel aangesloten worden).
     
  • Schroefterminal KF301, hier kun je 5v DC (niet meer!) voedingsspanning aansluiten als de Nano niet met USB verbonden is. De polariteit is vermeld op het PCB.
     
  • 2 male pins (direct achter de schroefterminal), deze zijn verbonden met de schroefterminal voor de voedingsspanning. De polariteit is vermeld op het PCB.
     
    Deze pinnen kun je gebruiken om de voedingsspanning met 2 korte Dupont-kabeltjes door te lussen naar de voedingsspanning van het stack board dat op dit basis board geplaatst gaat worden. Maar let op: alleen indien de voedingsspanningen van het basis board en het stack board gelijk zijn (bv bij LED seinen).
     
  • H1 en H2, hier plaats je een stack board naar keuze.
     
  • I2C: SCL A5, SDA A4 en GND, de 3 datalijnen.

 

 

 



 

(C) Ed den Ouden
Modelspoor Stack Modules (R)