Modifica A: configurazione della centrale.
Aprire il file "\Z21\Z21_Ethernet_DCC_Zentrale_v498\config.h" con un editor di testo oppure con l'IDE di Arduino. Le linee da lasciare non commentate sono le seguenti:
#define S88N //S88N Interface (max 62 * 8 Module)
#define LAN //LAN Ethernet Z21 LAN Kommunikation mit W5100 ...
#define DCCGLOBALDETECTOR //DCC Railcom Global Detector for MEGA on Serial Port 3 (RX only) - (not for ESP8266 and ESP32)
#define XPRESSNET //XpressNet Auto Master/Salve Interface (not for ESP8266 and ESP32)
#define LOCONET //LocoNet Interface (Timer1, Timer5 on MEGA, with LocoNet2 Library on ESP32)
#define LnSLOTSRV //LocoNet Master-Mode: provide a Slot Server for Loco to use FRED & DaisyII
#define BOOSTER_EXT //External Booster Interface (zB. ROCO, CD[E])
#define BOOSTER_INT //internal Booster Interface (zB. TLE5206)
#define BOOSTER_INT_MAINCURRENT //Standard Short Circuit Detection over current Sense resistor (VAmpIntPin)...
#define DETECT_SHORT_INT_VALUE 350 // value = (3.5A * 0.115ohm) / (1.1V / 1024) => max current 3.5A
#define BOOSTER_EXT_CDE //external CDE Booster
#define DALLASTEMPSENSE //Dallas 18B20 Temperatur Sensor for Arduino MEGA only!
#define Z21DISPLAY FIND //SSD1306 OLED I2C Display and Address for config Data for Arduino MEGA ...
#define FS128 //default speed steps (Fahrstufen) => possible values are: FS14, FS28, FS128
#define Uref 1.10 // measured reference voltage ARef-pin, individual value for every Arduino
#define senseResist 0.115 // actual resistor for measuring current on track
Inoltre aggiungere anche queste righe extra (in qualsiasi punto del file) per fissare i PIN per il ventilatore, il gate per il RAILCOM e per il pin da attivare durante la programmazione CV:
#define FAN 2
#define RAILGATE 30
#define NPROG 24
A questo punto salvare il file e passare al prossimo step.
Modifica B: configurazione dei PIN aggiuntivi della centrale.
Aprire il file "\Z21\Z21_Ethernet_DCC_Zentrale_v498\Z21_Ethernet_DCC_Zentrale_v498.ino" con un editor di testo oppure con l'IDE di Arduino.
Alla linea 245 inserire le parti evidenziate:
pinMode(FAN,OUTPUT); //<<DFCH>> pin per il fan =PE4
pinMode(RAILGATE,OUTPUT); //<<DFCH>> pin per railgate =PC7
pinMode(NPROG,OUTPUT); //<<DFCH>> pin per NPROG =PA2
digitalWrite(FAN, HIGH); //<<DFCH>> FAN on
digitalWrite(RAILGATE, LOW); //<<DFCH>> RAILGATE off
digitalWrite(NPROG, HIGH); //<<DFCH>> NPROG high
Alla linea 252 inserire le parti evidenziate:
#if defined(ProgRelaisPin)
pinMode(ProgRelaisPin, OUTPUT); //ProgTrack-Relais
#if defined(PROG_OUT_INVERT)
digitalWrite(ProgRelaisPin, HIGH); //ProgTrack
#else
digitalWrite(ProgRelaisPin, LOW); //ProgTrack
digitalWrite(NPROG, HIGH); //<<DFCH>> ProgTrack inverted
#endif
#endif
Alla linea 729 inserire le parti evidenziate:
//init ready:
globalPower(csNormal); //Start up the Railpower
digitalWrite(ShortLed, LOW); //Short LED goes off - we are ready to work!
digitalWrite(FAN, LOW); //<<DFCH>> FAN OFF
A questo punto salvare il file e passare al prossimo step.
Modifica C: modifica dell'uscita di comando del binario di programmazione.
Aprire il file "\Z21\Z21_Ethernet_DCC_Zentrale_v498\Z21_Ethernet_DCC_Zentrale_v498\Power.h" con un editor di testo oppure con l'IDE di Arduino.
Alla linea 37 inserire le parti evidenziate:
/******************************************/
#if defined(ProgRelaisPin)
#if defined(PROG_OUT_INVERT)
digitalWrite(ProgRelaisPin, HIGH); //ProgTrack
#else
digitalWrite(ProgRelaisPin, LOW); //ProgTrack
digitalWrite(NPROG, HIGH); //<<DFCH>> ProgTrack inverted
#endif
#endif
Alla linea 61 inserire le parti evidenziate:
/******************************************/
#if defined(ProgRelaisPin)
#if defined(PROG_OUT_INVERT)
digitalWrite(ProgRelaisPin, HIGH); //ProgTrack
#else
digitalWrite(ProgRelaisPin, LOW); //ProgTrack
digitalWrite(NPROG, HIGH); //<<DFCH>> ProgTrack inverted
#endif
#endif
Alla linea 81 inserire le parti evidenziate:
/******************************************/
#if defined(ProgRelaisPin)
#if defined(PROG_OUT_INVERT)
digitalWrite(ProgRelaisPin, LOW); //ProgTrack
#else
digitalWrite(ProgRelaisPin, HIGH); //ProgTrack
digitalWrite(NPROG, LOW); //<<DFCH>> ProgTrack inverted
#endif
#endif
Alla linea 109 inserire le parti evidenziate:
/******************************************/
#if defined(ProgRelaisPin)
#if defined(PROG_OUT_INVERT)
digitalWrite(ProgRelaisPin, HIGH); //ProgTrack
#else
digitalWrite(ProgRelaisPin, LOW); //ProgTrack
digitalWrite(NPROG, HIGH); //<<DFCH>> ProgTrack inverted
#endif
#endif
A questo punto salvare il file e passare al prossimo step.
Modifica D: inserimento del comando per il ventilatore.
Aprire il file "\Z21\Z21_Ethernet_DCC_Zentrale_v498\Z21_Ethernet_DCC_Zentrale_v498\Z21_LAN.h" con un editor di testo oppure con l'IDE di Arduino.
Alla linea 1179 inserire le parti evidenziate:
#ifdef DALLASTEMPSENSE
if((millis() - temp_timer) >= DALLAS_Temp_Int) { //á 10 sec.
temp = sensors.getTempCByIndex(0);
if (temp>45) { //<<DFCH>> FAN management
digitalWrite(FAN, HIGH); //<<DFCH>> FAN management
} else if (temp<40) { //<<DFCH>> FAN management
digitalWrite(FAN, LOW); //<<DFCH>> FAN management
} //<<DFCH>> FAN management
sensors.requestTemperatures(); // Send the command to get temperatures
temp_timer = millis();
}
A questo punto salvare il file e passare al prossimo step.
Modifica E: modifica dell'uscita del segnale DCC.
Aprire il file "C:\Users\nomeutente\Documents\Arduino\libraries\Z21\DCCInterfaceMaster\DCCHardware_config.h" con un editor di testo oppure con l'IDE di Arduino.
Alla linea 30 modificare le parti evidenziate:
/******************************************/
//DCC truth table:
//OFF:
#if defined(__AVR__)
#define DCC_OUTPUT1_OFF() {*d1reg |= d1bit;} //<<DFCH>>LOW at DRV8870 oputput
#endif
#define DCC_OUTPUT1_OFF_legacy LOW
#if defined(__AVR__)
#define DCC_OUTPUT2_OFF() {*d2reg |= d2bit;} //<<DFCH>>LOW at DRV8870 oputput
#endif
#define DCC_OUTPUT2_OFF_legacy LOW
//RailCom:
#if defined(__AVR__)
#define DCC_OUTPUT1_RC() {*d1reg |= d1bit;} //<<DFCH>>LOW at DRV8870 oputput
#endif
#define DCC_OUTPUT1_RC_legacy LOW
#if defined(__AVR__)
#define DCC_OUTPUT2_RC() {*d2reg |= d2bit;} //<<DFCH>>LOW at DRV8870 oputput
#endif
#define DCC_OUTPUT2_RC_legacy LOW
A questo punto salvare il file e passare al prossimo step.
Modifica F: modifica dell'uscita DCC e creazione del gate per la comunicazione RAILCOM.
Aprire il file "C:\Users\nomeutente\Documents\Arduino\libraries\Z21\DCCInterfaceMaster\DCCHardware.cpp" con un editor di testo oppure con l'IDE di Arduino.
Alla linea 46 modificare le parti evidenziate:
uint8_t DCCPin2 = 39; //<<DFCH>> inverted DCC (for RailCom support)
Alla linea 252 inserire le parti evidenziate:
if (POWER_STATUS) { //Railpower ON?
if (RailComActiv) { //Railcom CutOut:
//Sendepause beträgt mindestens 448µs oder 4 logische 1 Bits (=464µs).
#if defined(__AVR__)
DCC_OUTPUT1_RC(); //LOW
DCC_OUTPUT2_RC(); //LOW
PORTC &= 0x7F; //<<DFCH>> RAILGATE
#else
digitalWrite(DCCPin, DCC_OUTPUT1_RC_legacy);
digitalWrite(DCCPin2, DCC_OUTPUT2_RC_legacy);
#endif
}
else {
PORTC |= 0x80; //<<DFCH>> RAILGATE
//normal Working = no RailCom Cutout:
if (oldstate == LOW) {
#if defined(__AVR__)
DCC_OUTPUT1_LOW(); //LOW
DCC_OUTPUT2_LOW(); //HIGH
#else
digitalWrite(DCCPin, DCC_OUTPUT1_LOW_legacy);
digitalWrite(DCCPin2, DCC_OUTPUT2_LOW_legacy);
#endif
}
else {
#if defined(__AVR__)
DCC_OUTPUT1_HIGH(); //HIGH
DCC_OUTPUT2_HIGH(); //LOW
#else
digitalWrite(DCCPin, DCC_OUTPUT1_HIGH_legacy);
digitalWrite(DCCPin2, DCC_OUTPUT2_HIGH_legacy);
#endif
}
}
}
A questo punto salvare il file e provare a ricompilare l'intero programma per essere sicuri di non avere errori: una volta aperto lo sketch Z21_Ethernet_DCC_Zentrale_v498.ino selezionare dal menu "Sketch - Verify/Compile". Dopo alcuni secondi nella finestra "Output" dell'IDE di Arduino apparirà questo messaggio:
Sketch uses 76706 bytes (30%) of program storage space. Maximum is 253952 bytes.
Global variables use 3711 bytes (45%) of dynamic memory, leaving 4481 bytes for local variables. Maximum is 8192 bytes.
I numeri visualizzati potrebbero essere leggermente diversi ma la cosa importante per passare al prossimo step è che non ci siano errori durante questo check.