Arduinobasierter DIY Zubehördecoder - V6.3 in Arbeit

Bereich für alle Themen rund um Digitaltechnik und digitale Umbauten.

JaM
InterRegio (IR)
Beiträge: 140
Registriert: Do 2. Mär 2006, 07:51
Nenngröße: H0
Stromart: digital
Steuerung: CS2, MS2
Gleise: K-Gleise

Re: Arduinobasierter DIY Zubehördecoder (DCC) mit Lichtsignalansteuerung

#26

Beitrag von JaM »

Hallo Franz-Peter,

schöne Sache, die Du da realisiert hast.

Allerdings ist die Überblendung nicht ganz richtig: Im Video kann man mindestens eine Stelle erkennen, an denen ungültige Farbkombinationen (kurzfristig) sichtbar sind (rot+rot+weiß+weiß). Das wird Dein EMA (Eisenbahn-Modell-Amt :D ) nicht zulassen. Es sollten zuerst die ausgehenden Lampen (LED) ausgeblendet werden, bevor die angehenden Lampen aufgeblendet werden.

Freundliche Grüße,
JaM

Benutzeravatar

Threadersteller
MicroBahner
Metropolitan (MET)
Beiträge: 2525
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 70

Re: Arduinobasierter DIY Zubehördecoder (DCC) mit Lichtsignalansteuerung

#27

Beitrag von MicroBahner »

Hallo JaM,
danke für den Hinweis - es geht ja bekanntlich immer noch besser :wink: . Dazu aber noch eine Frage zum Wechsel zwischen 2 Signalbildern: Wie sieht es denn mit Lampen aus, die bei beiden Signalbildern leuchten, z.B. die linke rote beim Wechsel von Hp00 auf Hp0/Sh1: geht die auch erst aus, und dann wieder an? Sonst wäre ja auch zwischendurch ein ungültiges Bild (nur linkes Rot an).


railfan2401
S-Bahn (S)
Beiträge: 11
Registriert: Do 11. Sep 2014, 19:46
Nenngröße: H0
Stromart: digital
Steuerung: Lenz DCC
Wohnort: München

Re: Arduinobasierter DIY Zubehördecoder (DCC) mit Lichtsignalansteuerung

#28

Beitrag von railfan2401 »

Hallo Franz-Peter,
die Realisierung schreitet bei Dir ja rasant voran. Leider kann ich wenig zum Gelingen beitragen. Das fertige Produkt wird bei mir aber sicherlich zum Einsatz kommen.
Beste Grüße
Burkhardt

Benutzeravatar

Threadersteller
MicroBahner
Metropolitan (MET)
Beiträge: 2525
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 70

Re: Arduinobasierter DIY Zubehördecoder (DCC) mit Lichtsignalansteuerung

#29

Beitrag von MicroBahner »

Hallo Burkhardt
railfan2401 hat geschrieben:
Mo 30. Jan 2017, 17:10
Das fertige Produkt wird bei mir aber sicherlich zum Einsatz kommen.
Da hoffe ich mal, dass es dann deinen Anforderungen entspricht :D :D


@JaM und all
Ich habe die Ansteuerung der Led's jetzt mal so geändert, dass erst das alte Signalbild dunkelgetastet, und erst dann das neue aufgeblendet wird:

Benutzeravatar

Threadersteller
MicroBahner
Metropolitan (MET)
Beiträge: 2525
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 70

Arduinobasierter DIY Zubehördecoder (DCC) mit Lichtsignalansteuerung - 1. Version

#30

Beitrag von MicroBahner »

Hallo,
Ich habe den Zubehördecoder noch etwas erweitert: Man kann jetzt per Funktion bis zu 3 Ausgangspins zuordnen. D.h. bei einem Signal, dass 2 Adressen belegt sind das 6 Ausgänge. Das sollte reichen um auch noch ein Fahrstromrelais anzusteuern. Da für jeden Ausgang einzeln konfiguriert werden kann, ob er als Softled arbeitet oder 'hart' umschaltet ist auch die Relaisansteuerung kein Problem. Am Anfang der .h-Datei ist die Bedeutung der CV's für die Signalfunktion beschrieben:

Code: Alles auswählen

 *  FSIGNAL2 / FSIGNAL3  Signaldecoder mit 2/3 Weichenadressen 
 *          bei den Folgeadressen ist als Typ FSIGNAL0 einzutragen
 *  CV50    Signalmodus / reserviert
 *  CV51    Bitmuster der Ausgänge für Zustand 000
 *  CV52    Bitmuster der Ausgägne für Zustand 001
 *  CV53    Überblendzeit in 10ms-Schritten
 *  CV55    Bitmuster hard/soft gibt an, welche Ausgänge 'hart' umschalten (Bit=1)
 *          und Welche Ausgänge weich überblenden (Bit=0)
 *  CV56    Bitmuster der Ausgänge für Zustand 010
 *  CV57    Bitmuster der Ausgänge für Zustand 011
 *  CV58    reserved
 *  die folgenden CV's sind nur relevant bei FSIGNAL3 (3 Adressen, 8 Zustände 6 Ausgänge)
 *  CV60     Bitmuster der Ausgänge für Zustand 100
 *  CV61     Bitmuster der Ausgänge für Zustand 101
 *  CV62     Bitmuster der Ausgänge für Zustand 110
 *  CV63     Bitmuster der Ausgänge für Zustand 111

Wer's schon mal ausprobieren will, die aktuelle Version gibt es hier. Dabei wird aber auch die aktuelle Beta-Version der MobaTools benötigt ( wegen der Softleds an allen IO's ). Wenn was noch nicht geht, dürft ihr's gerne hier melden :wink: .

P.S. Die 3 IO's pro Funktion würden jetzt auch erlauben, bei Weichen 2 Relais für die Polarisation einzusetzen: Je nach Zustand ist das eine oder andere aktiv, während des Umlaufs sind beide abgefallen. Das habe ich an anderer Stelle schonmal gelesen, dass das gewünscht wird, wenn auch die Zungen mit polarisiert werden. Das müsste ich aber noch einbauen - derzeit geht das noch nicht.


KlausMerkert
RegionalExpress (RE)
Beiträge: 75
Registriert: Sa 1. Aug 2015, 18:38
Nenngröße: H0
Stromart: digital
Steuerung: bidib, Loconet, rocrail
Gleise: Zweileiter H0
Wohnort: Kaiserslautern
Alter: 67
Kontaktdaten:

Re: Arduinobasierter DIY Zubehördecoder (DCC) mit Lichtsignalansteuerung

#31

Beitrag von KlausMerkert »

Hallo Franz-Peter bzw. sonstige Arduino-Kundige,

ich habe jetzt einen Arduino-Nano samt Peripherie für den Zubehördecoder auf einem Breadboard installiert. Ich scheitere beim Kompilieren mit folgender Fehlermeldung:
DCC_Zubehoerdecoder.ino: In function 'void setup()':
DCC_Zubehoerdecoder:434: error: 'IniEncoder' was not declared in this scope
DCC_Zubehoerdecoder:438: error: 'setWeichenAddr' was not declared in this scope
DCC_Zubehoerdecoder:440: error: 'DBprintCV' was not declared in this scope
DCC_Zubehoerdecoder.ino: In function 'void loop()':
DCC_Zubehoerdecoder:555: error: 'getEncoder' was not declared in this scope
DCC_Zubehoerdecoder.ino: In function 'void notifyDccAccState(uint16_t, uint16_t, uint8_t, uint8_t)':
DCC_Zubehoerdecoder:763: error: 'ChkAdjEncode' was not declared in this scope
DCC_Zubehoerdecoder.ino: In function 'void notifyCVChange(uint16_t, uint8_t)':
DCC_Zubehoerdecoder:814: error: 'setWeichenAddr' was not declared in this scope
DCC_Zubehoerdecoder:820: error: 'softReset' was not declared in this scope
DCC_Zubehoerdecoder.ino: In function 'void notifyCVResetFactoryDefault()':
DCC_Zubehoerdecoder:828: error: 'softReset' was not declared in this scope
'IniEncoder' was not declared in this scope
Ich vermute, dass ich nicht die richtigen Libraries habe. Was ist zu tun?

Weitere Frage: Wie erstellt ihr eure Hardware? Gibt es 'Referenz-Installationen', Platinen?

Viele Grüße

Klaus

Benutzeravatar

Threadersteller
MicroBahner
Metropolitan (MET)
Beiträge: 2525
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 70

Re: Arduinobasierter DIY Zubehördecoder (DCC) mit Lichtsignalansteuerung

#32

Beitrag von MicroBahner »

Hallo Klaus,
das Problem hatte ich bei einem anderen Stummikollegen auch schonmal. Naja, letztendlich liegt es wohl auch an meiner Nachlässigkeit, da ich den 'Service' der Arduino IDE bisher genutzt habe, und nicht strikt nach C++ Konventionen vorgegangen bin. Es scheint so, als ob die neueste IDE diesen 'Service' nicht mehr bietet - was ich mir aber auch nicht vorstellen kann, da dann viele Sketches inkompatibel würden. Oder es ist irgendwo eine Einstellung, die ich aber nicht kenne.
In C/C++ muss jede Funktion vor ihrem Aufruf deklariert werden. Diese Function-Prototypes erzeugt die Arduino IDE eigentlich automatisch selbst - was sie bei Dir aber offensichtlich nicht tut. Wann das funktioniert, und wann nicht habe ich noch nicht herausbekommen.
Ich denke, ich werde mich zukünftig nicht mehr darauf verlassen, und die Prototypes selbst erstellen. Oder die Funktionen vor ihrem ersten Aufruf definieren, das geht ja auch. Dann stehen aber setup() und loop() ganz am Ende des Sketches, was ich gerade bei langen Sketches etwas unübersichtlich finde.
Aber nachdem das jetzt bei dir auch so auftritt muss ich wohl was tun. Welche Variante des Zubehördecoders hast Du denn?
KlausMerkert hat geschrieben:
Fr 3. Feb 2017, 16:52
Weitere Frage: Wie erstellt ihr eure Hardware? Gibt es 'Referenz-Installationen', Platinen?
Ich selbst nutze für den Aufbau meiner Schaltungen die Fädeltechnik. Da ich selten 2 gleiche Schaltungen habe, lohnt sich entflechen und Platine ätzen lassen für mich nicht. Die Software des Zubehördecoders ist ja auch sehr flexibel, weshalb man da kaum eine 'Standard-HW' für machen könnte. Für die DCC-Eingangsbeschaltung hat ein Stummikollege mal eine Platine entwickelt.

P.S. ich benutze die Arduino IDE V1.6.11. Welche hast Du denn im Einsatz? Ich hab mal gesucht, da scheint es in den Versionen 1.6.5 -1.6.8 Probleme gegeben zu haben.


KlausMerkert
RegionalExpress (RE)
Beiträge: 75
Registriert: Sa 1. Aug 2015, 18:38
Nenngröße: H0
Stromart: digital
Steuerung: bidib, Loconet, rocrail
Gleise: Zweileiter H0
Wohnort: Kaiserslautern
Alter: 67
Kontaktdaten:

Re: Arduinobasierter DIY Zubehördecoder (DCC) mit Lichtsignalansteuerung

#33

Beitrag von KlausMerkert »

Hallo Franz-Peter,

ich verwendete 1.6.5, jetzt mit 1.8.1 treten die genannten Probleme nicht mehr auf ;-). Vielen Dank für den Tipp.

Jetzt geht es ans Testen. Ich melde mich dann.

Viele Grüße

Klaus


KlausMerkert
RegionalExpress (RE)
Beiträge: 75
Registriert: Sa 1. Aug 2015, 18:38
Nenngröße: H0
Stromart: digital
Steuerung: bidib, Loconet, rocrail
Gleise: Zweileiter H0
Wohnort: Kaiserslautern
Alter: 67
Kontaktdaten:

Re: Arduinobasierter DIY Zubehördecoder (DCC) mit Lichtsignalansteuerung

#34

Beitrag von KlausMerkert »

Hallo Franz-Peter,

CV1 konnte ich auslesen und verändern. Es geht voran.

Viele Grüße

Klaus

Benutzeravatar

Threadersteller
MicroBahner
Metropolitan (MET)
Beiträge: 2525
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 70

Arduinobasierter DIY Zubehördecoder (DCC) V3.1 released

#35

Beitrag von MicroBahner »

Hallo,
den Zubehördecoder gibt's jetzt in der V3.1 ( s. auch Startbeitrag )

wesentliche neue Features:
  • pro Funktion können bis zu 3 Ausgänge konfiguriert werden (Kann bei Lichtsignalen und Servos genutzt werden).
  • Lichtsignalfunktionen: 2 oder 3 Zubehöradressen konnen zu einem Lichtsignal zusammengefasst werden. Die Zuordnung der Ausgängszustände zu den Signalzuständen ist frei konfigurierbar. Auch ist konfigurierbar, welche Ausgänge 'weich' (z.B. für Leds) und welche 'hart' (z.B. zur Relaisansteuerung) umschalten
  • Blinkende Ausgänge können auch als Wechselblinker mit soft on/off konfiguriert werden.
  • einem Servo können 2 Relais zugeordnet werden. Die Relais schalten im Gegentakt. Während der Servobewegung sind beide Relais ausgeschaltet.
Details im neuen Manual


KlausMerkert
RegionalExpress (RE)
Beiträge: 75
Registriert: Sa 1. Aug 2015, 18:38
Nenngröße: H0
Stromart: digital
Steuerung: bidib, Loconet, rocrail
Gleise: Zweileiter H0
Wohnort: Kaiserslautern
Alter: 67
Kontaktdaten:

Re: Arduinobasierter DIY Zubehördecoder (DCC) V3.1 mit Lichtsignalansteuerung

#36

Beitrag von KlausMerkert »

Hallo Franz-Peter,

ich habe mir nun auf Lochraster gefädelt einen Referenz-Decoder gebaut. Jetzt bin ich dabei, Hardware und Software zu testen. Für unsere Zwecke ist zunächst die Servo-Ansteuerung interessant. Also habe ich damit angefangen. Benutzt wird der 4.Eintrag, FSERVO an A0. 5V für Servo kommen vorläufig vom Arduino Nano. Lesen und Schreiben der CVs über den Programmiergleismodus einer Intellibox 1 geht. Ich kann das Servo über DCC ansteuern. Eine Veränderung der CVs 66 und 67 bewirkt eine Veränderung der Stellungen A und B.
Leider bewegt sich das Servo bei der Veränderung von CV 66 und CV 67 nicht. Sollte es das nicht tun? Ebenso hätte ich gedacht, dass A4 über den Taster auf Null gezogen die Servos in die Mittelstellung bringt. Da passiert aber nichts. Habe ich da etwas falsch verstanden?
Die Intellibox ist von einem Club-Kameraden ausgeliehen. Ich selbst hätte noch eine Lenz-Zentrale zum Testen.

Viele Grüße

Klaus

Benutzeravatar

Threadersteller
MicroBahner
Metropolitan (MET)
Beiträge: 2525
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 70

Re: Arduinobasierter DIY Zubehördecoder (DCC) V3.1 mit Lichtsignalansteuerung

#37

Beitrag von MicroBahner »

Hallo Klaus,
KlausMerkert hat geschrieben:
So 5. Feb 2017, 11:40
Leider bewegt sich das Servo bei der Veränderung von CV 66 und CV 67 nicht. Sollte es das nicht tun?
Doch, das sollte es schon tun. Allerdings nur, wenn es sich auch in der Position befindet, die dem veränderten CV entspricht. D.h. in Stellung A passt es sich nur an Veränderung des CV66 an, ins Stellung B an die Veränderungen des CV67. Den jeweils andern CV kannst Du natürlich auch verändern, allerdings macht sich das nicht unmittelbar am Servo bemerkbar. Bei digitalen Servos kann es auch sein, dass die Extremwerte ( 0 bzw 180 ) vom Servo gar nicht angefahren werden, da sie als defaultwert <1ms bzw >2ms sind. Solche Impulslängen werden von vielen digitalen Servos ignoriert. Da Du beim Verfahren des Servos aber die Änderungen merkst, kann es das bei dir nicht sein.
Die Zuordnung der Impulslängen zum Winkel 0 bzw. 180 lassen sich aber auch einstellen ( als zusätzliche Parameter beim attach ).
KlausMerkert hat geschrieben:
So 5. Feb 2017, 11:40
Ebenso hätte ich gedacht, dass A4 über den Taster auf Null gezogen die Servos in die Mittelstellung bringt. Da passiert aber nichts. Habe ich da etwas falsch verstanden?
Hast Du den Drehencoder zur Justierung aktiviert? Das mit der Mittelstellung über A4 funktioniert nur im Zusammenhang mit dem Drehencoder.


KlausMerkert
RegionalExpress (RE)
Beiträge: 75
Registriert: Sa 1. Aug 2015, 18:38
Nenngröße: H0
Stromart: digital
Steuerung: bidib, Loconet, rocrail
Gleise: Zweileiter H0
Wohnort: Kaiserslautern
Alter: 67
Kontaktdaten:

Re: Arduinobasierter DIY Zubehördecoder (DCC) V3.1 mit Lichtsignalansteuerung

#38

Beitrag von KlausMerkert »

Hallo Franz-Peter,

ok, wenn die Stellung angewählt ist, läuft das Servo nach ;-) Wäre es nicht praktischer, wenn die Stellung bei Programmierung der entsprechenden CV angepasst würde?
Mit dem Taster war ich leider nicht erfolgreich. Ich muss dazu sagen, dass ich keinen Drehencoder habe und nur den Widerstand für A4 und den Taster montiert habe. Funktioniert der Taster nur in einem bestimmten über A5 eingestellten Modus?

Viele Grüße

Klaus

Benutzeravatar

Threadersteller
MicroBahner
Metropolitan (MET)
Beiträge: 2525
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 70

Re: Arduinobasierter DIY Zubehördecoder (DCC) V3.1 mit Lichtsignalansteuerung

#39

Beitrag von MicroBahner »

Hallo Klaus,
KlausMerkert hat geschrieben:
So 5. Feb 2017, 12:43
Wäre es nicht praktischer, wenn die Stellung bei Programmierung der entsprechenden CV angepasst würde?
Mmh - auf die Idee bin ich noch gar nicht gekommen :roll: . Das Servo ist dann zwar nicht mehr in der Stellung, die die Zentrale annimmt, aber für den Einstellvorgang dürfte das nicht von Belang sein. Eins könnte dabei aber zur Verwirrung führen: Wenn sich diese 'neue' CV nicht wirklich ändert, sondern der schon gespeichert Wert erneut gesetzt wird, wird sich das Servo nicht dorthin bewegen. Das liegt daran, dass die gesamte CV-Programmierung in der DCC-Lib stattfindet, und die prüft auch, ob sich der Wert tatsächlich ändert. Wenn nicht, bekomme ich im Sketch von dem ganzen Vorgang gar nichts mit.
KlausMerkert hat geschrieben:
So 5. Feb 2017, 12:43
Funktioniert der Taster nur in einem bestimmten über A5 eingestellten Modus?
Nein. Damit der Taster funktioniert, muss vor allem die Drehencodereinstellung aktiviert sein, indem die Kommentarzeichen vor dem #define entfernt werden. Sonst werden die ganzen dazugehörigen Softwarefunktionen gar nicht erzeugt:

Code: Alles auswählen

//#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     =   A3;     // Eingang Drehencoder zur Justierung.
const byte encode2P     =   A2;
Standardmäßig ist das ausgeschaltet, damit die Ports für andere Aufgaben frei bleiben. Ist die Encoderjustierung aktiviert, sind die Ports fest für den Drehencoder reserviert.
Du kannst die Mittelstellung aber auch erreichen, indem Du den CV mal kurz auf '90' setzt - der Taster macht auch nichts anderes, als das Servo in diese Stellung zu fahren.


KlausMerkert
RegionalExpress (RE)
Beiträge: 75
Registriert: Sa 1. Aug 2015, 18:38
Nenngröße: H0
Stromart: digital
Steuerung: bidib, Loconet, rocrail
Gleise: Zweileiter H0
Wohnort: Kaiserslautern
Alter: 67
Kontaktdaten:

Re: Arduinobasierter DIY Zubehördecoder (DCC) V3.1 mit Lichtsignalansteuerung

#40

Beitrag von KlausMerkert »

Hallo Franz-Peter,

Taster funktioniert jetzt. ;-)

Bei uns im EMK in Kaiserslautern verwenden wir die locoIO-Bausteine gca50. Um im System zu bleiben, möchten wir die Servodecoder über diese Bausteine betreiben. Dh. wir hätten gerne jedem Servo einen Arduino-Eingang E zugeordnet, so dass E=0 Stellung A und E=1 Stellung B erzeugt. Zur Einstellung der CVs könnten wir den Decoder mit dem Gleissignal verbinden. Wie müssten wir das Programm modifizieren, um das zu erreichen?

Viele Grüße

Klaus

Benutzeravatar

Threadersteller
MicroBahner
Metropolitan (MET)
Beiträge: 2525
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 70

Re: Arduinobasierter DIY Zubehördecoder (DCC) V3.1 mit Lichtsignalansteuerung

#41

Beitrag von MicroBahner »

Hallo Klaus,
der Sollwert der einzelnen Funktionen steht im Array weicheSoll[ix] ( 0/1 ). Die DCC-Empfangsroutine macht auch nichts anderes, als diesen Wert entsprechend dem empfangenen Telegramm zu ändern. Ihr müsstet also im loop() die entsprechenden Eingänge abfragen, und bei einer Änderung dann den zugehörigen Wert in weicheSoll[ix] entsprechend ändern.

Soll das Ganze aber noch auf die DCC-Kommandos (oder z.B. auf das Programmieren des 'anderen' CV-Wertes beim Einstellen :wink: ) reagieren, müsst ihr wirklich die Flanke auswerten und den Wert nicht fest an den Eingangspegel binden. Sonst kann ihn ja nichts anderes mehr ändern.

Wenn ihr aber nur so einen rel. einfachen reinen Servodecoder benötigt, wäre vielleicht dieser Stand für Euch besser. Da ist der Sketch auch noch kleiner und übersichtlicher :redzwinker: . Die Justierung rein über CV-Programmierung funktioniert da auch schon.


KlausMerkert
RegionalExpress (RE)
Beiträge: 75
Registriert: Sa 1. Aug 2015, 18:38
Nenngröße: H0
Stromart: digital
Steuerung: bidib, Loconet, rocrail
Gleise: Zweileiter H0
Wohnort: Kaiserslautern
Alter: 67
Kontaktdaten:

Re: Arduinobasierter DIY Zubehördecoder (DCC) V3.1 mit Lichtsignalansteuerung

#42

Beitrag von KlausMerkert »

Hallo Franz-Peter,

vielen Dank für die Tipps.
Ich versuche, das zu realisieren und melde mich dann nochmal.

Viele Grüße

Klaus


KlausMerkert
RegionalExpress (RE)
Beiträge: 75
Registriert: Sa 1. Aug 2015, 18:38
Nenngröße: H0
Stromart: digital
Steuerung: bidib, Loconet, rocrail
Gleise: Zweileiter H0
Wohnort: Kaiserslautern
Alter: 67
Kontaktdaten:

Re: Arduinobasierter DIY Zubehördecoder (DCC) V3.1 mit Lichtsignalansteuerung

#43

Beitrag von KlausMerkert »

Hallo Franz-Peter,

mit folgenden Zusätzen:

Code: Alles auswählen

const byte eingang1     = 5;
const byte eingang2     = 6;
byte aktuell1           = 0;
byte aktuell2           = 0;
byte alt1               = 0;
byte alt2               = 0;
in setup:

Code: Alles auswählen

pinMode(eingang1,INPUT_PULLUP);
pinMode(eingang2,INPUT_PULLUP);
in loop:

Code: Alles auswählen

alt1 = aktuell1;
aktuell1 = digitalRead(eingang1);
if ((alt1 == 1) && (aktuell1 == 0)) {
    weicheSoll[0] = 1;
 };
if ((alt1 == 0) && (aktuell1 == 1)) {
   weicheSoll[0] = 0;
};
scheint die gewünschte Funktionalität für Servo1 zu realisieren. Gibt es noch etwas beim Entprellen zu berücksichtigen?
Was meint der Fachmann?

Viele Grüße

Klaus
Zuletzt geändert von KlausMerkert am Mo 6. Feb 2017, 20:07, insgesamt 1-mal geändert.

Benutzeravatar

Threadersteller
MicroBahner
Metropolitan (MET)
Beiträge: 2525
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 70

Re: Arduinobasierter DIY Zubehördecoder (DCC) V3.1 mit Lichtsignalansteuerung

#44

Beitrag von MicroBahner »

Hallo Klaus,
ist doch schon erstmal super, wenn's funktioniert :D :D .
Wenn ihr euer Modul da anschließt sollte es doch gar keine Probleme mit Prellen geben? Oder sind das Relais-Kontakte die an den Eingängen angeschlossen sind?
Bei mechanischen Schaltern sollte man natürlich schon entprellen. Das bedeutet aber nichts anderes, als das man die ganz Abfrage nicht zu oft macht und mit einem Timer dafür sorgt, dass die Abfrage nicht öfter als z.B. alle 20 ms ausgeführt wird.

P.S. Die if-Abrage in deinem Programmschnipsel lässt sich noch etwas vereinfachen:

Code: Alles auswählen

alt1 = aktuell1;
aktuell1 = digitalRead(eingang1);
if ((alt1 != aktuell1) {
    weicheSoll[0] = alt1;
 };
Ich hab's zwar jetzt nicht ausprobieren können, sollte aber so funktionieren. Wenn ihr mehrere Eingänge habt, bietet es sich auch an, das als Array anzulegen, und in einer Schleife abzuarbeiten.


KlausMerkert
RegionalExpress (RE)
Beiträge: 75
Registriert: Sa 1. Aug 2015, 18:38
Nenngröße: H0
Stromart: digital
Steuerung: bidib, Loconet, rocrail
Gleise: Zweileiter H0
Wohnort: Kaiserslautern
Alter: 67
Kontaktdaten:

Re: Arduinobasierter DIY Zubehördecoder (DCC) V3.1 mit Lichtsignalansteuerung

#45

Beitrag von KlausMerkert »

Hallo Franz-Peter,

vielen Dank für die guten Tipps. Ich werde sie einbauen.

Viele Grüße

Klaus


KlausMerkert
RegionalExpress (RE)
Beiträge: 75
Registriert: Sa 1. Aug 2015, 18:38
Nenngröße: H0
Stromart: digital
Steuerung: bidib, Loconet, rocrail
Gleise: Zweileiter H0
Wohnort: Kaiserslautern
Alter: 67
Kontaktdaten:

Re: Arduinobasierter DIY Zubehördecoder (DCC) V3.1 mit Lichtsignalansteuerung

#46

Beitrag von KlausMerkert »

Hallo Franz-Peter, hallo miteinander,

die Anregungen habe ich eingebaut, scheint zu funktionieren. ;-)
Mir ist aufgefallen, dass der Mittelstellungstaster nur auf das Servo wirkt, das am letzten angesteuert wurde. Die CVs stelle ich zur Zeit im Programmiermodus ein. Zur Ansteuerung muss ich verhältnismäßig aufwändig auf der Intellibox herumtippen um anschließend wieder aufwändig in den Programmiermodus zu kommen. Daher mein Wunsch, ein Ansteuern beim Einstellen der CVs unnötig zu machen. Oder wie macht ihr das?

Jetzt würde ich doch gerne eine gedruckte Schaltung entwerfen. Zunächst mal einseitig, damit der Selberätzer keine Probleme hat. Ich würde dafür gerne KiCad benutzen, weil es leistungsfähig genug und frei ist. Hätte jemand Lust, mitzumachen oder etwas beizusteuern?

Viele Grüße

Klaus

Benutzeravatar

Threadersteller
MicroBahner
Metropolitan (MET)
Beiträge: 2525
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 70

Re: Arduinobasierter DIY Zubehördecoder (DCC) V3.1 mit Lichtsignalansteuerung

#47

Beitrag von MicroBahner »

Hallo Klaus,
KlausMerkert hat geschrieben:
Di 7. Feb 2017, 12:12
Mir ist aufgefallen, dass der Mittelstellungstaster nur auf das Servo wirkt, das am letzten angesteuert wurde.
Das liegt daran, dass der Mittelstellungstaster zur Drehencoderjustierung gehört. Mit dem Drehencoder wird ja auch immer nur die zuletzt angesteuerte Servoposition beeinflusst. Wie sonst soll die Software wissen, was Du gerade verstellen willst?
KlausMerkert hat geschrieben:
Di 7. Feb 2017, 12:12
Daher mein Wunsch, ein Ansteuern beim Einstellen der CVs unnötig zu machen.
In der aktuellen Entwicklungsversion auf GitHub habe ich das mal so geändert. Wenn Du eine CV-Variable änderst, die eine Servo Endlage enthält, bewegt sich das Servo jetzt immer dorthin. Befindet es sich gerade in der anderen Endlage, wird entsprechend umgestellt. Die CV-Variable muss aber wirklich verändert werden, eine Neuprogrammierung mit dem alten Wert bewirkt nichts.


KlausMerkert
RegionalExpress (RE)
Beiträge: 75
Registriert: Sa 1. Aug 2015, 18:38
Nenngröße: H0
Stromart: digital
Steuerung: bidib, Loconet, rocrail
Gleise: Zweileiter H0
Wohnort: Kaiserslautern
Alter: 67
Kontaktdaten:

Re: Arduinobasierter DIY Zubehördecoder (DCC) V3.1 mit Lichtsignalansteuerung

#48

Beitrag von KlausMerkert »

Hallo Franz-Peter,

durch Zufall habe ich bemerkt, dass der Mikrokontroller bei Verbindung der Eingänge 5 und 6 mit Masse sehr heiß wird. Eine Strommessung ergab ohne angesteckte Servos ca. 30 mA, je Eingang, der mit Masse verbunden ist, kommt etwa 85 mA hinzu. Wieso zieht der Prozessor soviel Strom?

Viele Grüße

Klaus
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar

Threadersteller
MicroBahner
Metropolitan (MET)
Beiträge: 2525
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 70

Re: Arduinobasierter DIY Zubehördecoder (DCC) V3.1 mit Lichtsignalansteuerung

#49

Beitrag von MicroBahner »

Hallo Klaus,
wenn Du Zusätze ins Programm einbaust, und dabei auch Pins benutzt, musst Du darauf achten, dass diese Pins nicht schon von den konfigurierten Funktionen belegt sind. Pins 5+6 sind Ausgänge für die letzte Funktion FSTATIC:

Code: Alles auswählen

const byte iniTyp[]     =   {    FSERVO,   FSERVO, FSIGNAL0,   FCOIL,  FSIGNAL2,          FSTATIC };
const byte out1Pins[]   =   {       A0,        A1,       12,       A2,        9,                5 };  // output-pins der Funktionen
const byte out2Pins[]   =   {        7,         3,       NC,       A3,       10,                6 };
const byte out3Pins[]   =   {        8,        NC,       NC,       NC,       11,               NC };
Und Ausgänge sollte man besser nicht kurzschließen :wink: .
Auch die Signalfunktionen sind etwas durcheinander. FSIGNAL0 muss immer hinter FSIGNAL2 kommen. In deiner Konfiguration kommen sich FSIGNAL2 und FSTATIC in die Quere. Vielleicht ist es am besten, wenn Du die nicht verwendeten Funktionen ganz entfernst. Es müssen nicht immer alle definiert sein. Du kannst auch erstmal einfach nur 2 Servos einrichten:

Code: Alles auswählen

const byte iniTyp[]     =   {    FSERVO,   FSERVO };
const byte out1Pins[]   =   {       A0,        A1 };  // output-pins der Funktionen
const byte out2Pins[]   =   {        7,         3 };
const byte out3Pins[]   =   {        8,        NC };
Dann bekommst Du auch Pins für eigene Erweiterungen frei.


KlausMerkert
RegionalExpress (RE)
Beiträge: 75
Registriert: Sa 1. Aug 2015, 18:38
Nenngröße: H0
Stromart: digital
Steuerung: bidib, Loconet, rocrail
Gleise: Zweileiter H0
Wohnort: Kaiserslautern
Alter: 67
Kontaktdaten:

Re: Arduinobasierter DIY Zubehördecoder (DCC) V3.1 mit Lichtsignalansteuerung

#50

Beitrag von KlausMerkert »

Hallo Franz-Peter,

ja, das ist mir schon ganz schön peinlich, einen Eingang auf einen Ausgang gelegt zu haben. Das kommt davon, wenn man eine Software modifizieren möchte, die man nicht wirklich versteht. Trotzdem möchte ich am Objekt weiter lernen.

Ich habe nun folgende Veränderungen vorgenommen:

Code: Alles auswählen

const byte iniTyp[]    =   {    FSERVO,   FSERVO };
const byte out1Pins[]   =   {       A0,        A1  };  // output-pins der Funktionen
const byte out2Pins[]   =   {       NC,        NC  };
const byte out3Pins[]   =   {       NC,        NC  };

Code: Alles auswählen

const byte iniFmode[]     = { 1,           1    };
const byte iniPar1[]      = { 0,           0    };
const byte iniPar2[]      = { 180,       180 };
const byte iniPar3[]      = { 8,           8    };
Jetzt zeigt sich folgendes, für mich nicht erklärliches Verhalten:

zunächst keine Servos angesteckt, Stromaufnahme ca. 21 mA, Eingänge nicht verbunden,
Servo 1 angesteckt, Zucken mit Stromspitzen, dann 27 mA,
Servo 1 über DCC geschaltet, Servo beginnt normal umzulaufen, nach kurzer Zeit steigt der Strom plötzlich auf ca. 0,8A,
Servo schnell entfernt, Strom wieder 21 mA,
das Verhalten bleibt auch nach Tausch der Servos und der Servoports gleich

Viele Grüße und vielen Dank für deine Geduld ;-)

Klaus
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Antworten

Zurück zu „Digital“