1zu160 - Forum



Anzeige:
AP Modellbahn - Die Modellbahnverwaltung

THEMA: DCC Signal Experten gesucht

THEMA: DCC Signal Experten gesucht
Startbeitrag
N-Bahner94 - 06.08.18 16:30
Moin,
momentan befinde ich mich an einem Aufbau eines Funktionsdecoders und stehe gerade bei dem CV lesen ein bisschen auf dem Schlauch. Ich finde weder in der NMRA noch auf anderen Seiten übereinstimmende Erklärungen wie das auslesen funktioniert. Einen ACK Pegel mit 6ms kann ich problemlos erzeugen und auch als Bestätigung nach dem CV schreiben wird dieser erkannt.
Meine Frage an euch:
Wie sieht ein Signal für CV lesen Beispielsweise für CV31 Value254 aus? Und wie muss ich den ACK darauf auslegen?

Viele Grüße
Hannes

Moin Hannes,

Das Signal beinhaltet den angefragten CV und einen Wert, auf den geprüft werden soll. Dies erfolgt entweder bit- oder byte-weise. Ersteres ist die deutlich schnellere Variante. Das hängt dann aber auch von der verwendeten Zentrale ab. Wenn der Decoder eine Übereinstimmung feststellt, dann musst du das direkt rückmelden. Eine gute Doku habe ich dafür auf die Schnelle auch nicht gefunden.

Eventuell können Arnold Hübsch oder ho weiterhelfen.

Gruß Moritz
Hi!
Schau Dir die NMRA Seiten an und die VHDM Seiten. VHDM hast Du das Zeugs sogar in deutsch.

Auf welcher Plattform entwickelst Du? Für PIC und Atmel gibt's einige Bibliotheken die gut dokumentiert sind. Da kann man sich was abschauen oder ohnehin gleich die vorhandene Bibliothek nehmen und weiter entwickeln.
http://vhdm.de/index.php?option=com_content&...;id=49&Itemid=61

Die Antworten im Service Mode, wie das abgewickelt wird,  sind in der ersten Antwort schon gut beschrieben worden. Wenn'st Details wissen willst einfach nachfragen...
-AH-
Moin Arnold,
Ich wollte eigentlich vermeiden fertige Bibliotheken zu benutzen. Da ich mit #1 Kontakt habe, kommen wir nicht weiter.

Magst du mir einmal detailliert beschreiben wie die Zentrale das CV auslesen startet und wann sie die ACK Pegel möchte?


Viele Grüße
Hannes
Den NMRA Stuff habe ich bereits in Englisch gelesen und dort auch alle wegen zur Ansteuerung und CV schreiben gefunden. Nur das lesen will nicht!
Programmiert wird ein Mega2560 in C
hallo Moritz, hallo hannes

ich werde hier mich nicht beteiligen.
das würde sonst für mich eine endlose geschichte, bei der ich dann bis hin zum Debugging und gleissignal interpretieren und auswerten mithelfen müsste. die zeit dafür werde ich in keinem falle aufbringen. (die technischen einrichtungen hätte ich.)

Wenn jemand so etwas für sich oder vielleicht auch für andere auf die beine stellen will, dann MUSS er die entsprechenden Original-Unterlagen lesen, im Details studieren, verstehen und ggf. auch damit experimentieren.
Derjenige muss auch die technischen Einrichtungen haben, um Gleissignale aufzuzeichnen und dann in lesbarer form darstellen zu können.

die Einstellung
"Ich habe den NMRA Stuff bereits in Englisch gelesen und[ ...]. Nur das lesen will ich nicht",
ist die schlechteste Einstellung, die man für sometwas haben kann.

so leid es mir tut, Hannes, ich habe den eindruck, du willst am Wissen und der Arbeit anderer abgreifen, weil du nicht willens bist, selbst zeit, wissen, können usw. in dein "Projekt" reinzustecken. Nochmals, es tut mir leid, das sagen zu müssen: Für mich grenzt das an Schmarotzen"?

Vielleicht bist du jetzt beleidigt, aber das ist meine Meinung.

wenn jemand anderes dir da helfen will, wird er sehr schnell erkennen, dass das eine zeitraubende Angelegenheit werden wird.

viel erfolg, wünscht ho
Guten Tag Ho,
falls du genau ließt steht dort, nur das lesen will nicht. Das hat nichts mit ich will nicht lesen zu tun.
Ich lese sehr gerne und habe auch alle NMRA durchgelesen. Der Teil für das auslesen der CV  im Servicemode ist allerdings so kurz beschrieben das ich dort nicht schlau werde, das hat nichts mit Faulheit meinerseits zu tun. Die Signale für CV schreiben und die Zubehörbefehle sind für mich auf dem Oszilloskop sehr logisch aufgebaut und verständlich. Was die Zentrale allerdings für ein Signal beim auslesen sendet und wann sie ein ACK haben möchte ist für mich nicht ersichtlich. Statt mich mit 5 Absätzen zu belehren hätte ein kurzer mit dem Signal Aufbau beim CV Reading gereich :)

@all
In der NMRA steht:
Type = "01" VERIFY BYTE
The contents of the Configuration Variable as indicated by the 10-bit address are compared with the data byte (DDDDDDDD). If the decoder successfully receives this packet and the values are identical, the Digital Decoder
shall respond with the contents of the CV as the Decoder Response Transmission, if enabled.

The VERIFY BIT and WRITE BIT instructions operate in a manner similar to the VERIFY BYTE and WRITE BYTE instructions (but operates on a single bit). Using the same criteria as the VERIFY BYTE instruction, an operations mode acknowledgment will be generated in response to a VERIFY BIT instruction if appropriate. Using the same criteria as the WRITE BYTE instruction, a configuration variable access acknowledgment will be.

Ich lese daraus, dass die Zentrale mir eine 10 Bit Adresse sendet und dann 8 mal immer einen Bit abfragt welcher mit einem. ACK bestätigt werden soll.
Was für mich fehlt ist, was passiert wenn alle Bits auf null sind. Der angesprochene CV Wert 0 hat? Wann muss dann ein ACK gesendet werden?

Ich finde die Beschreibung im Gegensatz zu h0 in der NMRA absolut nicht trivial und eindeutig.
Berichte auf anderen Websites widersprechen sich stark vom byteweisen auslesen bis zur Bestätigung durch 4 Impulse.

Ich hoffe Arnold kann weiterhelfen.

Viele Grüße
Hannes  
Hallo Hannes,

ich muss mich bei dir entschuldigen. Lesen hilft. würde mir auch helfen.

aber, du wirst dich da durchbeissen müssen.

die Beschreibung in der NMRA ist, gelinde gesagt, ... (nein, ich schreib das nicht).
sie ist weder trivial noch eindeutig!
da muss man 17 mal darüberlesen, vergleichen, sortieren usw. bis man versteht, was das ganze eigentlich bedeuten könnte und wie es funzen könnte.
da haben sehr kluge köpfe Sachen geschrieben, die nur sehr kluge köpfe verstehen können.
vielleicht muss man da eine Doktorarbeit zuerst machen.
und die haben eine Flexibilität eingebaut, die auch recht unverständlich ist.
für mich ist das eine unverständliche Ansammlung von Erklärungen, die ich gerne NICHT lesen will.


groß ho
Zitat - Antwort-Nr.: 7 | Name: N-Bahner94

Ich lese daraus, dass die Zentrale mir eine 10 Bit Adresse sendet und dann 8 mal immer einen Bit abfragt welcher mit einem. ACK bestätigt werden soll.
Was für mich fehlt ist, was passiert wenn alle Bits auf null sind. Der angesprochene CV Wert 0 hat? Wann muss dann ein ACK gesendet werden?


Hallo Hannes,
die Zentralen können das im Grunde machen, wie sie lustig sind. Ich hatte zum Testen meiner Entwicklung u. a. eine "mittelalte" Arnold-Zentrale, die hat das CV-Lesen so implementiert, dass sie den Byte Verify von 0 aufwärts bis 255 so lange durchführt, bis der Decoder "zuckt". Ist natürlich recht zeitraubend.

Neuere Zentralen prüfen daher üblicherweise mit Bit Verify die Bits 0 bis 7. Ob dabei auf 0-Bits oder 1-Bits geprüft wird ist im Grunde egal. Wenn KEIN Acknowledge kommt, dann "weiß" die Zentrale allerdings nicht, ob der Wert nicht übereinstimmt oder der Decoder einfach gar nicht reagiert.

Schlechte Implementierungen (wie beim Viessmann Commander) geben dann einfach einen Wert "0" (oder "255") aus, wenn überhaupt kein Decoder vorhanden ist.

Bessere Implementierungen prüfen den ermittelten Wert nochmals. Entweder macht man das, indem man bei fehlendem Acknowledge nochmal den inversen Bit-Wert prüft (dann MUSS ein Acknowledge kommen, wenn der Decoder "lebt"), oder man prüft zum Schluss den ermittelten Wert nochmals mit Byte Verify, auch dann MUSS bei korrekter Kommunikation nochmal ein Acknowledge kommen. Die Variante mit Bit- und abschließendem Byte Verify ist die Methode, die am wenigsten Zeit brauchen dürfte.

Ich hoffe, das hilft Dir weiter.

Viele Grüße,
Torsten
Kannst ja zuerst bytewise fragen ob cv=0 und wenn nicht dann bitwise die Bits durchgehen.

Edit: oder eine Kombination von dem und was oben vorgeschlagen wurde.


Alte Lenzdecoder machen entgegen der Norm mehrere Impulse mit 5ms.

Es steht nirgends dass nur ein ack generiert werden darf.

Machst du dann deine source publik mit BSD oder GPL Lizenz?

Grüße,
Harald.
Hallo Harald,
Hannes programmiert den (Funktions-)Decoder, nicht die Zentrale. Da die Norm aber nur den Rahmen vorgibt, wie der Ablauf aussehen muss, nicht aber die konkrete Implementierung, habe ich in #9 einfach mal aufgezeigt, wie verschiedene Zentralen so ticken.

Sicher ist beim kombinierten Bit-/Byte-Verify eigentlich nur die Methode, nach Abschluss des bitweisen Lesens nochmal den Byte-Wert zu prüfen. Ansonsten besteht immer die Gefahr, dass wenn der Decoder den Kontakt verliert unerkannt falsche Werte gelesen werden. Die statistisch schnellste Methode dürfte dann sein, nur 7 Bits zu prüfen und zum Schluss ein- oder zweimal den Byte-Wert. Das sind dann im Mittel 8,5 Lese-Operationen.

Letztlich muss Hannes' Software aber mit allen Spielarten klar kommen, aussuchen kann er sich das nicht.

@Hannes: Da Deine Software ja offenbar fürs Schreiben von CVs bereits vollständig ist, hast Du eigentlich auch für das Lesen von CVs schon 99% erreicht. Du erzeugt beim Lesen dann den Ack-Impuls einfach dann, wenn der angefragte Bit- bzw. Byte-Wert mit dem gespeicherten überein stimmt. Das wars.

Viele Grüße,
Torsten




Nur registrierte und eingeloggte User können Antworten schreiben.
Einloggen ->

Noch nicht registriert? Hier können Sie Ihren kostenlosen Account anlegen: Neuer N-Liste Account





Zum Seitenanfang

© by 1zu160.net;