Il y a beaucoup d’explications sur les variables de configuration (CVs) en ligne, voici ma version en espérant qu’elle aidera certains.

Au début était le DCC

Le DCC est basé sur un système de contrôle de train numérique développé par Lenz en Allemagne. L’organisme de standardisation des trains miniatures Américain (NMRA) l’a choisi, amélioré, et renommé en DCC (plus ici en anglais).
Souvenons-nous. En commande de train analogique (DC en anglais), les choses étaient simples. Plus de courant sur les voies, les trains vont plus vite. Toutes les locomotives réagissent ensemble. C’est le même principe qu’une ampoule derrière un variateur.

Dans un réseau digital en DCC (comme d’ailleurs, dans les systèmes concurrents), le courant est toujours présent sur les voies. Les décodeurs installés dans les locomotives en tirent leur energie, et analysent les informations DCC insérées dans le signal (avancer, allumer les feux…).
Chaque locomotive devient intelligente, et peut répondre aux instructions indépendamment.

Les variables de configuration (CVs) sont tout simplement les élements de configuration du décodeur.
Changer les CVs, c’est changer la configuration de la locomotive (son adresse, sa vitesse max…).

Il existe de nombreux CVs et ils sont numérotés. « Qui fait quoi » est régit par la norme DCC…ou pas:

  • Certains CVs sont standardisés. Par exemple le CV#1 sera toujours l’adresse courte de la locomotive.
  • Certains CVs sont théoriquement standardisés. Certains fabricants de décodeurs ne respectent pas la norme pleinement, et les utilisent pour d’autres réglages.
  • Des plages entières de CVs sont volontairement laissées à disposition des fabricants, pour les fonctions qu’ils veulent pouvoir définir pour leurs décodeurs.

Les octets et les bits nous parlent

Dissection d’un CV

Un CV, d’un point de vue « humain », c’est un tiroir qui contient une information. Ça parait facile? Pas pour longtemps.

Un CV est un fait un octet (en anglais « byte » avec un Y), c’est à dire qu’il représente 8 bits (avec un I).
Un bit est une information binaire: 0 ou 1 (et plus poétiquement, la base de notre société moderne).
Pourquoi un octet contient 8 bits? C’est une autre histoire, voir Wikipédia.

Un dernier point, important pour nous en modélisme ferroviaire digital: les bits des octets (donc des CVs) sont numérotés de droite à gauche. C’est logique, on fait pareil dans notre système décimal (« 2 » est l’unité dans le nombre « 12 »).
Enfin, moins intuitif: le premier bit de droite est le numéro 0, le dernier à gauche est donc le bit numéro 7.

Je vous présente notre premier CV:

DCC Configuration Variables (CV)

Savoir compter en binaire…mais pas trop

Nous voulons comprendre les décodeurs de train, pas devenir ingénieur informatique. Un minimum d’information sur le système binaire est malheureusement nécessaire.
Chaque bit correspond à une valeur en décimal (c’est un raccourçi, mais cela nous suffira).

Voici notre premier CV, et les valeurs individuelles de ses bits en décimal:

CVs (Variables de configuration) en DCC

Chaque bit supérieur (plus à gauche) est le double de son prédécesseur. Facile!
Donc, pour connaître la valeur maximum d’un CV, il suffit de sommer tous ses bits:

0 0 0 0 0 0 0 0 = 0
0 0 0 0 0 0 0 1 = 1
0 0 0 0 0 0 1 1 = 1 + 2 = 3
0 0 0 0 0 1 1 1 = 1 + 2 + 4 = 7
0 0 0 0 1 1 1 1 = 1 + 2 + 4 + 8 = 15
0 0 0 1 1 1 1 1 = 1 + 2 + 4 + 8 + 16 = 31
0 0 1 1 1 1 1 1 = 1 + 2 + 4 + 8 + 16 + 32 = 63
0 1 1 1 1 1 1 1 = 1 + 2 + 4 + 8 + 16 + 32 + 64 = 127
1 1 1 1 1 1 1 1 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255

Nous y voilà donc: un CV peut au maximum prendre la valeur 255.
C’est pourquoi, par exemple, vous ne pouvez pas sauveragder une adresse longue de type 434 dans un unique CV.
Bien sûr, en variant les combinaisons des bits, un CV peut prendre 256 valeurs différentes (0 inclus).  C’est un nombre assez commun en informatique également.

Les merveilles des CVs

Dans un monde idéal, chaque CV contiendrait une unique information. Malheureusement, ce n’est pas le cas. Le DCC est une norme assez ancienne. Vous savez déjà cela si vous avez programmé certains décodeurs.

Les CVs peuvent en fait contenir:

  • Une information unique
    Exemple: adresse courte (1-127) dans le CV#1
    Pourquoi 127 et pas 255? Parce que la norme DCC interdit d’utiliser le dernier bit 7 (en Motorola, il est autorisé, l’adresse peut donc aller jusqu’à 255).
  • Une partie d’information (information supérieure à 255)
    Exemple: adresse longue répartie dans les CVs 17 & 18.
  • Plusieurs informations
    Exemple: Le CV 29, qui contient le sens de marche, le nombre de pas de vitesse…

On vient juste de devoir accepter, à notre corps défendant, que les CVs étaient limités à 255.
Pourquoi diable faut il aussi enregistrer plusieurs infos dans un seul CVs? Ne serait-ce pas plus simple et propre d’avoir chaque info dans un CV séparé?
Sans avoir recherché pourquoi, il y a une bonne explication, au moins partielle. Elle tient à la taille de mémoire limitée des puces d’il y a 10 ans: il fallait tout faire rentrer, dans peu de place.

Mais venons-en à nos trains…

L’enfer de la programmation

Les CVs contenant des informations multiples

Les fabricants de décodeurs savent que compter en binaire n’est pas une seconde nature. Dans la mesure du possible donc, ils parlent en décimal dans leurs manuels.
Si vous avez un CV qui a une fonction unique, il suffit de dire à votre centrale de sauvegarder cette valeur décimale dans le CV (par exemple: réduction d’intensité des lampes de 1 à 255 dans un CV).

Mais cela se complique quand un CV contient de multiples informations.
Prenons le CV#29 comme exemple (la norme DCC le définit comme « multi-tâche »).

Le manuel du décodeur pourrait ressembler à cela:

  • 0 = Sens de marche standard
  • 1 = Sens de marche inversé
  • 0 = Répondre à l’adresse courte stockée dans le CV#1
  • 128 = Répondre à l’adresse longue stockée dans les CV#17 & CV#18

Dans la plupart des cas, les manuels expliquent bien ce qu’il faut faire. On fait la somme (décimale) de toutes les options que l’on veut, et on l’injecte dans le CV. Dans notre exemple simplifié:

  • CV = 0 : Sens standard, adresse courte
  • CV = 1 : Sens inversé, adresse courte
  • CV = 128 : Sens standard, adresse longue
  • CV = 128 + 1 = 129 : Sens inversé, adresse longue

Les manuels pas sympas

Que se passe-t-il si le manuel du décodeur commence à vous insulter avec du language d’informaticien, tel que:

Activation des feux à l’arrêt: le bit 6 du CV#99 doit être « high » (ou « actif » selon les traductions). 

Ne paniquons pas. Un bit « high » est un bit égal à 1, un bit « low » est un bit égal à 0.

Donc, on veut prendre notre CV#99 qui ressemble à cela:

X 0 X X X X X X
(« X » indique les autres bits, qui ont pour valeur 0 ou 1)

Et le transformer en:

1 X X X X X X

Les plupart des centrales de commande DCC permettent la configuration des CVs en mode décimal. C’est à dire par exemple « met la valeur 234 dans le CV#99 ». Peu de centrales permettent la programmation « visuelle » bit par bit (par exemple l’ESU ECOS II, ou un programmeur sur ordinateur).
Dans la plupart des cas, il faut donc convertir ce que l’on veut faire du binaire vers du décimal.

Dans notre exemple, que faire? Facile. Souvenons-nous des valeurs décimales de chaque bit. Le bit 6 a pour valeur 64. 64 est donc la valeur magique qui fera que nos feux s’allumeront à l’arrêt.
Mais on ne veut pas configurer directement le CV#99 comme étant égal à 64. Pourquoi? Parce que les autres bits contiennent peut être déjà d’autres informations sur d’autres options (donc le CV#99 n’est pas égal à 0).

En lisant la valeur actuelle du CV#99, supposons qu’elle est égale à 3:

0 0 0 0 0 0 1 1

Il faut donc injecter 64 + 3 = 67 dans notre CV#99.
67, cela ressemble à cela:

1 0 0 0 0 1 1

Comme vous le voyez, nous avons conservé les options déjà existantes (les bits 0 et 1 sont toujours « high »), et nous avons ajouté notre option de feux à l’arrêt (le bit 6 est désormais aussi « high »).

Vous êtes désormais un pro de la programmation!
Franchement, je me suis senti bien qu’en j’ai enfin compris tout cela…

Décoder une valeur de CV

Voici le cas de figure inverse. Comment décoder une valeur de CV en décimal, pour comprendre quelles options il contient?

Grâce à la nature du système binaire, chaque valeur décimale entre 0 et 255 correspond à une unique combinaison des 8 bits.

Disons que vous avez un CV qui a pour valeur 98. Vous avez oublié quelles options il contient, et 98 en décimal ne vous aide pas.
Il va falloir le décomposer en binaire. Pour cela, il vaut mieux mémoriser une fois pour toutes les valeurs que peuvent prendre les bits (1286432168421).

Ensuite, il suffit de faire des soustractions, en partant du bit le plus élevé:

  • Puis-je soustraire 128 de 98? Non, le bit 7 est low. Je garde 98.
  • Puis-je soustraire 64 de 98? Yes, le bit 6 est high. Je retiens 98 – 64 = 34
  • Puis-je soustraire 32 de 34? Yes, le bit 5 est high. Je retiens 34 – 32 = 2.
  • Puis-je soustraire 16 de 2? Non, le bit 4 est low. Je garde 2.
  • Puis-je soustraire 8 de 2? Non, le bit 3 est low. Je garde 2.
  • Puis-je soustraire 4 de 2? Non, le bit 2 est low. Je garde 2.
  • Puis-je soustraire 2 de 2? Yes, le bit 1 est high. Je retiens 2 – 2 = 0.
  • Puis-je soustraire 1 de 0? Non, le bit 0 est low.

Ça parait compliqué, mais cela devient très vite une habitude. Quel beau hobby que le train miniature, n’est-ce pas?
En tous cas, voilà notre CV mis à nu, 98 en binaire, c’est:       0 1 1 0 0 0 1 0

Si on reprend notre exemple précédent, le bit 6 est high. Donc oui, les feux s’allumeront à l’arrêt dans ce train!

Assez par pité!

Voilà, ce sont les bases.

Nous avons vu comment déchiffrer un CV depuis le décimal vers le binaire et inversement.
Surtout, on comprend maintenant pourquoi certains manuels de décodeurs sont moins agréables à lire qu’un roman: les CVs ne datent pas d’hier. Ce sont des « briques » d’information qui contiennent au maximum 256 valeurs, et dans lesquelles on essaye parfois de faire rentrer beaucoup d’informations différentes.

Il y a beaucoup d’autres ressources en ligne qui vont plus loin, ou expliquent cela d’une manière différente. Dans tous les cas, je pense que ces bases sont importantes à avoir.

Il serait dommage de rester bloqué devant un méchant manuel de décodeur, après avoir installé un décodeur dans une locomotive toute neuve!