Forum: Mikrocontroller und Digitale Elektronik DCC Singal auslesen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Maik (maik_b657)


Lesenswert?

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ß

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Joachim B. (jar)


Lesenswert?

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?

von Maik (maik_b657)


Lesenswert?

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...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von Al. K. (alterknacker)


Angehängte Dateien:

Lesenswert?

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
von Rainer W. (rawi)


Lesenswert?

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
von Maik (maik_b657)


Lesenswert?

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....

von Michael B. (laberkopp)


Lesenswert?

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.

von Maik (maik_b657)


Lesenswert?

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

von Al. K. (alterknacker)


Angehängte Dateien:

Lesenswert?

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
von Maik (maik_b657)


Lesenswert?

Al. K. schrieb:
> alterknacker

dein Monitor hat zusätzliche LED's drin, wofür sind die?

von Al. K. (alterknacker)


Angehängte Dateien:

Lesenswert?

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
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von Al. K. (alterknacker)


Lesenswert?

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
von Sebastian W. (wangnick)


Lesenswert?

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

von Al. K. (alterknacker)


Lesenswert?

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
von Maik (maik_b657)


Lesenswert?

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

von Al. K. (alterknacker)


Lesenswert?

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

von Martin (domapi)


Lesenswert?

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

von Maik (maik_b657)


Lesenswert?

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?

von Maik (maik_b657)


Lesenswert?

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?

von Martin (domapi)


Lesenswert?

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?

von Martin (domapi)


Lesenswert?

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&#252;mmelt:
>
1
> DCC-Eingang &#252;ber Optokoppler Pin 6
2
> :
3
> for (byte k = j; k &lt; min (Lok_counter, bufferSizeLok - 1); k++)
4
> :
5
> if (bitRead(Msg-&gt;Data[pktByteCount - 2], 7))
6
> {
7
> Serial.print("  --&gt;&gt; ");
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.

von Al. K. (alterknacker)


Lesenswert?

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

von Rainer W. (rawi)


Lesenswert?

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 >:(

von Maik (maik_b657)


Lesenswert?

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.

von Al. K. (alterknacker)


Lesenswert?

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
von Harald W. (wilhelms)


Lesenswert?

Rainer W. schrieb:

> Ein kleiner Logikanalysator im Gegenwert eines Kantinenessens würde auch
> schon einmal weiter helfen,

Du meinst einen zweibeinigen "Logikanalysator"?

von Martin (domapi)


Lesenswert?

Versuche mal das ganze mit:

Dcc.pin(DCCSignalPin, 1);

DCCSignalPin muss die Nummer deines ESP-Inputs am Optokoppler sein.

von Maik (maik_b657)


Lesenswert?

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...

von Maik (maik_b657)


Lesenswert?

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

von Rainer W. (rawi)


Lesenswert?

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
von Martin (domapi)


Lesenswert?

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.

von Sebastian W. (wangnick)


Lesenswert?

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
von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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
von Maik (maik_b657)


Lesenswert?

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...

von Erni (pudding)


Lesenswert?

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 :-)

von Maik (maik_b657)


Angehängte Dateien:

Lesenswert?

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.

von Al. K. (alterknacker)


Lesenswert?

Interessiert mich
Nano Compiliert fehlerfrei
Aber vielleicht erst Morgen der DCC Test

MfG
alterknacker

von Maik (maik_b657)


Angehängte Dateien:

Lesenswert?

auf dein Feedback bin ich gespannt...
nochmal überlegt, ob es vielleicht am Schaltplan liegt, nutze diesen 
hier:

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von Martin (domapi)


Lesenswert?

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!

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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
von Al. K. (alterknacker)


Lesenswert?

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

von Al. K. (alterknacker)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von Maik (maik_b657)


Lesenswert?

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...

von Rahul D. (rahul)


Lesenswert?

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...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

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.

von Peter (pittyj)


Lesenswert?

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.

von Maik (maik_b657)


Lesenswert?

Wenn dies so einfach sein soll, warum Posted keiner mal ein Beispiel 
Code?

von Jürgen H. (hansmd)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Andreas B. (abm)


Angehängte Dateien:

Lesenswert?

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.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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
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
Noch kein Account? Hier anmelden.