|
|
![]() ÂüÁ¶ : http://nextlab.hu ÀúÀÚ : Tomek Ness, D. Cuartielles DMX¶õ ¹«¾úÀΰ¡? DMX´Â PC¿¡¼ RS485 Åë½Å¹æ½ÄÀ¸·Î ¿¬°áµÈ Á¶¸íÀåÄ¡¸¦ 512°³ ±îÁö Á¦¾îÇÏ´Â Åë½ÅÀÌ´Ù. ![]() ![]() PC¿¡´Â USB Æ÷Æ®¸¦ RS485·Î º¯È¯ÇÏ´Â Çϵå¿þ¾î¸¦ ¿¬°áÇϰí, (¾ÆµàÀ̳ë¿Í ºñ½ÁÇÔ) PCÀÇ DMX Àü¿ë ¼ÒÇÁÆ®¿þ¾î·Î Á¶¸íÀåÄ¡¸¦ Æí¸®ÇÏ°Ô Á¦¾îÇÑ´Ù. Ç®Ä÷¯ DMX ¼ö½ÅÀåÄ¡´Â, 4 ä³ÎÀÌ 1°³ÀÇ ÀåÄ¡À̸ç, 512°³ÀÇ DMX ä³Î·Î´Â 128 °³¸¦ Á¦¾îÇÒ ¼ö ÀÖ´Ù. Á¦ÀÛ¼³¸í DMX ¹ÙÀÌÆ®¸¦ ÇÉÀ¸·Î Ãâ·ÂÇÑ´Ù. ±âÆÇÀÇ ¹ßÁø Á֯ļö´Â 16MHz ÀÌ´Ù. 1/1000 Ãʸ¦ ´Ù·ç´Â millis() ÇÔ¼ö¸¦ ¾²·Á¸é, °¡·Îä±â¸¦ ±ÝÁöÇØ¾ß ÇÑ´Ù. ±×·¯³ª millis() ÇÔ¼ö¸¦ ¾²°í ³ª¸é °¡·Îä±â¸¦ ´Ù½Ã Çã°¡ÇÑ´Ù. DMX ½ÅÈ£´Â 8us ~1secÀÇ breakr ½ÅÈ£¸¦ ½ÃÀÛÀ¸·Î, ¸ðµÎ 512 ä³ÎÀÇ 10 ºñÆ® ½ÅÈ£¸¦ ¼Û½ÅÇÑ´Ù. BREAK ½ÅÈ£´Â 10 ms µ¿¾È ¼Û½ÅÇÑ´Ù. (¼ö½ÅÀåÄ¡°¡ ´À¸®´Ù¸é, ½Ã°£À» ´õ ÁÖ¾î¾ß ÇÑ´Ù) ù ¹ø쨰 µ¥ÀÌÅÍ´Â 0¹ø ä³ÎÀ̸ç, DMX¿¡´Â 0¹ø ä³ÎÀÌ ¾øÀ¸¸ç, ½ÃÀÛ ½ÅÈ£·Î »ç¿ëÇÑ´Ù.(START BYTE) µû¶ó¼ ½ÇÁö·Î ¼Û½ÅµÇ´Â 10 ºñÆ®ÀÇ Ã¤³Î °ªÀº 512°³ ÀÌÁö¸¸, ½ÃÀÛä³Î 0¹øÀ» Æ÷ÇÔÇÑ µ¥ÀÌÅÍ´Â 513 °³ÀÌ´Ù. DMX µ¥ÀÌÅÍÀÎ 10 ºñÆ®´Â, START ºñÆ® 1°³, µ¥ÀÌÅÍ ºñÆ® 8°³, STOP ºñÆ® 1°³·Î ±¸¼ºµÇ¸ç, START´Â Ç×»ó 0 À̰í, STOPÀº Ç×»ó 1 ÀÌ´Ù. µ¥ÀÌÅÍ´Â ¿øÇÏ´Â °ªÀ» ¼Û½ÅÇØµµ ÁÁ´Ù. 1 ºñÆ®ÀÇ ÆÞ½ºÆø À¯Áö ½Ã°£Àº 4uS À̸ç, 10 ºñÆ®ÀÎ DMX 1 ¹ÙÀÌÆ®¸¦ ¼Û½ÅÇÏ·Á¸é 40 uSÀÌ ÇÊ¿äÇÏ´Ù. UART Æ÷Æ®¿¡¼ DMX ¼Óµµ¸¦ ¸ÂÃá´Ù¸é 25000 bps À̸ç, Æ÷¸ËÀº 1 START, 8 DATA, 2 STOP ÀÌ´Ù. ![]() DMX 512 ä³ÎÀ» ½ÃÇèÇÏ´Â µ¥ÀÌÅÍ·Î, óÀ½¿¡´Â 0À» º¸³»¼ ¸ðµÎ ²ô°í, ´ÙÀ½ µ¥ÀÌÅÍ´Â +3À» Çϰí, 3À» ´õÇÑ °ª¿¡ -1À» °öÇÑ´ÙÀ½ DMX ½ÃÇè µ¥ÀÌÅÍ·Î ÀúÀåÇÑ´Ù. ÀÌ·¸°Ô ¸¸µé¾îÁø °ªÀ», DMX 512 ä³ÎÀÇ µ¥ÀÌÅÍ·Î ÀüºÎ µ¿ÀÏÇÏ°Ô ¼Û½ÅÇÑ´Ù. +3 Çϰí -1À» °öÇÏ´Â ¹æ½ÄÀ» °è¼ÓÇÏ¿©, DMX 512 ä³ÎÀÇ ½ÃÇè µ¥ÀÌÅ͸¦ ¼Û½ÅÇÑ´Ù. DMX Åë½Å±âÆÇÀÇ È¸·Î ¼Û½Å Àü¿ë¿¡¼´Â RX´Â ¿¬°áÇÏÁö ¾Ê°í, TX ¸¸ ¿¬°áÇÑ´Ù. ¿ìÃøÀÇ DMX Ä¿³ØÅÍ´Â DIN-5 ÇÉ ±Ô°ÝǰÀ» »ç¿ëÇÑ´Ù. ¿Àµð¿À¿ë DIN ÄÉÀÌºí¿¡¼ ãÀ» ¼ö ÀÖ´Ù. (ÇÉÀÇ ¼ýÀÚ¿Í ¹è¿µÈ °¢µµ¿¡ ÁÖÀÇÇ϶ó) 485 ICÀÇ Åë½ÅÃâ·Â A´Â 3¹ø, B´Â 2¹ø, GND´Â 1¹ø¿¡ ¿¬°áÇÑ´Ù. ¸¸ÀÏ DMX Á¶¸í±â±â¸¦ DMX ÄÉÀ̺í·Î ¿¬°áÇÑ´Ù¸é, ¼Û½Å½ÅÈ£ÀÇ ¹Ý»ç¸¦ ¹æÁöÇϱâ À§ÇØ, ¸¶Áö¸· ÄÉÀ̺íÀÇ Ä¿³ØÅÍ¿¡´Â, 120 ¿ÈÀÇ ÀúÇ×À» A¿Í B¿¡ »çÀÌ¿¡ ¿¬°áÇÑ´Ù. ![]() DMX Åë½Å ±âÆÇ »ç¿ëÇÑ IC´Â SN75176 À̸ç, SP485µµ »ç¿ëÀÌ °¡´ÉÇÏ´Ù. ![]() DMX Shield ±âÆÇÀ» µ¥½Ã¹Ð¶ó¿¡ Á¶¸³ÇÑ »çÁø °¡¿îµ¥ ÀÖ´Â Ä¿´Ù¶õ ¹é»ö Ä¿³ØÅͰ¡ DIN-5ÇÉ Ä¿³ØÅÍÀÌ´Ù. DIN-5ÇÉ Ä¿³ØÅÍ´Â ³Ê¹« Å©¹Ç·Î, ÀÛÀº PS2 Ä¿³ØÅ͸¦ »ç¿ëÇϱ⵵ ÇÑ´Ù. ![]() DMX ¿¬°á Ä¿³ØÅÍ Ç¥ÁØ ±Ô°ÝÀÇ DIN 5ÇÉÀ» »ç¿ëÇÑ´Ù. Àü¼±Àº 2P ½ÃÀϵ弱À» »ç¿ëÇÑ´Ù. ![]() DMX ½ÅÈ£½ÃÇè±â¿Í º¯È¯ Ä¿³ØÅÍ ![]() ----------------------------------------------------------------------------------------------------------------- ÂüÁ¶ : http://www.arduino.cc/playground/uploads/DMX/dmx008fade-070807.zip Á¦¸ñ : dmx008fade ¼Ò½º #1 #include "pins_arduino.h" int sig = 11; // DMX ½ÅÈ£¸¦ Ãâ·ÂÇÏ´Â ÇÉ int value = 0; // DMX ½ÃÇè¿ë óÀ½ µ¥ÀÌÅÍ´Â 0 ÀÌ´Ù (DMXÀÇ 512 ä³ÎÀ» ¸ðµÎ ²ö´Ù) int valueadd = 3; // ´ÙÀ½ DMX ½ÃÇè¿ë µ¥ÀÌÅÍ´Â +3À» ÇÑ´Ù. (¿øÇÏ´Â °ªÀ» ³ÖÀ» ¼ö ÀÖ´Ù) void shiftDmxOut(int pin, int theByte) // DMX ¹ÙÀÌÆ®¸¦ Ãâ·ÂÇÏ´Â ÇÔ¼ö { int port_to_output[] = { NOT_A_PORT, NOT_A_PORT, _SFR_IO_ADDR(PORTB), _SFR_IO_ADDR(PORTC), _SFR_IO_ADDR(PORTD) }; int portNumber = port_to_output[digitalPinToPort(pin)]; int pinMask = digitalPinToBitMask(pin); _SFR_BYTE(_SFR_IO8(portNumber)) |= pinMask; // óÀ½ ÇÒÀÏÀº ÇÉÀ» HIGH·Î ¸¸µç´Ù. delayMicroseconds(10); cli(); // °¡·Îä±â¸¦ ±ÝÁöÇÑ´Ù, _SFR_BYTE(_SFR_IO8(portNumber)) &= ~pinMask; // DMX´Â ½ÃÀÛºñÆ®°¡ Ç×»ó 0 ÀÌ´Ù asm("nop nop nop nop nop nop nop nop "); asm("nop nop nop nop nop nop nop nop "); asm("nop nop nop nop nop nop nop nop "); asm("nop nop nop nop nop nop nop nop "); asm("nop nop nop nop nop nop nop nop "); asm("nop nop nop nop nop nop nop nop "); // 4usÀ» ´ë±âÇÑ´Ù. for (int i = 0; i < 8; i++) // 1 ¹ÙÀÌÆ®ÀÇ DMX µ¥ÀÌÅ͸¦ Ãâ·ÂÇÑ´Ù. { if (theByte & 01) _SFR_BYTE(_SFR_IO8(portNumber)) |= pinMask; else _SFR_BYTE(_SFR_IO8(portNumber)) &= ~pinMask; asm("nop nop nop nop nop nop nop nop "); asm("nop nop nop nop nop nop nop nop "); asm("nop nop nop nop nop nop nop nop "); asm("nop nop nop nop nop nop nop nop "); asm("nop nop nop nop nop nop nop nop "); asm("nop nop nop nop nop nop nop nop "); // 4usÀ» ´ë±âÇÑ´Ù. theByte >>= 1; } _SFR_BYTE(_SFR_IO8(portNumber)) |= pinMask; // ¸¶Áö¸·À¸·Î ÇÉÀ» HIGH·Î ¸¸µç´Ù. (breake = 8us ~ 1sec) sei(); // ÀÌÁ¦ millis()ÇÔ¼ö¸¦ »ç¿ëÇÏ¿´À¸¹Ç·Î, °¡·Îä±â¸¦ Çã°¡ÇÑ´Ù } void setup() // ±âÆÇÀÇ Áغñ(ÃʱâÈ) { pinMode(sig, OUTPUT); // sig ÇÉÀ» Ãâ·ÂÀ¸·Î ¼³Á¤ } void loop() // ¹«Çѹݺ¹ ÁÖÇÔ¼ö { digitalWrite(sig, LOW); // DMX ½ÅÈ£ÀÇ ½ÃÀÛÀ» ¾Ë¸®´Â breake ½ÅÈ£¸¦ sig ÇÉ¿¡ ¼Û½ÅÇÑ´Ù. delay(10); // 10ms À» ±â´Ù¸°´Ù. break ½ÅÈ£´Â 8us ~ 1sec À̹ǷΠ10ms À̸é ÃæºÐÇÏ´Ù. shiftDmxOut(sig, 0); // ½ÃÀÛ ¹ÙÀÌÆ®¸¦ ¼Û½ÅÇÑ´Ù. for (int count = 1; count <= 512; count++) // 512 °³ÀÇ DMX µ¥ÀÌÅ͸¦ ¸ðµÎ sig ÇÉ¿¡ Ãâ·ÂÇÑ´Ù { shiftDmxOut(sig, value); // ½ÃÇè¿ë À̹ǷΠ512°³ ¸ðµÎ µ¿ÀÏÇÑ µ¥ÀÌÅ͸¦ »ç¿ëÇÑ´Ù. } value += valueadd; // DMX ½ÅÈ£¸¦ º¸³»°í ³ª¸é, ´ÙÀ½Àº DMX µ¥ÀÌÅÍ¿¡ +3À» ´õÇÑ´Ù if ((value == 0) || (value == 255)) . { valueadd *= -1; // ´ÙÀ½ DMX ½ÃÇè°ªÀº -1À» °öÇÑ´Ù, º¯¼ö 255°³¸¦ ÀÌ·±¹æ½ÄÀ¸·Î ¸ðµÎ º¯°æÇÑ´Ù. } } ----------------------------------------------------------------------------------------------------------------- Á¦¸ñ : DMX Shift Out for arduino - 004 and 005 ¼Ò½º #2 int sig = 11; int count = 0; int swing = 0; int updown = 0; void shiftDmxOut(int pin, int theByte) { int wasteTime = 0; int theDelay = 1; int count = 0; int portNumber = port_to_output[digital_pin_to_port[pin].port]; int pinNumber = digital_pin_to_port[pin].bit; _SFR_BYTE(_SFR_IO8(portNumber)) |= _BV(pinNumber); delayMicroseconds(10); cli(); _SFR_BYTE(_SFR_IO8(portNumber)) &= ~_BV(pinNumber); delayMicroseconds(theDelay); delayMicroseconds(theDelay); delayMicroseconds(theDelay); delayMicroseconds(theDelay); for (count = 0; count < 8; count++) { if (theByte & 01) { _SFR_BYTE(_SFR_IO8(portNumber)) |= _BV(pinNumber); } else { _SFR_BYTE(_SFR_IO8(portNumber)) &= ~_BV(pinNumber); } delayMicroseconds(theDelay); delayMicroseconds(theDelay); delayMicroseconds(theDelay); for (wasteTime =0; wasteTime <2; wasteTime++) {} theByte>>=1; } _SFR_BYTE(_SFR_IO8(portNumber)) |= _BV(pinNumber); sei(); } void setup() { pinMode(sig, OUTPUT); digitalWrite(13, HIGH); } void loop() { digitalWrite(sig, LOW); delay(10); shiftDmxOut(sig,0); shiftDmxOut(sig, 255); //1 shiftDmxOut(sig, 0); //2 shiftDmxOut(sig, 0); //3 shiftDmxOut(sig, 0); //4 shiftDmxOut(sig, 0); //5 shiftDmxOut(sig, 0); //6 shiftDmxOut(sig, 0); //7 shiftDmxOut(sig, 255); //8 for (count = 1; count<=504; count++) shiftDmxOut(sig, 0); } ÀÌ ÇÁ·Î±×·¥Àº ¹«·á ¼ÒÇÁÆ®¿þ¾î·Î, ½Åü¿Í Àç»ê »óÀÇ ¾î¶² À§Çè°ú ¼ÕÇØ¸¦ º¸»óÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ ÇÁ·Î±×·¥Àº GNU ¹«·á ¼ÒÇÁÆ®¿þ¾î ¹èÆ÷±ÔÁ¤À» µû¸¨´Ï´Ù. Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA ![]() |
![]() ![]() ![]() ![]() | ![]() |
![]() |
![]() |