DCC-Multiplexdekoder für Signale, Ampeln, Blink-/Lauflichter, ... zum Eigenbau

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

Threadersteller
schumo99
RegionalExpress (RE)
Beiträge: 55
Registriert: Sa 5. Nov 2016, 17:14
Deutschland

DCC-Multiplexdekoder für Signale, Ampeln, Blink-/Lauflichter, ... zum Eigenbau

#1

Beitrag von schumo99 » So 10. Mär 2019, 12:22

Hallo,
ich habe einen kleinen Dekoder zum Eigenbau auf Basis einen Arduino nano entworfen. Der Dekoder steuert LEDs im Charlie-/Multiplexing an. (Das sind z.B. Viessmann Signale. Man kann sich aber auch selbst die LEDs entsprechend verdrahten. Das hat den Vorteil, dass man viel weniger Kabel benötigt. So kann man z.B. mit 4 Kabeln 12 LEDs vollkommen unabhängig voneinander ansteuern.)

Fest hinterlegt ist derzeit eine Logik für:
  • Signale
  • Ampeln
  • Lauflichter
  • Zufallslicht
  • Blinklichter
Insgesamt können bis zu 48 LEDs aufgeteilt auf 4 Bereiche angesteuert werden; also zum Beispiel 8 Signale (4 Hauptsignale und 4 Vorsignale) oder 4 Ampelkreuzungen (jeweils mit Haupt/Nebenstrasse und Fussgängerampel) oder 4 Lauflichter oder …

Man kann alles frei selbst konfigurieren: z.B. Signalbilder, Helligkeit jeder einzelnen LED, Dunkelzeit zwischen den Signalbildern, Aufblendgeschwindigkeit, …
Im Ampelmodus kann der Dekoder entweder selbstständig zwischen Rot-/Grünphasen wechseln (natürlich mit den entsprechenden Gelbphasen dazwischen), oder auf Eure Eingabe zum Umschalten warten. Natürlich kann man hier auch sämtliche Schaltzeiten selbst bestimmen.
Für's Blinken von LEDs kann die Blinkfrequenz eingestellt werden und ob die Lichter gleichzeitig oder gegengleich Blinken sollen. Da ist also (fast) alles möglich. Und man könnte auch noch weitere Funktionen ergänzen. Wenn was fehlt, meldet Euch und ich prüfe ob man das noch aufnehmen kann.

Bild

Zum Nachbau ist das Ganze relativ einfach, da keine SMD Bauteile benötigt werden, sondern nur wenige große Bauteile einzulöten sind. Ich habe die Software sowie das Platinenlayout hier zum download bereitgestellt: https://github.com/schumo99/ArduCAN-Mul ... CC-Version
Damit man sich alles besser vorstellen kann gibt's auch noch ein Video mit Erklärungen des Dekoders und einigen Beispielen: https://youtu.be/heiLkZWKwZ4

Beim Nachbau ist nur zu Beachten, das man einen Arduino mit ATMega328PB-Prozessor braucht. Die sind manchmal schwer zu bekommen.
Wer nicht alles selbst machen will: Platinen könnt ihr günstig von mir bekommen. Programmierte Prozessoren mit dem richtigen Chip (Arduino-kompatibel) ebenfalls.

Viel Spaß beim Nachbau. Grüße

Matthias

PS: In den nächsten Tagen erstelle ich noch ein Video, welches mehr Beispiele des Funktionsumfangs zeigt und wie man den Dekoder entsprechend konfiguriert.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Digitaltechnik zum Nachbau: S88 IR-Gleisbesetztmelder, S88-Repeater


Threadersteller
schumo99
RegionalExpress (RE)
Beiträge: 55
Registriert: Sa 5. Nov 2016, 17:14
Deutschland

Re: DCC-Multiplexdekoder für Signale, Ampeln, Blink-/Lauflichter, ... zum Eigenbau

#2

Beitrag von schumo99 » Fr 15. Mär 2019, 13:42

Hallo,

hier noch die verprochenen Links zur Konfiguration bzw. Demonstration:

Signal-/Blinklicht: https://youtu.be/MxXWvDyjA_w
Lauflicht: https://youtu.be/cI6yMSMvXmI
Allgemeine Konfiguration https://youtu.be/Xrjru3XkRGs

Grüße

Matthias
Digitaltechnik zum Nachbau: S88 IR-Gleisbesetztmelder, S88-Repeater


Manfredissimo
Beiträge: 3
Registriert: Sa 29. Jun 2013, 08:36
Nenngröße: H0
Stromart: AC
Steuerung: Uhlenbrock
Gleise: M
Wohnort: Wendelstein
Alter: 71

Re: DCC-Multiplexdekoder für Signale, Ampeln, Blink-/Lauflichter, ... zum Eigenbau

#3

Beitrag von Manfredissimo » Sa 16. Mär 2019, 05:14

Hallo Matthias, tolles Projekt
gerne würde ich deinen ArduCan-Signal10.hex auf meinen Arduino laden
leider gelingt es mir aber nicht avrdude unter windows 10 auf meinen Rechner zu installieren
einen Arduino scetch welchen ich über die usb Schnittstelle einfach hochladen kann hast du ja nicht veröffentlicht
würdest du mir den Arduinocode zur Verfügung stellen
was würde eine fertige Platine kosten
wie lädst du deine hex datei auf den Arduino
gerne sende ich dir auch meine e-mail adresse
:D gfm:
viele Grüße aus Wendelstein
Manfred


Threadersteller
schumo99
RegionalExpress (RE)
Beiträge: 55
Registriert: Sa 5. Nov 2016, 17:14
Deutschland

Re: DCC-Multiplexdekoder für Signale, Ampeln, Blink-/Lauflichter, ... zum Eigenbau

#4

Beitrag von schumo99 » Sa 16. Mär 2019, 09:54

Hallo Manfred,
für avrdude must du nur das zip-file aus der Anleitung runterladen und entpacken. Ins gleiche Verzeichnis kommt dann das HEX-file. Dann den Befehl eingeben, der in der Anleitung steht und die Software wird über die USB-Schnittstelle des Arduinos hochgeladen. Das ist dann das gleiche, wie es die Ardunio-IDE auch macht; nur händisch. Welche Fehlermeldung kommt denn von der Eingabeaufforderung von Windows? Alternativ kannst du auch irgendeinen anderen AVR-Programmer verwenden.
Da du ja scheinbar die Arduino IDE installiert hast, geht's auch anders, da diese den avrdude bereits mitbringt. Du kannst deine Festplatte einfach danach durchsuchen.

Ich habe keinen Arduino-Sketch veröffentlicht, weil es keinen gibt. Die Software für den Prozessor kann man auch anders schreiben (Atmel Studio) und dann kompilieren. Das Ergebnis ist dann das HEX-file, welches auf den Prozessor muss. Ich habe einen AVR-Programmer von Diamex, aber wenn man keinen hat, ist halt avrdude für den Arduino eine einfache Lösung.

Achtung: Es funktionieren nur Arduinos mit dem Chip ATMega328PB! Bei anderen bekommst du nach dem Programmstart eine Fehlermeldung im Seriellen Moinitor angezeigt; oder wenn er ganz anders ist, geht halt nichts (aber auch nichts kaputt).

Platinen gebe ich für 3€; einen fertigen "Arduino"-kompatiblen Baustein für 5€ ab, zzgl. Porto.

Grüße
Matthias
Digitaltechnik zum Nachbau: S88 IR-Gleisbesetztmelder, S88-Repeater


Manfredissimo
Beiträge: 3
Registriert: Sa 29. Jun 2013, 08:36
Nenngröße: H0
Stromart: AC
Steuerung: Uhlenbrock
Gleise: M
Wohnort: Wendelstein
Alter: 71

Re: DCC-Multiplexdekoder für Signale, Ampeln, Blink-/Lauflichter, ... zum Eigenbau

#5

Beitrag von Manfredissimo » Sa 16. Mär 2019, 10:43

Hallo Matthias,
danke für die schnelle Antwort, du schreibst mir ich soll auf meiner Festplatte nach avrdude suchen
da finde ich im Verzeichnis in der Arduino IDE aber nichts. Wonach genau muss ich suchen

Das zip file habe ich ja bereits heruntergeladen und auch entpackt und auch dein html File in den Ordner gelegt
beim kopieren deines HTML file werden dann gleich mehrere Dateien in den ArduCan Ordner geschrieben
Wenn ich dann aber auf die exe Datei geht nur kurz ein Fenster auf und das wars auch schon oder muss erst ein ATMega328PB angeschlossen sein damit es funktioniert
gerne würde ich von dir mindestens eine Platine und einen beschriebenen Chip ATMega328PB erwerben.
Bitte schreibe mir an meine hinterlegte E Mail wie wir das abwickeln.
Wäre es auch möglich, dass ich auch gleich mehrere Platinen erwerben könnte
:D Gruß Manfred


Threadersteller
schumo99
RegionalExpress (RE)
Beiträge: 55
Registriert: Sa 5. Nov 2016, 17:14
Deutschland

Re: DCC-Multiplexdekoder für Signale, Ampeln, Blink-/Lauflichter, ... zum Eigenbau

#6

Beitrag von schumo99 » Sa 16. Mär 2019, 11:58

Hallo,
die Arduino-IDE bringt avrdude auch mit. Die wird aber standardmäßig nicht ins Arduino-Verzeichnis kopiert, sndern je nach Betriebssystem woanders hin. Deshalb müsstest du die ganze Festplatte durchsuchen lassen.
Wenn du avrdude runtergeladen hast und das zip-file entpackt, dann ist das schon mal richtig. In den orden, in den du das avrdude entpackt hast kopierst du das hex-file mit rein. das hat die Dateiendung .hex (nicht .html). Wenn du html hast, dann war den download von github nicht richtig und du hast versehentlich die Homepageseite runtergeladen und nicht das hex-file...

Folgende Schritte sind nötig:
1. AVRDUDE runterladen und entpacken (hast du schon)
2. HEX-file runterladen und in das Verzeichnis - in dem schon avrdude ist - kopieren
3. Arduino mit dem PC verbinden. Es muss nun ein COM-Port zugewiesen werden. Diesen z.B. im Gerätemanager nachschlagen.
4. Eingabeaufforderung in Windows öffnen. Dafür z.B. bei "suchen" oder "ausführen" cmd eingeben. Es geht ein Fenster mit schwarzem Hintergrund auf mit blinkendem Cursor. Vor diesem steht irgendwas in der Art C:\Users\xyz>
5. Mit dem befehl cd c:\xyz in das avrdude-Verzeichnis wechseln. xyz steht dabei für den gesamten Pfad des avrdude-Verzeichnisses. Nun muss in der Eingabeaufforderung vor dem blinkenden Cursor das avrdude-Verzeichnis genannt sein.
6. Den Befehl

Code: Alles auswählen

avrdude -carduino -patmega328p -PCOMxx –b57600 -D -F -Uflash:w:arducan-signal10.hex:i
eingeben. Bei den Argumenten auf Gross- und Kleinschreibung achten. xx steht für die Nummer des zugewiesenen Com-Ports. Wenn dieser z.B. 4 ist lautet dieser Teil des Befehls -PCOM4. Nun kopiert avrdude das hex-file auf den Arduino. Am Ende wird angezeigt, ob das flashen des Arduinos funktioniert hat.

Fertig.

Grüße
Matthias
Digitaltechnik zum Nachbau: S88 IR-Gleisbesetztmelder, S88-Repeater

Benutzeravatar

Hardi
InterRegio (IR)
Beiträge: 173
Registriert: Mo 28. Dez 2015, 13:07
Nenngröße: H0
Stromart: digital
Steuerung: MS2 + IR, Eigenbau
Gleise: Märklin C-Gleis
Wohnort: Mainz
Alter: 55
Deutschland

Re: DCC-Multiplexdekoder für Signale, Ampeln, Blink-/Lauflichter, ... zum Eigenbau

#7

Beitrag von Hardi » Mi 20. Mär 2019, 19:28

Hallo Matthias,

vielen Dank! Du zeigst uns wieder mal ein sehr schönes, interessantes Projekt in einer extrem professionellen Umsetzung. Da müssen unendlich viele Stunden drinnen stecken.

Die Ansteuerung von LEDs per Charlieplexing ist eine ganz faszinierende Möglichkeit wie man mit wenigen Pins eine große Anzahl von LEDs ansteuern kann. Du zeigst uns auch noch, dass es möglich ist die Helligkeit der einzelnen LEDs unabhängig voneinander zu variieren. Das ist sicherlich nicht so einfach.
Ich will schon seit einiger Zeit eine ähnliche Ansteuerung für Multiplex Signale bauen darum interessiert mich Dein Projekt im Detail.

Vielleicht hast Du meine Bastelei mit LEDs schon im Forum gesehen: viewtopic.php?p=1911159#p1911159 im Post #14 zeige ich das S3PO Modul. Es soll u.a. auch Multiplex Signale ansteuern. Dazu ist auf der Platine ein Attiny85 vorgesehen. Allerdings habe ich noch nicht angefangen. Schaltplan, Bilder und Eagle Dateien gibt es hier: https://github.com/Hardi-St/MobaLedLib/ ... WS2811.zip. Damit will ich allerdings nur ein Signal ansteuern und nicht gleich 4.

Ich steuere meine Anlage per CAN Bus. Darum habe ich mich besonders gefreut, dass Du auch ein MCP2515 Modul auf der Platine vorgesehen hast (O.K. das Projekt heißt ja auch ArduCAN). Sehr schön sind auch die beiden Schraubenzieher Löcher auf der Platine für die CAN Schraubklemmen. Das zeigt deutlich, dass Du Dir sehr viele Gedanken bei der Entwicklung machst.

Warum benötigt das Programm den neuen „B“ Typ des Atmega328PB? Benötigt es den zusätzlichen Timer? Währe es nicht möglich das Programm so zu modifizieren, dass es auch auf dem „normalen“ Nano läuft? Franz-Peter zeigt mit seinen MobaTools, das der Empfang von DCC Nachrichten und die PWM Generierung per Interrupt für Servos mit einem Timer möglich ist.
Dass es diesen Chip gibt habe ich auch erst durch Deinen Post (https://www.stummiforum.de/viewtopic.ph ... 3#p1933693 ) erfahren. Danke. Hier ein Vergleich der beiden Prozessoren für die Mitleser des Threads: https://www.google.com/url?sa=t&rct=j&q ... 28tvTFxZBT

Welche Bibliothek verwendest Du denn zum einlesen der DCC Signale. Franz-Peter hat, wenn ich das richtig verstanden habe, dabei mit geholfen diese Bibliothek https://www.arduinolibraries.info/libraries/nmra-dcc so zu modifizieren, dass man den Timer für die Servos verwenden kann.

Es währe schön, wenn Du den Schaltplan und evtl. auch die Platine als CAD Datei (Eagle) veröffentlichen könntest. Mir sind einige Detail unklar:
  • Wie liest Du das DCC Signal ein? Ich habe nur einen Widerstand und eine Z-Diode gefunden. Geht das auch ohne Optokoppler?
  • Was sind das für Stecker zur Zentrale mit 13 Polen? Ein RJ45 hat doch nur 8?
  • ...
Dein Programm unterstützt ein ganze Menge verschiedener Muster (Lichtsignal, Ampel, Lauflicht, ...). Das habe ich für meine Bibliothek auch implementiert. Zunächst habe ich dafür die entsprechenden Funktionen „von Hand“ programmiert. Für jede Funktionalität eine eigene Prozedur. Dann bin ich auf die Idee gekommen, dass man das auch über eine Tabelle lösen kann. In dieser Tabelle wird abgelegt wann die einzelnen LEDs an- oder ausgehen sollen. Damit können alle möglichen Muster auf einfache weise Konfiguriert werden. Leider habe ich das noch nicht wirklich Dokumentiert. In dem Ampel Beispiel steht etwas dazu. Diese Funktion könntest Du gerne in Dein Programm einbauen. Die Tabelle könnte man im EEProm ablegen und über die serielle Schnittstelle zum Arduino schicken. Wenn es Dich interessiert kann ich Dir mehr dazu erzählen (Das gilt natürlich auch für alle anderen Stummis).

In der Excel Tabelle Vissman_Logik.xlsx hast Du momentan nur ein Signal gelistet. Hast Du noch weitere Signale untersucht?

Es währe sehr schön, wenn Du Dein Programm veröffentlichen würdest, auch wenn es für das Atmel Studio geschrieben ist.

Hardi


Threadersteller
schumo99
RegionalExpress (RE)
Beiträge: 55
Registriert: Sa 5. Nov 2016, 17:14
Deutschland

Re: DCC-Multiplexdekoder für Signale, Ampeln, Blink-/Lauflichter, ... zum Eigenbau

#8

Beitrag von schumo99 » Mo 1. Apr 2019, 11:18

Hallo,

sorry für die späte Antwort.
Ich habe da sicherlich 50-60 Stunden drangesessen, und die aktuelle Platine ist ja auch schon Version 2.0 bzw. jetzt neu 2.1. (Da hat sich aber nur die Befestigung der RJ45-Buchsen verändert).

Die Ansteuerung über den CAN-Bus war/ist geplant und der Multiplex-Decoder sollte meine anderen CAN-Platinen (https://wiki.rocrail.net/doku.php?id=us ... ucan-io-de) entsprechend ergänzen. Aus meiner Sicht macht der CAN-BUS aber hier nur Sinn, wenn es auch eine direkte Ansteuerung/Konfiguration aus der Modellbahnsoftware heraus gibt. Standardmäßig wären das ja quasi wieder das Setzen und Löschen von Bits in irgendwelchen Variablen. Das ist halt sehr umständlich. Deshalb hatte ich mich entschieden zunächst auf eine Konfiguration über die serielle Schnittstelle zu gehen. Wenn es einen vernüftigen Programmiertab in einer Modellbahnsoftware gibt, mache ich auch die CAN-Anbindung fertig. Über die Anordung der Varibalen kann man ja reden...

Der Atmega328PB hat u.A. den Vorteil, dass du weitere Pins als I/O nutzen kannst. Und die wollte ich für diesen Baustein haben. Die zusätzlichen Timer sind auch ganz nett, aber nicht zwingend nötig.

Ein Schaltplan lohnt eigentlich nicht, da es ja (fast) keine Komponenten gibt, deswegen ist er auch nicht so toll beschriftet:
150 Ohm Vorwiderstände für die LEDs (richtig, der muss bedeutend kleiner sein, als normal!!!)
10kOhm + Zener-Diode (das DCC-Signal wird auf die 5V des Arduinos runtergenommen)
Spannungsversorgung aus dem DCC-Signal
Galvanische Trennung habe ich nicht vorgesehen, da der Decoder nur sehr wenig Strom braucht und sich somit direkt aus dem DCC-Signal bedienen kann.

Der 13-polige Stecker hat in Wirklichkeit nur 8-Pole bzw. 9-Pole, die übereinander geschoben sind. Man kann hier entweder einen RJ45 oder einen D-Sub einbauen und damit frei entscheiden welche Stecker man für den CAN_BUS benutzt. Das ist identisch zu meinen anderen Platinen aus dem ArduCAN-Projekt.

Ich habe zwei Viessmann-Signale untersucht (und vorkonfiguriert). Diese waren beide gleich angeschlossen. Es ist aber möglich alle Signale anzusteuern, da man frei alle LEDs einzeln ansteuern kann. Du musst nur den Prozessor über die serielle Schnittstelle entsprechend konfigurieren. Wenn ihr mir die LED-Zuordnung von anderen (Viessmann-)Signalen mitteilt, nehme ich die gerne noch mit in der Software auf, so dass diese dann auch vorkonfiguriert sind. Viessmann hat mir deren Konfiguration leider nicht mitgeteilt. :cry:

Für die LED-Ansteuerung habe ich mehrere Routinen implementiert:
- für Signale bzw. einzelne LEDs (DCC-Befehl -> vordefinierte LEDS an bzw. aus)
- für Ampeln, Lauflichter/Zufallsbeleuchtung/usw. (DCC-Befehl -> Sequenzabfolge startet)
Dei enstprechenden Parameter dazu (LED-No, Helligkeit, Geschwindigkeit, Zeitkonstanten, ...) werden im EEPROM abgelegt. (und können über die serielle Schnittstelle bearbeitet werden)

Das Charlie/Multiplexing schaltet über einen Timer abwechselnd immer eine LED ein. Das geht dann so schnell, dass man es mit dem Auge nicht mehr auseinander halten kann und der Eindruck entsteht, dass mehrere LEDs leuchten. Da ich die LEDs in 4 Bereiche aufgeteilt habe, werden diese 4 Bereiche auch gleichzeitig angesteuert. Insgesamt können 48 LEDs angesteuert werden. Wenn das zu wenig ist, könnte man auch noch mehr LEDs ansteuern, und die Ansteuerung auf nur 2 Bereiche unterteilen, dann hätte man 2x8x7=112 LEDs. Das dürfte aber wahrscheinlich das Maximum sein, da noch genug Prozessorzeit verbleiben muss um das DCC-Signal sicher zu detektieren: Das ist wiederum Standard. Da gibt's ja - wie du schon erwähnt hast - z.B. die NMRA-lib für Arduino.

Da ich (in einem anderen Projekt) erfahren musste, dass sowohl meine gerber-files als auch der Code benutzt wurden um in größerer Stückzahl komplette Dekoder zu fertigen und dann zu verkaufen, habe ich mich entschlossen prinzipiell weder Code noch Gerber/CAD-Dateien zu veröffentlichen. Einfache Vorlagen zum Selberätzen und das HEX-File gibt's aber noch, damit man es für sich selbst noch gut nachbauen kann; in der Hoffnung, dass es so niemand mehr zweckentfremdet (weil man ja selbst noch eigene Zeit investieren muss).

Allen denen das zu aufwändig ist, gebe ich auch günstig eine unbestückte Platine und einen programmierten Arduino für kleines Geld; ich will ja nichts verdienen; Und wenn dann jemand 100 Stück will, dann merk' ich's ja... Sorry, aber ich hab' wirklich keine Lust, dass jemand anderes meine Arbeit verkauft...

Danke für dein Verständnis
Matthias
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Digitaltechnik zum Nachbau: S88 IR-Gleisbesetztmelder, S88-Repeater

Benutzeravatar

Hardi
InterRegio (IR)
Beiträge: 173
Registriert: Mo 28. Dez 2015, 13:07
Nenngröße: H0
Stromart: digital
Steuerung: MS2 + IR, Eigenbau
Gleise: Märklin C-Gleis
Wohnort: Mainz
Alter: 55
Deutschland

Re: DCC-Multiplexdekoder für Signale, Ampeln, Blink-/Lauflichter, ... zum Eigenbau

#9

Beitrag von Hardi » Mo 1. Apr 2019, 15:02

Hallo Matthias,

vielen Dank. Jetzt verstehe ich warum Du die „Produktionsdaten“ nicht herausgeben willst. Es ist super ärgerlich wenn jemand anderes die eigenen Ideen klaut und damit auch noch Geld verdienen will. Ich warte selber darauf, dass ich „meine“ LED Bibliothek oder die Verkabelung der LEDs mit einem 4-poligen Kabel (wodurch aus einer Stang Topologie eine flexible Stern Topologie wird) bei einer Firma kaufen kann ;-(.
Anfangs habe ich auch darüber nachgedacht, dass ich die Sourcen nur „persönlich“ per Mailanfrage verschicke. Vielleicht würde ich das anders sehen, wenn ich schlechte Erfahrungen damit gemacht hätte. Noch bin ich so Naiv, dass ich glaube dass alle Stummis gute Menschen sind. Ich hoffe das bleibt auch so.
Ich finde es schön zu hören, dass Du keine kommerziellen Absichten hast. Dein Angebot Platinen und programmierte Prozessoren quasi Kostenlos zu verschicken deuten ja auch schon darauf hin.
Eins muss ich noch loswerden: Dein Auftritt im Internett ist so unglaublich professionell, dass ich schon den Eindruck hatte, dass Du die Geschichte professionell betreiben willst. Aber Deine Antwort hat mich davon Überzeugt, dass dem nicht so ist.

Vielen Dank dass Du Deine Arbeit mit uns teilst.

Hardi

Antworten

Zurück zu „Digital“