1/160 - Echelle N

Le Forum consacré à l'Echelle N
 
AccueilAccueil  PortailPortail  ÉvènementsÉvènements  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
N'hésitez pas à consulter le calendrier et les événements du forum pour voir les manifestations près de chez vous !
Le Deal du moment :
Display Star Wars Unlimited Ombres de la Galaxie : ...
Voir le deal

 

 Décodage de la norme DCC !

Aller en bas 
AuteurMessage
Trusty
Membre
Membre
Trusty


Masculin Age : 61
Localisation : Melun
Nombre de messages : 942
Date d'inscription : 08/10/2012

Décodage de la norme DCC ! Empty
MessageSujet: Décodage de la norme DCC !   Décodage de la norme DCC ! Icon_minitimeDim 5 Oct 2014 - 15:47

Ca y est, j'ai enfin trouvé. Perturbé depuis des lustres par la norme DCC sur les accessoires, je me languissais de comprendre pourquoi les décodeurs sur Arduino comme celui de mynabay refusaient de me donner un numéro d'accessoire correct, conforme à celui demandé à ma Mobile Station 2. Si j'active l'accessoire 317, c'est l'id 80 qui sort dans Dcc_monitor ! Si c'est l'accessoire 22 que j'active, c'est 6 qui sort ! Étrange...

Pour comprendre, j'ai fait du rétro engineering... J'ai essayé de faire coller la réalité des valeurs reçues à ce que je voulais obtenir. Cela ajouté à la recherche google-isée forcenée, et la lumière fût !

D'abord, voyons ce que dit la norme sur le site
NMRA
. Un paquet de commande d'accessoire dans sa forme la plus simple se décrit comme suit:

11111111 0 10AAAAAA 0 1aaaCDDD 0 xxxxxxxx 1

Le code 11111111 donne le départ du paquet, ensuite les groupes de huit bits, les octets, sont séparés par des zéros, le 1 termine le paquet. Le dernier octet xxxxxxxx n'est que le xor (ou exclusif)) des deux précédents. Si le décodeur n'obtient pas le même résultat par son propre calcul que celui reçu, le paquet ne doit pas être utilisé. C'est un mode de contrôle. La partie intéressante pour nous est dans les deux octets du centre.
L'id du décodeur est donné par aaaAAAAAA où aaa est bien la partie des bits 4 à 6 du second octet (En binaire, la numérotation des bits part de 0 à partir de la droite...) , mais complémenté à deux. Ce qui signifie que chaque 1 est remplacé par un 0 et inversement. Pourquoi cette bizarrerie ? Parce qu'en DCC, un 0 est représenté sur les rails par un signal deux fois plus long qu'un 1, et que la plupart du temps ces trois bits sont inutilisés, donc à 0. Pour réduire la durée des paquets, mieux valait avoir des bits à 1 qu'à 0 ! Le bit C active ou non l'accessoire. Par exemple pour un accessoire impulsionnel comme un aiguillage, tant que le doigt de l'utilisateur reste sur le bouton, la commande envoie des paquets avec 1 dans C, lorsqu'il relâche, la commande envoie un unique paquet avec 0.
La partie DDD est celle qui m'a posé le plus de problème jusqu'à ce que je me souvienne de la définition d'un décodeur d'accessoire par le NMRA : c'est un dispositif capable de commander 4 couples de deux accessoires, soit huit sorties différentes pour une seule adresse DCC !
Donc, et contrairement à ce que je croyais avoir compris, un accessoire DCC n'est pas seulement adressé par un identifiant, mais bien par un identifiant de décodeur, suivi d'un numéro de sortie.
Prenons le seul cas que je suis en mesure de tester : ma Mobile Station 2 de Trix. Que se passe t-il lorsque je demande d'activer le coté 'rouge' de l'accessoire 317 ? Voici le binaire reçu :

10AAAAAA 1aaaCDDD
-------------------------
10010000 11101000   deux fois puis
10010000 11100000

aaa donne 110, soit inversé 001.
aaaAAAAAA donne donc 001 010000 , soit 80 en décimal.  C'est l'identifiant du décodeur. C est à 1 pour l'activation envoyée deux fois, puis à 0. DDD donne 000. C'est le numéro d'accessoire sur le décodeur. Si je tape maintenant le vert sur la MS2, j'obtiens :

10AAAAAA 1aaaCDDD
-------------------------
10010000 11101001   plusieurs fois puis
10010000 11100001

on voit que c'est identique, sauf que le numéro d'accessoire DDD est devenu 001 . Si j'essaie sur l'accessoire MS2 318 rouge, j'obtiens 80 et 010 (2 en décimal). Pour le vert, 80 et 011 (trois en décimal), et ainsi de suite jusqu'à 320 vert qui donne 80 et 111, soit 7 en décimal. Si j'essaie sur le 315 Vert, j'aurais 79 et 7.
Code:

Décodeur       sorties
+---------+    +- 1 --   317 / rouge     10 010000      1 110 C 000
|         |    +- 2 --   317 / vert      10 010000      1 110 C 001
|         |    +- 3 --   318 / rouge     10 010000      1 110 C 010
|   80    |----+- 4 --   318 / vert      10 010000      1 110 C 011
|         |    +- 5 --   319 / rouge     10 010000      1 110 C 100
|         |    +- 6 --   319 / vert      10 010000      1 110 C 101
|         |    +- 7 --   320 / rouge     10 010000      1 110 C 110
+---------+    +- 8 --   320 / vert      10 010000      1 110 C 111
Ouf. Je n'ai plus qu'à appliquer ça à ma librairie d'accessoires, qui du coup devrait mieux prendre en compte ce que dit la MS2.
Pour les autres commandes du marché, je n'ai pas les moyens de tester. Si d'autres veulent le faire et dire ici quel est leur mode de fonctionnement, ce serait utile à tout le monde. Il 'suffit' de faire fonctionner DCC_decoder de mynabay et de noter les paquets de bits reçus lorsque l'on active ou pas un accessoire.
Revenir en haut Aller en bas
http://www.lapajaparis.net
 
Décodage de la norme DCC !
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Norme LGV AFAN
» Norme menuiserie du réseau ?
» Module de cdlc: "Le Lac" 2012 (norme AFAN LGV).
» Mon premier projet, quelle norme de module ?
» Norme T-TRAK pour les coulisses ? écartement des voies, etc ...

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
1/160 - Echelle N :: Modèles réduits à l'echelle N :: Electricité / Electronique-
Sauter vers: