Mbed OS :DMX512 灯光控制协议
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 灯光控制协议相关推荐
- 冠榕智能灯光控制协议分析(controller-node) 2
z-wave第一篇,我们用COMMAND_CLASS_BASIC - BASIC_SET控制智能开关.但是智能开关上有两个执行器,我们只能控制其中一路,那么我们如何控制另一路的开关的.在z-wave第 ...
- 冠榕智能灯光控制协议分析(controller-node)
1. 在Z-WAVE PC Controller软件选择已配对的智能开关. 从上图中可以看到,我们的智能开关的node id是11,即0x0B. 2. 向智能开关发送灯光的开闭数据. CommandC ...
- 冠榕智能灯光控制协议分析(controller init)
上面几篇已经详细介绍了z-wave协议的分析方法,这一章,我们分析z-wave pc controller初始化时的通信信息.我们只将关键信息列出,然后直接将分析出来的串口数据列出. 1. 得到z-w ...
- 冠榕智能灯光控制协议分析(node-controller)
1. 在Z-WAVE PC Controller软件选择已配对的智能开关. 从上图中可以看到,我们的智能开关的node id是11,即0x0B. 2. 按下智能开关,用串口工具可以看到以下信息. 01 ...
- dmx计算机,DMX512协议是什么 DMX512数字灯光控制系统介绍
引言 基于DMX512控制协议进行调光控制的灯光系统叫做数字灯光系统.目前,包括电脑灯在内的各种舞台效果灯.调光控制器.控制台.换色器.电动吊杆等各种舞台灯光设备,以其对DMX512协议的全面支持,已 ...
- 《LED调光-DMX512灯光协义接收控制》转
源:http://blog.163.com/zhaojun_xf/blog/static/30050580200951023046891 来自: 作者:龙图开发网 文章来源:龙图开发网 时间:2009 ...
- MBED OS 参考手册-边读边翻译,
参考手册从总体上.运行时.配置.模块技术和API方面对MBED OS进行了全面的介绍. 在阅读参考手册的同时,翻译了部分资料. 1 概述 1.1 Mbed OS 参考手册 应用代码采用C++编写 ...
- 【Paper】2022_基于无人驾驶地面车辆的多Agent系统仿真平台的设计及编队控制协议的研究
分享自己的一篇文章,发布在人工生命与机器人ICAROB2022,欢迎各位引用. A Design of Multi-Agent System Simulation Platform Based on ...
- 【控制】多智能体系统总结。4.控制协议。
[控制]多智能体系统总结.1. 系统模型.2.控制目标.3.模型转换. [控制]多智能体系统总结.4.控制协议. [控制]多智能体系统总结.5.系统合并. 文章目录 4. 控制协议 4.1 一阶一维系 ...
- ARM公布“物联网”嵌入式mbed OS系统软件平台
继ARM公司发布了为嵌入式微控制器设计的Cortex-M7架构处理器,ARM又公布了专为廉价低功耗"物联网"设计的新版软件及系统平台,以加速物联网设备的发展及部署.该软件为基于AR ...
最新文章
- 关于C++中的虚拟继承的一些总结
- redis-redisTemplate模糊匹配删除
- 关闭 启动_Steam如何关闭开机自动启动
- puppet系列之nginx+php日志切割与salt结合使用
- 面试官问 async、await 函数原理是在问什么?
- php sphinx 查询,php-Sphinx RT索引和SphinxQL查询
- 计算机科学在各专业领域中的应用,计算机科学在各专业领域中的应用
- TensorFlow共享变量
- 软件产品功能思维导图
- java xsd解析_java dom4j解析XSD文件
- 线性系统的矫正方法——PID控制理论学习笔记
- leggedrobotics free gait 足式机器人自由步态 苏黎世机器人系统实验室
- python爬网站图片教程_Python超简单的爬取网站中图片
- 车载通信与导航(五):D2D通信流程
- 微信小程序:二开版优化新紫色UI云开发新款壁纸小程序源码
- LANDESK桌面管理软件
- Greenplum-Spark Connector 介绍
- 寻求IOS大神,App马甲包上架Appstore
- 软件公司如何才能接到项目
- python爬取微博热门消息(一)——效果展示