La valeur de l'adresse DMX affichée en clair (en décimal) sur les roues codeuses est convertie en valeur binaire codée sur 9 bits. Le système peut en outre recevoir la valeur de l'adresse DMX par le biais d'un port série RS232 (avec ou sans adaptateur USB/RS232).
La configuration habituelle d'une adresse DMX s'effectue au moyen de 9 micro-interrupteurs, soit un total de 9 fils de liaisons (sans compter le point commun). Une configuration effectuée avec des roues codeuses réclame quant à elle 11 fils de liaison, soit "juste" 2 fils de plus.
Alors pourquoi imposer aux utilisateurs de matériels lumière de jongler avec un code binaire (000000000 à 111111111), quand on peut leur proposer un affichage en décimal (000 à 512), façon de faire bien plus confortable pour notre cerveau ? La raison principale ne tient qu'à un "détail" : le coût de fabrication. Neufs interrupteurs "DIL" joliment alignés coûtent toujours moins cher que trois roues codeuses, quelle que soit la forme de ces dernières (pour circuit imprimé ou pour panneau/face avant).
Il est certain que ce projet n'est pas une révolution en soi. Mais je pense qu'il est intéressant d'en parler.
Remarque : je passe volontairement sous silence la méthode de lecture de l'adresse DMX qui utilise le multiplexage pour réduire le nombre de fils requis : 6 fils avec des micro-interrupteurs ou 7 fils avec des roues codeuses. Cette méthode avec multiplexage réclame moins de lignes d'entrée/sortie, mais en revanche elle nécessite un poil de code logiciel supplémentaire (qui reste simple à implémenter).
Les trois roues codeuses SW1 à SW3 (centaines, dizaines et unités) sont lues à intervales réguliers (100 fois par seconde). Si un changement de la valeur affichée en décimal est détecté, l'état logique des lignes de sortie D0 à D8 (9 bits) est mis à jour en conséquence. Le principe de fonctionnement est très simple : les trois valeurs binaires sont lues et traduites en valeurs décimales (centaines, dizaines et unités) avant d'être additionnées.
Exemple avec affichage canal DMX "001"
: centaines = 0000
(0) ; dizaines = 0000
(0) ; unités = 0001
(1)
Exemple avec affichage canal DMX "113"
: centaines = 0001
(1) ; dizaines = 0001
(1) ; unités = 0011
(3)
Exemple avec affichage canal DMX "384"
: centaines = 0011
(3) ; dizaines = 1000
(8) ; unités = 0100
(4)
Exemple avec affichage canal DMX "512"
: centaines = 0101
(5) ; dizaines = 0001
(1) ; unités = 0010
(2)
A noter que le quatrième bit de la roue codeuse des centaines (SW1) n'est pas utilisé, puisque ses trois bits de poids faible suffisent pour atteindre la valeur 7 (et donc 700). Bien entendu, le logiciel refuse toute valeur d'adresse supérieure à 512. Si une valeur supérieure à 512 est affichée par les roues codeuses, alors la valeur d'adresse retenue est "512".
L'état logique des lignes de sortie D0 à D8 (9 bits) peut également être mis à jour lors de la réception d'une trame de commande spécifique. Pour être reconnue (acceptée), la trame doit être composée de 2 octets construits selon le modèle binaire suivant (2 x 8 bits) :
0101010[d8] [d7][d6][d5][d4][d3][d2][d1][d0]
Les 7 bits de poids fort [d15]
à [d9]
marqués 0 ou 1 doivent obligatoirement porter la valeur "0101010".
Les 9 bits suivants [d8]
à [d0]
portent la valeur du canal DMX
Exemple pour canal DMX "001"
: octets à envoyer = 0x54
0x01 (%01010100-00000001)
Exemple pour canal DMX "113"
: octets à envoyer = 0x54
0x71 (%01010100-01110001)
Exemple pour canal DMX "384"
: octets à envoyer = 0x55
0x80 (%01010101-10000000)
Exemple pour canal DMX "512"
: octets à envoyer = 0x55
0xFF (%01010101-11111111)
Toute valeur reçues supérieure à 0x55 0xFF est systématiquement rejetée. Un silence de 10 ms doit être observé avant l'envoi d'une nouvelle trame de 2 octets.