로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Sensor Applications
아듀이노 공개소스
작성자 avrtools™        
작성일 2008/08/28
Link#1 DMXShield (Down:363)
ㆍ추천: 0  ㆍ조회: 4909   
  아듀이노 DMX 송신기
참조 : 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
  
 AVRTOOLS™
   
윗글 AVR 병렬포트 굽기장치
아래글 아듀이노 부트로더의 개조
    N         제목    글쓴이 작성일 조회 추천
61 비접점식 QTouch 방식 근접검출 스위치 leeky 2016/01/21 (목) 487 0
60 Arduino 고속 오실로스코프 #3 avrtools™ 2012/03/29 (목) 17510 0
59 아날로그 8ch 데이터 로거 avrtools™ 2012/03/29 (목) 2653 0
58 Arduino DMX512 송신기 제작 avrtools™ 2012/03/15 (목) 2749 0
57 nRF24L01 무선모듈의 사용방법 avrtools™ 2012/03/07 (수) 5489 0
56 초음파 거리 측정기의 제작 avrtools™ 2011/09/18 (일) 4591 0
55 3축 가속도 센서 ADXL335 avrtools™ 2011/09/09 (금) 3143 0
54 Arduino Uno USBserial 펌웨어의 변경 avrtools™ 2011/08/27 (토) 2815 0
53 Arduino MIDI의 소개 avrtools™ 2011/08/19 (금) 3172 0
52 Arduino 고속 Oscillo Scope #2 avrtools™ 2011/08/12 (금) 2798 0
51 Arduino Uno 및 USB2serial Uno의 소개 [2] avrtools™ 2011/07/30 (토) 3043 0
50 Arduino IDE에서 AVRISP-mkII 사용방법 avrtools™ 2010/10/22 (금) 7631 0
49 아듀이노 초음파 거리측정 및 응용 avrtools™ 2010/03/14 (일) 3962 0
48 M328-USB의 비밀 온도센서 avrtools™ 2010/01/02 (토) 3397 0
47 M168-mini로 만드는 USBasp avrtools™ 2009/10/10 (토) 4996 0
46 OBDuino ISO9141 소스의 설명 avrtools™ 2009/10/08 (목) 3926 0
45 아듀이노 0017 업그레이드 avrtools™ 2009/08/18 (화) 3458 0
44 Arduino 0015 업그레이드 avrtools™ 2009/06/01 (월) 3158 0
43 CC2500 Zigbee RF Modem #1 [4] avrtools™ 2008/11/20 (목) 6315 0
42 아듀이노 소프트웨어 Ver 0012 avrtools™ 2008/09/23 (화) 3822 0
41 Arduino 소프트웨어 설치방법 avrtools™ 2008/08/31 (일) 5341 0
40 아듀이노 PC 카메라 제작 avrtools™ 2008/10/28 (화) 6940 0
39 아듀이노 AVR-ISP V2의 제작 [6] avrtools™ 2008/10/22 (수) 7902 0
38 아듀이노 J1850-PWM 스캐너 avrtools™ 2008/10/15 (수) 4355 0
37 아듀이노 MPGduino의 제작 avrtools™ 2008/10/11 (토) 4616 0
36 아듀이노 OBD-II PID 처리함수 avrtools™ 2008/10/12 (일) 5242 0
35 아듀이노 OBD-II PID 송수신 함수 avrtools™ 2008/10/09 (목) 9312 0
34 아듀이노 ODB-II 스캐너 제작 [9] avrtools™ 2008/10/04 (토) 16505 0
33 아듀이노 AC전원 THD 측정 [2] avrtools™ 2008/09/30 (화) 6442 0
32 아듀이노 소프트방식 16Bit ADC avrtools™ 2008/09/23 (화) 5326 0
31 아듀이노 초음파 모듈의 제작. avrtools™ 2008/09/22 (월) 4587 0
30 아듀이노 Wii 프로세싱 avrtools™ 2008/09/20 (토) 3939 0
29 아듀이노 초음파 거리측정 avrtools™ 2008/09/20 (토) 5813 0
28 아듀이노 8x5 초소형 전광판 avrtools™ 2008/09/11 (목) 4420 0
27 아듀이노 4선식 터치패널 avrtools™ 2008/09/10 (수) 4469 0
26 아듀이노 2색 8x8 LED avrtools™ 2008/09/10 (수) 4652 0
25 아듀이노 24x6 LED 전광판 avrtools™ 2008/09/10 (수) 5178 0
24 아듀이노 8x8 LED 프로세싱 avrtools™ 2008/09/10 (수) 3935 0
23 아듀이노 32x16 RGB 전광판 avrtools™ 2008/09/06 (토) 13439 0
22 아듀이노 맥박검출기 avrtools™ 2008/09/03 (수) 9153 0
21 아듀이노 적외선 거리센서 avrtools™ 2008/09/01 (월) 5631 0
20 아듀이노 DMX 수신장치 [7] avrtools™ 2008/08/31 (일) 6481 0
19 아듀이노 AVR-ISP 만들기 avrtools™ 2008/08/30 (토) 3972 0
18 아듀이노 POV #3 avrtools™ 2008/08/30 (토) 3282 0
17 아듀이노 POV #2 avrtools™ 2008/08/30 (토) 3091 0
16 AVR 병렬포트 굽기장치 avrtools™ 2008/08/30 (토) 4948 0
15 아듀이노 DMX 송신기 avrtools™ 2008/08/28 (목) 4909 0
14 아듀이노 부트로더의 개조 [1] avrtools™ 2008/08/28 (목) 5593 0
13 아듀이노 병렬포트 굽기장치 avrtools™ 2008/08/26 (화) 4025 0
12 아듀이노 POV #1 avrtools™ 2008/08/26 (화) 3319 0
11 아듀이노 MIDI 드럼 leeky 2008/08/24 (일) 4533 0
10 아듀이노 SD/MMC 카드 avrtools™ 2008/08/24 (일) 9564 0
9 아듀이노 MIDI 플륫 avrtools™ 2008/08/24 (일) 3394 0
8 아듀이노 RGB LED avrtools™ 2008/08/23 (토) 4824 0
7 아듀이노 USB 오실로스코프 [2] leeky 2008/08/21 (목) 6200 0
6 가속도계 ADXL202 응용소스 avrtools™ 2008/08/20 (수) 4687 0
5 아듀이노 가속도센서 avrtools™ 2008/08/18 (월) 4632 0
4 아듀이노 RC서보 제어 avrtools™ 2008/08/17 (일) 4984 0
3 아듀이노 910-ISP 만들기 avrtools™ 2008/08/16 (토) 4508 0
2 아듀이노 온도센서, XBee 송수신 avrtools™ 2008/08/15 (금) 7204 0
1 아듀이노 기본명령 avrtools™ 2008/08/07 (목) 6312 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0