Benutzer-Werkzeuge

Webseiten-Werkzeuge


anleitungen:bauanleitungen:locoturn_v10:150_locoturn_parameter

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
anleitungen:bauanleitungen:locoturn_v10:150_locoturn_parameter [2023/05/30 16:13] – [Beispielkonfiguration] domapianleitungen:bauanleitungen:locoturn_v10:150_locoturn_parameter [2024/11/09 16:20] (aktuell) – [Parameter zur Einstellung der Drehscheibe] domapi
Zeile 3: Zeile 3:
 Aus der Vielzahl der Konfigurationsvariablen (#defines) hier ein paar wesentliche: Aus der Vielzahl der Konfigurationsvariablen (#defines) hier ein paar wesentliche:
  
-  * Einige #defines wie **USE_DCC**, **USE_SOUND**, **USE_SERIAL_INPUT** etc. steuern, was der Sketch alles später an Funktionen bietet.+  * Einige #defines wie **USE_DCC**, **USE_SOUND**, **USE_SERIAL_INPUT** etc. steuern, was der Sketch alles später an Funktionen bietet, also, ob DCC, Sound und Eingaben über den seriellen Monitor verwendet werden.
  
   * Das #define **USE_POTI** muss auf 0 gesetzt werden, wenn kein Poti angeschlossen ist, sonst kann es sein, dass die Drehscheibe nach dem ersten Kalibrieren und Anfahren des ersten Ports "unkontrolliert herumschleicht".   * Das #define **USE_POTI** muss auf 0 gesetzt werden, wenn kein Poti angeschlossen ist, sonst kann es sein, dass die Drehscheibe nach dem ersten Kalibrieren und Anfahren des ersten Ports "unkontrolliert herumschleicht".
Zeile 9: Zeile 9:
   * Zentrale Parameter sind die Anzahl der benötigten Ports #define **PORT_CNT** bzw. #define **PARTLY_USED_PORTS** (falls nicht alle angefahren werden sollen) und #define **PARTLY_USED_PORTS_TAB** (Tabelle der Ports, die angefahren werden können).   * Zentrale Parameter sind die Anzahl der benötigten Ports #define **PORT_CNT** bzw. #define **PARTLY_USED_PORTS** (falls nicht alle angefahren werden sollen) und #define **PARTLY_USED_PORTS_TAB** (Tabelle der Ports, die angefahren werden können).
      
-  * Die erste verwendete DCC Adresse ist einzugeben, wenn man von dem im Programm vorgegebenen DCC-Adressraum abweichen will: #define **FIRST_USED_DCC_ADDR**.+  * Das #define **DCC_MAERKLIN_7687_COMPATIBLE** muss für die Verwendung von PC-Steuerungsprogrammen i.d.R. auf 1 gesetzt werden. 
 + 
 +  * Über das #define **DCC_OFFSET** kann ein Offset eingestellt werden, damit LocoTurn auf andere DCC-Adressbereiche reagiert. Der Offset wird auf die jeweiligen DCC-Adressen addiert. Bei manchen Zentralen muss z.B. der Roco-Offset von „-4“ hier eingestellt werden, damit LocoTurn die Adressen richtig interpretiert.
      
-  * Ebenso ist die letzte verwendete DCC Adresse zu definieren, wenn man nicht alle vorgesehenen DCC-Adressen benötigt und vom vorgegebenen DCC_Adressraum abweicht: #define **LAST_USED_DCC_ADDR**.+  * Ebenso ist die letzte verwendete DCC Adresse anzupassen, wenn man nicht alle vorgesehenen DCC-Adressen benötigt: #define **LAST_USED_DCC_ADDR**.
      
   * Liste der DCC-Adressen für die Ports anpassen: #define **DCC_PORT_ADDR_LIST**. Die Liste muss **PORT_CNT**-Einträge enthalten. Wenn der Märklin-Modus (**DCC_MAERKLIN_7687_COMPATIBLE**) verwendet wird, reichen PORT_CNT / 2 Einträge.   * Liste der DCC-Adressen für die Ports anpassen: #define **DCC_PORT_ADDR_LIST**. Die Liste muss **PORT_CNT**-Einträge enthalten. Wenn der Märklin-Modus (**DCC_MAERKLIN_7687_COMPATIBLE**) verwendet wird, reichen PORT_CNT / 2 Einträge.
Zeile 17: Zeile 19:
   * Das #define **ADVANCED_SIGNAL_CONTROL** = 1 steuert die Signale in Abhängigkeit, ob die DS bei Stillstand mit der jeweiligen Seite an einem aktiven/gültigen oder blinden Port steht. Ob es sich um einen aktiven oder inaktiven/blinden Port handelt, legt das #define **PORT_TYPE** fest.   * Das #define **ADVANCED_SIGNAL_CONTROL** = 1 steuert die Signale in Abhängigkeit, ob die DS bei Stillstand mit der jeweiligen Seite an einem aktiven/gültigen oder blinden Port steht. Ob es sich um einen aktiven oder inaktiven/blinden Port handelt, legt das #define **PORT_TYPE** fest.
      
-  * Zur Kalibrierung den DEBUG-Mode einschalten, damit im seriellen Monitor die Werte ausgelesen werden können: #define **ENABLE_DPRINTF** 1.+  * Zur Kalibrierung kann man den DEBUG-Mode einschalten, damit im seriellen Monitor die Werte ausgelesen werden können: #define **ENABLE_DPRINTF** 1. Da das Serial.print viel Speicher benötigt, muss man ggf. vorübergehend DCC abschalten (#define USE_DCC 0).
      
   * Bei Bedarf Einstellungen der Ausrichtung bzw. Drehrichtung von Drehscheibe, Potentiometer, Dreh/Drückknopf und Display vornehmen.   * Bei Bedarf Einstellungen der Ausrichtung bzw. Drehrichtung von Drehscheibe, Potentiometer, Dreh/Drückknopf und Display vornehmen.
Zeile 61: Zeile 63:
  
  
-====== Beispielkonfigurationen ====== +====== Beispielkonfiguration ====== 
-==== LocoTurn V1.0 ==== + 
-Hier stehen alle wichtigen Parameter für den Betrieb einer Fleischmann-Drehscheibe mit einem Direktantrieb über einen 400 Step MotorGenutzt werden 26 von 48 Ports. Am einfachsten orientiert man sich an diesem Beispiel und nimmt ggfÄnderungen vor:+Ab der Version V1.1 sind einige #defines dazugekommen oder wurden umbenannt. Die folgende Turntable_config.h ist nur mit der entsprechenden ino-Version (1.1 oder höher) lauffähig. 
 + 
 +Am besten man orientiert sich an den Einstellungen unten und passt alles an die eigene Drehscheibe anZu den meisten Parametern gibt es eine Erläuterung, ergänzt durch die jeweiligen Kapitel im Wiki:
  
 <code> <code>
 //================================================================================================================================================================== //==================================================================================================================================================================
-// Benutzer-spezifische Parameter+// Benutzer-spezifische Parameter für V 1.4
 //================================================================================================================================================================== //==================================================================================================================================================================
 /* /*
 +    26.01.2024: finale Anpassung der Port-Konfiguration an PIE-Anlage
 +    
     Die Parameter hier dominieren diejenigen aus dem Hauptprogramm "Turntable"!     Die Parameter hier dominieren diejenigen aus dem Hauptprogramm "Turntable"!
     Falls ein bestimmter Parameter hier nicht definiert wurde, wird ein default-Wert aus dem Hauptsketch verwendet!     Falls ein bestimmter Parameter hier nicht definiert wurde, wird ein default-Wert aus dem Hauptsketch verwendet!
Zeile 80: Zeile 86:
 //================================================================================================================================================================== //==================================================================================================================================================================
 // Parameterset 1: Wantai-Stepper oder StepperOnline-Stepper ohne Getriebe, 400 Steps pro Umdrehung, 6400 Micro-Steps // Parameterset 1: Wantai-Stepper oder StepperOnline-Stepper ohne Getriebe, 400 Steps pro Umdrehung, 6400 Micro-Steps
-// 26 Gleisabgänge (= Ports) domapi-Anlage+// 24 Gleisabgänge (= Ports) domapi-Anlage
 //================================================================================================================================================================== //==================================================================================================================================================================
  
Zeile 105: Zeile 111:
 // *** Debugging*** // *** Debugging***
 //--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-#define ENABLE_DPRINTF                                // Debug Ausgaben ein, zu Beginn evtl. auf 1 lassen, damit man sich die gespeicherten Positionswerte im seriellen Monitor ansehen kann+#define ENABLE_DPRINTF                                // Debug Ausgaben ein, zu Beginn evtl. auf 1 lassen, damit man sich die gespeicherten Positionswerte im seriellen Monitor ansehen kann
  
  
Zeile 112: Zeile 118:
 // Normalbetrieb auf der Anlage // Normalbetrieb auf der Anlage
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//#define USE_DCC                             1           // 1 = use DCC interface          0 = disable all DCC routines +//#define USE_DCC                           1           // 1 = use DCC interface          0 = disable all DCC routines 
-//#define USE_SOUND                           1           // 1 = Sound features enabled     0 = Sound features disabled +//#define USE_SOUND                         1           // 1 = Sound features enabled     0 = Sound features disabled 
-//#define USE_SERIAL_INPUT                    0           // 1 = Serial monitor input activated   0 = no processing of serial commands  --> sollte in finaler Version ausgeschaltet sein, da man auf der Anlage später nicht über den PC steuert +//#define USE_SERIAL_INPUT                  0           // 1 = Serial monitor input activated   0 = no processing of serial commands  --> sollte in finaler Version ausgeschaltet sein, da man auf der Anlage später nicht über den PC steuert 
-//#define USE_VERBOSE                         0           // 1 = ausführliches Menü         0 = gekürztes Menü / nur wichtigste Befehle +//#define USE_VERBOSE                       0           // 1 = ausführliches Menü         0 = gekürztes Menü / nur wichtigste Befehle 
-//define SHOW_STATUS                          +//define SHOW_STATUS                        
-//#define ENABLE_DPRINTF                      0           // Debug Ausgaben aus+//#define ENABLE_DPRINTF                    0           // Debug Ausgaben aus
  
 // Test der Steuerung und Einstellung der DS // Test der Steuerung und Einstellung der DS
 // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-//#define USE_DCC                             0           // 1 = use DCC interface          0 = disable all DCC routines +//#define USE_DCC                           0           // 1 = use DCC interface          0 = disable all DCC routines 
-//#define USE_SOUND                           1           // 1 = Sound features enabled     0 = Sound features disabled +//#define USE_SOUND                         1           // 1 = Sound features enabled     0 = Sound features disabled 
-//#define USE_SERIAL_INPUT                    1           // 1 = Serial monitor input activated   0 = no processing of serial commands  --> sollte in finaler Version ausgeschaltet sein, da man auf der Anlage später nicht über den PC steuert +//#define USE_SERIAL_INPUT                  1           // 1 = Serial monitor input activated   0 = no processing of serial commands  --> sollte in finaler Version ausgeschaltet sein, da man auf der Anlage später nicht über den PC steuert 
-//#define USE_VERBOSE                         1           // 1 = ausführliches Menü         0 = gekürztes Menü / nur wichtigste Befehle +//#define USE_VERBOSE                       1           // 1 = ausführliches Menü         0 = gekürztes Menü / nur wichtigste Befehle 
-//#define SHOW_STATUS                         +//#define SHOW_STATUS                       
-//#define ENABLE_DPRINTF                      1           // Debug Ausgaben ein+//#define ENABLE_DPRINTF                    1           // Debug Ausgaben ein
  
  
Zeile 139: Zeile 145:
  
 #define HOUSE_LIGHT_MODUS                                          // nur für direktes WS281x-Board: 0 = einfaches Ein/Aus  1 = Fade in/out  2 = Neonflicker #define HOUSE_LIGHT_MODUS                                          // nur für direktes WS281x-Board: 0 = einfaches Ein/Aus  1 = Fade in/out  2 = Neonflicker
 +
 +#define WS2811_R_G_OUTPUT_SWAPPED                                  // 0 = R und G Kanal sind nicht vertauscht, 1 = R und G Kanal sind vertauscht
  
 //------------------------------------------------------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------------------------------------------------------
Zeile 144: Zeile 152:
 //------------------------------------------------------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------------------------------------------------------
  
-/*  - Die Anzahl verwendeter Ports muss bei PORT_CNT, die Portnummern bei PARTLY_USED_PORTS_TAB eingetragen werden +/*  Folgende Einstellungen sind für die Port-Einrichtung der Drehscheibe am wichtigsten: 
-    - Weiterhin pro Port 0 oder 1 bei der Signalsteuerung PORT_TYPE. +    - Die Anzahl verwendeter Ports muss bei PORT_CNT eingetragen werden 
-    - Die letzte genutzte DCC-Adresse wird automatisch über eine Formel anhand der Anzahl Pors berechnet (LAST_USED_DCC_ADDR)+    - Wenn man PARTLY_USED_PORTS auf 1 setztmüssen PARTLY_USED_PORTS_REFERENCE ausgewählt und die Portnummern aufsteigend sortiert in die Liste PARTLY_USED_PORTS_TAB eingetragen werden,  
-    - Und die Polarisierung muss unten eingestellt werdenPOLARISATION_CHANGE_PORT oder POLARISATION_RELAIS_LIST.+      und zwar die jeweiligen Nummern der Drehscheiben-Abgänge 
 +    - Für die Signalsteuerung ist pro genutztem Port 0 oder 1 in der Liste PORT_TYPE einzutragen. 
 +    - Weiterhin muss die Polarisierung unten eingestellt werden. Entweder als von bis Wert POLARISATION_CHANGE_PORT_START bzw. _END oder als Liste POLARISATION_RELAIS_LIST mit der gewünschten Polarisierung
 +    - Die genutzten DCC-Adresse müssen definiert werden
 +    - Weitere Infos: https://wiki.mobaledlib.de/anleitungen/bauanleitungen/locoturn_v10/150_locoturn_parameter
 */ */
  
-#define PORT_CNT                            48                      // Number of ports/Gleisabgänge, hier symmetrische Fleischmann-Drehscheibe +#define PORT_CNT                            48                      // Gesamtanzahl Ports/Gleisabgänge, hier im Beispiel eine symmetrische Fleischmann-Drehscheibe mit 48 Ports im 7,5° Raster 
-#define PARTLY_USED_PORTS                                         // 0 = all ports can be selected, 1 = only valid ports can be used+#define PARTLY_USED_PORTS                                         // 0 = alle Ports (hier 48) können angefahren werden, 1 = nur gültige Ports (aktive und passive) können angefahren werden (hier die 24 in der Liste PARTLY_USED_PORTS_TAB)
  
 #if PARTLY_USED_PORTS                                               /* If not all ports of the turntable should be selectable the following table could define the used ports. The used ports are defined as a reference to a fully defined table*/ #if PARTLY_USED_PORTS                                               /* If not all ports of the turntable should be selectable the following table could define the used ports. The used ports are defined as a reference to a fully defined table*/
-    #define PARTLY_USED_PORTS_REFERENCE     48                      // which has PARTLY_USED_PORTS_REFERENCE ports (Gesamtanzahl Ports der FLM Drehscheibe = 48 entspricht 7,5° Raster) +#define PARTLY_USED_PORTS_REFERENCE         48                      // which has PARTLY_USED_PORTS_REFERENCE ports (Gesamtanzahl Ports der FLM Drehscheibe = 48 entspricht 7,5° Raster) 
-    #undef  PORT_CNT                                                // The number of real used ports is given in PORT_CNT. +#undef  PORT_CNT                                                    // The number of real used ports is given in PORT_CNT. 
-    #define PORT_CNT                        26                      // If the used ports should be given in degree PARTLY_USED_PORTS_REFERENCE is set to 360; wir nutzen nur 26 von 48 Gleisabgängen/Ports+#define PORT_CNT                            24                      // wir nutzen nur 24 von 48 Gleisabgängen/Ports
  
-    // Gleis 1 = 9:00-Position Einfahrgleis von links (Sensor befindet sich einen Port rechts davonpasst besser zur Zählung von TC9 +// die folgende Tabelle enthält alle genutzten Ports (aktive und passive), die man später anfahren kann. 
-    #define PARTLY_USED_PORTS_TAB           { 1, 2, 3, 5, 6, 8, 11, 13, 15, 17, 19, 21, 23, 25, 26, 27, 29, 30, 32, 35, 37, 39, 41, 43, 45, 47 }        // The table must have PORT_CNT entries which are sorted in ascending order+// nicht enthaltene Portnummern (= inaktive Ports) können nicht angefahren werden und werden bei Drehungen einfach überprungen! 
 +// die Nummern sind i.d.R. nicht fortlaufendend, sondern geben die relative Position der Ports zur Gesamtanzahl Ports an. 
 +// hier ist alles auf 48 Ports bezogen, davon werden 24 genutzt 
 +#define PARTLY_USED_PORTS_TAB           { 1, 2, 3, 5, 8, 11, 13, 15, 17, 19, 21, 23, 25, 26, 27, 29, 32, 35, 37, 39, 41, 43, 45, 47 }        // The table must have PORT_CNT entries which are sorted in ascending order 
 + 
 +#define SHOW_REAL_PORT                      0                       // 0 = im OLED wird bei PARTLY_USED_PORTS = 1 die fortlaufende Portnummer der genutzten Ports angezeigt   1 = Anzeige des echten Ports (bei FLM-DS 1 - 48), Wert aus dem obigen Array
  
 #endif #endif
Zeile 171: Zeile 188:
  
 /* /*
-Tipp: +    Tipp: 
------+    -----
  
-Man kann das Raster, in dem die Ports initial angelegt werden auch kleiner machen, z.B. 0,1 Grad genau. Hierzu muss man folgendes eintragen:+    Man kann das Raster, in dem die Ports initial angelegt werden auch kleiner machen, z.B. 0,1 Grad genau. Hierzu muss man folgendes eintragen:
  
-#define PORT_CNT                            48                      // Der Wert hier ist eigentlich egal, er wird weiter unten "überschrieben" +    #define PORT_CNT                        48                      // Der Wert hier ist eigentlich egal, er wird weiter unten "überschrieben" 
-#define PARTLY_USED_PORTS                   1                       // 1 = only valid ports can be used +    #define PARTLY_USED_PORTS               1                       // 1 = only valid ports can be used 
-  + 
-#if  PARTLY_USED_PORTS                                          +    #if  PARTLY_USED_PORTS
      #define PARTLY_USED_PORTS_REFERENCE    3600                    // Einteilung der DS in 3600 Ports      #define PARTLY_USED_PORTS_REFERENCE    3600                    // Einteilung der DS in 3600 Ports
      #undef  PORT_CNT      #undef  PORT_CNT
      #define PORT_CNT                       4      #define PORT_CNT                       4
      #define PARTLY_USED_PORTS_TAB          {300, 1350, 2100, 3150} // davon nutzen wir nur 4 Ports an diesen Positionen      #define PARTLY_USED_PORTS_TAB          {300, 1350, 2100, 3150} // davon nutzen wir nur 4 Ports an diesen Positionen
-#endif +    #endif 
-  + 
-Im Prinzip teilt das den Vollkreis in 3600 Ports/Gleisabgänge, von denen aber nur 4 genutzt werden, die quasi an beliebiger Stelle liegen können. Das Beispiel oben hat 4 anfahrbare Ports bei: +    Im Prinzip teilt das den Vollkreis in 3600 Ports/Gleisabgänge, von denen aber nur 4 genutzt werden, die quasi an beliebiger Stelle liegen können. Das Beispiel oben hat 4 anfahrbare Ports bei: 
-  + 
-Grad                   Uhrzeit +    Grad                   Uhrzeit 
-30°                       1 +    30°                       1 
-135°                   "halb"+    135°                   "halb"
-210°                      7 +    210°                      7 
-315°                   "halb" 11+    315°                   "halb" 11
 */ */
  
Zeile 199: Zeile 216:
 // *** Signalsteuerung *** // *** Signalsteuerung ***
 //------------------------------------------------------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------------------------------------------------------
-#define ADVANCED_SIGNAL_CONTROL                                  // Steuerung der Signale in Abhängigkeit, ob die DS bei Stillstand an einem aktiven/gültigen oder blinden Port steht (= 1). Einfache Signalsteuerung = 0.+#define ADVANCED_SIGNAL_CONTROL                                  // 1 = Steuerung der Signale in Abhängigkeit, ob die DS-Seite bei Stillstand an einem aktiven/gültigen oder passiven/blinden Port steht.   Einfache Signalsteuerung. 
 + 
 +// Option 1: wenn PARTLY_USE_PORTS = 0 
 +// Wenn man alle Ports anfahren können soll, hie z.B. 48, dann brauchen wir eine Liste mit 48 Nullen und Einsen 
 +// Gleisabgang                              1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 
 +// #define PORT_TYPE                        1, 1, 1, 0, 0, 1, 0, 1, 0,  0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0     // Port-Type = 1 if there is an active / valid railway connected,  0 = passive/blind port (no railway connected). The table must have PORT_CNT entries. Required for advanced signal control (signal red if turntable is no at a valid port) 
 + 
 +// Option 2: wenn PARTLY_USE_PORTS = 1 
 +// als Beispiel hier: bei 24 Ports sind einige aktiv, einige sind blind! Wir brauchen 24 Nullen und Einsen  
 +// Gleisabgang                               1, 2, 3, 5, 8, 11, 13, 15, 17, 19, 21, 23, 25, 26, 27, 29, 32, 35, 37, 39, 41, 43, 45, 47  
 +#define PORT_TYPE                            1, 1, 1, 1, 1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  1,  1,  0,  0,  0,  0,  0,  0,  1,  0 // Port-Type = 1 if there is an active / valid railway connected,  0 = blind port (no railway connected)The table must have PORT_CNT entries. Required for advanced signal control (signal = red if turntable is no at a valid port)
  
-// Gleisabgang                                2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 
-#define PORT_TYPE                            1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 // Port-Type = 1 if there is an active / valid railway connected,  0 = blind port (no railway connected). The table must have PORT_CNT entries. Required for advanced signal control (signal = red if turntable is no at a valid port) 
-// als Beispiel hier: bei 26 Ports sind einige aktiv, einige sind blind! 
  
  
Zeile 212: Zeile 236:
 #define POLARISATION_RELAIS_INVERS          0                        // 0: Pin is set to high, if  POLARISATION_RELAIS_LIST[Port] = 1      1: Pin is set to low, if  0 #define POLARISATION_RELAIS_INVERS          0                        // 0: Pin is set to high, if  POLARISATION_RELAIS_LIST[Port] = 1      1: Pin is set to low, if  0
  
-#define POLARISATION_CHANGE_PORT_START      5 +#define POLARISATION_CHANGE_PORT_START      11 
-#define POLARISATION_CHANGE_PORT_END        20+#define POLARISATION_CHANGE_PORT_END        22
  
 /*  Teilt die Drehscheibe für die Polarisierung quasi in 2 Hälften. /*  Teilt die Drehscheibe für die Polarisierung quasi in 2 Hälften.
-    Ab dem hier definierten START-Port (externe Nummerierung wie OLED-Anzeige) wird das Polarisationsrelais bis zum i.d.R. gegenüberliegenden END-Port eingeschaltet.+    Ab dem hier definierten START-Port (externe Nummerierung) wird das Polarisationsrelais bis zum i.d.R. gegenüberliegenden END-Port eingeschaltet.
     Die hier eingegebenen Zahlen müssen zwischen 1 und PORT_CNT liegen! START muss < END sein!     Die hier eingegebenen Zahlen müssen zwischen 1 und PORT_CNT liegen! START muss < END sein!
     Die eine Hälfte der Scheibe ist Polung 1, die andere Polung 2.     Die eine Hälfte der Scheibe ist Polung 1, die andere Polung 2.
Zeile 240: Zeile 264:
  
  
-#define ENCODER_LOGIC                                             /*  1 = Drehencoder drehen während Stillstand ermöglicht Portauswahl+// Wenn fahrtdauerabhängige Sounds verwendet werden, dann muss ENCODER_LOGIC = 1 sein, sonst passen die Sounds nicht zur Bewegung ;-) 
 +#define ENCODER_LOGIC                                             /*  1 = Drehencoder drehen während Stillstand ermöglicht Portauswahl
                                                                             - Bewegung wird erst gestartet, wenn Encoder-Taste gedrückt wird                                                                             - Bewegung wird erst gestartet, wenn Encoder-Taste gedrückt wird
                                                                             - während der Bewegung kann die anzufahrende Portnummer nicht mehr geändert werden                                                                             - während der Bewegung kann die anzufahrende Portnummer nicht mehr geändert werden
Zeile 269: Zeile 294:
                                                                        Bei Einsatz TMC2208 sollte man den Wert 1 verwenden! */                                                                        Bei Einsatz TMC2208 sollte man den Wert 1 verwenden! */
  
-#define STEPPER_RAMP_LENGTH                 150                     /* Steps to speed up the stepper to prevent loosing steps+#define STEPPER_RAMP_LENGTH                 180                     /* Steps to speed up the stepper to prevent loosing steps
                                                                        Set to 50 if 1/16 steps are used (MS1 - MS3 connected do +5V)*/                                                                        Set to 50 if 1/16 steps are used (MS1 - MS3 connected do +5V)*/
  
Zeile 293: Zeile 318:
                                                                        TODO: evtl. muss die Routine, die das Getriebespiel "überbrückt" direkt in der Loop aufgerufen werden, wenn die eigentlich Bewegung gestartet wird*/                                                                        TODO: evtl. muss die Routine, die das Getriebespiel "überbrückt" direkt in der Loop aufgerufen werden, wenn die eigentlich Bewegung gestartet wird*/
  
-#define ALWAYS_CALIBRATE_AT_START                                 // Set to 1 to calibrate the 0-position (Hallsensor) every time when the program is started. Helps to compensate little jumps of the turntable when turned on.+#define ALWAYS_CALIBRATE_AT_START                                 // Set to 1 to calibrate the 0-position (Hallsensor) every time when the program is started. Helps to compensate little jumps of the turntable when turned on.
  
 #define ADVANCED_REFERENCE_DETECTION        1                       // "1" fährt den Hallsensor beim 0-Punkt Kalibieren schnell an, dreht ein Stückchen zurück und fährt ihn nochmals langsam an und speichert die Referenzposition #define ADVANCED_REFERENCE_DETECTION        1                       // "1" fährt den Hallsensor beim 0-Punkt Kalibieren schnell an, dreht ein Stückchen zurück und fährt ihn nochmals langsam an und speichert die Referenzposition
Zeile 332: Zeile 357:
 // *** Sound Setup *** // *** Sound Setup ***
 //------------------------------------------------------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------------------------------------------------------
-#define USE_JQ6500_SERIAL                   -1                       // SMART_JQ6500_SERIAL_PIN --[1K]-- TX; -1 = hardware serial is used (TX-Pin) +#define DFPLAYER                                                   // mit DS-Kartenslot                       
-#define JQ6500_VOLUME                       25                       // Range: 0..30 (-1 = Don't change the volume) +#define JQ6500                                                     // 2MB Speicher onboard 
-#define DELAY_TURN_START_SOUND              7400                     /Delay before start moving if sound is played, hängt ab vom verwendeten soundfile; bei mir machen 7s Sinn! +#define USE_SOUNDMODULE                      DFPLAYER   //JQ6500     // Auswahl des verwendeten Soundmoduls 
-#define SOUND1_FILENR                        1                       // sound/file number of JQ6500 for turntable start and running (Hupe, Anfahren und Drehen)+ 
 +#define USE_SOUND_SERIAL                    -1                       // SMART_JQ6500_SERIAL_PIN --[1K]-- TX; -1 = hardware serial is used (TX-Pin) for JQ6500 interface; DFPlayer uses softwareserialTX on Pin D12 
 + 
 +#define SOUNDMODULE_VOLUME                  18                       // Range: 0..30 (-1 = Don't change the volume) 
 +#define DELAY_TURN_START_SOUND              7700                     /Delay before start moving if sound is played, hängt ab vom verwendeten soundfile; bei mir machen 7,7s Sinn! 
 +                                                                        Bei Verwendung eines DFPlayers ca. 300 ms dazu addieren, da dieses Soundmodul verzögert startet über softwareserial*/ 
 +#define SOUND1_FILENR                        1                       // sound-file number of JQ6500 / DFPLayer for turntable start and running (Hupe, Anfahren und Drehen)
 #define SOUND2_FILENR                        3                       // sound for turntable stop (aktuell nur die Hupe) #define SOUND2_FILENR                        3                       // sound for turntable stop (aktuell nur die Hupe)
 +#define SOUND_CONTINUOUS_MOVE                1                       // 0 = kein Abspielen von sounds bei DS-Bewegungen mit dem Poti        1 = Sound wird automatisch abgespielt
 +
 +#define FAHRTDAUER_MESSEN                    0
 +#define ADVANCED_SOUND                                             /* 0 = es werden zwei Sounds abgespielt, einer beim Starten der Bewegung (gesampelt aus Hupen, Anfahren und Fahren), einer beim Stoppen (Hupen); Bremssound ist nicht verfügbar
  
 +                                                                        1 = die Fahrtdauer wird berechnet und ein entsprechender langer Sound gestartet, hierfür brauchen wir mehrere Files auf dem Soundmodul. 
 +                                                                        Jedes file entält Hupen, Anfahren, Fahren, Bremsen bis zum Stopp und abschließendes Hupen. Der variable Anteil ist das Fahren, das muss solange hintereinander kopiert werden, dass es für die entsprechende Fahrtstrecke reicht
 +                                                                        Ein separater Sound beim Stoppen (Hupen) wird nur bei manuellem Stopp abgespielt, beim auto. Fahren ist der sound bereits im Fahrgeräusch enthalten
 +                                                                        ENCODER_LOGIC dann auf 1 setzen (siehe oben)*/
 +                                                                        
 +#define DCC_SOUNDFILE_1                      1                       // File-Nr. auf dem Soundmodul, das abgespielt wird mit dem entsprechenden DCC-Befehl
 +#define DCC_SOUNDFILE_2                      2                       // J6500; Dateien stehen im Rootverzeichnis, Reihenfolge geht nach Reihenfolge des Kopierens auf das Modul
 +#define DCC_SOUNDFILE_3                      3                       // DFPlayer: Dateien müssen im \mp3-Folder stehen, Nomenklatur 0001_beliebiger Text (4-stellige Nummer, führende Nullen + sprechender Text)
 +#define DCC_SOUNDFILE_4                      28
 +#define DCC_SOUNDFILE_5                      29
 +#define DCC_SOUNDFILE_6                      30
 //--------------------------------------------------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------------------------------------------------
 // *** Pins *** // *** Pins ***
Zeile 349: Zeile 395:
 //------------------------------------------------------------------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------------------------------------------------------------------
  
-#define DCC_OFFSET                          0           // 0 = DCC addresses start at #211, using this parameter you can use other DCC ranges in case of using several turntables with one central station or you rewuire other address ranges+#define DCC_OFFSET                          0           // -4 = Roco-Offset für Roco-Zentrale,  0 = DCC addresses start at #211, using this parameter you can use other DCC ranges in case of using several turntables with one central station or you rewuire other address ranges
  
 #define DCC_WAITING_TIME                    350         // waiting time [ms] for further DCC-tickets before carrying out the DCC command #define DCC_WAITING_TIME                    350         // waiting time [ms] for further DCC-tickets before carrying out the DCC command
  
-#define DCC_MAERKLIN_7687_COMPATIBLE        1           // DCC-Befehle nur für den 1. Halbkreis der DS verwenden. In Verbindung mit der Drehrichtung kann trotzdem jeder Port so angefahren werden, dass das DS-Haus richtig steht +#define DCC_MAERKLIN_7687_COMPATIBLE        1           // 1 = DCC-Befehle nur für den 1. Halbkreis der DS verwenden. In Verbindung mit der Drehrichtung kann trotzdem jeder Port so angefahren werden, dass das DS-Haus richtig steht, notwendig bei Verwendung einer PC-Steuerung! 
 +                                                        // 0 = wir berauchen für alle Ports DCC-Adressen um sie anfahren zu können ==> wird normalerweise bei Anlagen ohne PC-Steuerung verwendet!
 #if DCC_MAERKLIN_7687_COMPATIBLE == 1 #if DCC_MAERKLIN_7687_COMPATIBLE == 1
-    #define LAST_USED_DCC_ADDR              DCC_CHKADDR((235 + DCC_OFFSET), RED)   // die "235ist an die tatsächlich verwendete letzte Adresse anzupassen!+    // sollte man nur verwenden, wenn man mit einer PC-Steuerung arbeitet 
 +    #define LAST_USED_DCC_ADDR              DCC_CHKADDR((234 + DCC_OFFSET), GRN)   // die "234" und das "GRNsind an die tatsächlich verwendete letzte Adresse unten anzupassen!
 #else #else
-    #define LAST_USED_DCC_ADDR              DCC_CHKADDR((229 + PORT_CNT / 2 - 1 + DCC_OFFSET), GRN)+    // wenn man ohne PC-Steuerung arbeitet 
 +    #define LAST_USED_DCC_ADDR              DCC_CHKADDR((229 + PORT_CNT / 2 - 1 + DCC_OFFSET), GRN) // wird automatisch berechnet
 #endif #endif
  
-// Momentan 26 (von 48) genutzte Ports = { 1, 2, 3, 5, 6, 8, 11, 13, 15, 17, 19, 21, 23, 25, 26, 27, 29, 30, 32, 35, 37, 39, 41, 43, 45, 47 }+// Momentan 24 (von 48) genutzte Ports = { 1, 2, 3, 5, 8, 11, 13, 15, 17, 19, 21, 23, 25, 26, 27, 29, 32, 35, 37, 39, 41, 43, 45, 47 }
  
 #if DCC_MAERKLIN_7687_COMPATIBLE == 1 #if DCC_MAERKLIN_7687_COMPATIBLE == 1
 +// sollte man nur verwenden, wenn man mit einer PC-Steuerung arbeitet
 // Es werden nur für die Ports im ersten Halbkreis DCC-Adressen benötigt // Es werden nur für die Ports im ersten Halbkreis DCC-Adressen benötigt
-// Bei 26 Ports braucht man hier also 13 DCC-Adressen (= 13 Zeilen)+// Bei 24 Ports braucht man hier also 12 DCC-Adressen (= 12 Zeilen) 
 +// Die erste Zahl in der Klammer ist immer fortlaufend und startet bei 1. Sie hat nichts mit der Portnummer oben zu tun (die kann nicht-fortlaufend sein). 
 +// Pro DCC-Adresse gibt es 2 Befehle bzw. Richtungen: RED und GRN
  
 #define DCC_PORT_ADDR_LIST              DCC_PORT_ADDR(1, (229 + DCC_OFFSET), RED), \ #define DCC_PORT_ADDR_LIST              DCC_PORT_ADDR(1, (229 + DCC_OFFSET), RED), \
Zeile 378: Zeile 429:
     DCC_PORT_ADDR(10, (233 + DCC_OFFSET), GRN), \     DCC_PORT_ADDR(10, (233 + DCC_OFFSET), GRN), \
     DCC_PORT_ADDR(11, (234 + DCC_OFFSET), RED), \     DCC_PORT_ADDR(11, (234 + DCC_OFFSET), RED), \
-    DCC_PORT_ADDR(12, (234 + DCC_OFFSET), GRN), \ +    DCC_PORT_ADDR(12, (234 + DCC_OFFSET), GRN) 
-    DCC_PORT_ADDR(13, (235 + DCC_OFFSET), RED) +    // die vorhergehende Zeile beschreibt die letzte Adresse und muss oben ins #define LAST_USED_DCC_ADDR eingetragen werden 
 + 
 #else #else
 +// wenn man ohne PC-Steuerung arbeitet
 // DCC-Adressen für den kompletten Vollkreis notwendig! // DCC-Adressen für den kompletten Vollkreis notwendig!
-// Bei 26 Ports braucht man hier auch 26 DCC-Adressen (= 26 Zeilen)+// Bei 24 Ports braucht man hier auch 24 DCC-Adressen (= 24 Zeilen)
  
 #define DCC_PORT_ADDR_LIST              DCC_PORT_ADDR(1, (229 + DCC_OFFSET), RED), \ #define DCC_PORT_ADDR_LIST              DCC_PORT_ADDR(1, (229 + DCC_OFFSET), RED), \
Zeile 408: Zeile 460:
     DCC_PORT_ADDR(22, (239 + DCC_OFFSET), GRN), \     DCC_PORT_ADDR(22, (239 + DCC_OFFSET), GRN), \
     DCC_PORT_ADDR(23, (240 + DCC_OFFSET), RED), \     DCC_PORT_ADDR(23, (240 + DCC_OFFSET), RED), \
-    DCC_PORT_ADDR(24, (240 + DCC_OFFSET), GRN), \ +    DCC_PORT_ADDR(24, (240 + DCC_OFFSET), GRN)
-    DCC_PORT_ADDR(25, (241 + DCC_OFFSET), RED), \ +
-    DCC_PORT_ADDR(26, (241 + DCC_OFFSET), GRN)+
  
 // Bei mehr als 41 Einträgen/Zeilen in dem obigen #define spinnt der Compiler! // Bei mehr als 41 Einträgen/Zeilen in dem obigen #define spinnt der Compiler!
 // Workaround: dann müssen die zusätzlichen Zeilen in das #define ... LIST_2 aufgenommen werden ;-) // Workaround: dann müssen die zusätzlichen Zeilen in das #define ... LIST_2 aufgenommen werden ;-)
  
-//#define DCC_PORT_ADDR_LIST_2         DCC_PORT_ADDR(27, (242 + DCC_OFFSET), RED), \ +/*  #define DCC_PORT_ADDR_LIST_2         DCC_PORT_ADDR(27, (242 + DCC_OFFSET), RED), \ 
-//    DCC_PORT_ADDR(28, (242 + DCC_OFFSET), GRN), \ +    DCC_PORT_ADDR(28, (242 + DCC_OFFSET), GRN), \ 
-//    DCC_PORT_ADDR(29, (243 + DCC_OFFSET), RED), \ +    DCC_PORT_ADDR(29, (243 + DCC_OFFSET), RED), \ 
-//    DCC_PORT_ADDR(30, (243 + DCC_OFFSET), GRN), \ +    DCC_PORT_ADDR(30, (243 + DCC_OFFSET), GRN), \ 
-//    DCC_PORT_ADDR(31, (244 + DCC_OFFSET), RED), \ +    DCC_PORT_ADDR(31, (244 + DCC_OFFSET), RED), \ 
-//    DCC_PORT_ADDR(32, (244 + DCC_OFFSET), GRN), \ +    DCC_PORT_ADDR(32, (244 + DCC_OFFSET), GRN), \ 
-//    DCC_PORT_ADDR(33, (245 + DCC_OFFSET), RED), \ +    DCC_PORT_ADDR(33, (245 + DCC_OFFSET), RED), \ 
-//    DCC_PORT_ADDR(34, (245 + DCC_OFFSET), GRN), \ +    DCC_PORT_ADDR(34, (245 + DCC_OFFSET), GRN), \ 
-//    DCC_PORT_ADDR(35, (246 + DCC_OFFSET), RED), \ +    DCC_PORT_ADDR(35, (246 + DCC_OFFSET), RED), \ 
-//    DCC_PORT_ADDR(36, (246 + DCC_OFFSET), GRN), \ +    DCC_PORT_ADDR(36, (246 + DCC_OFFSET), GRN), \ 
-//    DCC_PORT_ADDR(37, (247 + DCC_OFFSET), RED), \ +    DCC_PORT_ADDR(37, (247 + DCC_OFFSET), RED), \ 
-//    DCC_PORT_ADDR(38, (247 + DCC_OFFSET), GRN), \ +    DCC_PORT_ADDR(38, (247 + DCC_OFFSET), GRN), \ 
-//    DCC_PORT_ADDR(39, (248 + DCC_OFFSET), RED), \ +    DCC_PORT_ADDR(39, (248 + DCC_OFFSET), RED), \ 
-//    DCC_PORT_ADDR(40, (248 + DCC_OFFSET), GRN), \ +    DCC_PORT_ADDR(40, (248 + DCC_OFFSET), GRN), \ 
-//    DCC_PORT_ADDR(41, (249 + DCC_OFFSET), RED), \ +    DCC_PORT_ADDR(41, (249 + DCC_OFFSET), RED), \ 
-//    DCC_PORT_ADDR(42, (249 + DCC_OFFSET), GRN), \ +    DCC_PORT_ADDR(42, (249 + DCC_OFFSET), GRN), \ 
-//    DCC_PORT_ADDR(43, (250 + DCC_OFFSET), RED), \ +    DCC_PORT_ADDR(43, (250 + DCC_OFFSET), RED), \ 
-//    DCC_PORT_ADDR(44, (250 + DCC_OFFSET), GRN), \ +    DCC_PORT_ADDR(44, (250 + DCC_OFFSET), GRN), \ 
-//    DCC_PORT_ADDR(45, (251 + DCC_OFFSET), RED), \ +    DCC_PORT_ADDR(45, (251 + DCC_OFFSET), RED), \ 
-//    DCC_PORT_ADDR(46, (251 + DCC_OFFSET), GRN), \ +    DCC_PORT_ADDR(46, (251 + DCC_OFFSET), GRN), \ 
-//    DCC_PORT_ADDR(47, (252 + DCC_OFFSET), RED), \ +    DCC_PORT_ADDR(47, (252 + DCC_OFFSET), RED), \ 
-//    DCC_PORT_ADDR(48, (252 + DCC_OFFSET), GRN)+    DCC_PORT_ADDR(48, (252 + DCC_OFFSET), GRN) 
 +*/
  
-     
 #endif #endif
  
 // ggf. hier weitere Zeilen ergänzen, wenn zusätzliche DCC-Befehle für weitere Ports benötigt werden // ggf. hier weitere Zeilen ergänzen, wenn zusätzliche DCC-Befehle für weitere Ports benötigt werden
-// die letzte DCC-Adresse (hier 241) muss sich oben aus der #define-Formel bei LAST_USED_DCC_ADR ergeben !!!+// die letzte DCC-Adresse muss sich oben aus der #define-Formel bei LAST_USED_DCC_ADR ergeben !!!
  
  
Zeile 452: Zeile 502:
 // Bei Änderungen  in der ino-Datei bleiben die individuellen Werte unten erhalten! // Bei Änderungen  in der ino-Datei bleiben die individuellen Werte unten erhalten!
  
-#define BUTTON_THRESHOLDS    {970, 670, 831, 319}, \ +#define BUTTON_THRESHOLDS    970, 327, 696, 872
-    {327, 284, 310, 319}, \ +
-    {696, 670, 284, 622}, \ +
-    {872, 831, 310, 622}+
  
-#define HOME_RUN_PORT         // wird bei der Tastersteuerung verwendet, bei einem entsprechenden Tastendruck fährt die DS zum angegebenen Port+#define HOME_RUN_PORT 24         // wird bei der Tastersteuerung verwendet, bei einem entsprechenden Tastendruck fährt die DS zum angegebenen Port
  
 /*  folgende Aktionen stehen für die Taster zur Verfügung: /*  folgende Aktionen stehen für die Taster zur Verfügung:
-   +
     B_Toggle_House()              Hausbeleuchtung ein/aus     B_Toggle_House()              Hausbeleuchtung ein/aus
     B_Toggle_Sound()              Sound ein/aus     B_Toggle_Sound()              Sound ein/aus
Zeile 470: Zeile 517:
     B_Signal_Opp_white()          dito. weiß     B_Signal_Opp_white()          dito. weiß
     B_U_Turn_CW()                 180°-Drehung CW     B_U_Turn_CW()                 180°-Drehung CW
 +    B_U_Turn_CCW()                180°-Drehung CCW
     B_Home_Run()                  Anfahren der Home-Position     B_Home_Run()                  Anfahren der Home-Position
     B_Toggle_Flash()              Warnleuchte ein/aus     B_Toggle_Flash()              Warnleuchte ein/aus
     Play_Sound(n)                 Sound n auf dem JQ6500 abspielen     Play_Sound(n)                 Sound n auf dem JQ6500 abspielen
 +    Auto_Calibrate(1)             führt die Kalibirierung des Nullpunktes durch
 */ */
  
 // Hier den Tastern die Aktion zuordnen (kann man auch mehrfach machen, dann ";" dazwischen!): // Hier den Tastern die Aktion zuordnen (kann man auch mehrfach machen, dann ";" dazwischen!):
 +// #define BUTTON_n ohne weitere Zuordnung deaktiviert den Knopf bzw. löst keine Aktion aus, z.B. "#define BUTTON_1"
  
-#define BUTTON_1    B_Home_Run()+// kurzer Tastendruck: 
 +#define BUTTON_1    Play_Sound(28     // spielt Soundfile 28 ab; falls Sound generell deaktiviert wurde, muss man die Taste deaktivieren, siehe oben 
 #define BUTTON_2    B_U_Turn_CW() #define BUTTON_2    B_U_Turn_CW()
 #define BUTTON_3    B_Toggle_House() #define BUTTON_3    B_Toggle_House()
 #define BUTTON_4    B_Toggle_Flash() #define BUTTON_4    B_Toggle_Flash()
  
-</code> +// langer Tastendruck: 
- +#define BUTTON_1_L  B_Home_Run() 
-==== LocoTurn V1.1 ==== +#define BUTTON_2_L  B_U_Turn_CCW()      // U-Turn gegen den Uhrzeigersinn 
-<code> +#define BUTTON_3_L  B_Toggle_Sound()    // Sound on/off 
-coming soon+#define BUTTON_4_L  Auto_Calibrate(1)   // führt die Kalibrierung des Nullpunktes durch
 </code> </code>
  
anleitungen/bauanleitungen/locoturn_v10/150_locoturn_parameter.1685463238.txt.gz · Zuletzt geändert: 2023/05/30 17:13 (Externe Bearbeitung)