DMX512信号送受信について
ここのところhastech氏と照明機器開発をしていたので一度ここでまとめておきます。
DMX512の仕様書さえ読めば乗っているが、
Ujjal's DMX512 Pages....The DMX512 Packet
を参考にしました。
信号生成
一番手軽な手段であるArduinoでやるなら、Break信号を生成する手段が少し強引となります。
手順
ブレークタイムを作る
マークアフターブレークを作る
<<シリアル通信スタート>>
スタートコード送信
各チャネルデータを送信
シリアルライブラリではブレークが実現できないので、その都度Serial.beginをすることにします。
BaudRate:250000
StopBit:2bit
試験的に8chですが、適宜増やすことが可能です。
信号受信
生成した信号を見ればわかるとおり、フレーミングエラー検出がチャンネルリセットとして働けばいいので実装はとても楽です。が、Arduino上でUCSR0AのFE*1にアクセスする術が、ArduinoのSerialライブラリにはありません。
Arduino上にAVRのコードを書いても動くのですが、気持ち悪いので普通にAVRでやりました。
方法
フレーミングエラー検出されたらチャンネル数をリセット
受信するたびにチャンネル数をインクリメント
0番目はスタートコード
これだけなのでかなりあっさりできます。
あと通信線路に関しては、RS-485トランシーバ、レシーバを介せばいい感じです。