RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#626 von Q3-aDm1N , 09.09.2020 23:52

Ich komme gerade nicht weiter. Wahrscheinlich ist es ein Verständnis Problem. Ich bekomme eine Weiche geschaltet, aber das war es dann auch. Wenn ich das richtig verstanden habe, gebe ich in dem Sketch die Pins an die zusammen gehören. Eingestellte Adresse ist 20, erste Weiche ist 20 Port 0, demnach sollte die 2. Weiche doch 20 Port 1 sein, oder?
20:0 schaltet, 20:1 nicht.

2 ULN am Arduino, 2 Pins pro Weiche, macht also maximal 8 Weichen pro Arduino (Port 0 - 7). Die nächste würden dann einfach an den nachten Arduino kommen, gleicher Sketch, nur Adresse 21.

Hier mal ein Auszug aus dem Sketch, eventuell habe ich da ja auch noch Fehler drin.

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
 
const int DccAddr           =  20;    // DCC-Decoderadresse
const byte iniMode = 0x50 | AUTOADDR /*| ROCOADDR*/; // default-Betriebsmodus ( CV47 )
const int PomAddr = 50; // Adresse für die Pom-Programmierung ( CV48/49 )
// mit LocoNet-Schnittstelle ist dies die LocoNetId
#define NOACK // Diese Zeile aktivieren, wenn keine HW zum CV auslesen vorhanden ist
// ( kein Ack-Pin ) Der in Interfac.h definierte Pin wird dann zwar als OUTPUT
// gesetzt, kann aber für beliebige Funktionen in der Tabelle unten genutzt werden
 
// Ausgänge: mit NC gekennzeichnete Ausgänge werden keinem Port zugeordnet. Damit können Ports gespart werden,
// z.B. wenn bei einem Servo kein Polarisierungsrelais benötigt wird
const byte modePin = 13; // Anzeige Betriebszustand (Normal/Programmierung) (Led)
 
#define STATICRISE (250/50 << 4) // Softled riseTime = 250 ( max = 750 )
#define COILMOD NOPOSCHK|CAUTOOFF
#define SERVOMOD SAUTOOFF|NOPOSCHK|SDIRECT
#define STATICMOD CAUTOOFF|BLKSOFT|BLKSTRT|STATICRISE // Wechselblinker mit beiden Leds an beim Start
const byte iniTyp[] = { FCOIL, FCOIL, FCOIL, FCOIL, FCOIL, FCOIL, FCOIL, FCOIL };
const byte out1Pins[] = { A5, A3, A1, 3, 5, 7, 9, 11 }; // output-pins der Funktionen
const byte out2Pins[] = { A4, A2, A0, 4, 6, 8, 10, 12 };

const byte iniFmode[] = { CAUTOOFF, CAUTOOFF, CAUTOOFF, CAUTOOFF, CAUTOOFF, CAUTOOFF, CAUTOOFF, CAUTOOFF };
const byte iniPar1[] = { 50, 50, 50, 50, 50, 50, 50, 50 };
const byte iniPar2[] = { 50, 50, 50, 50, 50, 50, 50, 50 };
const byte iniPar3[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
const byte iniPar4[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; // nur für Lichtsignale!
//------------------------------------------------------------------------------------
 


Gruß

Matthias


Q3-aDm1N  
Q3-aDm1N
Regionalbahn (RB)
Beiträge: 25
Registriert am: 07.02.2020
Ort: Aschendorf
Spurweite H0
Stromart Digital


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#627 von MicroBahner , 10.09.2020 15:11

Hallo Mathias,
das verstehe ich jetzt nicht:

Zitat

Eingestellte Adresse ist 20, erste Weiche ist 20 Port 0, demnach sollte die 2. Weiche doch 20 Port 1 sein, oder?
20:0 schaltet, 20:1 nicht.

Was verstehtst Du da unter 'Port' ?
Das sind einfach DCC-Adressen: 1. Weiche hat Adresse 21, die 2. Adresse 21, die dritte Adress 23 .. usw. Wobei der Decoder mit 'OutputAdressen' rechnet ( im Gegensatz zum 'Decoder Adressem' ).
Womit steuerst Du das denn an?

Zitat

2 ULN am Arduino, 2 Pins pro Weiche, macht also maximal 8 Weichen pro Arduino (Port 0 - 7).

Die Zahl der möglichen Weichen hängt ausschließlich von der Zahl der verfügbaren Pins ab. Beim Nano mit 16 freien Pins also die 8 Weichen - aber was ist wieder Port 0..7 ?


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#628 von Q3-aDm1N , 10.09.2020 19:46

Ich schalte mit Rocrail.
In den Einstellungen für eine Weiche kann ich dort in einem Feld die Adresse und in einem anderen den Port einstellen.

Hab eben noch ein wenig getestet, jetzt geht es. Hatte extra einen Zubehör Decoder angelegt und diesen bei den Weichen als Decoder angegeben. Nachdem ich den raus genommen habe funktioniert es. Alle Weichen am ersten arduino hören auf die Adresse 20, den Port gestartet bei 1 und für jede Weiche ein Port weiter bis 8.
Also Adresse 20 Port 1 - 8 am ersten arduino und das dann für den nächsten genau so, nur eben als Adresse zB 21.

Ich versuche nur noch das der Decoder sich das auch speichert. Momentan ist es so, das nach Neustart des arduino die Weiche die als erstes betätigt wird, Port 1 bekommt.


Gruß

Matthias


Q3-aDm1N  
Q3-aDm1N
Regionalbahn (RB)
Beiträge: 25
Registriert am: 07.02.2020
Ort: Aschendorf
Spurweite H0
Stromart Digital


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#629 von MicroBahner , 10.09.2020 22:56

Hallo Mathias,

Zitat

Ich versuche nur noch das der Decoder sich das auch speichert. Momentan ist es so, das nach Neustart des arduino die Weiche die als erstes betätigt wird, Port 1 bekommt.

Dann ist bei Dir wohl der Programmiermodus ständig aktiv. Wie hast Du denn den Eingang für den Betriebsmodus beschaltet? Wenn der auf Gnd liegt, ist der Programmiermodus aktiv.

Zu den Adressen: DCC definiert da 2 Adressmodi: Decoder-Adressing und Output-Adressing. Beim Output-Adressing werden alle Weichenadressen linear durchnumeriert. So arbeitet mein Decoder. Beim Decoder-Adressing werden die Adressen in 4-er Gruppen zusammengefasst und als Decoderadresse und Output-Adresse ( SubAdresse 0..3 ) bezeichnet. Was Rocrail da macht mit 8 Ports ist etwas ungewöhnlich und eigentlich nicht normgerecht.
Das DCC-Telegramm ist aber immer das gleiche, es ist nur eine unterschiedliche Art wie die Daten interpretiert werden. D.h. es lassen sich alle Adressierungsarten ineinander umrechnen, und die Zentrale kann das anders organiseren als der Decoder. Sinnvoll ist das aber nicht, denn es führt nur zur Verwirrung, und man muss eben auch ständig umrechenen.
Meines Wissens kann Rocrail aber die Adressen auch als 'Output-Adressing' verwalten.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#630 von fm11 , 02.10.2020 23:59

Hallo Franz-Peter,

vielen Dank für das tolle Projekt. Ich bin neu hier und habe den Decoder mit 4 Servos auf dem Steckbrett aufgebaut und für meine Anforderungen (Weichen und Formsignale) erfolgreich getestet. Super Arbeit. Danke.

Nun habe ich eine Frage: Wie viele Servos kann ich maximal mit einem Arduino Nano oder einem Arduino Mega 2560, jeweils mit zusätzlichen Schaltausgängen für die Relais der Herzstückpolarisierung, ansteuern.

Vielen Dank.

VG
fm11


fm11  
fm11
S-Bahn (S)
Beiträge: 16
Registriert am: 25.09.2020
Ort: Sachsen
Gleise Tillig Elite
Spurweite H0, H0e
Steuerung Z21 + Rocrail
Stromart DC, Digital


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#631 von MicroBahner , 06.10.2020 16:15

Hallo fm11,
Prinzipiell gehen bis 16 Servos. Bei den Polarisierunsrelais hast dann aber beim Nano zuwenig freie Pins.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#632 von Storchenbahn , 20.10.2020 20:59

Guten Tag Franz-Peter,
Ich arbeite in der FOS mit Arduinos. So hatte ich mich gefragt, ob man mit denen Decoder bauen kann.
Zum Glück habe ich dann im Stummi Forum deinen Beitrag mit Schaltplan und ausführlicher Anleitung gefunden.
Signal Decoder habe ich gebaut, die auch Super Funktioniert haben.
Nun wollte ich Fleischmann Doppelspul Weichenantriebe Digitalisieren.

Ich möchte zum Schalten der Weichen 2 ULNs Parallel schalten(1A). Um dies zu Testen, und um die Zuverlässigkeit der Weichen zu Verbessern möchte ich die Zeit in der die Antriebe geschaltet werden auf die maximalen 750ms erhöhen.

In ihrer Anleitung steht, dass man in der "InPar1" die Zeit einträgt.
Dies funktioniert bei mir nicht richtig. Ausgänge 11 und 12 sind sehr lange eingeschaltet, wie es sein soll.
Doch bei den restlichen Ausgängen funktioniert dies nicht. Sie sind so kurz durchgeschaltet, dass ich nicht einmal messen kann, ob auch 5 V anliegen. Vermutlich liegen hier die 50mS an.

Auch den DCC Abschaltbefehl der Zentrale(Z21) habe ich auf 500ms erhöht.
mit CAUTOOFF und NOPOSCHK habe rumprobiert. Kein Erfolg.

Vermutlich habe ich in dem Sketch etwas Falsch eingetragen.

Noch einen Schönen Abend
Storchenbahn


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
 
const int DccAddr           =  15;    // DCC-Decoderadresse
const byte iniMode = 0x50 | AUTOADDR | ROCOADDR; // default-Betriebsmodus ( CV47 )
const int PomAddr = 50; // Adresse für die Pom-Programmierung ( CV48/49 )
// mit LocoNet-Schnittstelle ist dies die LocoNetId
//#define NOACK // Diese Zeile aktivieren, wenn keine HW zum CV auslesen vorhanden ist
// ( kein Ack-Pin ) Der in Interfac.h definierte Pin wird dann zwar als OUTPUT
// gesetzt, kann aber für beliebige Funktionen in der Tabelle unten genutzt werden
 
// Ausgänge: mit NC gekennzeichnete Ausgänge werden keinem Port zugeordnet. Damit können Ports gespart werden,
// z.B. wenn bei einem Servo kein Polarisierungsrelais benötigt wird
const byte modePin = 13; // Anzeige Betriebszustand (Normal/Programmierung) (Led)
 
#define STATICRISE (250/50 << 4) // Softled riseTime = 250 ( max = 750 )
#define COILMOD CAUTOOFF
#define SERVOMOD SAUTOOFF|NOPOSCHK|SDIRECT
#define STATICMOD CAUTOOFF|BLKSOFT|BLKSTRT|STATICRISE // Wechselblinker mit beiden Leds an beim Start
const byte iniTyp[] = { FCOIL, FCOIL, FCOIL, FCOIL, FCOIL, FCOIL, };
const byte out1Pins[] = { 12, 10, 8, 6, A0, A2 }; // output-pins der Funktionen
const byte out2Pins[] = { 11, 9, 7, 5, A1, A3 };
const byte out3Pins[] = { NC, NC, NC, NC, NC, NC };

const byte iniFmode[] = {CAUTOOFF, CAUTOOFF, CAUTOOFF, CAUTOOFF, CAUTOOFF, CAUTOOFF, };
const byte iniPar1[] = { 750, 750, 750, 750, 750, 750 };
const byte iniPar2[] = { 50, 50, 50, 50, 50, 50 };
const byte iniPar3[] = { 0, 0, 0, 0, 0, 0 };
const byte iniPar4[] = { 0, 0, 0, 0, 0, 0,};
//------------------------------------------------------------------------------------
 


Storchenbahn  
Storchenbahn
S-Bahn (S)
Beiträge: 20
Registriert am: 05.07.2018
Spurweite H0
Stromart AC, Analog


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#633 von Storchenbahn , 20.10.2020 20:59

Guten Tag Franz-Peter,
Ich arbeite in der FOS mit Arduinos. So hatte ich mich gefragt, ob man mit denen Decoder bauen kann.
Zum Glück habe ich dann im Stummi Forum deinen Beitrag mit Schaltplan und ausführlicher Anleitung gefunden.
Signal Decoder habe ich gebaut, die auch Super Funktioniert haben.
Nun wollte ich Fleischmann Doppelspul Weichenantriebe Digitalisieren.

Ich möchte zum Schalten der Weichen 2 ULNs Parallel schalten(1A). Um dies zu Testen, und um die Zuverlässigkeit der Weichen zu Verbessern möchte ich die Zeit in der die Antriebe geschaltet werden auf die maximalen 750ms erhöhen.

In ihrer Anleitung steht, dass man in der "InPar1" die Zeit einträgt.
Dies funktioniert bei mir nicht richtig. Ausgänge 11 und 12 sind sehr lange eingeschaltet, wie es sein soll.
Doch bei den restlichen Ausgängen funktioniert dies nicht. Sie sind so kurz durchgeschaltet, dass ich nicht einmal messen kann, ob auch 5 V anliegen. Vermutlich liegen hier die 50mS an.

Auch den DCC Abschaltbefehl der Zentrale(Z21) habe ich auf 500ms erhöht.
mit CAUTOOFF und NOPOSCHK habe rumprobiert. Kein Erfolg.

Vermutlich habe ich in dem Sketch etwas Falsch eingetragen.

Noch einen Schönen Abend
Storchenbahn


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
 
const int DccAddr           =  15;    // DCC-Decoderadresse
const byte iniMode = 0x50 | AUTOADDR | ROCOADDR; // default-Betriebsmodus ( CV47 )
const int PomAddr = 50; // Adresse für die Pom-Programmierung ( CV48/49 )
// mit LocoNet-Schnittstelle ist dies die LocoNetId
//#define NOACK // Diese Zeile aktivieren, wenn keine HW zum CV auslesen vorhanden ist
// ( kein Ack-Pin ) Der in Interfac.h definierte Pin wird dann zwar als OUTPUT
// gesetzt, kann aber für beliebige Funktionen in der Tabelle unten genutzt werden
 
// Ausgänge: mit NC gekennzeichnete Ausgänge werden keinem Port zugeordnet. Damit können Ports gespart werden,
// z.B. wenn bei einem Servo kein Polarisierungsrelais benötigt wird
const byte modePin = 13; // Anzeige Betriebszustand (Normal/Programmierung) (Led)
 
#define STATICRISE (250/50 << 4) // Softled riseTime = 250 ( max = 750 )
#define COILMOD CAUTOOFF
#define SERVOMOD SAUTOOFF|NOPOSCHK|SDIRECT
#define STATICMOD CAUTOOFF|BLKSOFT|BLKSTRT|STATICRISE // Wechselblinker mit beiden Leds an beim Start
const byte iniTyp[] = { FCOIL, FCOIL, FCOIL, FCOIL, FCOIL, FCOIL, };
const byte out1Pins[] = { 12, 10, 8, 6, A0, A2 }; // output-pins der Funktionen
const byte out2Pins[] = { 11, 9, 7, 5, A1, A3 };
const byte out3Pins[] = { NC, NC, NC, NC, NC, NC };

const byte iniFmode[] = {CAUTOOFF, CAUTOOFF, CAUTOOFF, CAUTOOFF, CAUTOOFF, CAUTOOFF, };
const byte iniPar1[] = { 750, 750, 750, 750, 750, 750 };
const byte iniPar2[] = { 50, 50, 50, 50, 50, 50 };
const byte iniPar3[] = { 0, 0, 0, 0, 0, 0 };
const byte iniPar4[] = { 0, 0, 0, 0, 0, 0,};
//------------------------------------------------------------------------------------
 


Storchenbahn  
Storchenbahn
S-Bahn (S)
Beiträge: 20
Registriert am: 05.07.2018
Spurweite H0
Stromart AC, Analog


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#634 von MicroBahner , 20.10.2020 21:57

Hallo,
hast Du mal beim Starten des Arduino den resModeP Pin auf 0 gezogen? Das stellt sicher, dass die iniPar Werte aus der Tabelle auch in die CV's übertragen werden. Gerade wenn man mit dem Decoder experimentiert, und die Werte in der Tabelle verändert, ist das wichtig. Sonst stehen in den CV'S noch Werte von vorherigen Versuchen. Die iniPar Werte werden nicht automatisch beim Hochladen in die CV's übernommen.

Alternativ kannst Du auch den betrModeP Pin entsprechend beschalten, so dass die Werte bei jedem Programmstart übernommen werden. Oder Du aktivierst das #define FIXMODE entsprechend.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#635 von Chrisn86 , 29.11.2020 16:50

Moin,

Erstmal möchte ich mich bedanken für das super Projekt was hier entstanden ist.

Ich hoffe mir kann auch geholfen werden.
Ich habe das letzte Release genommen und die Pins meinem Layout angepasst.
Ich besitze ausschließlich eine Trix MS2 und kann auch darüber die einzelnen CV Auslesen und Schreiben.
Was leider nicht funktioniert ist die Ansteuerung der Servos.
Habe die Standard DCC Adresse 20 stehen gelassen aber über die MS2 funktioniert es nicht.
Habe permanent den POM Mode aktiviert.

Habe parallel zu den Servos auch LEDs die ja je nach Befehl auch ihren Status verändern sollte, was sie aber nicht tun...

Vielleicht hat jemand noch Tipps?

Beste Grüße,
Christoph


Chrisn86  
Chrisn86
Beiträge: 7
Registriert am: 29.11.2020


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#636 von MicroBahner , 29.11.2020 21:55

Hallo Christoph,
vielleicht schreibst Du noch ein paar spezifischere Informationen: Wechen Arduino verwendest Du ? Und was funktioniert bei den Servos nicht? Wie hast Du sie angeschlossen? Und zeig auch bitte deine Konfigurationsdatei.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#637 von Chrisn86 , 30.11.2020 10:04

Hallo,

gerne gebe ich noch ein paar mehr Details. Ich benutze einen Arduino Pro Mini.
Es funktioniert keine Ansteuerung der Servos und auch Umschalten der LEDs parallel dazu mit statt.
Hardware seitig ist es bereits geprüft und mit einer einfacheren Software bereits verifiziert.

Ich habe in der Haupt Projektdatei die Beispieldatei eingebunden:

1
2
3
4
5
6
7
8
9
10
11
12
13
 

//------------------ Einbinden der Konfigurationsdatei -------------------------
#ifdef __STM32F1__
#include "DCC_Zubehoerdecoder-STM32.h"
#elif defined(__AVR_ATmega32U4__)
#include "DCC_Zubehoerdecoder-Micro.h"
#else
//#include "DCC_Zubehoerdecoder.h"
//#include "TestKOnfDCC_Zubehoerdecoder-LS-Nano.h"
#include "examplesDCC_Zubehoerdecoder-Bsp1.h"
#endif
//-------------------------------------------------------------------------------
 
 



Und folgend dann die angepasste Datei zur Ansteuerung. Die Interface.h habe ich nicht angefasst.

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
 

#define ENCODER_DOUBLE // Eigenschaften des Drehencoders (Impulse per Raststellung)
 

// vom Anwender änderbare Parameter um den Zubehördecoder an die verwendete HW anzupassen
 
// Beispiel für Variante mit Licht-Ausfahrsignal mit Vorsignal, mit Betriebsmode Led an Pin 13 (interne Led)
// für Arduino Nano
 
//----------------------------------------------------------------
// Hardwareabhängige Konstante ( nicht per CV änderbar)
//----------------------------------------------------------------
 
// Eingänge analog: ( Bei Nano und Mini - Versionen kann hier auch A7 und A6 verwendet werden, um mehr
// digital nutzbare Ports freizubekommen.
// beim UNO sind A7+A6 nicht vorhanden! )
#define FIXMODE POMMODE // Ist dieses define aktiv, wird der Betriebsmode fest gesetzt, betrModeP wird dann
// nicht gelesen und ignoriert. Mögliche Werte:
// NORMALMODE, POMMODE, INIMODE, ADDRMODE
const byte betrModeP = A3; // Analogeingang zur Bestimmung des Betriebsmodus. Wird nur beim
// Programmstart eingelesen!
const byte resModeP = 3; // Rücksetzen CV-Werte + Mittelstellung Servos
 
// Eingänge digital (die Ports A0-A5 lassen sich auch digital verwenden): ---------
 
// Drehencoder zur Servojustierung ...........
//#define ENCODER_AKTIV // Wird diese Zeile auskommentiert, wird der Encoder nicht verwendet.
// Die Encoder-Ports werden dann ignoriert, und können anderweitig
// verwendet werden.
const byte encode1P = A2; // Eingang Drehencoder zur Justierung.
const byte encode2P = A3;
// ............................................
//-------------------------------------------------------------------------------------------------------
// Betriebswerte ( per CV änderbar ) Diese Daten werden nur im Initiierungsmodus in die CV's geschrieben.
// Der Initiierungsmodus lässt sich per Mode-Eingang aktivieren oder er ist automatisch aktiv, wenn keine
// sinnvollen Werte im CV47 stehen.
//-------------------------------------------------------------------------------------------------------
const int DccAddr = 20; // DCC-Decoderadresse
const byte iniMode = 0x50 | AUTOADDR /*| ROCOADDR*/; // default-Betriebsmodus ( CV47 )
const int PomAddr = 100; // Adresse für die Pom-Programmierung ( CV48/49 )
// mit LocoNet-Schnittstelle ist dies die LocoNetId
//#define NOACK // Diese Zeile aktivieren, wenn keine HW zum CV auslesen vorhanden ist
// ( kein Ack-Pin ) Der in Interfac.h definierte Pin wird dann zwar als OUTPUT
// gesetzt, kann aber für beliebige Funktionen in der Tabelle unten genutzt werden
 
// Ausgänge: mit NC gekennzeichnete Ausgänge werden keinem Port zugeordnet. Damit können Ports gespart werden,
// z.B. wenn bei einem Servo kein Polarisierungsrelais benötigt wird
const byte modePin = A1; // Anzeige Betriebszustand (Normal/Programmierung) (Led)
 
#define COILMOD NOPOSCHK|CAUTOOFF
#define SERVOMOD SAUTOOFF|NOPOSCHK|SDIRECT
#define STATICMOD CAUTOOFF|BLKSOFT|BLKSTRT // Wechselblinker mit beiden Leds an beim Start
const byte iniTyp[] = { FSERVO, FSERVO, FSERVO, FSERVO };
const byte out1Pins[] = { 5, 9, 6, 10 };
const byte out2Pins[] = { A5, A4, 11, 13 };
 
const byte iniFmode[] = { SERVOMOD, SERVOMOD, SERVOMOD, SERVOMOD };
const byte iniPar1[] = { 50, 50, 50, 50 };
const byte iniPar2[] = { 130, 130, 130, 130 };
const byte iniPar3[] = { 30, 30, 30, 30 };
const byte iniPar4[] = { 0, 0, 0, 0 }; // nur für Lichtsignale!
//------------------------------------------------------------------------------------
 
 



Erstaunlich ist auch das die festgesetzten Grenzen nicht übernommen werden.
Über die festgelegte Adresse 20 kann ich jedoch in der MS2, wenn ich den Decoder als Lok anlege alle CV Werte auslesen.

Da offensichtlich die Werte hier nicht übernommen werden, gehe stark davon aus, das dementsprechend auch die geänderten Pins nicht übernommen werden und damit die Funktion nicht gegeben ist.


Chrisn86  
Chrisn86
Beiträge: 7
Registriert am: 29.11.2020


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#638 von MicroBahner , 30.11.2020 16:33

Hallo Christoph,
Da ist noch einiges dabei, was nicht so ganz passt.

Du hast auch noch einen Fehler gefunden: Die beiden Beispiele 'DCC_Zubehoerdecoder-Bsp1.h' und 'DCC_Zubehoerdecoder-Bsp2.h' sind leider noch ein recht alter Stand, und ich habe vergessen sie zu aktualisieren. Da fehlt eine Zeile mit 'out3Pins', die es in ganz alten Ständen des Decoders noch nicht gab. Welche Version verwendest Du denn - die letzen Versionen lassen sich mit diesen Beispielen auch nicht übersetzen, da gibt es eine Fehlermeldung.
Unter die Zeile mit out2Pins müsstest Du noch diese Zeile einfügen:

1
2
 
const byte out3Pins[] = {       NC,       NC,       NC,       NC };
 
 


------------------------
Dieser Pin:

1
2
 
const byte resModeP     =   3;     // Rücksetzen CV-Werte + Mittelstellung Servos
 
 

muss ein Analog-Pin sein.

--------------------------

Zitat

Erstaunlich ist auch das die festgesetzten Grenzen nicht übernommen werden.

Nun, dass ist erstmal so gewollt, damit geänderte CV-Werte nicht überschrieben werden, wenn man das Programm neu hochlädt. Um die Werte aus dem .h-File zu übernehmen muss entweder der Betriebmode auf 'INIMODE' eingestellt sein, oder beim Starten des Sketch muss der resModeP-Pin auf 0 gezogen werden. Alternativ kann man auch einen beliebigen Wert auf den CV8 schreiben. Das bedeutet lt DCC-Norm 'Rücksetzen auf die Werkseinstellung'

Das gilt aber alles nur für die Werte, die in CV's stehen, und im Betrieb auch geändert werden können ( iniFmode und iniParx ). Die HW-relevanten Werte ( Typ und Pins ) werden immer aus dem .h File übernommen und stehen aud nicht in CV's.

------------------------------

Zitat

Über die festgelegte Adresse 20 kann ich jedoch in der MS2, wenn ich den Decoder als Lok anlege alle CV Werte auslesen.

Das kann eigentlich nicht sein. Schreiben kann man auf dem Betriebsgleis über die PoM-Adresse ( in deinem Fall steht da 100 als PoM Adresse im h-File ). Lesen geht da gar nicht.
Wird über das Programmiergleis geschrieben/gelesen ist die Adresse irrelevant. Die Gleisbox der MS2 macht allerdings keinen Unterschied zwischen Programmier- und Betriebsgleis.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#639 von Chrisn86 , 30.11.2020 18:27

Hallo,

erstmal vielen Dank für die ausführliche und detaillierte Antwort.

Mir ist so glaube ich gerade der Hauptfehler aufgefallen.
Die eigentliche -Bsp1.h Datei hatte ich in die Arduino Umgebung geladen und dort die Veränderungen vorgenommen, welche aber nicht in die eigentliche Datei gespeichert wurden.

Werde jetzt das korrigieren und dann noch einen Testlauf damit starten und berichten.

Und wenn ich dich richtig verstehe kann ich einfach weiter die CV über die MS2 mit Gleisbox lesen und schreiben unabhängig von der Adresse?


Chrisn86  
Chrisn86
Beiträge: 7
Registriert am: 29.11.2020


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#640 von MicroBahner , 30.11.2020 22:59

Zitat

Und wenn ich dich richtig verstehe kann ich einfach weiter die CV über die MS2 mit Gleisbox lesen und schreiben unabhängig von der Adresse?

Richtig. Allerdings sollte dann außer dem Decoder nicht anderes an der Gleisbox angeschlossen sein. Mit den Methoden des CV-Schreibens auf dem Programmiergleis werden immer alle angeschlossenen Decoder umprogrammiert - unabhängig von der Adresse. Und die Gleisbox hat ja nunmal keinen getrennten Anschluß für Programmier- und Betriebsgleis.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#641 von Chrisn86 , 01.12.2020 10:30

Moin,

Ich kann zu meiner Freude berichten, das es nun einwandfrei funktioniert.

Danke für die super Hilfestellung!


Chrisn86  
Chrisn86
Beiträge: 7
Registriert am: 29.11.2020


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#642 von MicroBahner , 01.12.2020 12:05

Super, dann viel Spaß weiterhin


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#643 von MicroBahner , 03.12.2020 10:27

Die Version 6.3 ist fertig ( der Eingangspost wurde entsprechend überarbeitet ). Neben kleineren Fehlerkorrekturen wurde vor allem die Servofunktionalität erweitert:

  • 2 Servos können über 2 aufeinanderfolgende Adressen logisch gekoppelt werden. Dies ist vor allem für 3-begriffige Formsignale gedacht.
  • 1 Servo kann über 2 Adressen in 4 unterschiedliche Positionen gefahren werden.
  • Ein Servo kann automatisch nach einer vorgegebenen Zeit wieder in die Ruhelage zurückgefahren werden. Dies ist vor allem für Entkuppler gedacht.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#644 von hubedi , 03.12.2020 12:59

Hallo Franz-Peter,

das sind interessante Erweiterungen. Die gekoppelten Servos sind auch für das zum Umlegen einer Weiche synchrone Drehen einer Weichenlaterne hilfreich.

Die angebotenen Mechaniken, die für eine 90°-Drehung sorgen sollen, sind entweder teurer als ein zweites Servo oder für kleinere Spuren unbrauchbar, da sie erst bei einem z.B. für. meine Weichen zu großen Stellweg korrekt drehen.

Danke für Deine Arbeit.

LG
Hubert


Hier geht's zu den Bauberichten der "Mark Michingen"
Und hier stelle ich mich kurz vor ...

Wer immer tut, was er schon kann, bleibt immer das, was er schon ist. (Henry Ford)


 
hubedi
ICE-Sprinter
Beiträge: 5.878
Registriert am: 24.10.2015
Ort: Südhessen
Gleise Selbstbau-/Umbaugleise
Spurweite N
Steuerung YaMoRC YD7001, Lenz
Stromart Digital


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#645 von MicroBahner , 03.12.2020 13:24

Hallo Hubert,

Zitat

Die gekoppelten Servos sind auch für das zum Umlegen einer Weiche synchrone Drehen einer Weichenlaterne hilfreich.

An eine solche Anwendung habe ich noch gar nicht gedacht. Da liegt dann natürlich die 2 Adresse brach, denn die braucht man da ja nicht.

Ich werde mir das aber merken für die nächste große Version ( V7 ). Da will ich die Zahl der CV's pro Adresse erweitern, was vor allem für Lichtsignale mit blinkenden Signalbildern notwendig ist. Aber das könnte man dann auch verwenden, um Endpositionen und Geschwindigkeit für 2 Servos in eine Adresse zu packen.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#646 von hubedi , 03.12.2020 13:47

Hallo Franz-Peter,

das wäre genial und genau die Funktion, die ich gebrauchen könnte.

Ich wollte mich schon selbst an die Arbeit machen. Für zwei getrennt einstellbare Servos auf einer Adresse ließen sich sicher noch mehr Anwendungen finden. Die Drehung der Weichenlaternen würden bei mir jedebfalls dringend benötigt ...

LG
Hubert


Hier geht's zu den Bauberichten der "Mark Michingen"
Und hier stelle ich mich kurz vor ...

Wer immer tut, was er schon kann, bleibt immer das, was er schon ist. (Henry Ford)


 
hubedi
ICE-Sprinter
Beiträge: 5.878
Registriert am: 24.10.2015
Ort: Südhessen
Gleise Selbstbau-/Umbaugleise
Spurweite N
Steuerung YaMoRC YD7001, Lenz
Stromart Digital


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#647 von Spurnullspezi , 07.12.2020 13:11

Hallo Franz-Peter,

Melde mich hier zum ersten Mal. Ich habe schon diverse Dekoder gebaut, alles läuft äußerst zufriedenstellend.

Die neuen Servofunktionen werde ich demnächst ausprobieren.

Ich habe eine Frage zum (SERVO-)Dekoder allgemein:
Vorab: Ich habe eine Spur 0 Modulanlage die aus 14 Modulen besteht und dort sind natürlich auch Weichen mit Servoantrieben verbaut, die zurzeit über
Taster an den Modulfronten analog geschaltet werden können. Meine Idee ist nun dies Weichen auch digital zu steuern. Die maximale Anzahl von Weichen pro Modul ist 3.
Ist es möglich, 2 Taster pro Servo in Deine Dekoder zu implementieren?
Meine Lösungsidee wäre ein Xpressnet Interface für die Taster zu nutzen. Das wäre eine sehr aufwändige Lösung.

Gruß
Christian


Spurnullspezi  
Spurnullspezi
S-Bahn (S)
Beiträge: 12
Registriert am: 28.05.2020
Spurweite H0, 0, 00
Steuerung Querbeet
Stromart Digital


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#648 von MicroBahner , 07.12.2020 21:22

Hallo Christian,

Zitat

Ist es möglich, 2 Taster pro Servo in Deine Dekoder zu implementieren?

Du meinst zusätzlich zur DCC-Funktionalität? Grundsätzlich ist natürlich (fast ) alles machbar. In das bisherige Konzept passt das allerdings nicht - da ist die Konfiguration von digitalen Eingängen (noch) nicht vorgesehen. Individuell könntest Du das natürlich einbauen.
Für eine zukünftige Version habe ich mir zwar schon Gedanken gemacht, evtl. auch Eingänge vorzusehen. Das soll dann die Möglichkeit für Rückmeldungen beim LocoNet Interface eröffnen. Das liegt aber wohl noch in der weiteren Zukunft .

Zitat

Meine Lösungsidee wäre ein Xpressnet Interface für die Taster zu nutzen. Das wäre eine sehr aufwändige Lösung.

Ja, das wäre schon aufwändig. Aber das bringt mich auf eine andere, einfachere Lösung: Der Decoder enthält für's debugging auch Code, mit dem die Stellkommandos über die serielle Schnittstelle gegeben werden können - und zwar parallel zu den DCC-Kommandos. Diese Codeteile sind nur aktiv, wenn das Debugging eingeschaltet ist. Aber die könnte man ja auch unabhängig vom Debugging aktivieren. Mit einem kleinen Arduino-Mini ein paar Taster abfragen, und beim Drücke des Tasters einen entsprechenden String über die serielle Schnittstelle ausgeben ist sicher kein großer Aufwand.

Edit: hab's mal eben ausprobiert. Für die Tasterabfrage reicht ein ganz kleiner pro mini mit mega168 Prozesser. Z.B. so einer Zum Programmieren braucht man da noch einen USB-seriell Umsetzer. Da reicht dann aber auch für mehrere megas einer. Im Betrieb braucht man den ja nicht mehr.
Das Programm - als Beispiel für 2 Weichen auf Adresse 17/18 ( 4 Taster ) - ist recht überschaubar:

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
 

// Tastendrücke in serielle KOmmandos für DIY-Decoder umwandeln
#define MAX8BUTTONS
#include <MobaTools.h>
// define pin numbers
const byte buttonPin [] = { 2,3,4,5 };
const byte buttonCnt = sizeof(buttonPin);
MoToButtons Buttons( buttonPin, buttonCnt, 30, 500, 400 );
 
void setup()
{
Serial.begin(115200);
}
 
void loop() {
//--------------------------------------------------------
// read and process buttons
Buttons.processButtons();
//
//--------------------------------------------------------
if ( Buttons.pressed(0) ) Serial.println("ac 17 0 0");
if ( Buttons.pressed(1) ) Serial.println("ac 17 1 0");
if ( Buttons.pressed(2) ) Serial.println("ac 18 0 0");
if ( Buttons.pressed(3) ) Serial.println("ac 18 1 0");
}
 
 

Lässt sich auch ganz einfach auf mehr Taster erweitern.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#649 von Spurnullspezi , 09.12.2020 14:54

Hallo Franz-Peter,

erstmal vielen Dank für die Lösung. Am Wochenende probiere ich das mal aus und melde mich wieder.


Gruß
Christian


Spurnullspezi  
Spurnullspezi
S-Bahn (S)
Beiträge: 12
Registriert am: 28.05.2020
Spurweite H0, 0, 00
Steuerung Querbeet
Stromart Digital


RE: Arduinobasierter DIY Zubehördecoder V7.0.0 freigegeben

#650 von MicroBahner , 09.12.2020 18:04

Hallo,
da doch einige Wünsche an mich herangetragen wurden - hier im Sketch und auch per PN - habe ich mich entschlossen eine neue 'Main Release' anzufangen.
'Main-Release' deshalb, weil es auch Inkompatibilitäten gibt. Um die Wünsche zu realisieren, reichen die 5 CV's pro Adresse nicht mehr aus. In der V7.0 werden es deshalb 10 CV's sein. D.h. jeder Block beginnt jetzt an einer 10er Adresse: CV50, CV60, CV70 ... usw. Alte Konfigfiles können aber weiterhin gelesen werden ( natürlich ohne die neuen Funktionen )
Im ersten Schritt ist vorgesehen:

  • 2 Servos über eine Adresse zu steuern. Das 2. Servo bekommt einen komplett eigenen Parametersatz in den neuen 5 CVs (55-59 )
  • Blinkende Led's bei Lichtsignalen. Da es wohl in verschiedenen Bahngesellschaften ( und wohl auch aktuell in der DB ) Signalbilder mit blinkenden Leuchten gibt, ist das nun auch im Decoder möglich. Dazu gibt es 2 zusätzliche Parameter, die - bitcodiert wie bisher auch - die blinkenden Leds in den jeweiligen Signalbildern festlegen. Normalerweise startet die Led beim Aufblenden des Signalbildes mit EIN. Ist aber gleichzeitig auch das Bit für den statischen Betrieb gesetzt, startet die Led mit AUS. Damit sind dann sogar wechselblinkende Leds im Signalbild möglich ( wobei ich nicht weis, ob es das gibt ).
    Die Zeitdauer für EIN und AUS ist getrennt konfigurierbar ( von 0,1...2,5 Sekunden ).
  • Die Steuerung des Decoders über die serielle Schnittstelle ( s.o. bei Christian ) kann nun unabhängig vom Debug-Modus im Konfigfile aktiviert werden.

Der aktuelle Entwicklerstand liegt auf GitHub im Branch DevelopmentV7.0 . Wer experimentierfreudig ist, kann den schonmal ausprobieren. Eigentlich sind all oben angegebenen Erweiterungen schon drin. Ist aber noch nicht detailliert getestet, und die Doku fehlt auch noch. Die Beschreibung der CV's in der Datei Parameterdoc.h ( im Sketchverzeichnis ) ist aber schon aktualisiert.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


   

Lenz Booster LV102 mit Booster Mangementsystem BMS-D von Boll
rtDrive Lenz Digikeijs DR5000

  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz