Stéphane Ravaut est un modéliste actif sur Forum Train Miniature, aujourd’hui il partage le savoir sur le DCC et le système en lui même qu’il acquiert au profit de la construction de son réseau. Place à Stéphane.
Le DCC…on pourrait croire que c’est 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 ? Attention, c’est vraiment très précis :
La figure ci-dessus vous montre qu’un rail (le bleu) 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 (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 décodeur serait branché “à l”envers” (ou bien une loco en sens inverse).
Ce branchement à l’envers n’a ainsi aucune conséquence sur le fonctionnement du décodeur. Voici pourquoi :
2- Comment le décodeur attrape-t-il l’information ? :
Le décodeur, grâce à un optocoupleur intégré, adapte ces créneaux reçus en annulant la tension vue 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”.
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 ”
Ces informations “1 ” ou “0 ” s”appellent des bits (de l”anglais “Binary Digit” )
Évidemment, un seul bit (“1 ” ou “0 ” ) n’est pas suffisant pour obtenir tous les ordres que nous souhaitons. C’est pourquoi la centrale envoie toute une série de bits consécutifs. C’est ce qu’on appelle “la trame”
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.
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 minimum, et 6 au maximum)
Rappel : un octet est une suite de 8 bits (vient du grec “octo” qui signifie “8 ” )On constate, sur cet exemple de trame, une série d’événements clés :
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 octets 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.\r\n\r\n
6: Bit de START : “0 ” . bin oui, ce n’est pas 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- L”octet de vérification :
Quelques précisions sont nécessaires: La documentation DCC-NMRA se contente de dire que c’est une opération OU EXCLUSIF “bit-à-bit” entre deux octets (adresse et donnée). C’est vrai dans le cas ci-dessus, mais l”information est insuffisante. Car en réalité, la trame effectue systématiquement la vérification avec le dernier 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 bit | Deuxième bit | résultat OU EXCLUSIF |
0
|
0
|
0
|
0
|
1
|
1
|
1
|
0
|
1
|
1
|
1
|
0
|
Ainsi, pour 4 octets consécutifs, on a le schéma suivant :
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 est codée sur 9 bits en tout (soit 510 adresses, voir tableau).
– l’instruction “DDD” qui indique quelle sortie il faut allumer parmi les huit possibles (voir tableau).
Donc, un décodeur (= une adresse) peut contrôler 8 sorties (= 8 bobines d”aiguillages ou 8 lumières etc…)
Détail du codage de l’instruction : (la sortie correspondante sera “allumée”)
D | D | D | Sortie allumée |
0 | 0 | 0 |
Sortie 1
|
0 | 0 | 1 |
Sortie 2
|
0 | 1 | 0 |
Sortie 3
|
0 | 1 | 1 |
Sortie 4
|
1 | 0 | 0 |
Sortie 5
|
1 | 0 | 1 |
Sortie 6
|
1 | 1 | 0 |
Sortie 7
|
1 | 1 | 1 |
Sortie 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’Octet2 | AAAAAA de l’octet1 | Décodeur n° |
000
|
000000
|
(réservé)
|
000
|
000001
|
1
|
000
|
000010
|
2
|
000
|
000011
|
3
|
…
|
…
|
…
|
001
|
000000
|
64
|
001
|
000001
|
65
|
…
|
…
|
…
|
111
|
111111
|
511
|
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 latrame 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”.
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, 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)
– “vvvvv” 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.
V4 V3 V2 V1 + V0 | vitesse obtenue |
0 0 0 0 x | Arrêt progressif |
0 0 0 1 x | Arrêt d”urgence |
0 0 1 0 0 | vitesse 1 |
0 0 1 0 1 | vitesse 2 |
0 0 1 1 0 | Vitesse 3 |
0 0 1 1 1 | Vitesse 4 |
. . . . . | . . . . . |
1 1 1 0 1 | Vitesse 26 |
1 1 1 1 0 | Vitesse 27 |
1 1 1 1 1 | Vitesse 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 une loco dont l’adresse de décodeur est inférieure à 127 (adresse sur 7 bits):
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 “1 ” 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.
Voilà ce que ça donne en comparaison avec une loco codée sur 14 bits et 128 pas de vitesse : (Ca commence à devenir sympa c’t’affaire !)
Et comment je peux piloter les fonctions de la loco?
simple ! Je ne vais détailler que la trame destinée à un décodeur de loco “7bits” :
Vous remarquez que l’accès aux fonctions se fait assez simplement. Le code sur fond beige au début de l’octet2 permet de distinguer chacun des cas possibles. Ensuite, l’allumage ou l”extinction d’une fonction se fait en plaçant un “1 ” ou un “0 ” au niveau de la fonction voulue. “FL” signifie “Front Light”. C’est donc le bit à mettre à “1 ” pour allumer les feux de la loco.
Les fonctions F13 à F28 sont des extensions futures prévues par la NMRA.
Evidemment, dans le cas d”une loco sur 14 bits, vous intercalez l’octet d’adresse complémentaire au niveau de l’octet 2. Si vous avez bien compté, 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é !
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 été détaillé. C’est celui-là qui donne accès aux précieuses variables de configuration :
Sur cette image, vous voyez deux possibilités de configuration du déodeur.
La première ligne est la “forme courte” qui accède aux variables d”accélération de la machine (CV23 et cv24).
La deuxième ligne permet d”accéder à tout le reste .
– 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 1 | vérification de l”octet |
1 0 | écriture d”octet |
1 1 | manipulation 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.
Stéphane.