MX512协议最先是由USITT(美国剧院技术协会)发展成为从控制台用标准数字接口控制调光器的方式。这个接口基于RS485 硬件接口,传输速率为250Kbps。在舞台灯光,景观灯控制领域得到广泛应用。

DMX512 的帧结构

DMX512帧以break 信号开始。大于22bit,或者88 us。跟随其后的是512 个字节的通道,可以控制512 个通道,或者170个RGB 灯具。

开始码(start code)

一般来讲,简单的设备开始码位0x00,代表后面的数据是灯光数据。DMX512 也可以传输RDM(远程设备管理协议) 这时起始码为0xCC。

Code Meaning Notes
0000 0000 Lighting Data Default format
0101 0101 Network Test All slots carry the same value
0001 0111 Text Packet Simple text message
1100 1100 Remote Device Management RDM Control/Response message
1100 1111 System Information Packet Identifies a DMX Universe
1111 1111 Dimmer Curve Select

DMX512 物理接口

DMX512 使用RS485 接口,物理插头是5 针卡农头。

Male Female
Pin 1 (screen)----------------------------- Pin 1 (screen)
Pin 2 (Data -)----------------------------- Pin 2 (Data -)
Pin 3 (Data +)----------------------------- Pin 3 (Data +)

Mbed OS DMX512  协议的实现

在Mbed OS 下DMX512 的实现只要使用一个serial 口就可以了。下面我们介绍DMX512 类的实现:

例1- 发送模式

向DMX512 灯具发送灯光数据,假设灯具是RGB LED 射灯。

DMX512A.h

#define DMX_SIZE        512
#define DMX_START_CODE  0
class DMX512A {
public:DMX512A(PinName p_tx, PinName p_rx, PinName p_xmit);void put(int addr, int data);void put(unsigned char *buf, int addr = 0, int len = DMX_SIZE);void start();protected:RawSerial _dmx;DigitalOut _xmit; unsigned char data_tx[DMX_SIZE];unsigned char data_rx[DMX_SIZE];}; 

DMX512A.cpp

#include "mbed.h"
#include "DMX512A.h"
DMX512A::DMX512A (PinName p_tx, PinName p_rx, PinName p_xmit): _dmx(p_tx, p_rx),_xmit(p_xmit){   _xmit=1;_dmx.baud(250000);_dmx.format(8, Serial::None, 2);}
void DMX512A::put (int addr, int data) {if (addr < 0 || addr >= DMX_SIZE) return;data_tx[addr] = data;
}
void DMX512A::put (unsigned char *buf, int addr, int len) {if (addr < 0 || addr >= DMX_SIZE) return;if (len > DMX_SIZE - addr) len = DMX_SIZE - addr;memcpy(&data_tx[addr], buf, len);
}
void DMX512A::start () {//send break_dmx.send_break();wait_us(88); // send start code_dmx.putc(DMX_START_CODE);// send 512 channelfor (int i=0;i<512;i++)_dmx.putc(data_tx[i]);} 

这一代码中,关键的是发送88uS 的break 信号。

主程序 写了一段LED 的流水控制,底色是绿色,红灯在流动。

#include "mbed.h"
#include "DMX512A.h"
DigitalOut myled(PC_6);
DMX512A dmx512(PD_5,PD_6,PD_4);
int main() {int addr;addr=0;//set background color greenfor (int i=0;i<170;i++){dmx512.put(addr++,0x00);//red channeldmx512.put(addr++,0xff);//green channeldmx512.put(addr++,0x00);//blue channel}dmx512.start();addr=0;while(1) {wait(1.0); // 1 secmyled = !myled; // LED Flashdmx512.put(addr++,0xff);//red channeldmx512.put(addr++,0x00);//green channeldmx512.put(addr++,0x00);//blue channeldmx512.start();if (addr==510) addr=0;wait(1.0); // 1 sec}
}

Mbed OS :DMX512 灯光控制协议相关推荐

  1. 冠榕智能灯光控制协议分析(controller-node) 2

    z-wave第一篇,我们用COMMAND_CLASS_BASIC - BASIC_SET控制智能开关.但是智能开关上有两个执行器,我们只能控制其中一路,那么我们如何控制另一路的开关的.在z-wave第 ...

  2. 冠榕智能灯光控制协议分析(controller-node)

    1. 在Z-WAVE PC Controller软件选择已配对的智能开关. 从上图中可以看到,我们的智能开关的node id是11,即0x0B. 2. 向智能开关发送灯光的开闭数据. CommandC ...

  3. 冠榕智能灯光控制协议分析(controller init)

    上面几篇已经详细介绍了z-wave协议的分析方法,这一章,我们分析z-wave pc controller初始化时的通信信息.我们只将关键信息列出,然后直接将分析出来的串口数据列出. 1. 得到z-w ...

  4. 冠榕智能灯光控制协议分析(node-controller)

    1. 在Z-WAVE PC Controller软件选择已配对的智能开关. 从上图中可以看到,我们的智能开关的node id是11,即0x0B. 2. 按下智能开关,用串口工具可以看到以下信息. 01 ...

  5. dmx计算机,DMX512协议是什么 DMX512数字灯光控制系统介绍

    引言 基于DMX512控制协议进行调光控制的灯光系统叫做数字灯光系统.目前,包括电脑灯在内的各种舞台效果灯.调光控制器.控制台.换色器.电动吊杆等各种舞台灯光设备,以其对DMX512协议的全面支持,已 ...

  6. 《LED调光-DMX512灯光协义接收控制》转

    源:http://blog.163.com/zhaojun_xf/blog/static/30050580200951023046891 来自: 作者:龙图开发网 文章来源:龙图开发网 时间:2009 ...

  7. MBED OS 参考手册-边读边翻译,

    参考手册从总体上.运行时.配置.模块技术和API方面对MBED  OS进行了全面的介绍. 在阅读参考手册的同时,翻译了部分资料. 1  概述 1.1  Mbed OS 参考手册 应用代码采用C++编写 ...

  8. 【Paper】2022_基于无人驾驶地面车辆的多Agent系统仿真平台的设计及编队控制协议的研究

    分享自己的一篇文章,发布在人工生命与机器人ICAROB2022,欢迎各位引用. A Design of Multi-Agent System Simulation Platform Based on ...

  9. 【控制】多智能体系统总结。4.控制协议。

    [控制]多智能体系统总结.1. 系统模型.2.控制目标.3.模型转换. [控制]多智能体系统总结.4.控制协议. [控制]多智能体系统总结.5.系统合并. 文章目录 4. 控制协议 4.1 一阶一维系 ...

  10. ARM公布“物联网”嵌入式mbed OS系统软件平台

    继ARM公司发布了为嵌入式微控制器设计的Cortex-M7架构处理器,ARM又公布了专为廉价低功耗"物联网"设计的新版软件及系统平台,以加速物联网设备的发展及部署.该软件为基于AR ...

最新文章

  1. 关于C++中的虚拟继承的一些总结
  2. redis-redisTemplate模糊匹配删除
  3. 关闭 启动_Steam如何关闭开机自动启动
  4. puppet系列之nginx+php日志切割与salt结合使用
  5. 面试官问 async、await 函数原理是在问什么?
  6. php sphinx 查询,php-Sphinx RT索引和SphinxQL查询
  7. 计算机科学在各专业领域中的应用,计算机科学在各专业领域中的应用
  8. TensorFlow共享变量
  9. 软件产品功能思维导图
  10. java xsd解析_java dom4j解析XSD文件
  11. 线性系统的矫正方法——PID控制理论学习笔记
  12. leggedrobotics free gait 足式机器人自由步态 苏黎世机器人系统实验室
  13. python爬网站图片教程_Python超简单的爬取网站中图片
  14. 车载通信与导航(五):D2D通信流程
  15. 微信小程序:二开版优化新紫色UI云开发新款壁纸小程序源码
  16. LANDESK桌面管理软件
  17. Greenplum-Spark Connector 介绍
  18. 寻求IOS大神,App马甲包上架Appstore
  19. 软件公司如何才能接到项目
  20. python爬取微博热门消息(一)——效果展示

热门文章

  1. 快速西门子PLC入门(适合零基础)
  2. IPTV软件如何做自己的广告系统?
  3. Window winload.efi 文件丢失解决方法
  4. 信捷plc485通信上位机_常用通信接口汇总
  5. 电风扇标准集合(BS/EN/IEC/UL) - 安规+性能
  6. ubuntu虚拟显示器远程连接桌面方案
  7. 风格迁移篇----艺术风格转换的内容与风格解构
  8. 2022年整理LeetCode最新刷题攻略分享(附中文详细题解)
  9. cad 万能字体_好东西!相见恨晚的50个CAD技巧
  10. OpenCV人脸识别