Ce n’est que de la logique poussée… et un peu d’électricité.
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.
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 même durée. 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 :
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 :
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. C’est pourquoi la centrale envoie toute une série de bits consécutifs. C’est ce qu’on appelle « 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.
DCC, comment ça marche? Place à la technique ! Trames10
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’évenements clés :
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…
Bit de START : « 0 » on l’appelle aussi le bit de séparation car il est « coincé » entre deux octets consécutifs.
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.
Bit de START : « 0 ». ou « bit de séparation » pour indiquer qu’un autre octet va arriver.
Octet de donnée : Ou « instruction ». Il contient l’ordre à exécuter.
Bit de START : « 0 ». bin oui, c’estpas fini ! il reste encore au moins un autre octet…
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 trave est validée et on peut exécuter l’ordre. Sinon, la trame est rejetée.
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 :
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 ?)

Après le préambule on trouve :
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 ».
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 :
| 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 :
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 .
| 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.