DMX512 protokoll leírása

Tartalom

 

Rövid bemutatás

A DMX512 protokollt az USITT készítette el 1986-ban, dimmerek digitális vezérlésére egy szabványos digitális soros interfészen keresztül, max. 512 csatornáig. 1990-ben módosítottak rajta pár dolgot, és azt hiszem van egy újabb verziója is, ebben nem vagyok biztos.

A DMX512 nem a legjobb vezérlő protokoll, de egyszerűségénél és a csatornák számánál fogva ma is széleskörben használják, nemcsak dimmerek, hanem számos egyéb eszköz vezérlésére is (pl. robotlámpa, füstgép, stb...)

 

Fizikai réteg

A DMX512 az EIA RS485 ipari interfész szabványra épül. Ez meghatározza a protokoll elektromos jellemzőit. Így a jelet elvileg 1 vagy 2 csavart érpáras, árnyékolt, 120ohmos kábelen kellene vezetni, de kisebb távolságra megteszi a nromál mikrofon-kábel is.

Az RS485 egy 5V-os, szimmetrikus jelvezetés, csavart érpáron. Az érpárban két jel található: Jel+ és Jel-. A két bináris állapotnak a következő feszültségek felelnek meg:

 

EIA RS485 feszültségszintek
Jelvezeték
Bináris '0'
Bináris '1'
Jel +
0V
5V
Jel -
5V
0V

 

Normálisan - mint minden hasonló hálózatban - a kábel mindkét végét le kellene zárni egy 120 ohmos ellenállással, de mivel a kábel egyik végén mindig egy vezérlő (pl. fénypult vagy robotlámpa-vezérlő) ül, amiben benne van a lezárás, így csak a kábel másik végét kell lezárni. Az RS485 szabvány szerint egy DMX-szegmens maximum 1000m lehet, melyre max. 32 darab készülék köthető, az ettől nagyobb darabszámnál vagy hossznál jelerősítő készüléket kell használni ("Repeater" : magyarul = ismétlő).

A készülékeken szabvány szerint egy 5-pólusú XLR csatlakozás található, mama (XLRF) az adókon, és papa (XLRM) a vevőkön. A szabvány előírja, hogy két csavar érpárral rendelkező árnyékolt kábelt kell használni, de mivel a második pár csak opcionális, és csak elvétve használja pár készülék (pl. dimmerek küldenek vissza rendszer infókat), ezért gyakori, hogy csak 1 párral rendelkező kábelt használnak. Valószínűleg ezért is terjedt el a 3-pólusú XLR csatlakozó is a DMX készülékeken.

XLR3 és XLR5 csatlakozók lábkiosztása
XLR5
XLR3
Jel
1
1
Föld / 0V
2
2
Jel -
3
3
Jel +
4
-
Segéd Jel -
5
-
Segéd Jel +

 

A legegyszerűbb mód a DMX jel és a TTL jel közti konverzióra valamelyik szabvány RS485 interfész IC használata, pl. az SN75176B a Texas Instruments-től vagy a DS75176B a National Semiconductors-tól.

A DS75176B interfész IC adatlapja PDF formátumban letölthető innen.

 

Adatformátum

Miután megismerkedtünk a fizikai felépítéssel, lássuk hogyan is működik a DMX.

Az adat küldés egy 8 bites aszinkron soros protokollra épül, melyben 1 start bit (0, alacsony szint), 8 adat bit és 2 stop bit (1, magas szint) található, paritás nélkül. Mindegyik bit 4µs hosszú, így az összesen 11bit elküldéséhez 44µs szükséges. Ha a vonalon folyamatosan küldenénk az adatokat, akkor 250000 bitet tudnánk átküldeni másodpercenként, ami 250kbaud-nak felel meg.

A 8 bit összesen 256 különböző értéket jelent, 0-tól 255-ig, dimmereknél : sötéttől a teljes fényerőig. Az adatot a legalacsonyabb helyiértékű bittel kezdjük (lsb : least significant bit).

DMX Frame
Egy DMX bájt, értéke=91=0x5A

A start és a stop bitek az adóhoz való szinkronizálást szolgálják a vevő számára. A vonal alapban '1', azaz magas szinten van. A start bit közli a vevőnek, hogy jönnek az adatbitek, pontosan 8 darab, amit az jó esetben vesz is. Ezt követi a 2 darab stop bit, és minden kezdődhet előlről. A két stop bit 2 okból szükséges :

1. A vevőnek legyen ideje feldolgozni a beérkezett adatot
2. A vonal visszaáll '1'-be, így érzékelni lehet újabb start bitet

Az alábbi képek szemléltetik a 0 és a 255 értéknek megfelelő bit-folyamot.

DMX - All 0's
Érték = 0
DMX - All 1's
Érték = 255

 

Látható, hogy a start bit mindig egy '1' -> '0' szintváltással kezdődik, így könnyű érzékelni a bájt kezdetét.

Ezzel megtudtuk, hogy néz ki egy bájt, de mivel a DMX szabvány 512 csatornából áll, még mindig nem tudjuk, hogyan milyen csomagban küldi el ezt az adó.

 

A DMX512 "csomag"

A DMX csomag a szabbány alapja, ez tartalmazza azokat az információkat, hogyan különböztethetjük meg az adatokat a csomagon belül.

A csomag kezdete egy minimum 88µs (2 bájt) hosszú ideig tartó '0' szint ("Break" : magyarul=törés), amit egy minimum 8µs hosszú '1' szint követ ("Mark After Break" : magyarul=törés utáni jelzés). Mivel egy bájton belül a maximum idő, amíg a vonal '0'-ban van 36µs=4µs (Start bit) + (8 x 4µs (Adta bitek)), így a "Break" jól megkölönböztethető bármilyen adatbájttól. A "Mark After Break" azért szükséges, hogy egyrészről a vevő készülék alaphelyzetbe tudjon kerülni, felkészülve az adatok fogadására, másrészt, hogy az első bájt start bitjének meglegyen az '1' -> '0' átmenete.

DMX512 Packet

A rajz alapján jól látható, hogy a legelső bájt, ami a "Break"+"Mark After Break" kombinációt követi, az ún. "Start Code" (start kód). A '0x00' start kód jelzi, hogy a következő bájtok ("Dim1".."Dim512") az 512 csatorna egyes értékei, 8 biten. A többi 255 kód ('0x00' - '0xFF') nem szerepel a szabványban, bár néhány gyártó használja egyéb, termék-függő információk közlésére. Elméletileg ha egy dimmer nem '0x00' start kódot kap, akkor az egész utána következő adatcsomagot nem veszi figyelembe, a következő "Break"-ig, de légy óvatos, nem minden dimmer nézi a start kódot!

Megj.: egyszer találkoztam egy olyan DMX/Analóg átalakítóval, mely ismerte a '0x0C' start kódot, ekkor 12 bites csatornainformációkat várt, minden csatornához két bájt tartozott, ebből 12 bit volt a lámpaérték, persze így max. 256 csatorna vezérelhető, de nagyobb felbontással.

A rajzon látható még egy "Inter-frame-time" (magyarul=bájtok közti idő) felirat, ez a két bájt közti időt jelzi. Ez 0-tól 1 másodpercig bármekkora érték lehet, az adatfolyam lelassítása a célja (ha pl. néhány dimmer nem képes max. sebességgel fogadni az adatokat; vagy ha egy vezérlő [pl. fénypult] valamilyen oknál fogva nem bírja egymás után küldeni az adatokat, ennyit várhat max. két bájt között)

A DMX szabvány megadja az egyes jelzések időintervallumait:

Időintervallumok
  Min Max
Break 88µs 1s
Mark-after-break 8µs 1s
Inter-frame-time 0µs 1s

 

A táblázatból jól látható, hogy a vonal sohasem lehet 1 másodpercnél hosszabb ideig '0' vagy '1' szinten, ha mégi így lenne, az valamilyen hibás működés következménye (pl. ki van kapcsolva az adó :-)

A DMX sebessége

Mivel ismerjük a bájtok, és egyéb jelzések min. és max. idejeit, kiszámítható, hogy DMX-en keresztül milyen sebességgel frissíthetjük a csatornákat.

Mivel egy adatcsomag ideje : 88µs ("Break") + 8µs ("Mark-after-break") + 512 * 44µs (csatronák)=22,624 msec, így max. 1/(0,022624 sec)=44,2 Hz-el tudjuk frissíteni a csatornákat. Ez általában kielégítő, tekintve, hogy a hagyományos, 50Hz-es hálózaton, fázishasításos módszerrel működő dimmerek max. 100 Hz-el frissíthetők, sőt a lámpák ettől sokkal lassabbak.

Amennyiben csak pl. 24 csatornát használunk, megtehetjük, hogy a 24. csatorna-információ leküldése után egyből küldünk egy "Break"-et, így sokkal nagyobb sebességet érhetünk el. Így egy adatcsomag ideje : 88µs ("Break") + 8µs ("Mark-after-break") +24 * 44µs (csatronák)=1,152 msec, így max. 1/(0,001152 sec)=868 Hz-el tudjuk frissíteni a 24 csatornát, ami bőven elegendő majdnem minden esetben.

A DMX hálózat

Nagyon sok készüléket használhatunk egy DMX vezérlővel. Mivel ezek különböző helyeken vannak a színpadon/egyéb helyen, így általában külön vonalakat használunk ezekhez. Azonban Ohm törvénye alapján ezeket nem lehet egyszerűen elágaztatva összekötni, hiszen a lezárások értéke így megváltozna.

Ezért használnak ilyen esetekben ún. "splitter"-eket (magyarul=elosztó) és "repeater"-eket (magyarul=ismétlő). Ezek a készülékek külön tápegységről üzemelő erősítő és/vagy elosztó berendezések, melyek a beérkező jelet lezárják, jelszintjét helyrehozzák, megszűrik, majd az 1 ("repeater") vagy több ("splitter") kimenetükön külön-külön meghajtják.

DMX Network
Tipikus DMX512 hálózat

 

Ezek a készülékek az egyszerű 1 csatornás jelerősítőtől kezdve a sok portos, optikailag leválasztott be/kimenetekkel és "jegyezd-meg-a-csatornákat-ha-elvész-a-bemenő-jel"-féle opciókkal ellátva kaphatóak.

A DMX és a mikrokontroller

És a száraz tények után lássuk, hogyan lehet egy mikrokontrollerrel lekezelni a DMX jelet.

Mivel a DMX egy aszinkron soros adat, így a mikrokontroller soros portját remekül lehet DMX-re használni. A lényeg, hogy a soros port 250kbaud-on menjen. Ez pl. egy 8MHz-es processzornál 32-es osztást jelent az órajelfrekiből a soros port frekijéhez.

DMX vétele:

Mivel vesszük az adatokat, nem kell érzékelni a második stop bitet, így egyszerű 8 bites vételre állítjuk a µC-t, és interrupttal kezeljük le a beérkezett adatokat. Minden épeszű µC képes érzékelni, ha a stop bit=0 (frame error), amennyiben ilyen keletkezik a vett adat folyamán, akkor az egy "Break".

A következő lehet a metódus a vételhez: ha bejön egy bájt, nézzük meg, hogy "Break" vagy nem; amennyiben "Break", utána jön először a start kód, és amennyiben a start kód=0x00, úgy jönnek sorban a csatornainfók, ha esetleg nekünk valahonnan a közepéből kell infó (pl. a 25. csatornától kezdve 6 csatorna), úgy dobjuk el a felesleges bájtokat (az első 24-et), vegyük be a 6 bájtot, utána megint nem kellenek a bájtok. Miután bejött a 6 csatorna, feldolgozhatjuk azt.

DMX adása:

Ha az adott µC nem képes 2 stop bites adatok küldésére, de képes 9 bites adatküldésre, úgy elég, ha a 9.bitet beállítjuk '1'-be. Ha 9 bites adatküldésre sem képes, akkor egyszerűen várjunk a bájt elküldése után, esetleg a következő bájt és a "Break" elküldése előtt 4 µsec-et.

A "Break" küldéséhez kapcsoljuk ki a soros portot, és az adott portlábat egyszerűen húzzuk le '0'-ba 88µsec ideig.

Ha nem tudunk maximálisan gyorsan adni, az sem baj, hiszen az "Inter-frame-time" szerint minden egyes bájt után max. 1 másodpercünk van a köv. bájt adásáig.

 

Infó

Általam készített 192 csatornás DMX/Analóg átalakító : Merlin 1.0

E-mail : papp.zoltan@onewayelectronics.hu

Vissza a főoldalra