AccessViolation Exception

仕事でもはんだづけ、家でもはんだづけ

DMX512信号送受信について

DMXというのは舞台照明機器等の通信に使われるプロトコル

ここのところhastech氏と照明機器開発をしていたので一度ここでまとめておきます。

DMX512の仕様書さえ読めば乗っているが、

Ujjal's DMX512 Pages....The DMX512 Packet

勉強部屋 4

を参考にしました。

信号生成


一番手軽な手段であるArduinoでやるなら、Break信号を生成する手段が少し強引となります。

手順

  1. ブレークタイムを作る

  2. マークアフターブレークを作る

<<シリアル通信スタート>>

  1. スタートコード送信

  2. 各チャネルデータを送信

シリアルライブラリではブレークが実現できないので、その都度Serial.beginをすることにします。

BaudRate:250000

StopBit:2bit

Arduino DMX Test

試験的に8chですが、適宜増やすことが可能です。

信号受信


生成した信号を見ればわかるとおり、フレーミングエラー検出がチャンネルリセットとして働けばいいので実装はとても楽です。が、Arduino上でUCSR0AのFE*1にアクセスする術が、ArduinoのSerialライブラリにはありません。

Arduino上にAVRのコードを書いても動くのですが、気持ち悪いので普通にAVRでやりました。

方法

  • フレーミングエラー検出されたらチャンネル数をリセット

  • 受信するたびにチャンネル数をインクリメント

  • 0番目はスタートコード

これだけなのでかなりあっさりできます。

dmx receive for avr

あと通信線路に関しては、RS-485トランシーバ、レシーバを介せばいい感じです。

RS485/RS422トランシーバ LTC485CN8: 半導体 秋月電子通商 電子部品 ネット通販

*1:フレーミングエラー検出ビット