Hallo zusammen, ich möchte in mein Modelbaubereich (Eisenbahn) mein Digital Singal DCC auslesen, es gibt einige DCC Monitore aber möchte mich selbst in die Sache einarbeiten. Probiert habe ich diesen Schaltplan sowie Sketch: https://www.stummiforum.de/t176550f5-DCC-Monitor-auf-Arduino-Basis-N-E-U-Version.html Läuft ja Super, nur verstehe ich den Code nicht, und ein einfaches Tutorial zu NmraDcc find ich auch nicht's. Mir würde es am Anfang reichen, wenn ich erstmal nur die Bytes auslesen kann. Selber Lerne ich nicht durchs Lesen, sondern wenn ich Probieren kann oder wie fange ich am besten an, da ich auch noch AC Digital habe, wird die Sache etwas eingeschrängt. Gruß
Maik schrieb: > Selber Lerne ich nicht durchs Lesen Du wirst trotzdem die Spec zum Signal lesen müssen. Oder du bist so gut und knobelst dir das Timing und die Inhalte aus den Oszi-Messungen raus. > sondern wenn ich Probieren kann oder wie fange ich am besten an Mit dem Oszilloskop. > nur verstehe ich den Code nicht Wo klemmt es? Was versehst du denn nicht? Was hast du denn bisher schon programmiert? > nur verstehe ich den Code nicht Ich kann den nicht mal runterladen, so ganz ohne Anmeldung... Und der dort: - https://www.stummiforum.de/t176550f5-DCC-Monitor-auf-Arduino-Basis-N-E-U-Version.html#msg2105810 ist schon arg HTML-verstümmelt:
1 | DCC-Eingang über Optokoppler Pin 6 |
2 | : |
3 | for (byte k = j; k < min (Lok_counter, bufferSizeLok - 1); k++) |
4 | : |
5 | if (bitRead(Msg->Data[pktByteCount - 2], 7)) |
6 | { |
7 | Serial.print(" -->> "); |
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Maik schrieb: >> nur verstehe ich den Code nicht > Ich kann den nicht mal runterladen, so ganz ohne Anmeldung... und da war bei mir Ende, ist das nun ein Werbethread für das stummiforum, oder was soll das?
Joachim B. schrieb: > Werbethread Sory nein um Gottes willen, Stummi schön und gut aber klare Antworten suche ich wo anders. Aus diesem Forum ist das der einzige Code der bei mir Funktioniert, daher die Frage wie man diesen oder neu Schreiben kann und oder wie man am Besten Anfängt überhaupt diese Bibliothek aufzubauen, so für mich, als verständnis, da her habe ich geschrieben, das es mir reichen würde, am anfang nur das Singal zu Empfangen, überhaupt was zu sehen...
Maik schrieb: > das es mir reichen würde, am anfang nur das Singal zu Empfangen, > überhaupt was zu sehen... Wie gesagt: nimm ein digitales Speicheroszilloskop und miss, was auf der DDC-Leitung los ist. Das, was du da siehst, wirst du dann anschließend in der Software entschlüsseln und auswerten müssen.
Dieser Monitor ist auf Anhieb gelaufen. Vielleicht hilft es den To. Durch einfache Änderungen können auch einzelne Adressen und Adressgruppen selektiert werden. Wenn ich suche finde ich das vielleicht auch.... Dies sollte natürlich vorhanden sein #include <NmraDcc.h> MfG alterknacker
:
Bearbeitet durch User
Lothar M. schrieb: > Wie gesagt: nimm ein digitales Speicheroszilloskop und miss, was auf der > DDC-Leitung los ist. Ein kleiner Logikanalysator im Gegenwert eines Kantinenessens würde auch schon einmal weiter helfen, wenn die Hardware zur Pegelumsetzung bereits funktioniert und ein DSO nicht zur Verfügung steht.
:
Bearbeitet durch User
Den Code habe ich auch, versuche gerade diesen auseinnader zunehmen und unbrauchbares zulöschen um zu sehen, was passiert, die Version 1 oder noch früher wäre Hilfreicher, da diese meist kleiner sind und nicht so viel schnick schnack haben....
Maik schrieb: > Nur verstehe ich den Code nicht, und ein einfaches > Tutorial zu NmraDcc find ich auch nicht's. > Mir würde es am Anfang reichen, wenn ich erstmal nur die Bytes auslesen > kann. Maik schrieb: > daher die Frage wie man diesen oder neu Schreiben kann und oder wie man > am Besten Anfängt überhaupt diese Bibliothek aufzubauen Vergiss es. Man kann nicht mal eben erklären wie man programmiert. Das mag beim fliesenlegen noch funktionieren, aber nicht hier.
Entschuldige das ich überhaupt gefragt habe, Programmiere schon etwas länger nur halt C++ ist etwas neu für mich und erst recht DCC. Deswegen nehmen ich den einzigen Brauchbaren Code den ich habe auseinander und versuche zu Verstehen wie das ganze aufgebaut ist. Und lass die Fliesenleger in Ruhe, das ich auch nicht einfach :P
QMaik, nutze den Code so wie er ist! Nichts löschen! Wenn er funktioniert mit deiner Hardware kannst du mit dem Cod und den Monitoranzeigen den Cod und das DCC Signal besser verstehen. AcK Hardware brauchst du nicht, aber ich würde es mit aufbauen, da das Teil später zum richtigen Decoder umgestrickt werden kann. Der Orginalcod ist einfach zu erweiter um Adressen zu selektieren. Da deine Zentrale wer weis wie viele Adressen sendet. Vor einiger Zeit mal aufgebaut mit ACK und zusätzliche Portausgabe zum Test. Max 2Std. MfG alterknacker
:
Bearbeitet durch User
Hier noch mal der Grundmonitor ohne Hardware ACK Die Leuchtdioden waren zum test und jetzt glaube ich sie werden durch F0-F4 geschaltet. Müsste erst suchen was ich für eine Geändertes Prog ich eingeladen habe. Noch einen Lokdecoder von 2017 glaube ich. Mit 17 Ausgaben, alles leicht anpassbar. Auch zur Steuerung von Anzeigen, Soundmodul usw. Das Modul hat keine Fremdspannung wird direkt von der DCC Spannung versorgt. War mal ein Experiment. A6 mit Poti A7 mit Taster z.B.Adresse auf 3 setzen Alles Materialien welche so rumlagen, bis auf den Arduino der is modern;-)) MfG alterknacker
:
Bearbeitet durch User
Al. K. schrieb: > nutze den Code so wie er ist! Er will ihn nicht "nutzen". Er will verstehen, wie das Einlesen des DCC Bitstroms funktioniert. Maik schrieb: > Programmiere schon etwas länger nur halt C++ ist etwas neu für mich und > erst recht DCC. So wie ich das sehe, ist in diesem Code nicht viel Objektorientierung drin. Das einzige ist im Grunde diese Zeile: NmraDcc Dcc ; Da wird basierend auf die Klasse NmraDcc das Objekt Dcc angelegt. Um zu sehen, wie der Bitstrom eingelesen wird, musst du dir also die Implementierung von NmraDcc ansehen. Dort spielt die Musik.
Lothar M. schrieb: > Er will ihn nicht "nutzen". Er will verstehen, wie das Einlesen des DCC > Bitstroms funktioniert. Das verstehen geht aber besser wenn er den Monitor aufbaut, Programm rein und dann alles nachvollzieht. Das sich das wichtigste in der NmraDcc abspielt habe ich ihm schon zugetraut. MfG alterknacker
:
Bearbeitet durch User
Al. K. schrieb: > Das verstehen geht aber besser wenn er den Monitor aufbaut, Programm > rein und dann alles nachvollzieht. Hat er doch schon: Maik schrieb: > Läuft ja Super LG, Sebastian
Sebastian W. schrieb: > Hat er doch schon: Da hast du Recht... Wird Zeit für den Termin für die Augen OP ;-)) MfG alterknacker
:
Bearbeitet durch User
Guten Morgen, Habe den Code nun auseinander gekommen um bestimmte bereiche zu Verstehen, der erste Versuch hat auch gleich geklappt und bekomme nun den BIN Code angezeigt. Da ich hier mit einem Nano Arbeite wäre meine Frage, wie kann ich dies um Stellen (auch vom Schlaltplan) auf ein ESP32
Maik schrieb: > Da ich hier mit einem Nano Arbeite wäre meine Frage, wie kann ich dies > um Stellen (auch vom Schlaltplan) auf ein ESP32 Glaube ich habe jetzt bei deinen Hinweis zu stummi gesehen das man am ESP32 DCC Monitor arbeitet. Zum aufsetzen auf die Schiene und mit Bluetooth anzeige zum Handy/PC Wollte ich auch schon machen , aber es ist beim Wollen geblieben. Jetzt kann ich ja warten bis du es gemacht oder gefunden hast.;-)) Maik schrieb: > den BIN Code angezeigt. Vom gesamten Digitalpaket oder aufgeschlüsselt aus der Hex Anzeige. MfG alterknacker
Fein, dass mein DCC-Monitor jetzt auch den Weg ins mikrocontroller-Forum gefunden hat! Man kann den Sketch nutzen, muss es aber nicht. Wenn Du die DCC-Befehle verstehen lernen willst, kommst du um das Studium der Spezifikationen und die Analyse der NMRA-Bibliothek nicht herum. BTW: Im Code habe ich sehr ausführlich dokumentiert, das ist schon ein sehr gute Einführung in DCC. Gruß Martin
Das hab ich soweit nicht verfolgt, das dort an ESP32 gearbeitet wird. Am Strom kann es nicht liegen (ESP 3.3V) das der ESP keine Daten Empfängt, es muss was mit den Digital Port sein, da ich gerade um steige von Arduino zu ESP muss ich eben so dies lernen, das es andere Anschlüsse hat. Aber wieso kommt nicht beim ESP an:
1 | #include <NmraDcc.h> |
2 | |
3 | NmraDcc Dcc; |
4 | |
5 | void setup() { |
6 | Serial.begin(115200); |
7 | Serial.println("Initializing DCC reader..."); |
8 | Dcc.pin(0, 2, 1); |
9 | Dcc.init(MAN_ID_DIY, 12, CV29_ACCESSORY_DECODER | CV29_OUTPUT_ADDRESS_MODE, 0); |
10 | Serial.println("DCC reader is ready..."); |
11 | }
|
12 | |
13 | void loop() { |
14 | Dcc.process(); |
15 | }
|
16 | |
17 | void notifyDccMsg(DCC_MSG * Msg) { |
18 | Serial.print("notifyDccMsg: "); |
19 | Serial.print(Msg->Size); |
20 | Serial.print(" "); |
21 | for(uint8_t i = 0; i < Msg->Size; i++) |
22 | {
|
23 | Serial.print(Msg->Data[i], BIN); |
24 | }
|
25 | Serial.println(); |
26 | }
|
Pin wäre beim Nano 2 und denke beim ESP GPI04 oder täsuche ich mich?
Martin schrieb: > Fein, dass mein DCC-Monitor jetzt auch den Weg ins mikrocontroller-Forum Jap, Stummi bleiben oft fragen unbeantwortet.... Hast du noch die erste Version von deim Script?
Maik schrieb: > Martin schrieb: >> Fein, dass mein DCC-Monitor jetzt auch den Weg ins mikrocontroller-Forum > > Hast du noch die erste Version von deim Script? Müßte ich auf meinem PC suchen. Ich habe nur Erfahrungen mit dem Nano ESP32, aber nur mit anderen Projekten. Evtl. musst du die Interrupt-Nr. (die erste „0“) anpassen an den benutzten Pin. Dcc.pin ( 0, 2, 1 ) // Setup which External Interrupt, the Pin it's associated with that we're using and enable the Pull-Up Auch wäre zu klären, ob die NMRA-Bib. überhaupt auf dem ESP läuft. Ich denke aber schon. Warum überhaupt ein ESP? Der ist reichlich oversized. Oder brauchst du WLAN oder BT?
Lothar M. schrieb: >> nur verstehe ich den Code nicht > Ich kann den nicht mal runterladen, so ganz ohne Anmeldung... > > Und der dort: > - > https://www.stummiforum.de/t176550f5-DCC-Monitor-auf-Arduino-Basis-N-E-U-Version.html#msg2105810 > > ist schon arg HTML-verstümmelt: >
1 | > DCC-Eingang über Optokoppler Pin 6 |
2 | > : |
3 | > for (byte k = j; k < min (Lok_counter, bufferSizeLok - 1); k++) |
4 | > : |
5 | > if (bitRead(Msg->Data[pktByteCount - 2], 7)) |
6 | > { |
7 | > Serial.print(" -->> "); |
8 | > |
Der inline-Code wurde leider beim Forenumzug verstümmelt. Drum hängt der Sketch auch als zip-File am Stummi-Thread, man muss sich halt dort registrieren.
Martin schrieb: > Warum überhaupt ein ESP? Der ist reichlich oversized. Oder brauchst du > WLAN oder BT? Das hat schon Vorteile. Anschluss an Schiene und Kommunikation über Bluetooth. Man könnte auch einen MP3 Player anschließen und alles Ansagen lassen. Habe ich vor Jahren am Lockdecoder gemacht. Is aber mehr oder weniger ein AHA Effekt bei Ausstellungen. MfG alterknacker
Martin schrieb: > Der inline-Code wurde leider beim Forenumzug verstümmelt. Es ist halt eine blöde Idee, trotz anderslautendem Tagging HTML-Auszeichnung zu verwenden - Software >:(
Ein ESP Bietet schon vorteile, Speicher CPU schon größer und Preisgünstiger, für die weitere Verarbeitung am Code kann ich ein besseres zusammen Spiel bauen wenn der DCC Input gehen würde. Habe nun viele PIN durchprobiert, aber keine Ausgabe, laut NmraDcc soll ESP32 Unterstützt werden.
Maik schrieb: > Habe nun viele PIN durchprobiert, aber keine Ausgabe, laut NmraDcc soll > ESP32 Unterstützt werden. Schreibe doch ein einfaches Test Programm um den IntPin zu testen,natürlich mit IntRoutine.
:
Bearbeitet durch User
Rainer W. schrieb: > Ein kleiner Logikanalysator im Gegenwert eines Kantinenessens würde auch > schon einmal weiter helfen, Du meinst einen zweibeinigen "Logikanalysator"?
Versuche mal das ganze mit: Dcc.pin(DCCSignalPin, 1); DCCSignalPin muss die Nummer deines ESP-Inputs am Optokoppler sein.
Guten Morgen, es lag nicht am Code oder ESP, an Arduino IDE, der zeigt mir nicht die Inputs an, Starte ich das ganze über Putty, bekomme ich meine Singale, IDE 1.8 oder 2 können den Input von ESP nicht anzeigen, hmm, ok, gibt es eine alternative zu diesem IDE (Windows oder Linux)? Dein DCC_Monitor läuft nur Beschränk auf dem ESP, da er die Werte min() und max() nicht verarbeiten kann, wenn ich den Buffer abschalte, läuft das Script. Nun überlege ich, die Werte in einer array zu Speichern und bei Unterschiede diese neu Anzeigen und geändert werden, der erste Versuch klappt ja aber wenn sich der Wert ändert, zeigt er es nicht an, bin es von PHP/Perl gerwohnt das man offene array hat, hier bei C++ muss man eine feste Größe angeben, aber weiß ich vorher, wieviele Lok's zum einsatzt kommen?!? Hattest du schonmal geschaut nach deiner ersten Version, die würde mich wirklich Interessieren, die aus dem Forum kann man nicht gebrauchen, da die hälfte fehlt...
Habe das Script geändert um zu sehen ob dies mit der array klappt, auf dem ersten Blick ja und neu:
1 | if(instructionType == 2 || instructionType == 3) { |
2 | speed = ((Befehls_Byte & B00001111) << 1) + ((Befehls_Byte & 0x10) >> 4) - 3; |
3 | for (int a = 0; a < sizeof(arry); a++) { |
4 | if(arry[a] == speed) { |
5 | direction = 1; |
6 | break; |
7 | } else { |
8 | direction = 0; |
9 | }
|
10 | }
|
11 | if (direction == 0) { |
12 | arry[i] = speed; |
13 | Serial.print((String) "Lok: " + LokArdesse); |
14 | if (speed == 253 || speed == 254) { |
15 | Serial.print(" <<-->> Stopp"); |
16 | } else if (speed == 255 || speed == 0) { |
17 | Serial.print(" >>--<< Nothalt"); |
18 | } else { |
19 | if(instructionType == 2) { |
20 | Serial.print((String) " <<-- " + speed); |
21 | }
|
22 | if(instructionType == 3) { |
23 | Serial.print((String) " -->> " + speed); |
24 | }
|
25 | }
|
26 | Serial.println(); |
27 | i ++; |
28 | }
|
29 | }
|
es kommt hin und wieder ein Befehl zurück, glaub das ist der Falsche weg
Harald W. schrieb: > Du meinst einen zweibeinigen "Logikanalysator"? Nein, erstmal ging es um einen 10-beinigen Logikanalysator mit USB Schnittstell als Alternative zum Oszi. Damit kommt man für einen Bruchteil des Preises deutlich weiter, wenn es um Zeitverlauf und Verständnis der Daten von der Schiene geht: https://www.ebay.de/itm/275942918330 https://www.ejberg.dk/portfolio/saleae-dcc-decoder/ Die Preise gehen teilweise ETWAS auseinander, nur um ein paar zu nennen: https://de.aliexpress.com/item/32858282094.html https://www.ebay.de/itm/174383331265 https://www.ebay.de/itm/272581930532 https://www.az-delivery.de/products/saleae-logic-analyzer https://www.antratek.de/logic-analyzer-24mhz-8-channel https://www.amazon.de/Saleae-Analyzer-8Channel-saleae-support/dp/B00DPCDEV2
:
Bearbeitet durch User
Eine ältere Sketch-Version habe ich nicht mehr. Keine Ahnung was du mit min(), max() und dem Buffer meinst und was du genau vor hast. Aber du wirst schon wissen, was du tust. Seltsam, dass es an der IDE liegen soll. Der serielle Monitor fkt. i.d.R. vorbildlich.
Maik schrieb: > IDE 1.8 oder 2 können den Input von ESP nicht anzeigen Bei mir schon. Man muss allerdings den richtigen ESP mit den richtigen Einstellungen auswählen. Dazu gehört auch, ob die GPIO-Pins nach Espressif oder nach Wemos&Co numeriert sein sollen. LG, Sebastian PS: Es heißt Signal, nicht Singal.
:
Bearbeitet durch User
Wenn man DCC verstehen will, dann geht man auf http://railcommunity.org/index.php?option=com_content&view=article&id=49&Itemid=61 Da steht alles drin. Zentralen, die normkonform sind, senden auch das, was da steht.
:
Bearbeitet durch User
Nach einer guten Woche Lesen/Verstehen und Handeln, bekomme ich es immer noch nicht hin, DCC ohne Libraries auszulesen. Versucht habe ich mich an: https://rudysmodelrailway.wordpress.com/2015/10/23/dcc-sniffer-packet-analyser-with-arduino/ zu halten und mehrere Verschiedene Versionen ausprobiert aber bekomme hier gar kein Signal über den Nana, wenn ich es über den Uno Probiere, sehe ich, bei geschlossenden Monitor, das meine LED im Takt Blinkt, öffne ich den Monitor, scheint das Script stehen zu bleiben, selbt ein Input kann ich nicht ausführen. Warum das ganze ohne NMRA, da ich auf die Bibliothek Verzichten möchte und nur die Lok Adressen auslesen möchte und diese in einer Array speichern. Entweder bin ich zu alte dafür oder ich hab es nicht verstanden...
Ich habe keine Ahnung von DCC und habe hier nur oberflächlich gelesen. Es ging darum, dass nach dem Öffnen des seriellen Monitors der Arduino-IDE die Verbindung hängt, mit Putty aber funktioniert? Kann es sein, dass der Reset, den der serielle Monitor beim Öffnnen auslöst (DTR) und damit das bereits auf dem Uno laufende Programm unterbricht, die Kommunikation durcheinander bringt? Mag sein, dass ich mit meiner Vermutung auf dem völlig falschen Gleis bin :-)
das mit dem Monitor Stört mich nicht, das Problem in der IDE konnte ich lösen (DCC Monitor von Stumi) aber das angehängte Script läuft gar nicht und genau das würde mich Interessieren.
Interessiert mich Nano Compiliert fehlerfrei Aber vielleicht erst Morgen der DCC Test MfG alterknacker
auf dein Feedback bin ich gespannt... nochmal überlegt, ob es vielleicht am Schaltplan liegt, nutze diesen hier:
Maik schrieb: > nochmal überlegt, ob es vielleicht am Schaltplan liegt ...oder an der Schaltung. Aber da könnte und sollte man nun einfach mit einem Oszilloskop die Signale messen. Ich verstehe beim besten Willen nicht, warum manche meinen, ohne ein solches Messgerät serielle Protokolle entschlüsseln zu können. Und: weil das hier ein zutiefst analoges Signal mit einer sehr analogen Signalaufbereitung ist, reicht ein 10€ Logikanalyzer nicht aus.
Da bei mir genau dieser Schaltplan perfekt mit meinem Sketch funktioniert, muss der Fehler wohl entweder an deiner Verdrahtung oder deinem Sketch liegen. BTW: genauso solche nicht oder eingeschränkt funktionierenden Sketche wie der von dir verwendete haben mich veranlasst selber einen zu schreiben!
Bei einem derartigen pillepalle Signal wundert es mich ersthaft, wie man sich so lange damit beschäftigen kann, ohne zu irgendeinem verwertbaren Ergebnis zu kommen. Man muss nur zwischen 56 und >100µs unterscheiden, die Bits einsammeln, Pakete draus machen und die dann dekodieren. Das ist jetzt auch zu Fuß nicht wirklich schwer und das geht in der Tat auch ohne Oszilloskop, wenn man eine UART zum Debuggen am PC beispielsweise nutzt und sich Zählwerte und den Empfangspuffer von den eingesammelten Bits ausgeben lässt. Der Rest ist dann nur noch Fleißarbeit.
:
Bearbeitet durch User
https://www.mikrocontroller.net/attachment/631882/Monitor1.jpg Das ist das Teil mit welchen ich den Monitor Getestet habe. Al. K. schrieb: > Interessiert mich Das muss ich noch testen. mfG alterknacker
https://www.mikrocontroller.net/attachment/631882/Monitor1.jpg Entspricht der Zeichnung. Das ist das Teil mit welchen ich den Monitor Getestet habe. Al. K. schrieb: > Interessiert mich Das muss ich noch testen. mfG alterknacker
Knut B. schrieb: > das geht in der Tat auch ohne Oszilloskop Das ist dann so ähnlich wie "Autofahren nach Gehör": wenn es scheppert oder nicht mehr weitergeht, dann weiß man erst mal nicht, woran es denn jetzt schon wieder klemmt. Genau das sehen wir hier: es geht schon eine Woche nicht weiter. Und keiner weiß warum. > und das geht in der Tat auch ohne Oszilloskop, wenn man ... nicht grade blutiger Anfänger ist. Und ich habe mir schon früh in meiner Elektronikkarriere ein Oszi gekauft obwohl mich das deutlich mehr gekostet hat als eine Eitrittskarte zu einem Konzert. Oder andersrum: wer heute meint, ein Oszi wäre "zu teuer" für sein Elektronikhobby, der sollte irgendein wirklich billiges Hobby aussuchen wie z.B. Instafilmchen anschauen.
Ich glaube, das Modelleisenbahn nicht gerade günstig ist und ich in einem so einen Gerät den kosten nutzen Facktor nich nicht sehe für aktuell einmalige Sache. Zudem wird es mich auch nicht zu Lösung bringen. Das man zwischen 50 und 120µs Suchen/Arbeiten muss weiß ich, meine Frage ist, wie kann ich es als Script umsetzen...
Maik schrieb: > Ich glaube, das Modelleisenbahn nicht gerade günstig ist und ich in > einem so einen Gerät den kosten nutzen Facktor nich nicht sehe für > aktuell einmalige Sache. Zudem wird es mich auch nicht zu Lösung > bringen. Zum Glauben geht man in die Kirche. Oszilloskope / Logikanalyser mit USB-Anschluss bekommt man für 10 Euro (+ Versandkosten) bei diversen (in Deutschland ansässigen) Händler / Chinaimporteuren. Ansonsten musst du dich halt durch den Quellcode hangeln bis du ihn verstanden hast. Maik schrieb: > Das man zwischen 50 und 120µs Suchen/Arbeiten muss weiß ich, meine Frage > ist, wie kann ich es als Script umsetzen... Für sowas verwendet man ja auch integrierte Hardware. DCC u.a. Digitalformate stammen aus den 1980ern, und mit Arnold waren die Sachen auch schon in Spur N verfügbar (in Zusammenarbeite mit Märklin). (Mini-) Trix hatte das Selectrix-Digitalsystem. Damals waren die Controller noch wesentlich leistungsschwächer, und die Firmen haben es trotzdem hinbekommen. Lothar M. schrieb: > der sollte irgendein wirklich billiges Hobby aussuchen > wie z.B. Instafilmchen anschauen. Guter Vorschlag. Man kann auch einem Apfel-Griebsch beim Braunwerden zugucken...
Maik schrieb: > Das man zwischen 50 und 120µs Suchen/Arbeiten muss weiß ich, > meine Frage ist, wie kann ich es als Script umsetzen... 1. Initialisiere einen Timer, der (ca.) in jeder us um 1 hochzählt 2. Initialisiere eine Capture-Interrupt, der bei jeder Flanke den aktuellen Timerwert (Zeitstempel) abspeichert 3. Sieh über den Pegel am Pin nach, ob es eine "abschließende" Flanke war 4. Wenn das der Fall ist, dann berechne die Pulsdauer aus den letzten beiden Zeitstempeln Maik schrieb: > Ich glaube ... wird es mich auch nicht zu Lösung bringen. Na gut, gegen Glaubensfragen kommt man nicht an, Leute tun irre Sachen aus diesem Grund. Man liest es allenthalben in der Zeitung. Da bleibt mir nur, dir viel Glück zu wünschen. Du wirst es brauchen.
Lothar M. schrieb: > Da bleibt mir nur, dir viel Glück zu wünschen. Du wirst es brauchen. Genau das meinte ich mit meinen Ausführungen, die Du weiter oben kritisch angemerkt hast. Aber es ist weniger das Glück, das der Kollege braucht, als eher den Willen, sich im Detail mit der Materie zu beschäftigen.
Ich vestehe die ganze Frage nicht. Wenn man DCC bei google eingibt, dann ist der Artikel recht dünn. Hat aber unten Links auf die DCC Seite. Dort gibt es komplette Specs. z.B. das hier https://www.nmra.org/sites/default/files/standards/sandrp/pdf/s-9.1_electrical_standards_for_digital_command_control_2021.pdf Damit kann man seine eigene Erkennung schreiben, ganz ohne C++, wenn es denn sein muss. Apropos C++: so neu ist die Sprache auch nicht, ich benutze die seit 1991. Hätte man sich einarbeiten können. Dann könnte man auch Stummis Code verstehen. Der ist auch keine Raketenwissenschaft.
Ja Maik, das wäre super. Aber es hat wahrscheinlich keiner solche Projekte. Doch alle wollen mitreden! Ich habe auch so etwas vor und suche vergebens. Fündig wird man z.B. bei der PIC-Fraktion oder im Stummis-Modellbahnforum. Auch bei den Arduinos gibt es solche Beispiele. Leider benutzen diese Biblios. Ich würde es aber lieber mit den AVRs machen und in Bascom. Mir ist aber schon klar, dass BASCOM das Problem sein wird. Aber wenn man Assemblercode einbaut sollte es wohl machbar sein.
Maik schrieb: > Wenn dies so einfach sein soll, warum Posted keiner mal ein Beispiel Code? Maik schrieb: >>>> aber möchte mich selbst in die Sache einarbeiten. Ja, was denn nun? Heißt "sich selber einarbeiten" für dich nur "kopierten Code einsetzen"? Wie wäre es denn, wenn du dir (nachdem du dich vergewissert hast, dass deine Hardware funtkioniert) mal das Gesamtpaket in Teilaufgaben zerlegst und erst mal das Timing anschaust und versuchst die Bits 0 und 1 zu unterscheiden (= OSI Layer 1): - https://www.opendcc.de/info/dcc/dcc.html Und dann versuchst du die Präambel und das folgende Nullbit zu erkennen und den nachfolgenden Datenstrom einzulesen (= OSI Layer 2): - http://www.lokodex.de/mo/m_digital_dccprot01.htm Und wenn du das hast, kannst du darangehen, die Daten zu entschlüsseln und dich die restlichen OSI Layer 2..7 bis zur Anwendung hocharbeiten. Genau so und nur so funktioniert "sich selber in eine Sache einarbeiten".
:
Bearbeitet durch Moderator
Nun ja, wenn's AVR sein soll ... Ist schon über 20 Jahre alt, den AT90S1200 gibt's nicht mehr, aber prinzipiell sollte das leicht auf einen neueren Typ zu portieren sein. Die eigentliche Dekodierlogik steckt fast ausschließlich in der Interrupt-Routine für externen Interrupt.
Jürgen H. schrieb: > Aber es hat wahrscheinlich keiner solche Projekte. > Doch alle wollen mitreden! Ich arbeite gerade an einer DCC-Zentrale, die RailCom-fähig ist, siehe github: https://github.com/ukw100/FM22. Die Dokumentation ist aber noch nicht fertig, ist harte Arbeit. Dazu gehört auch ein abgesetzter, autark arbeitender lokaler RailCom-Detektor, der beliebig viele Loks auf bis zu 256 Gleisstrecken erkennen und lokalisieren kann, um deren Aufenthaltsort zu bestimmen. Als Abfallprodukt ist dabei auch ein DCC-Decoder entstanden, der nicht nur die RailCom-Signale in den Lücken der DCC-Frames erkennen soll, um die Loks zu lokalisieren, sondern auch noch DCC-Befehle entgegennehmen und ausführen kann, wie zum Beispiel die Ansteuerung einer WS2812-LED-Kette, um Modellbahngebäude, Laternen etc. zu beleuchten. Langer Rede kurzer Sinn: Der Code des lokalen Railcom-Detektors und damit auch des DCC-Decoders ist noch nicht auf github, ich könnte ihn aber vorzeitig zur Verfügung stellen. Allerdings für ein STM32F401 Blackpill, nicht für AVR und auch nicht für ESP. Zum Problem des TO: Auch mein Code wird ihm nicht weiterhelfen. Da hat Lothar schon recht: Da muss der TO selbst durch. Man kann nicht alle Wünsche durch Abkupfern erfüllen.
:
Bearbeitet durch Moderator
Mal eine Frage an die Fachleute: Maik hat einen Schaltplan für die Eingangsbeschaltung des Sniffers eingestellt. Habe ihn hier nochmals kopiert. Meine Frage ist aber warum werden 2 unterschiedliche Optokoppler verwendet? So unterschiedlich sind deren Daten ja nicht und bei der Frequenz ist das DCC-Protokoll ja noch zu beherrschen. Danke!
:
Bearbeitet durch User
Der obere ist ein schneller OK, der das DCC-Signal an den Nano weitergibt. Der untere dient nur zur Erzeugung von ACK-Impulsen. Das ist vollkommen zeitunkritisch; da tut es auch ein billiger langsamer Standard-OK. Die ACK-Impulse werden auf dem Programmiergleis benötigt, um CVs der Dekoder durch eine Zentrale auszulesen. Das ist hier prinzipiell sinnbefreit, da es hier ja nur ein Monitor ist und kein Dekoder.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.