|

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
- Alle onderdelen worden op de zichtzijde van het board geplaatst
en aan de onderzijde gesoldeerd.
- Monteer eerst de weerstand 220Ω op R1.
- 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).
- Plaats de 2-polige header pins (-5v+).
- Soldeer nu de KF301 2P en KF128 3P schroefterminals en de 4 stuks
15-polige female headers op het PCB.
- 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).
-
Controleer
je soldeerwerk nog even visueel op slordigheden, onbedoelde kortsluitingen
tussen 2 soldeerpunten of niet gesoldeerde contacten.
- 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
- Het board is nu klaar voor een eerste test.
- 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.
- 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.
-
Haal de Nano van het basis board af en verbind de Nano via een USB-kabel
met de PC.
- Start de Arduino IDE op de PC.
- Selecteer in de Arduino IDE het juiste board (Nano) en de juiste COM-poort.
- Download deze
testsketch en unzip het bestand in je map met Arduino projecten. Open daarna
de file met de Arduino IDE.
-
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
- Controleer in de Arduino IDE de instelling bij:
[Tools]
[Processor]
Daar moet ATmega328p of ATmega328P (Old Bootloader) geselecteerd zijn.
- Upload de sketch vervolgens naar de Nano.
- Indien de sketch niet naar de Nano upload, controleer dan de volgende dingen:
- Is er een CH340-driver op de PC geïnstalleerd (USB)?
- 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).
- Is het juiste board geselecteerd in de Arduino IDE (Nano)?
- Is de juiste COM-poort geselecteerd in de Arduino IDE?
- Switch in de Arduino IDE bij...:
[Tools]
[Processor]
...eens van ATmega328P naar ATmega328P (Old Bootloader) of andersom.
- Is Rocrail (of andere modelspoorsoftware) actief naast de Arduino
IDE? Soms conflicteren deze op het gebruik van COM-poorten als ze
tegelijkertijd gebruikt worden.
-
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.
- 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
- 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
- Installeer eerst (als je dat nog niet gedaan hebt) de laatste
nieuwe EX-IOExpander
software in de Arduino IDE.
- Download die software
hier:
Github IOExpander.
- Pak de Zip uit in de map met je Arduino projecten (dus niet de
map met de libraries).
- 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.
- In de seriële monitor van de Arduino IDE verschijnt een melding
dat alles werkt.
- 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!
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:
- 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!
Om EX-IOExpander te gebruiken dien je over de meest recente
end-user-versie
van CommandStation-EX te beschikken (V5.0.0 of hoger).
- Die kun je
hier downloaden
(zip).
- 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).
- Open nu de sketch CommandStation-EX
in de Arduino IDE. Samen met
deze sketch worden er nog een flink aantal andere bestanden geladen.
- Selecteer het bestand myHall.cpp
- Zoek in de code: void halSetup() {
- Zet in een nieuwe regel direct na het stukje code zoals bij punt
5 genoemd:
EXIOExpander::create(800, 18, 0x65);
- Plaats het motor shield op de Mega centrale en sluit eventuele
andere boards ook aan (LCD, Wifi shield, servo drivers, port
expansions, etc).
- 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:
- 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.
- 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.
- 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:
- Sluit de DCC-EX unit via een USB-kabel aan op de PC en start de
Arduino IDE.
- Stel in de IDE indien nodig het juiste board en de juiste
COM-poort in.
- Open de seriële monitor (cntrl-shft-m) en type de onderstaande
oranje tekst in de commandline van de seriële monitor (+ enter).
- 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.
- 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.
- 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.
|