打印
[STM8]

关于DMX512在线写地址码的问题!

[复制链接]
6568|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小S咯|  楼主 | 2017-11-25 10:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有在从事这个行业的前辈吗???对这个DMX512在线写地址码还有点不懂,有没有STM8的写地址码借来参考一下呢???不是SMT8的也可以。。
沙发
mmuuss586| | 2017-11-25 20:27 | 只看该作者

没接触过这个芯片呢,帮不了你;

使用特权

评论回复
板凳
dongnanxibei| | 2017-11-25 20:38 | 只看该作者
去查这个协议啊,按照协议写时序就行了。

使用特权

评论回复
地板
小S咯|  楼主 | 2017-11-27 08:07 | 只看该作者
dongnanxibei 发表于 2017-11-25 20:38
去查这个协议啊,按照协议写时序就行了。

我看过很多协议,大部分是拨码开关位地址,在线写的都是一带而过

使用特权

评论回复
5
队长shiwo| | 2017-11-27 09:33 | 只看该作者
加RDM

使用特权

评论回复
6
小S咯|  楼主 | 2017-11-27 10:34 | 只看该作者

能不能详细一点呢?

使用特权

评论回复
7
队长shiwo| | 2017-11-27 11:42 | 只看该作者
小S咯 发表于 2017-11-27 10:34
能不能详细一点呢?

在DMX512基础上加上RDM功能,硬件不用改,软件上添加就行,RDM上有修改起始码的命令,但是需要你的控台或者控制器(发DMX数据的设备)也支持RDM功能

使用特权

评论回复
8
小S咯|  楼主 | 2017-11-27 15:34 | 只看该作者
队长shiwo 发表于 2017-11-27 11:42
在DMX512基础上加上RDM功能,硬件不用改,软件上添加就行,RDM上有修改起始码的命令,但是需要你的控台或 ...

我在下所谓的地址其实是不是就是1到512数字,存储在EEPROM里面,然后其实每个芯片都是接收512个数据,用哪个数据用这个存储在EEPROM的数字决定??

使用特权

评论回复
9
huangcunxiake| | 2017-11-27 18:44 | 只看该作者
看来是个新东西啊,知道的人不多

使用特权

评论回复
10
Rospiers| | 2017-11-28 10:46 | 只看该作者
照协议写时序

使用特权

评论回复
11
队长shiwo| | 2017-11-28 11:21 | 只看该作者
huangcunxiake 发表于 2017-11-27 18:44
看来是个新东西啊,知道的人不多

不是新东西,做舞台或者灯光的都知道这东西

使用特权

评论回复
12
队长shiwo| | 2017-11-28 11:29 | 只看该作者
小S咯 发表于 2017-11-27 15:34
我在下所谓的地址其实是不是就是1到512数字,存储在EEPROM里面,然后其实每个芯片都是接收512个数据,用 ...

你所说的地址码是1到512的是吧,每个设备都有个地址码,设备从主机发来的DMX数据里根据自己的地址码取出对应的数据,进行亮度调节,DMX512协议没有在线修改地址码的,而在DMX512的基础有增加了一种RDM协议,也称增强型DMX,RDM协议就可以在线修改设备的地址码,RDM(远程设备管理,Remote Device Management)

使用特权

评论回复
13
小S咯|  楼主 | 2017-11-28 11:30 | 只看该作者

我是要写接收程序,还有设置地址。。。。
接收程序有什么思路吗??比如前面的复位信号80us ,8us,这些在串口接收中断要怎么判断呢?

使用特权

评论回复
14
小S咯|  楼主 | 2017-11-28 14:15 | 只看该作者
队长shiwo 发表于 2017-11-28 11:29
你所说的地址码是1到512的是吧,每个设备都有个地址码,设备从主机发来的DMX数据里根据自己的地址码取出 ...

你有标准的DMX512接收程序吗?可以参考一下吗?

使用特权

评论回复
15
yr_xie| | 2017-11-28 14:37 | 只看该作者
比较简单之前有做过项目

使用特权

评论回复
16
队长shiwo| | 2017-11-28 16:58 | 只看该作者
小S咯 发表于 2017-11-28 14:15
你有标准的DMX512接收程序吗?可以参考一下吗?

void USART1_IRQHandler(void)
{
  uint16_t tmp_uart_data;
  uint8_t  tmp_rb8;
  uint8_t  tmp_rcve_data;
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//接收到数据
        {                       
    USART_ClearITPendingBit(USART1,USART_IT_RXNE);
    // Receive Data register not empty interrupt
    tmp_uart_data = USART_ReceiveData( USART1 );
   
    GPIOA->ODR ^= GPIO_Pin_5;//led flicker   
   
    if( tmp_uart_data & 0x0100 )
      tmp_rb8 = 1;
    else
      tmp_rb8 = 0;
   
    tmp_rcve_data = (uint8_t)( tmp_uart_data & 0x00ff );
    RDM_rcve_control(tmp_rb8,tmp_rcve_data);
        }

  if(USART_GetITStatus(USART1, USART_IT_TC) != RESET)
  {   
    USART_ClearITPendingBit(USART1,USART_IT_TC);
   
  }
}

void RDM_rcve_control(uint8_t rb8,uint8_t usart_rcve_data)
{
  switch( rdm_rcve_proceed )
  { // Bag Head Judge  
    case RDM_RECEIVE_CHECK_SYNC:
      if(rb8 == 0)  rdm_rcve_proceed = RDM_RECEIVE_START_CODE;//下一步:检测第一个数据
      break;
    case RDM_RECEIVE_START_CODE://检测第一个数据
      rdm_rcve_proceed = RDM_RECEIVE_CHECK_SYNC;
      if(rb8 == 1)
      {
        if(usart_rcve_data == 0x00)//dim data receive
        {
          rdm_rcve_proceed = DIM_RECEIVE_SLOT_DATA;//下一步:接收dmx回路数据

使用特权

评论回复
17
xixi2017| | 2017-11-28 18:56 | 只看该作者
这个楼主第一次接触吧

使用特权

评论回复
18
小S咯|  楼主 | 2017-11-29 10:05 | 只看该作者
队长shiwo 发表于 2017-11-28 16:58
void USART1_IRQHandler(void)
{
  uint16_t tmp_uart_data;

这样有点看不懂呀,程序不完整呀。是不是串口配置9位,1位停止位。判断第九位是不是为0.0的话就证明接收到80US+8US的复位信号??

使用特权

评论回复
19
小S咯|  楼主 | 2017-11-29 10:06 | 只看该作者
xixi2017 发表于 2017-11-28 18:56
这个楼主第一次接触吧

是的是的,在虚心请教呢,您对这方面了解吗???

使用特权

评论回复
20
队长shiwo| | 2017-11-29 10:34 | 只看该作者
小S咯 发表于 2017-11-29 10:05
这样有点看不懂呀,程序不完整呀。是不是串口配置9位,1位停止位。判断第九位是不是为0.0的话就证明接收 ...

是的,大概就这意思的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

178

帖子

4

粉丝