Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
anleitungen:bauanleitungen:locoturn_v10:150_locoturn_parameter [2023/05/30 16:13] – [Beispielkonfiguration] domapi | anleitungen: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**, | + | * Einige #defines wie **USE_DCC**, |
* 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 " | * 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 " | ||
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 |
+ | |||
+ | * Ü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 | + | * Ebenso ist die letzte verwendete DCC Adresse |
| | ||
* 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, | * Das #define **ADVANCED_SIGNAL_CONTROL** = 1 steuert die Signale in Abhängigkeit, | ||
| | ||
- | * Zur Kalibrierung den DEBUG-Mode einschalten, | + | * Zur Kalibrierung |
| | ||
* Bei Bedarf Einstellungen der Ausrichtung bzw. Drehrichtung von Drehscheibe, | * Bei Bedarf Einstellungen der Ausrichtung bzw. Drehrichtung von Drehscheibe, | ||
Zeile 61: | Zeile 63: | ||
- | ====== | + | ====== |
- | ==== LocoTurn | + | |
- | Hier stehen alle wichtigen Parameter für den Betrieb einer Fleischmann-Drehscheibe mit einem Direktantrieb über einen 400 Step Motor. Genutzt werden 26 von 48 Ports. Am einfachsten orientiert | + | Ab der Version |
+ | |||
+ | Am besten | ||
< | < | ||
// | // | ||
- | // Benutzer-spezifische Parameter | + | // Benutzer-spezifische Parameter |
// | // | ||
/* | /* | ||
+ | 26.01.2024: finale Anpassung der Port-Konfiguration an PIE-Anlage | ||
+ | | ||
Die Parameter hier dominieren diejenigen aus dem Hauptprogramm " | Die Parameter hier dominieren diejenigen aus dem Hauptprogramm " | ||
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 | + | #define ENABLE_DPRINTF |
Zeile 112: | Zeile 118: | ||
// Normalbetrieb auf der Anlage | // Normalbetrieb auf der Anlage | ||
// | // | ||
- | //#define USE_DCC | + | //#define USE_DCC |
- | //#define USE_SOUND | + | //#define USE_SOUND |
- | //#define USE_SERIAL_INPUT | + | //#define USE_SERIAL_INPUT |
- | //#define USE_VERBOSE | + | //#define USE_VERBOSE |
- | //define SHOW_STATUS | + | //define SHOW_STATUS |
- | //#define ENABLE_DPRINTF | + | //#define ENABLE_DPRINTF |
// Test der Steuerung und Einstellung der DS | // Test der Steuerung und Einstellung der DS | ||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
- | //#define USE_DCC | + | //#define USE_DCC |
- | //#define USE_SOUND | + | //#define USE_SOUND |
- | //#define USE_SERIAL_INPUT | + | //#define USE_SERIAL_INPUT |
- | //#define USE_VERBOSE | + | //#define USE_VERBOSE |
- | //#define SHOW_STATUS | + | //#define SHOW_STATUS |
- | //#define ENABLE_DPRINTF | + | //#define ENABLE_DPRINTF |
Zeile 139: | Zeile 145: | ||
#define HOUSE_LIGHT_MODUS | #define HOUSE_LIGHT_MODUS | ||
+ | |||
+ | #define WS2811_R_G_OUTPUT_SWAPPED | ||
// | // | ||
Zeile 144: | Zeile 152: | ||
// | // | ||
- | /* - Die Anzahl verwendeter Ports muss bei PORT_CNT, die Portnummern | + | / |
- | - Weiterhin | + | |
- | - Die letzte genutzte | + | - Wenn man PARTLY_USED_PORTS auf 1 setzt, müssen PARTLY_USED_PORTS_REFERENCE ausgewählt und die Portnummern |
- | - Und die Polarisierung muss unten eingestellt werden. POLARISATION_CHANGE_PORT oder POLARISATION_RELAIS_LIST. | + | und zwar die jeweiligen Nummern der Drehscheiben-Abgänge |
+ | - Für die Signalsteuerung ist pro genutztem | ||
+ | - 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 | ||
+ | - Weitere Infos: https:// | ||
*/ | */ | ||
- | #define PORT_CNT | + | #define PORT_CNT |
- | #define PARTLY_USED_PORTS | + | #define PARTLY_USED_PORTS |
#if PARTLY_USED_PORTS | #if PARTLY_USED_PORTS | ||
- | | + | #define PARTLY_USED_PORTS_REFERENCE |
- | # | + | # |
- | #define PORT_CNT | + | #define PORT_CNT |
- | | + | // die folgende Tabelle enthält alle genutzten Ports (aktive und passive), die man später anfahren kann. |
- | #define PARTLY_USED_PORTS_TAB | + | // nicht enthaltene Portnummern (= inaktive Ports) können nicht angefahren werden und werden bei Drehungen einfach überprungen! |
+ | // die Nummern sind i.d.R. nicht fortlaufendend, | ||
+ | // hier ist alles auf 48 Ports bezogen, davon werden 24 genutzt | ||
+ | #define PARTLY_USED_PORTS_TAB | ||
+ | |||
+ | #define SHOW_REAL_PORT | ||
#endif | #endif | ||
Zeile 171: | Zeile 188: | ||
/* | /* | ||
- | 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: | + | |
- | #define PORT_CNT | + | |
- | #define PARTLY_USED_PORTS | + | #define PARTLY_USED_PORTS |
- | + | ||
- | #if PARTLY_USED_PORTS | + | #if PARTLY_USED_PORTS |
# | # | ||
# | # | ||
# | # | ||
# | # | ||
- | #endif | + | |
- | + | ||
- | Im Prinzip teilt das den Vollkreis in 3600 Ports/ | + | Im Prinzip teilt das den Vollkreis in 3600 Ports/ |
- | + | ||
- | Grad | + | Grad |
- | 30° 1 | + | 30° 1 |
- | 135° " | + | 135° " |
- | 210° 7 | + | 210° 7 |
- | 315° " | + | 315° " |
*/ | */ | ||
Zeile 199: | Zeile 216: | ||
// *** Signalsteuerung *** | // *** Signalsteuerung *** | ||
// | // | ||
- | #define ADVANCED_SIGNAL_CONTROL | + | #define ADVANCED_SIGNAL_CONTROL |
+ | |||
+ | // Option | ||
+ | // Wenn man alle Ports anfahren können soll, hie z.B. 48, dann brauchen wir eine Liste mit 48 Nullen und Einsen | ||
+ | // Gleisabgang | ||
+ | // #define PORT_TYPE | ||
+ | |||
+ | // 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 | ||
+ | #define PORT_TYPE | ||
- | // Gleisabgang | ||
- | #define PORT_TYPE | ||
- | // als Beispiel hier: bei 26 Ports sind einige aktiv, einige sind blind! | ||
Zeile 212: | Zeile 236: | ||
#define POLARISATION_RELAIS_INVERS | #define POLARISATION_RELAIS_INVERS | ||
- | #define POLARISATION_CHANGE_PORT_START | + | #define POLARISATION_CHANGE_PORT_START |
- | #define POLARISATION_CHANGE_PORT_END | + | #define POLARISATION_CHANGE_PORT_END |
/* 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 | + | 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 | + | // Wenn fahrtdauerabhängige Sounds verwendet werden, dann muss ENCODER_LOGIC = 1 sein, sonst passen die Sounds nicht zur Bewegung ;-) |
+ | #define ENCODER_LOGIC | ||
- 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 | + | #define STEPPER_RAMP_LENGTH |
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 " | TODO: evtl. muss die Routine, die das Getriebespiel " | ||
- | #define ALWAYS_CALIBRATE_AT_START | + | #define ALWAYS_CALIBRATE_AT_START |
#define ADVANCED_REFERENCE_DETECTION | #define ADVANCED_REFERENCE_DETECTION | ||
Zeile 332: | Zeile 357: | ||
// *** Sound Setup *** | // *** Sound Setup *** | ||
// | // | ||
- | # | + | # |
- | # | + | #define JQ6500 |
- | #define DELAY_TURN_START_SOUND | + | #define USE_SOUNDMODULE |
- | #define SOUND1_FILENR | + | |
+ | #define USE_SOUND_SERIAL | ||
+ | |||
+ | # | ||
+ | #define DELAY_TURN_START_SOUND | ||
+ | Bei Verwendung eines DFPlayers ca. 300 ms dazu addieren, da dieses Soundmodul verzögert startet über softwareserial*/ | ||
+ | #define SOUND1_FILENR | ||
#define SOUND2_FILENR | #define SOUND2_FILENR | ||
+ | #define SOUND_CONTINUOUS_MOVE | ||
+ | |||
+ | #define FAHRTDAUER_MESSEN | ||
+ | #define ADVANCED_SOUND | ||
+ | 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 | ||
+ | #define DCC_SOUNDFILE_2 | ||
+ | #define DCC_SOUNDFILE_3 | ||
+ | #define DCC_SOUNDFILE_4 | ||
+ | #define DCC_SOUNDFILE_5 | ||
+ | #define DCC_SOUNDFILE_6 | ||
// | // | ||
// *** Pins *** | // *** Pins *** | ||
Zeile 349: | Zeile 395: | ||
// | // | ||
- | #define DCC_OFFSET | + | #define DCC_OFFSET |
#define DCC_WAITING_TIME | #define DCC_WAITING_TIME | ||
- | #define DCC_MAERKLIN_7687_COMPATIBLE | + | #define DCC_MAERKLIN_7687_COMPATIBLE |
+ | // 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 | + | |
+ | | ||
#else | #else | ||
- | #define LAST_USED_DCC_ADDR | + | |
+ | | ||
#endif | #endif | ||
- | // Momentan | + | // Momentan |
#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 | #define DCC_PORT_ADDR_LIST | ||
Zeile 378: | Zeile 429: | ||
DCC_PORT_ADDR(10, | DCC_PORT_ADDR(10, | ||
DCC_PORT_ADDR(11, | DCC_PORT_ADDR(11, | ||
- | DCC_PORT_ADDR(12, | + | DCC_PORT_ADDR(12, |
- | | + | |
+ | |||
#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 | #define DCC_PORT_ADDR_LIST | ||
Zeile 408: | Zeile 460: | ||
DCC_PORT_ADDR(22, | DCC_PORT_ADDR(22, | ||
DCC_PORT_ADDR(23, | DCC_PORT_ADDR(23, | ||
- | DCC_PORT_ADDR(24, | + | DCC_PORT_ADDR(24, |
- | DCC_PORT_ADDR(25, | + | |
- | DCC_PORT_ADDR(26, | + | |
// Bei mehr als 41 Einträgen/ | // Bei mehr als 41 Einträgen/ | ||
// 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(28, |
- | // | + | DCC_PORT_ADDR(29, |
- | // | + | DCC_PORT_ADDR(30, |
- | // | + | DCC_PORT_ADDR(31, |
- | // | + | DCC_PORT_ADDR(32, |
- | // | + | DCC_PORT_ADDR(33, |
- | // | + | DCC_PORT_ADDR(34, |
- | // | + | DCC_PORT_ADDR(35, |
- | // | + | DCC_PORT_ADDR(36, |
- | // | + | DCC_PORT_ADDR(37, |
- | // | + | DCC_PORT_ADDR(38, |
- | // | + | DCC_PORT_ADDR(39, |
- | // | + | DCC_PORT_ADDR(40, |
- | // | + | DCC_PORT_ADDR(41, |
- | // | + | DCC_PORT_ADDR(42, |
- | // | + | DCC_PORT_ADDR(43, |
- | // | + | DCC_PORT_ADDR(44, |
- | // | + | DCC_PORT_ADDR(45, |
- | // | + | DCC_PORT_ADDR(46, |
- | // | + | DCC_PORT_ADDR(47, |
- | // | + | DCC_PORT_ADDR(48, |
+ | */ | ||
- | | ||
#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 | + | // die letzte DCC-Adresse muss sich oben aus der # |
Zeile 452: | Zeile 502: | ||
// Bei Änderungen | // Bei Änderungen | ||
- | #define BUTTON_THRESHOLDS | + | #define BUTTON_THRESHOLDS |
- | {327, 284, 310, 319}, \ | + | |
- | {696, 670, 284, 622}, \ | + | |
- | {872, 831, 310, 622} | + | |
- | #define HOME_RUN_PORT | + | #define HOME_RUN_PORT |
/* folgende Aktionen stehen für die Taster zur Verfügung: | /* folgende Aktionen stehen für die Taster zur Verfügung: | ||
- | | + | |
B_Toggle_House() | B_Toggle_House() | ||
B_Toggle_Sound() | B_Toggle_Sound() | ||
Zeile 470: | Zeile 517: | ||
B_Signal_Opp_white() | B_Signal_Opp_white() | ||
B_U_Turn_CW() | B_U_Turn_CW() | ||
+ | B_U_Turn_CCW() | ||
B_Home_Run() | B_Home_Run() | ||
B_Toggle_Flash() | B_Toggle_Flash() | ||
Play_Sound(n) | Play_Sound(n) | ||
+ | Auto_Calibrate(1) | ||
*/ | */ | ||
// Hier den Tastern die Aktion zuordnen (kann man auch mehrfach machen, dann ";" | // Hier den Tastern die Aktion zuordnen (kann man auch mehrfach machen, dann ";" | ||
+ | // #define BUTTON_n ohne weitere Zuordnung deaktiviert den Knopf bzw. löst keine Aktion aus, z.B. "# | ||
- | #define BUTTON_1 | + | // kurzer Tastendruck: |
+ | #define BUTTON_1 | ||
#define BUTTON_2 | #define BUTTON_2 | ||
#define BUTTON_3 | #define BUTTON_3 | ||
#define BUTTON_4 | #define BUTTON_4 | ||
- | </code> | + | // langer Tastendruck: |
- | + | #define BUTTON_1_L | |
- | ==== LocoTurn V1.1 ==== | + | #define BUTTON_2_L |
- | < | + | #define BUTTON_3_L |
- | coming soon | + | #define BUTTON_4_L |
</ | </ | ||