Hallo Zusammen,
ich hoffe es ist O.K., wenn ich nicht jedem einzeln antworte…
Es freut mich sehr, dass Ihr euch so intensiv an der Diskussion beteiligt. Und jede noch so abwegige Idee kann die Gedanken in die richtige Richtung lenken.
Zitat
also ich weiß nicht ob es ratsam ist auch noch das MobaLeds Ein-Aus-Knöpfchen-Drück-Signal über die DCC Leitungen zu schalten.
Man kann mit der Bibliothek sehr schön Signale, Schranken und Andreaskreuze ansteuern. In den Beispielen habt Ihr das gesehen. Für diesen Fall ist eine Integration in das Steuerprogramm der Anlage sicherlich Sinnvoll. Bei der Beleuchtung der Hauser ist es weniger wichtig. Und da die Zubehörbefehle nur bei einer Änderung auf dem Schienensignal gesendet werden (Post #80 von Franz-Peter und Messung von Bodo #81 und mir) ist es unkritisch.
Aber das einlesen der DCC Signale ist für mich in erster Linie eine interessante Herausforderung. Da ist es eigentlich schon fast schade, dass diese mit der Hilfe der DCC Experten so einfach zu meistern ist.
Zitat
Und warum keinen zweiten Arduino (Nano), wer 70 oder 80 Euro für einen popeligen DCC Weichendecoder ausgibt, wird doch auch 3 Euro für nen Nano erübrigen können?!
Ja warum nicht? Aus sportlichem Ehrgeiz? Aber ich habe mich schon dazu durchgerungen das Problem mit zwei Prozessoren zu lösen. Das ist sicherlich die beste Lösung.
Das bestätigt auch Franz-Peter:
Zitat
Hardi hatte mich per Mail angesprochen, und da habe ich ihm schon geschrieben, dass ich den Empfang von DCC-Signalen ( oder ganz allgemein Interruptbasierten Datenaustausch ) kritisch sehe, wenn die Interrupts so lange gesperrt werden müssen.
Zitat
Edit: Wäre es nicht vielleicht auch eine Überlegung wert, statt der WS2812 die APA102C zu nehmen? Ok, man braucht einen Draht mehr, aber die Ansteuerung ist dafür vom Timing vollkommen unkritisch und lässt sich z.B. über die SPI-Schnittstelle machen. Da kann dann der Nano locker noch andere Aufgaben übernehmen.
Soweit ich weiß sind die WS281x basierten LEDs am weitesten verbreitet. Ich habe noch keine LEDs mit zusätzlicher Taktleitung auf kleinen Platinen gesehen. Aber vielleicht war ich auch zu sehr auf die WS281x fixiert. Ich weiß auch nicht ob es ICs ohne integrierte LED mit einem Taktsignal gibt.
Und es könnte sogar sein, dass die zusätzliche Leitung am Ende sogar teurer ist als ein weiterer Nano. Insbesondere da der zweite Prozessor ja nur dann benötigt wird, wenn man das Signal direkt von der Schiene lesen will. Wenn man die Daten über den CAN Bus liest benötigt man keinen zusätzlichen Arduino, weil der CAN Transceiver die Daten filtern zwischenspeichern kann.
Durch die Verwendung der FastLED Bibliothek ist es aber fast egal welche LED Typen man verwendet. Die Bibliothek unterstützt sehr viele verschiedene LEDs. Dazu muss nur eine einzige Programmzeile angepasst werden.
Zitat
lustig - meine MS2 scheint die Befehle immer 6x zu senden - 4 mal in kurzem Abstand und dann noch zwei "Nachzügler".
Bodo: Wenn ich das richtig sehe sind unsere beiden Messungen identisch. Allerdings habe ich nur einen Tastendruck gezeigt und Du zwei verschiedene Tasten.
Wenn eine Taste gedrückt wird, dann wird das 4mal gesendet. Wenn sie wieder losgelassen wird dann wird das 2mal geschickt.
So sieht meine Messung aus, wenn ich nur eine Zeile pro Ereignis ausgebe:
1
2
3
4
5
6
7
8
9
63128 notifyDccAccTurnoutOutput: 20,0,1
63136 notifyDccAccTurnoutOutput: 20,0,1 dt:8ms
63145 notifyDccAccTurnoutOutput: 20,0,1 dt:9ms
63154 notifyDccAccTurnoutOutput: 20,0,1 dt:9ms
63414 notifyDccAccTurnoutOutput: 20,0,0 dt:260ms
63422 notifyDccAccTurnoutOutput: 20,0,0 dt:8ms
Und hier Deine Zeilen für einen Tastendruck:
1
2
3
4
5
6
7
8
9
38975 ms Adresse 2 grün
38982 ms Adresse 2 grün dt:7ms
38988 ms Adresse 2 grün dt:6ms
38995 ms Adresse 2 grün dt:7ms
39249 ms Adresse 2 grün dt:245ms
39257 ms Adresse 2 grün dt:4ms
Die Pause entspricht der Zeit wie lange die Taste gedrückt wurde. Wenn man die Taste längere Zeit hält, dann kommt noch mal ein Messageblock.
Zitat
Würde andererseits bedeuten, dass man die Interrupts durchaus "mal" für 12ms abschalten kann … ist jetzt eben die Frage, in welchen Zyklen das für die LEDs nötig ist .
Die LEDs sollten alle 20 – 30ms aktualisiert werden, wenn sich etwas ändert. Ingolf hat darauf hingewiesen. Wenn man nur Lichter in den Häusern ansteuert, dann ändert sich nur ganz selten etwas. Wenn man das langsame aus- und abblenden der LEDs, die TV Simulation, das Feuer oder einen anderen dynamischen Effekt benutzt, dann müssen die LEDs sehr schnell aktualisiert werden.
Die Messungen von Bodo und mir zeigen, dass es kein exaktes Timing für die wiederholung eines Signals gibt. Dadurch kann man keine festen Pausen definieren in denen auf DCC gelauscht wird.
=> Ich mach jetzt einfach mal an der Dual Core Lösung weiter. Klingt doch auch schön. Auch wenn es 1.77€ teuer ist…
Zitat
Problem bei Arduino ist, das es Open-Source ist, aber keiner so richtig weiß, was in den ganzen Bibliotheken passiert.
Man muss halt damit zufrieden sein, wie es ist. Und oft reicht mir das aber nicht. Ich benutze deswegen gar kein Framework, und erhalte so Programme die schnell und Speicher effizient sind.
Aber man hat jederzeit die Möglichkeit in den Code der anderen zu schauen und diesen zu verbessern. Man muss nicht immer das Rad neu erfinden…
Ich schreibe aber auch oft schnell ein eigenes Programm. Allein schon, weil es Spaß macht… Und außerdem verwendet ein guter Programmierer keinen fremden Code
Ich hoffe ich habe keine Fragen vergessen. Wenn doch, dann meldet euch.
Hardi