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








 게시판 검색





 
 
회원등록 비번분실


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

      거래은행 바로가기
 
 Sensor Applications
아듀이노 공개소스
작성자 avrtools™        
작성일 2008/08/31
첨부#2 arduino_dmx4ch.pde.zip (2KB) (Down:1235)
Link#1 (Down:311)
ㆍ추천: 0  ㆍ조회: 6665   
  아듀이노 DMX 수신장치
참조 : http://www.tinker.it/en/Products/
제목 : Tinker DMX to PWM

이탈리아는 조명제품의 강국이다, 역시 조명용 아듀이노를 세계에서 첫번째로 개발해서 판매하고 있다.
이 제품은 하드웨어, 회로, 연결방법을 공개하고 있으나, 아직 내부 소프트웨어는 공개하지 않고 있다.
이 자료는 아듀이노로 만든 DMX512 수신장치를 제어하는, 아듀이노의 송신용 실행코드를 설명한다.
또한, DMX512 수신장치의 자료는, 아듀이노로 DMX512 수신장치를 직접 만들려고 할때 도움이 될것이다.

설명 :
DMX-PWM 변환장치는 4개의 저전압 LED의 밝기제어를 위해 사용한다.
DMX를 통하여 가변전압을 사용하여 램프 혹은 조명장치들을 제어한다.
DMX 명령은 PWM 신호로 변환되어 4개의 전력 MOSFET 소자의 신호로 들어간다.
DMX 주소는 DIP 스위치로 1 ~ 509 CH로 설정한다.

전원 : 전압은 9 ~ 24V, 전류는 10 A로,  연결된 LED의 전압, 전류값 이상이면 가능합니다. 
LED 출력 전류 : 2.5A 최대 / 1개의 구동출력 x 4 회로
DMX CH : 4 CH (장치의 DMX 주소가 100 이라면 내부의 CH은 100, 101, 102, 103으로 된다.

 
 
DMX 연결 케이블
DMX 연결 케이블은 표준품이 DIN 5핀 커넥터를 사용하며, 2핀 시일드선으로 연결되어 있다.
그러나 최근에는, 같은 핀과 모양으로 크기만 작은, 키보드용 PS2 커넥터를 사용하기도 한다.
 
 
 
DMX 인터페이스 회로
DMX 인터 페이스는 1개의 장치에서 다른장치로 연결을 편지하게 하기위해
2개의 커넥터를 장착하고 있다. 하나는 입력이면, 다른 하나는 출력으로 사용할 수 있다.
JP1은 종단저항이며, 마지막 DMX 장치에서 전기신호의 반사를 방지하는 용도이다.
우측의 RX, TX, D2는 아듀이노 기판의 디지털 포트로 연결한다. 
 
 
 
DMX 주소설정 스위치
DMX 주소를 설정하는 스위치는 10회로 DIP 스위치를 사용하며,
S1 ~ S10은 2진값으로 2^0 ~ 2^9 까지 설정할 수 있다. 이값은 0 ~ 512 CH 이다.
좌측의 포트번호는 아듀이노 기판의 아날로그 포트와 디지털 포트로 연결한다.
 
디지털 입력/출력 포트가 부족하면, 아날로그 입력포트를 디지털 포트로 변경이 가능하다.
아날로그입력 포트를 디지털입력 포트로 사용하려면, 아듀이노에서의 포트번호만 알면 된다.

아듀이노의 아날로그입력 포트 A0~A5의 디지털 입/출력 포트 번호는 D14~D18 이다.
  
 
 
DMX PWM-출력 구동회로
아듀이노 기판의 PWM 전용출력을 입력한다. LED의 구동전원은 9~24V의 별도의 외부전원을 사용해야 한다.
밝기조절용 PWM 구동회로에 들어온 PWM 신호는 100K와 1uF의 1차적분 회로에서 직류로 변환되고
이신호를 연산증폭기 LM324 에서 전류증폭하여 MOSFET IRF520을 PWM에 비례하는 직류신호로 구동한다.
 
 
전류제한 저항 RS는 사용하는 LED의 색상과 최대전류규격에 따라서 각각 틀린 저항값을 사용해야 한다.  
최대 작동전류가 350mA 급의 1.25W 파워 LED를 사용한다면, 각색의 정격전류에서의 VF전압을 이용하여,
RS(red) = (12V - (VF x 3 pcs)) / 0.35 A = (12 - (2.5x3)) / 0.35 = 12.8 ohm => 12 ohm을 사용.
RS(green) = (12V - (VF x 3 pcs)) / 0.35 A = (12 - (3.5x3)) / 0.35 = 4.2 ohm => 4.3 ohm을 사용.
RS(blue) = (12V - (VF x 3 pcs)) / 0.35 A =  (12 - (3.5x3)) /0.35 = 4.2 ohm => 4.3 ohm을 사용.

DMX to PWM 변환장치의 LED 연결방법 예
  
 
참조 사이트 : http://www.tinker.it/en/Products/DMXInterface
참조 사이트 : http://tinker.it/now/category/hardware/

DMX to PWM 변환장치의 소스
아날로그 전압을 출력하는 PWM출력 포트 D9, D6, D5, D3은 MOSFET 구동회로에 연결되어잇다.
D0, D1은 UART의 RX, TX로 DMX512의 250K bps 통신포트로 사용한다.

tinker.it 의 DMX to PWM 수신장치의 기판용 수신소스는 아직, 비공개입니다.
DMX 4채널 수신기용 소스는, 첨부파일 #1 arduino_dmx4ch.pde를 받으십시요.

------------------------------------------------------------------------------------------------------------------
아듀이노 4채널 DMX 수신기 소스
참조 : http://elec.sakuraweb.com/dmx/
제목 : dmx.c
저자 : JH3IYO
 
이 소스는 참조 사이트의 Tiny2313을 사용한 dmx_pwm.c 소스를,
아듀이노 호환기판 M168-USB용으로 개조한, 4채널 DMX 수신기이다.
 
PWM 출력의 최대값은, M168-USB 기판의 A7에 연결된 가변저항의 설정값과,
DMX 송신측에서 제어하는 DMX CH =100번의 데이터 값으로 결정된다.

장치의 DMX 수신시작 채널 번호는 uint16_t dmx_addr = 100; 으로 설정한다.
DMX 수신 채널번호는 숫자 100을, 자신이 원하는 DMX 채널 번호로 변경할 수 있다.

DMX CH100 =전체밝기, CH101 =적색, CH102 =녹색, CH103 =청색 이며,
이 소스에서는, LED 구동회로를 적색 =D9, 녹색 =D10, 청색 =D11에 연결한다.

#include <avr/io.h>
#define DMX_SYNC_8MH 3
#define DMX_SYNC_16MH ?

#define red 9        // red LED = D9
#define green 10   // green LED =D10
#define blue 11     // blue LED =D11

#define on 1
#define off 0
#define ind 13     // indicator LED =D13 
 
uint16_t dmx_addr = 100;   // DMX 전체 512 채널중에서 1개를 선택 (시작번호)
uint16_t dmx_ch = 4;         // 연결된 DMX로 제어되는 LED 출력 (제어 채널의 수)       
uint16_t dmx_size =24;      // DMX 수신 버퍼의 크기 (여유있게 한다)

uint8_t dmx_mode;   // receive dmx status
uint8_t dmx_buf[24]; // dmx data buffer
 
// DMX data recive from UART0
// Break -> ch0 -> adrs=ch -> ch++ -> ch(end)
// Mode1 -> Mode2 ->Mode3  -> Mode3 -> Mode4
#pragma vector=UART_RECV_vect
ISR(UART_RECV_vect)
{
  register unsigned char dmx_data;
  if (UCSR0A& (1 << RXC0))    // end of usart receive =ready rx data?
  {
    dmx_data =UDR0;   // save dmx data
    dmx_mode = 99;    // received dmx data (mode =99)
    digitalWrite(ind, off);    // led on for data mode 
    return;            // mode =99 is middle of dmx data
  }
 
  else if (UCSR0A& (1 <<FE0))  // Frame error =Break ?
  {
    dmx_mode = 1;           // break signal (mode =1)
    digitalWrite(ind, on);    // led off for break mode
    return;                       // don't use dmx_data because break signal =frame error
  }
 
  if (dmx_mode == 1) // start of dmx frame (mode =1)?
  {
    if (dmx_data == 0)   // 1st dmx data is 0 (adrs =0)?
    {
      dmx_addr = 0;      // make dmx start adrs =0
      dmx_mode = 2;      // start of dmx data (mode =2)
      digitalWrite(ind, on);
    }
    else dmx_mode =99;   // not dmx adrs =0
  }
 
  else if (dmx_mode == 2)  // mode =2 is receive of dmx data
  {
    if (dmx_addr == dmx_ch)  // matched dmx adrs =ch?
    {
      dmx_addr = 0;      // dmx adrs =0 for 1st dmx data of matched ch
      dmx_mode = 3;      // mode =3 is matched dmx ch 
    }
    else dmx_addr ++;    // next dmx data
  }
 
  if (dmx_mode == 3)    // matched dmx ch? 자신의 채널번호 = 수신중인 dmx adrs?
  {
    dmx_buf[dmx_addr] =dmx_data;  // save dmx data to buffer, 수신된 DMX 데이터를 저장한다.
    dmx_addr ++;        // for next dmx ch, 저장위치를 다음 채널로 변경 
   
    if (dmx_addr >= dmx_size) dmx_mode =4;  // end of dmx data is mode =4
    digitalWrite(ind, on);        // ready indicator for new dmx
  }
}
 
int acc;  // saves adc value fo 10 bit
int eoc;  // flag of end of ADC convert

// 10 비트 ADC 가로채기 함수
#pragma vector=ADC_vect
ISR(ADC_vect)
{
  acc =ADC;     // save 10 bit adc value
  eoc =1;       // end of convert
}
 
// 단일(Single ended) 입력으로, ADC0의 결과는 오른쪽으로 정렬 (Right adjusted)
void init_adc()
{
  ADCSRA = (1<<ADEN)|(1<<ADIE)|(1<<ADSC)|(1<<ADATE)|(1<<ADPS2)|(1<<ADPS1);  // CLK/64                  
  ADMUX = (0<<REFS1)|(0<<REFS0); // AREF =AVCC, ADC CH =0               
  ADCSRA |= ADSC;                // ADC 가로채기를 허용
}
 
// UART를 dmx 규격 DMX 250K BPS 으로 초기화한다
void init_uart()
{
  UBRR0H =0;
  UBRR0L =DMX_SYNC_16MH;   // 250kbps (Xtal =16MHz)
  UCSR0A =0x02;            // U2X=1, MPCM=0 (Xtal =8MHz)
  UCSR0C =0x0e;            // UMSEL=00, UPM=00, USBS=1, UCSZ10=11
  UCSR0B =0x90;            // RXCIE=1, TXCIE=0, UDRIE=0, RXEN=1, TXEN=0, UCSZ2=0
}
 
void dmx_to_pwm(int pot)
{
  int ratio, r_pwm, g_pwm, b_pwm;
  ratio =(pot *dmx_buf[0]) /256;

  r_pwm =(dmx_buf[1] *ratio) /256;
  analogWrite(red, r_pwm);    // red pwm =dmx ch +1

  g_pwm =(dmx_buf[2] *ratio) /256;
  analogWrite(green, g_pwm);  // green pwm =dmx ch +2

  b_pwm =(dmx_buf[3] *ratio) /256;
  analogWrite(blue, b_pwm);  // blue pwm =dmx ch +3
}
 
void setup()        // 아듀이노 기판의 초기화
{
  int i;
  init_adc();        // adc를 초기화

  dmx_mode = 0;     // DMX =준비
  for (i =0; i <dmx_size; i++) dmx_buf[i] =0;    // DMX 수신 버퍼를 지움

  init_uart();           // uart를 초기화 (dmx 규격)
}
 
void loop()            // 아듀이노 기판의 주함수
{
  int pot;

  ADMUX =7;         // 밝기 조절용 가변저항
  delay(10);           // delay 10ms
  pot =acc/4;         // make 8 bit value (예 1023 to 255)
 
  while(dmx_mode !=4)  // end of dmx data received?
  {
                                  // 수신대기 중에도 사용자 함수를 실행할 수 있다.
  }                              // DMX 주소설정 스위치 읽기 혹은 작동시험 등,
  dmx_to_pwm(pot);     // dmx data to LED (R, G, B)  

  dmx_mode = 0;        // end of dmx data received
  for (i =0; i <dmx_size; i++) dmx_buf[i] =0;    // DMX 수신 버퍼를 지움
}
 
이 자료의 무단복제 및 이 사이트 링크가 없는 무단게시를 일절 금지합니다.
 
이 프로그램은 무료 소프트웨어로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.
이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA

 AVRTOOLS™
   
이름아이콘 심플멘
2009-02-16 10:43
주인장님 자료보고 많은도움받고있습니다 그런데 수신장치 만들어보았는데 도통 동작을 않합니다
혹 수정해야 하는부분이 있는지 있다면 어떻게 해야하는지 알려주심 감사하겠습니다 ^^
   
이름아이콘 avrtools™
2009-02-24 18:13
우선 하드웨어어가 안되는지, 소프트웨어 버그인지?
아니면 DMX 통신이 연결불량인지? DMX 채널이 불량인지?
LED 구동용 PWM이 불량인지?
사용한 하드웨어와 소스가 벌레가 있는지? 컴파일이 잘되는지?
아무 정보도 없이 일방적으로 물어보면? 제가 답변이 안됩니다.
   
이름아이콘 심플멘
2009-02-28 18:40
네 제가 설명을 잘못드렸네요 죄송  일단 하드웨어는 이상없이 구성되었습니다  혹 통신이 않되서인가해서 다른 수신장치에 통신회로 연결해보면 하드웨어는 이상이 없는듯합니다  아듀이노 보드에 업로드도 정상적으로된듯 에러메시지도 없구요 그런데  led는 켜지지 않습니다  제가 구한 다른수신장치는 잘동작하는데  이상하게 아무런 반응이없어서 혹 프로그렘상에 무언가 수정해야하는 부분이 있는지 여쭤봅니다 ^^
   
이름아이콘 avrtools™
2009-03-03 13:50
M168의 TX/RX 핀으로 DMX 신호거 들어 오는지요?
DMX 채널 번호를 송신측과 맞추어 보십시요,
그리고, UART 수신 루틴에 DMX가 수신되는 단계에 따라서 점등되는 LED를 추가하고
디버깅 해 보십시요, 어느부분에서 안되는지 위치가 나올 겁니다.
   
이름아이콘 심플멘
2009-03-03 20:54
주인장님 답변 감사드립니다  다시한번 씨름 해봐야겠습니다
바쁘신데 친절한답변 다시한번 감사 드립니다 ^^
   
이름아이콘 용이
2009-12-08 17:32
소스가 조금 잘못된 것 같습니다.
수신 인터럽트 첫번째 if문에서 정상적이든, 비정상이든 데이타가 수신되면
dmx_mode를 99로 만들고 인터럽트에서 빠져나와 버립니다.
그래서 인터럽트 안에 첫번째 if문 이외에 나머지는 전부 무시되는 것 같습니다.
한번 확인해 보세요.
   
이름아이콘 avrtools™
2012-03-09 20:20
dmx_mode=99로 완료된 수신 데이터는 dmx_data에 들어 있습니다.
사용 하드웨어 판매 사이트에서 배포하는 자료이므로, 세부사항이 빠져있을 겁니다,,
그보다는 인터럽트 이후에 주함수에서 수신한 데이터를 처리하는 곳을 점검해 보세요,.
dmx_mode는 4가 되어야 정상 수신된 것으로 처리되네요,,,
   
 
윗글 아듀이노 적외선 거리센서
아래글 아듀이노 AVR-ISP 만들기
    N         제목    글쓴이 작성일 조회 추천
61 비접점식 QTouch 방식 근접검출 스위치 leeky 2016/01/21 (목) 629 0
60 Arduino 고속 오실로스코프 #3 avrtools™ 2012/03/29 (목) 17688 0
59 아날로그 8ch 데이터 로거 avrtools™ 2012/03/29 (목) 2769 0
58 Arduino DMX512 송신기 제작 avrtools™ 2012/03/15 (목) 2879 0
57 nRF24L01 무선모듈의 사용방법 avrtools™ 2012/03/07 (수) 5831 0
56 초음파 거리 측정기의 제작 avrtools™ 2011/09/18 (일) 4781 0
55 3축 가속도 센서 ADXL335 avrtools™ 2011/09/09 (금) 3310 0
54 Arduino Uno USBserial 펌웨어의 변경 avrtools™ 2011/08/27 (토) 2932 0
53 Arduino MIDI의 소개 avrtools™ 2011/08/19 (금) 3327 0
52 Arduino 고속 Oscillo Scope #2 avrtools™ 2011/08/12 (금) 2937 0
51 Arduino Uno 및 USB2serial Uno의 소개 [2] avrtools™ 2011/07/30 (토) 3194 0
50 Arduino IDE에서 AVRISP-mkII 사용방법 avrtools™ 2010/10/22 (금) 7819 0
49 아듀이노 초음파 거리측정 및 응용 avrtools™ 2010/03/14 (일) 4077 0
48 M328-USB의 비밀 온도센서 avrtools™ 2010/01/02 (토) 3500 0
47 M168-mini로 만드는 USBasp avrtools™ 2009/10/10 (토) 5190 0
46 OBDuino ISO9141 소스의 설명 avrtools™ 2009/10/08 (목) 4069 0
45 아듀이노 0017 업그레이드 avrtools™ 2009/08/18 (화) 3595 0
44 Arduino 0015 업그레이드 avrtools™ 2009/06/01 (월) 3294 0
43 CC2500 Zigbee RF Modem #1 [4] avrtools™ 2008/11/20 (목) 6512 0
42 아듀이노 소프트웨어 Ver 0012 avrtools™ 2008/09/23 (화) 3944 0
41 Arduino 소프트웨어 설치방법 avrtools™ 2008/08/31 (일) 5508 0
40 아듀이노 PC 카메라 제작 avrtools™ 2008/10/28 (화) 7101 0
39 아듀이노 AVR-ISP V2의 제작 [6] avrtools™ 2008/10/22 (수) 8148 0
38 아듀이노 J1850-PWM 스캐너 avrtools™ 2008/10/15 (수) 4471 0
37 아듀이노 MPGduino의 제작 avrtools™ 2008/10/11 (토) 4801 0
36 아듀이노 OBD-II PID 처리함수 avrtools™ 2008/10/12 (일) 5391 0
35 아듀이노 OBD-II PID 송수신 함수 avrtools™ 2008/10/09 (목) 9515 0
34 아듀이노 ODB-II 스캐너 제작 [9] avrtools™ 2008/10/04 (토) 16957 0
33 아듀이노 AC전원 THD 측정 [2] avrtools™ 2008/09/30 (화) 6662 0
32 아듀이노 소프트방식 16Bit ADC avrtools™ 2008/09/23 (화) 5469 0
31 아듀이노 초음파 모듈의 제작. avrtools™ 2008/09/22 (월) 4754 0
30 아듀이노 Wii 프로세싱 avrtools™ 2008/09/20 (토) 4071 0
29 아듀이노 초음파 거리측정 avrtools™ 2008/09/20 (토) 5965 0
28 아듀이노 8x5 초소형 전광판 avrtools™ 2008/09/11 (목) 4578 0
27 아듀이노 4선식 터치패널 avrtools™ 2008/09/10 (수) 4587 0
26 아듀이노 2색 8x8 LED avrtools™ 2008/09/10 (수) 4806 0
25 아듀이노 24x6 LED 전광판 avrtools™ 2008/09/10 (수) 5338 0
24 아듀이노 8x8 LED 프로세싱 avrtools™ 2008/09/10 (수) 4044 0
23 아듀이노 32x16 RGB 전광판 avrtools™ 2008/09/06 (토) 13574 0
22 아듀이노 맥박검출기 avrtools™ 2008/09/03 (수) 9350 0
21 아듀이노 적외선 거리센서 avrtools™ 2008/09/01 (월) 5810 0
20 아듀이노 DMX 수신장치 [7] avrtools™ 2008/08/31 (일) 6665 0
19 아듀이노 AVR-ISP 만들기 avrtools™ 2008/08/30 (토) 4064 0
18 아듀이노 POV #3 avrtools™ 2008/08/30 (토) 3379 0
17 아듀이노 POV #2 avrtools™ 2008/08/30 (토) 3189 0
16 AVR 병렬포트 굽기장치 avrtools™ 2008/08/30 (토) 5122 0
15 아듀이노 DMX 송신기 avrtools™ 2008/08/28 (목) 5048 0
14 아듀이노 부트로더의 개조 [1] avrtools™ 2008/08/28 (목) 5713 0
13 아듀이노 병렬포트 굽기장치 avrtools™ 2008/08/26 (화) 4130 0
12 아듀이노 POV #1 avrtools™ 2008/08/26 (화) 3424 0
11 아듀이노 MIDI 드럼 leeky 2008/08/24 (일) 4679 0
10 아듀이노 SD/MMC 카드 avrtools™ 2008/08/24 (일) 9712 0
9 아듀이노 MIDI 플륫 avrtools™ 2008/08/24 (일) 3516 0
8 아듀이노 RGB LED avrtools™ 2008/08/23 (토) 4955 0
7 아듀이노 USB 오실로스코프 [2] leeky 2008/08/21 (목) 6345 0
6 가속도계 ADXL202 응용소스 avrtools™ 2008/08/20 (수) 4827 0
5 아듀이노 가속도센서 avrtools™ 2008/08/18 (월) 4806 0
4 아듀이노 RC서보 제어 avrtools™ 2008/08/17 (일) 5143 0
3 아듀이노 910-ISP 만들기 avrtools™ 2008/08/16 (토) 4645 0
2 아듀이노 온도센서, XBee 송수신 avrtools™ 2008/08/15 (금) 7413 0
1 아듀이노 기본명령 avrtools™ 2008/08/07 (목) 6508 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