| www.oksidizer.com / electronic / spp2dmx / |
![]() OksiD DMX 3/1 3 sorties 1 entrée ! |
OksiD
DMX 3/1 : L’interface DMX 512 !
Copyright © 2004
Introduction :
OksiD DMX 3/1 est une interface DMX 512 utilisant le port parallèle standard (SPP)
des ordinateurs compatibles IBM. Elle comporte trois « univers » DMX en sortie et un
« univers » DMX en entrée. Les deuxième et troisième
« univers » de sortie sont optionnels. Toutes les entrées et sorties comportent 512 canaux bufférisés. Les performances en écriture vont de 40 écritures par secondes pour un
« univers » complet et 9.8 lectures/écritures pour 3 sorties + 1
entrée. (Le maximum donné par la norme DMX 512 étant de 44 écritures par
secondes). L’interface fonctionne sous Linux et Windows 95, 98 et XP. Le développement hardware et logiciel se fait de manière ouverte sous
une licence de type BSD, ce qui signifie que tous les schémas et codes sources
sont librement disponibles. L’électronique :
L’interface est basée sur trois PIC18F452 cadencés à 32 MHz. Le PIC « master » est relié au port parallèle du PC par un
connecteur Centronics et gère l’entrée DMX, ainsi que le premier
« univers » de sortie DMX. Il est aussi connecté au deux autres PIC
par son interface série synchrone, deux broches servent également à indiquer
quel est le « slave » auquel il s’adresse. Les 5 broches de sorties du PIC « master » sont protégées
contre les courts-circuits par des résistances de 100Ω, tant dis que les 8
broches d’entrées sont tirées vers la masse et protégées des surtensions par
des résistances de 47Ω. L’entrée DMX se fait par un connecteur XLR 3 ou 5 broches mâle, une
résistance de terminaison de 120Ω 0.6W est insérée en parallèle sur les
deux lignes différentielles de données. Le signal est converti par un driver de
ligne RS-485 et est dirigé vers le PIC. Les signaux des trois sorties DMX venant des PIC sont convertis par des
drivers de lignes RS-485 et sont ensuite câblés à un connecteur XLR. Une
résistance de pull-down est insérée à l’entrée du convertisseur qui servira à
créer la séquence « BREAK » du protocole DMX 512 en plaçant la broche
de sortie du PIC en haute impédance. Une alimentation 5V stabilisée, un oscillateur 32MHz et des condensateurs de découplages sont
également présents. Le protocole de
communication PC <-> PIC
Le protocole utilise les 8 bits « DATA » (D0-D7) sorties du
port parallèle de PC et les 5 bits « Error, SelectIn, PaperEnd, Ack,
Busy » d’entrées (IN3-IN7). D7 indique si D0-D3 sont des données (0) ou si tout l’octet est une
commande (1). IN4-IN7 sont les demis octets renvoyés par le PIC. Commandes : D5-D6 indiquent le numéro du
PIC (00 = master, 01 = slave1, 10 = slave2, 11=pré-reset) D0-D3 indiquent la
commande : 0000 : pas d’opération 0001 : écriture d’un
bloque de 32 octets 0010 : lecture d’un
bloque de 32 octets 0100 : numéro du block
de donnée à lire/écrire 0101 : lecture de l’état
des changements de valeur des bloques d’entrée DMX (4 octets) 1000 : reset D4 et IN3 servent d’horloge. Séquence : Au départ D4 et IN3 sont à 1. Le PC met la commande et les
données sur D0-D3,D5-D7. Le PC met D4 à 0. Le PIC met les données sur
IN0-IN3. Le PIC met IN4 à 0. Le PC met la commande et les
données sur D0-D3,D5-D7. Le PC met D4 à 1. Le PIC met les données sur
IN0-IN3. Le PIC met IN4 à 1. … Les données sont lues et écrites par paquets de 32 octets pour un gain
d’efficacité. Le firmware du
« master » spp2dmx.asm :
La boucle principale du programme, qui contient le code lié au port
parallèle du PC, débute par la détection du flanc descendant sur le signal D4.
Ensuite, selon l’état des signaux D0-D7, la boucle fait appel aux sous
fonctions de lectures et écritures. La sous fonction GetNibble est appelée quand D0-D3 sont des données.
Quand les données sont destinées au « master », elle assemble des
demis octets et les copie en mémoire en fonction du bloque courant. Quand la
cible est un « slave », elle envoie directement les demis octets sur
le port série synchrone (SendNibble). La routine d’interruption est appelée par le timer 0, qui sert à créer, en émission, le
temps (88μs) pour le signal « BREAK », puis elle envoie le
« start code ». En réception, elle sert aussi à détecter le
« reset » de plus d’une seconde sur l’entrée DMX. La routine est aussi appelée par l’UART. En réception, le « start code » et les 512 octets sont lus et
placés en mémoire. Le signal « BREAK » est détecté grâce au fait que
le « stop bit » durant le « BREAK » n’est pas valide et
donc, provoque une erreur. En émission, les 512 octets des canaux sont envoyés successivement. Le firmware des
« slaves » slave2dmx.asm :
Le code des « slaves » est similaire à celui du
« master », à la différence près que ce qui était dans la routine
d’interruption a été déplacé dans la boucle principale. La routine d’interruption sert quant à elle à la réception des données sur
le port série synchrone. Le driver Windows XP
sys/okdmx31.c :
Ce code est destiné a être
exécuté en mode noyau sous Windows NT/XP, il donne accès à tout les ports du PC
et peut être une source de plantage total du PC. Il contient le code destiné
à initialiser l’interface et communiquer avec elle. Il fournit 3 appels
systèmes qui seront utilisés par la dll : IOCTL_WRITE_DMX, IOCTL_READ_DMX,
IOCTL_GET_STATUS_DMX. La dll Windows
dll/okdmx31.c:
Ce code est destiné à être
exécuté en mode utilisateur et à être lié au programme utilisateur final. Il contient deux
fonctions : Okdmx31Read, Okdmx31Write. Cette dll sert aussi à installer
automatiquement le driver sous Windows XP et sous Windows 95/98, elle utilise
le code d’accès direct situé dans okdmx31_95.c. Dans un souci de gain de
performance, les fonctions de la dll font appellent au driver uniquement si les
données contenues dans un bloque de 32 octets ont subies un changement. Le programme final :Il appel, à intervalles
réguliers ou lors de changement d’état, Okdmx31Read et Okdmx31Write en leur
passant l’adresse du port parallèle, le numéro de « l’univers » DMX
et un buffer de 512 octets représentant l’état des canaux DMX. Les points forts :1
entrée et 3 sorties sur un seul port parallèle. Port
parallèle standard, utilisable sur les vieux PCs. Ecriture
par paquets de 32 canaux. Pas
d’utilisation du temps CPU lorsqu’il n’y a pas de changement d’état. Les points faibles :Grande
consommation du temps CPU lors des changements d’états très rapides, une
interface purement USB serait beaucoup plus efficace. Références :
|
|||||||||||
Forum : on-line forum! Contact : Jean-Marc Lienher
Copyright (c) 2004 Jean-Marc Lienher