LE DCC, comment ça marche ?

Tous les amateurs de trains miniatures vous le diront : le DCC ça paraît magique !!!
Mais au risque de vous décevoir, il n'en n'est rien !
En fait, ce n'est que de la logique poussée loin loin loin...et un peu d'électricité.



Je vous propose de démystifier la chose.
Vous trouverez dans les quelques lignes ci-dessous les explications sur le fonctionnement du DCC. Je vais tenter d'expliquer le plus clairement possible mais je préviens les allergiques à la technique : il faut quand-même quelques bases (ça commence tout doux mais le niveau monte vite !). Pour ma part, ayant développé mon propre décodeur, j'ai dû me frotter à ce protocole et j'ai constaté des points durs. C'est ce qui me motive pour rédiger cet article, afin que d'autres évitent les mêmes écueils.


1- Un peu d'électricité :

Vous savez déjà que la tension dans les rail n'est pas continue. C'est déjà un bon point !
Cette tension varie donc...mais comment ? Voici la réponse :


La figure ci-dessus vous montre qu'un rail (le noir) reste toujours à zéro volt (autrement dit "la masse") tandis que la centrale, sans rien vous dire, fait varier la tension sur l'autre rail (le rouge) en envoyant des tensions symétriques rectangulaires (généralement +/- 18V).

Un créneau positif (+18V) est donc immédiatement suivi d'un créneau négatif (-18V) DE MEME DUREE. Cette durée identique est importante au cas où votre locomotive serait placée "en sens inverse" sur les rails.
Cette symétrie des tensions n'a ainsi aucune conséquence sur le fonctionnement du décodeur en cas de branchement à l'envers.


2- Comment le décodeur attrape-t-il l'information ? :

D'abord, il faut adapter la tension...sinon, 18 volts....SCRZOUICZ....et PAF ! c'est grillé !

Dans le décodeur, il y a un optocoupleur intégré (voir ici) qui permet de séparer les circuits. Cela transmet donc les créneaux reçus en annulant la tension perçue comme "négative" et en diminuant la tension positive.


Il peut maintenant commencer à comprendre le message qui lui est envoyé :
Il va se borner à mesurer la durée du signal qu'il voit comme "positif" et ignorer joyeusement le créneau "nul".

Un créneau long correspond à "0" sinon c'est une info "1"
Les durées indiquées sont assez précises. C'est là que réside toute l'astuce :
    - Un créneau court (environ 58 microsecondes) sera interprété comme une information "1"
    - Un créneau long (environ 110 microsecondes) sera interprété comme une information "0"

Bin oui....c'est presque du morse !!! Y'a des signaux "longs" et des signaux "courts".

Ces informations "1" ou "0" s'appellent des bits (de l'anglais "Binary Digit")

Evidemment, un seul bit ("1" ou "0")  n'est pas suffisant pour obtenir tous les ordres que nous souhaitons.
Par définition, un ordre binaire ne contient que deux états possibles donc deux informations différentes.
C'est pourquoi, afin d'augmenter le nombre d'informations possibles on regroupe ces "bits" dans des séries de 8 bits consécutifs, ce qui constitue un octet (vient du grec "octo" qui signifie "8").
L'association de ces 8 bits permet d'obtenir 256 informations différentes :
Information 1 0 0 0 0 0 0 0 0
Information 20 0 0 0 0 0 0 1
Information 30 0 0 0 0 0 1 0
Information 40 0 0 0 0 0 1 1
Information 50 0 0 0 0 1 0 0
Information 60 0 0 0 0 1 0 1
etc............
Information 2561 1 1 1 1 1 1 1
La centrale envoie donc une série d'octets consécutifs de façon à multiplier les ordres possibles. C'est ce qu'on appelle "la trame"
Par exemple :    1111111111 0 00010111 0 01110110 0 01100001 1
Comment çà, "on n'y comprend rien..." ?. Je vous rassure, la centrale, elle ne comprend QUE CA ! Voyons comment elle fait  :


3- La trame :

Voici une série de plusieurs trames consécutives avec leur signification en jaune. On reviendra plus tard sur la signification, pour l'instant, penchons nous sur la structure de cette trame.
(je signale que cette image n'est pas de moi, mais j'ai perdu l'adresse de l'auteur....s'il se reconnait, qu'il me contacte, merci.)




Toutes les trames obéissent à la même structure pour que la centrale et le décodeur puissent se comprendre.
Les informations arrivent donc dans un ordre précis sous forme d'octets (3 au minimum, et 6 au maximum)

Voici une trame correspondant à l'exemple donné plus haut : (créneau court en rouge, créneau long en vert)


1: Le préambule : il permet de synchroniser la centrale et le décodeur. Ainsi, un décodeur "perdu" au milieu d'une trame va se contenter d'attendre le début de trame suivant. Il attend donc le préambule. C'est une suite de 10 bits (minimum) à "1" En pratique, ce nombre de bits varie entre 11 et 17 suivant les centrales, et peut atteindre le chiffre vertigineux de 24 lorsqu'on compte les bits à "1" de la trame précédente. Mais je m'égare....

2: Bit de START : "0" : on l'appelle aussi le bit de séparation car il est "coincé" entre deux [u]octets[/u] consécutifs.

3: Octet d'adresse : Il permet de savoir à qui s'adresse la centrale. évidemment, tout décodeur ne correspondant pas à cette adresse ignorera tout simplement le reste de la trame.

4: Bit de START : "0" : ou "bit de séparation" pour indiquer qu'un autre octet va arriver.

5: Octet de donnée :  Ou "instruction". Il contient l'ordre à exécuter.

6: Bit de START : "0" : bin oui, c'estpas fini ! il reste encore au moins un autre octet...

7: Octet de vérification : Il sert à vérifier que toute la trame a correctement été transmise. Il est calculé séparément par la centrale d'une part et par le décodeur d'autre part. Si leurs résultats concordent, alors la trame est validée et on peut exécuter l'ordre. Sinon, la trame est rejetée.

8: Bit de STOP : "1"  : Et oui, toute chose a une fin ! Ca va sans dire mais ça va mieux en le disant ! C'est précisément ce que fait la centrale en envoyant un bit à "1" pour signaler que le précédent octet était le dernier (celui de vérification).

Remarques : Cet exemple ne montre que trois octets utiles, mais sachez que :
- une trame pour locomotive fonctionnant sur 128 pas de vitesses aura au moins 4 octets.
- Si l'adresse de locomotive dépasse "128", alors il faudra y ajouter un octet. Je reviendrai sur ce point un peu plus loin.
- comme je l'ai dit plus haut, il peut y avoir jusqu'à 6 octets en tout. Dans ce cas extrême, il s'agit de trames ayant pour but de programmer le décodeur.


4- Commençons par la fin : L'octet de vérification :

Quelques précisions sont nécessaires :
La documentation DCC-NMRA se contente d'évoquer une opération OU EXCLUSIF "bit-à-bit" entre deux octets (adresse et donnée). C'est vrai bien-sûr dans le cas ci-dessus, mais l'information est insuffisante. Car en réalité, il faut effectuer la vérification après chaque octet reçu (sauf celui de vérification évidemment !).
Rappelons déjà ce qu'est une opération OU EXCLUSIF : On associe deux bits pour obtenir un résultat qui varie comme suit :
Premier bitSecond bit     Résultat du OU EXCLUSIF  
000
011
101
110

L'opération se fait membre à membre. C'est à dire que le premier bit du premier octet est combiné avec le premier bit du deuxième octet pour obtenir le premier bit du résultat. Et ainsi de suite avec chaque bit de chaque octet.
Ainsi, pour 4 octets consécutifs, on a le schéma suivant :




5- Codage des informations :

Mea culpa : Je vous ai induit en erreur (volontairement, c'est purement pédagogique). Car la répartition annoncée ci-dessus "octet adresse" et "octet instruction" est un peu simpliste...
En réalité, chaque octet peut contenir un peu "d'adresse" et un peu "d'instruction".
(J'en profite pour faire un jeu de mot vaseux : Il faut de l'adresse et de l'instruction pour piger tout çà...non ?)


5-1 Regardons une trame destinée à un accessoire :


Après le préambule on trouve :
- la succession " 10 " dans l'octet1 qui indique que la trame est destinée à un accessoire.
- le bit " 1 " qui indique que l'adresse "aaaaaa  aaa" est codée sur 9 bits en tout (soit 510 adresses, voir tableau ci-dessous).
- l'instruction " DDD " qui indique quelle est LA sortie qu'ilil faut allumer parmi les huit possibles (voir tableau ci-dessous).
- Et la vérification "0vvvvvvv"

Donc, un décodeur (= une adresse) peut contrôler 8 sorties (= 8 bobines d'aiguillages ou 8 lumières etc...). Voici le détail du codage de l'instruction : (la sortie correspondante sera "allumée")
DDDSortie allumée
000Sortie 1
001Sortie 2
010Sortie 3
011Sortie 4
100Sortie 5
101Sortie 6
110Sortie 7
111Sortie 8

L'adresse est codée sur 9 bits : Il serait trop long de faire le tableau complet mais voici un aperçu, sachant que les 3 bits "AAA" situés dans l'octet2 sont les plus significatifs :
aaa de l'octet 2aaaaaa de l'octet 1Décodeur n°
000000000 broadcast
0000000011
0000000102
0000000113
.........
00011111163
00100000064
00100000165
.........
111111110510
111111111511
Petite particularité pour les trois bits "AAA": pour une raison qui m'échappe, ils sont transmis à l'état inversé. C'est à dire qu'une valeur "1" sera affichée "0" dans la trame, et vice-versa. Probablement pour raccourcir la durée de la trame la majorité du temps ????

Pour être complet concernant les accessoires, il faut évoquer la trame destinée aux accessoires dont l'adresse dépasse 511. Dans ce cas, on ajoute deux bits à l'adresse ce qui permet d'atteindre 2047 décodeurs. Evidemment, il faut ajouter un octet dans la trame sinon ça ne passe pas. Remarquez les différences avec la trame précédente :

Je ne détaillerai pas car j'admets ignorer comment se cache l'instruction située sous les "xxxxx". Cependant le fonctionnement semble être le même....

5-2 Regardons maintenant une trame destinée à une locomotive :

Ces trames possèdent la particularité de commencer par la séquence "  0 " ou bien " 11 " suivant que l'on utilise une adresse courte (7 bits=>127 décodeurs) ou une adresse longue (14bits => 16362 décodeurs). Evidemment, pour chacun de ces deux cas la longueur de la trame s'en trouve modifiée !

Remarquez que l'octet d'instruction "01Dvvvvv" est composé ainsi :
- Il commence par la séquence invariable " 01 " qui indique un codage de vitesse sur 28 ou 14 pas.
- "D" est la direction de la loco (1=marche avant , 0=marche arrière)
- "V0V4V3V2V1" est l'indication dela valeur de la vitesse suivant le tableau ci-dessous.
- Remarquez aussi que V0 est bizarrement placé dans la trame. En pratique, il sert à basculer entre les modes 14 pas ou 28 pas de vitesse (1=28 pas , 0=14 pas).
V4 V3 V2 V1 + V0Vitesse obtenue
0 0 0 0   xArrêt progressif
0 0 0 1   xArrêt d'urgence
0 0 1 0   0 Vitesse 1
0 0 1 0   1Vitesse 2
0 0 1 1   0Vitesse 3
0 0 1 1   1Vitesse 4
......
1 1 1 0   1Vitesse 26
1 1 1 1   0Vitesse 27
1 1 1 1   1Vitesse 28

Vous devez certainement piaffer d'impatience en vous disant "et la trame pour 128 pas de vitesse c'est comment?"
La réponse est ici :
Voici l'allure pour les loco dont l'adresse de décodeur codée sur 7 bits (adresse<128)  ou sur 14 bits (adresse>127) :

Remarquez que :
    - L'octet 2 commence  maintenant par la séquence " 001" qui indique que l'octet sivant est entièrement consacré à la vitesse
    - L'octet 2 est rempli de bits " 11111 " absolument stériles.... !!! c'est du remplissage pas cher !!!
    - L'octet 3 commence par un bit "D" qui indique le sens de circulation.
    - Les données "V0 à V6" indiquent la vitesse en code binaire évidemment. (sur 7 bits donc 128 vitesses possibles !)

Ca commence à devenir sympa cette affaire là !


5-3 : Et si je veux piloter les fonctions de la loco ?

Simple ! Le point clé se situe au début de l'octet n°2 : le code " 1XX " détermine les plages de fonctions que l'on souhaite atteindre :

L'allumage ou l'extinction d'une fonction se fait en plaçant un "1" ou un "0" au niveau de la fonction voulue (à la place du chaque Fx).
Remarquez la particularité de la fonction "FL" qui signifie "Front Light". C'est ce bit qu'il faut mettre à "1" pour allumer les feux de la loco.

Evidemment, dans le cas d'une loco dont l'adresse est supérieure ou égale à 128, il suffit d'interposer l'octet d'adresse complémentaire au niveau de l'octet 2. Si vous comptez bien, on en est à 5 octets transmis par cette trame. Pas mal, non?



C'est fini m'sieur? j'en peux plus !
...eh bin non, il en reste encore !
Et oui...réfléchissez un instant chers amis....comment faites-vous pour programmer votre loco ? Si vous avez pigé tout ce qui précède, alors la suite ne sera qu'une formalité !

6- Programmation des CV de votre décodeur DCC :

En regardant les codes formés par les trois premiers bits de l'octet 2 on s'aperçoit que le code " 111 " n'a pas encore été utilisé. C'est celui-là qui donne accès aux précieuses variables de configuration :

Ici encore, ce sont les deux premiers bits qui permettent de distinguer les locos à 7 ou 14 bits d'adresse.
Sur cette image, vous avez pu observer deux possibilités de configuration du décodeur. Elles se distinguent par le quatrième bit de l'octet 2

Bit 4 de l'octet 2Mode de programmation
 1  "forme courte" qui accède aux variables d'accélération de la machine (CV23 et cv24).
 0 "forme longue"qui permet d'accéder à toutes les CV .
Dans le cas de la forme longue :
- les 10 bits " Cv " permettent de pointer sur l'une des adresse des variables de configuration. (512 variables au total)
- l'octet " DDDDDDDD " est bien-sûr la donnée à placer dans la fameuse Cv (= 0 à 255)
- J'ai oublié les deux premiers bits "CC" : ils définissent comment accéder à la variable :
bits "CC"action effectuée
0 0(rien)
0 1vérification de l'octet
1 0écriture de l'octet
1 1manipulation de l'octet(??)

Nous voici arrivés à la fin de ce récapitulatif. J'espère que ça vous aidera à mieux comprendre les méandres de la commande digitale.
Je signale que les document "officiels" de la NMRA sont sur leur site officiel en téléchargement (fichier pdf). ils sont en anglais.
Vous pouvez aussi consulter quelques liens vers :
 wikipedia informations générales
Dccwiki
CVwiki
siteperso1
persoCV
les CV en dcc
... et il y en a beaucoup d'autres ...


Retour en haut de la page