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

[复制链接]
7430|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
去查这个协议啊,按照协议写时序就行了。

我看过很多协议,大部分是拨码开关位地址,在线写的都是一带而过
队长shiwo 发表于 2017-11-27 09:33 | 显示全部楼层
 楼主| 小S咯 发表于 2017-11-27 10:34 | 显示全部楼层

能不能详细一点呢?
队长shiwo 发表于 2017-11-27 11:42 | 显示全部楼层
小S咯 发表于 2017-11-27 10:34
能不能详细一点呢?

在DMX512基础上加上RDM功能,硬件不用改,软件上添加就行,RDM上有修改起始码的命令,但是需要你的控台或者控制器(发DMX数据的设备)也支持RDM功能
 楼主| 小S咯 发表于 2017-11-27 15:34 | 显示全部楼层
队长shiwo 发表于 2017-11-27 11:42
在DMX512基础上加上RDM功能,硬件不用改,软件上添加就行,RDM上有修改起始码的命令,但是需要你的控台或 ...

我在下所谓的地址其实是不是就是1到512数字,存储在EEPROM里面,然后其实每个芯片都是接收512个数据,用哪个数据用这个存储在EEPROM的数字决定??
huangcunxiake 发表于 2017-11-27 18:44 | 显示全部楼层
看来是个新东西啊,知道的人不多
Rospiers 发表于 2017-11-28 10:46 | 显示全部楼层
照协议写时序
队长shiwo 发表于 2017-11-28 11:21 | 显示全部楼层
huangcunxiake 发表于 2017-11-27 18:44
看来是个新东西啊,知道的人不多

不是新东西,做舞台或者灯光的都知道这东西
队长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)
 楼主| 小S咯 发表于 2017-11-28 11:30 | 显示全部楼层

我是要写接收程序,还有设置地址。。。。
接收程序有什么思路吗??比如前面的复位信号80us ,8us,这些在串口接收中断要怎么判断呢?
 楼主| 小S咯 发表于 2017-11-28 14:15 | 显示全部楼层
队长shiwo 发表于 2017-11-28 11:29
你所说的地址码是1到512的是吧,每个设备都有个地址码,设备从主机发来的DMX数据里根据自己的地址码取出 ...

你有标准的DMX512接收程序吗?可以参考一下吗?
yr_xie 发表于 2017-11-28 14:37 | 显示全部楼层
比较简单之前有做过项目
队长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回路数据
xixi2017 发表于 2017-11-28 18:56 | 显示全部楼层
这个楼主第一次接触吧
 楼主| 小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的复位信号??
 楼主| 小S咯 发表于 2017-11-29 10:06 | 显示全部楼层
xixi2017 发表于 2017-11-28 18:56
这个楼主第一次接触吧

是的是的,在虚心请教呢,您对这方面了解吗???
队长shiwo 发表于 2017-11-29 10:34 | 显示全部楼层
小S咯 发表于 2017-11-29 10:05
这样有点看不懂呀,程序不完整呀。是不是串口配置9位,1位停止位。判断第九位是不是为0.0的话就证明接收 ...

是的,大概就这意思的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

178

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部