Inleiding
Aangezien DMX een veel gebruikt aansturingsprotocol is in de lichtwereld, en het erg bruikbaar is met bv LED verlichting besloot ik een HOWTO te schrijven waar alles een beetje helder wordt uitgelegd. Het gaat hier alleen om het ONTVANGEN van DMX. Het verzenden zal ik later nog toevoegen, dat is iets complexer. Het doel van deze Howto is een beetje vertellen hoe DMX in zijn werk gaat en wat de toepassingen zijn.
Ik heb een standaard schema met werkende code toegevoegd. Voor de diepgaandere uitleg en beschrijving van de ASM code tot in detail heb ik een PDF'je gemaakt. Die bestaat uit 16 pagina's en het was onmogelijk om dat allemaal in dit topic te krijgen. Daarom hier alleen een generale beschrijving!
Het PDF'je is hier te downloaden:
klik
Wat is DMX-512?
DMX-512 (afgekort DMX) Staat voor Digital MultipleXed. DMX wordt vooral gebruikt in de lichtwereld en houdt in dat alle signalen voor ieder kanaal door 1 kabel worden gestuurd. DMX-512 Heeft de mogelijkheid om informatie te versturen voor 512 verschillende apparaten (kanalen geheten). Deze worden achter elkaar verstuurd, ook als er geen veranderingen zijn in de gegevens. Om te zorgen dat elk apparaaat de juiste informatie ontvangt heeft ieder apparaat een eigen adres, en uitsluitend naar dat adres wordt geluisterd. Dit instellen van adressen gebeurd doormiddel van dipswitches of knopjes.
Nu is het zo dat apparaten meer dan één kanaal kunnen gebruiken. Denk bijvoorbeeld aan een dimmer die 12 lampen onafhankelijk kan dimmen. Om ze onafhankelijk aan te sturen zijn dus 12 verschillende DMX kanalen nodig. Het is gebruikelijk dat in dat geval alleen het eerste adres wordt ingesteld en dat het apparaat vanaf dat punt 12 kanalen pakt. Er zijn ook meer apparaten dan dimmers. Denk aan scanners, movingheads, rookmachines. Allemaal bestuurbaar via DMX. Deze ondernemen een actie afhankelijk van de gegevens die doorgestuurd worden.
Hoe werkt het?
Een DMX cyclus is als volgt opgebouwd:
BREAK
Startcode Kanaal1 Kanaal2 Kanaal3 .......Kanaal 512
BREAK
Startcode .....
Etc. Er wordt naast 512 kanalen dus nog één kanaal verstuurd, de zogeheten startcode. Deze startcode geeft aan voor wat voor apparaat de code bedoeld is. Startcode0 was bedoeld voor dimmers en 1 voor iets anders bijvoorbeeld. Echter zijn de startcodes nooit van de grond gekomen en is de enige gebruikelijke startcode 0. Andere codes worden niet gebruikt! Toch is het handig om er bewust van te zijn tijdens het programmeren!
Per kanaal wordt 1 byte verstuurd, 8 bits. Dat betekend dat ieder kanaal 2^8 = 256 waarden aan kan nemen, 0 ... 255. Iedere byte wordt ingesloten door 1 bit laag en 2 bits hoog. Dit is zeer belangerijk voor het functioneren van de ontvangsthardware.
De BREAK bestaat uit 88 us laag. Zonder startbits en stopbits. een BREAK is dus op geen enkele manier te intepreteren als databyte en is dus eenvoudig te herkennen. Dit is ook essentieel voor het functioneren, immers als er geen break wordt gedetecteerd, kan er geen teller gestart worden die de kanalen telt. Dit kan betekenen dat het apparaat helemaal niets ontvangt, of de verkeerde kanalen. Een BREAK is essentieel!
Hier een grafische weergave van het DMX protocol:

Allemaal leuk enzo.. maar die PIC!!
Een DMXbus kan nooit zomaar op een PIC aangesloten worden, aangezien er hele andere spanningen gebruikt worden. Het kan wel dmv an een converterchip. Vaak gebruikt is de SN75176. Die converteerd de spanningsniveau's van de PIC naar de RS485-Bus (officiele benaming voor de electrische standaard van DMX). Voor het ontvangen van DMX wordt bij de pic gebruik gemaakt van de seriele connectie. de USART (Univerisal Synchronus Asynchronus Reciever Transmitter). Deze handeld de ontvangt verder af.
Dit is het standaard schema voor dmx:
Het IC rechts is een SN75176. Het grote IC is een PIC16F628A. De 4 ledjes zijn de outputs die via PWM gedimd worden. Dit schema gaat uit van adres1, aangezien een 16F628A te weinig pinnen heeft voor 9 dipswitches zijn die niet toegevoegd. Het is mogelijk dit met 7segment displays te doen etc. Maar dat zal ik later toevoegen.
Deze code draait erop:
klik
En dimt de 4 ledjes aan de hand van de ontvangen DMX waarden.
Ik hoop dat het hiermee een beetje duidelijk wordt wat je met DMX kan en hoe je het kan integreren in een microcontroller. Commentaar is zeer welkom, Wat zijn de onduidelijkheden, wat moet verbeterd worden, spelfouten etc.
Aangezien DMX een veel gebruikt aansturingsprotocol is in de lichtwereld, en het erg bruikbaar is met bv LED verlichting besloot ik een HOWTO te schrijven waar alles een beetje helder wordt uitgelegd. Het gaat hier alleen om het ONTVANGEN van DMX. Het verzenden zal ik later nog toevoegen, dat is iets complexer. Het doel van deze Howto is een beetje vertellen hoe DMX in zijn werk gaat en wat de toepassingen zijn.
Ik heb een standaard schema met werkende code toegevoegd. Voor de diepgaandere uitleg en beschrijving van de ASM code tot in detail heb ik een PDF'je gemaakt. Die bestaat uit 16 pagina's en het was onmogelijk om dat allemaal in dit topic te krijgen. Daarom hier alleen een generale beschrijving!
Het PDF'je is hier te downloaden:
klik
Wat is DMX-512?
DMX-512 (afgekort DMX) Staat voor Digital MultipleXed. DMX wordt vooral gebruikt in de lichtwereld en houdt in dat alle signalen voor ieder kanaal door 1 kabel worden gestuurd. DMX-512 Heeft de mogelijkheid om informatie te versturen voor 512 verschillende apparaten (kanalen geheten). Deze worden achter elkaar verstuurd, ook als er geen veranderingen zijn in de gegevens. Om te zorgen dat elk apparaaat de juiste informatie ontvangt heeft ieder apparaat een eigen adres, en uitsluitend naar dat adres wordt geluisterd. Dit instellen van adressen gebeurd doormiddel van dipswitches of knopjes.
Nu is het zo dat apparaten meer dan één kanaal kunnen gebruiken. Denk bijvoorbeeld aan een dimmer die 12 lampen onafhankelijk kan dimmen. Om ze onafhankelijk aan te sturen zijn dus 12 verschillende DMX kanalen nodig. Het is gebruikelijk dat in dat geval alleen het eerste adres wordt ingesteld en dat het apparaat vanaf dat punt 12 kanalen pakt. Er zijn ook meer apparaten dan dimmers. Denk aan scanners, movingheads, rookmachines. Allemaal bestuurbaar via DMX. Deze ondernemen een actie afhankelijk van de gegevens die doorgestuurd worden.
Hoe werkt het?
Een DMX cyclus is als volgt opgebouwd:
BREAK
Startcode Kanaal1 Kanaal2 Kanaal3 .......Kanaal 512
BREAK
Startcode .....
Etc. Er wordt naast 512 kanalen dus nog één kanaal verstuurd, de zogeheten startcode. Deze startcode geeft aan voor wat voor apparaat de code bedoeld is. Startcode0 was bedoeld voor dimmers en 1 voor iets anders bijvoorbeeld. Echter zijn de startcodes nooit van de grond gekomen en is de enige gebruikelijke startcode 0. Andere codes worden niet gebruikt! Toch is het handig om er bewust van te zijn tijdens het programmeren!
Per kanaal wordt 1 byte verstuurd, 8 bits. Dat betekend dat ieder kanaal 2^8 = 256 waarden aan kan nemen, 0 ... 255. Iedere byte wordt ingesloten door 1 bit laag en 2 bits hoog. Dit is zeer belangerijk voor het functioneren van de ontvangsthardware.
De BREAK bestaat uit 88 us laag. Zonder startbits en stopbits. een BREAK is dus op geen enkele manier te intepreteren als databyte en is dus eenvoudig te herkennen. Dit is ook essentieel voor het functioneren, immers als er geen break wordt gedetecteerd, kan er geen teller gestart worden die de kanalen telt. Dit kan betekenen dat het apparaat helemaal niets ontvangt, of de verkeerde kanalen. Een BREAK is essentieel!
Hier een grafische weergave van het DMX protocol:
Allemaal leuk enzo.. maar die PIC!!
Een DMXbus kan nooit zomaar op een PIC aangesloten worden, aangezien er hele andere spanningen gebruikt worden. Het kan wel dmv an een converterchip. Vaak gebruikt is de SN75176. Die converteerd de spanningsniveau's van de PIC naar de RS485-Bus (officiele benaming voor de electrische standaard van DMX). Voor het ontvangen van DMX wordt bij de pic gebruik gemaakt van de seriele connectie. de USART (Univerisal Synchronus Asynchronus Reciever Transmitter). Deze handeld de ontvangt verder af.
Dit is het standaard schema voor dmx:
Deze code draait erop:
klik
En dimt de 4 ledjes aan de hand van de ontvangen DMX waarden.
Ik hoop dat het hiermee een beetje duidelijk wordt wat je met DMX kan en hoe je het kan integreren in een microcontroller. Commentaar is zeer welkom, Wat zijn de onduidelijkheden, wat moet verbeterd worden, spelfouten etc.
