OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5658|回复: 14

DMX512协议进行LED亮度调节?

[复制链接]

49

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1182
金钱
1182
注册时间
2020-5-13
在线时间
202 小时
发表于 2020-11-21 09:19:40 | 显示全部楼层 |阅读模式
10金钱
DMX512协议 是通过485进行发送数据包。 那么如何通过数据包的发送来进行LED的灯光调节。 从何达到渐变效果。我试过从0-255,但是灯光效果比较差, 有一定的频率一闪一闪的。

最佳答案

查看完整内容[请看2#楼]

现在我问题解决啦。 我是通过一个循环不停的发送数据包。 数据包要稳定发送,才会是LED灯条稳定变换。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

49

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1182
金钱
1182
注册时间
2020-5-13
在线时间
202 小时
 楼主| 发表于 2020-11-21 09:19:41 | 显示全部楼层
现在我问题解决啦。 我是通过一个循环不停的发送数据包。 数据包要稳定发送,才会是LED灯条稳定变换。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2020-11-22 01:19:42 | 显示全部楼层
帮顶
回复

使用道具 举报

49

主题

176

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1182
金钱
1182
注册时间
2020-5-13
在线时间
202 小时
 楼主| 发表于 2020-11-22 12:39:48 | 显示全部楼层
顶顶顶, 看有没有玩过LED灯的。 交流一下, 我自己这边也是在开发。
回复

使用道具 举报

0

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2021-8-5
在线时间
7 小时
发表于 2021-8-16 15:37:19 | 显示全部楼层
可以请教吗 我最近在看dmx512
q:1491089379
回复

使用道具 举报

34

主题

388

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
4081
金钱
4081
注册时间
2012-10-21
在线时间
642 小时
发表于 2021-8-16 17:20:27 | 显示全部楼层
zhoujc1997513 发表于 2021-8-16 15:37
可以请教吗 我最近在看dmx512
q:1491089379

就是一个串口通信,很简单
回复

使用道具 举报

3

主题

117

帖子

0

精华

高级会员

Rank: 4

积分
559
金钱
559
注册时间
2018-10-3
在线时间
107 小时
发表于 2021-8-16 17:39:48 | 显示全部楼层
zhoujc1997513 发表于 2021-8-16 15:37
可以请教吗 我最近在看dmx512
q:1491089379

简单得一批。 整包数据 就一个帧错误+SLOT+512个byte。 接收处理 简单的就判断帧错误,然后开始接收513个数据。
回复

使用道具 举报

0

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2021-8-5
在线时间
7 小时
发表于 2021-8-16 17:50:02 | 显示全部楼层
PCA 发表于 2021-8-16 17:20
就是一个串口通信,很简单

做是做出来了 就是遇到了不解的问题,我的发送有时候可以 有时候又没法,用逻辑分析仪看又没问题
回复

使用道具 举报

0

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2021-8-5
在线时间
7 小时
发表于 2021-8-16 17:51:42 | 显示全部楼层
我把代码贴出来吧 帮我看一看各位
void dmx_send(uint8_t* buf)
{
        uart4_mode(0);
        GPIOC->BRR = GPIO_PIN_10;        //break位
        delay_us(100);
        GPIOC->BSRR = GPIO_PIN_10;        //MAB位
        delay_us(10);

        uart4_mode(1);
        unsigned int i;
//        while((UART4->SR&0X40)==0);
//        UART4->DR=0x00;                        //发送start code

        while((UART4->SR&0X40)==0);            //等待发送结束
        for(i=0;i<128;i++)                                //一轮发送四个通道的数据  128*4=512
        {
                UART4->DR = (buf[i*4+1]|0x100) ;
                while((UART4->SR&0X40)==0);
                UART4->DR = (buf[i*4+2]|0x100) ;
                while((UART4->SR&0X40)==0);
                UART4->DR = (buf[i*4+3]|0x100) ;
                while((UART4->SR&0X40)==0);
                UART4->DR = (buf[i*4+4]|0x100) ;
                while((UART4->SR&0X40)==0);
        }

        UART4->DR=0xaa;
        while((UART4->SR&0X40)==0);
        UART4->DR=0xaa;
        while((UART4->SR&0X40)==0);//等待发送结束
}

回复

使用道具 举报

0

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2021-8-5
在线时间
7 小时
发表于 2021-8-16 18:05:55 | 显示全部楼层
zhoujc1997513 发表于 2021-8-16 17:51
我把代码贴出来吧 帮我看一看各位
void dmx_send(uint8_t* buf)
{

我只用到发送端 接收用的欧切斯的驱动电源
回复

使用道具 举报

3

主题

117

帖子

0

精华

高级会员

Rank: 4

积分
559
金钱
559
注册时间
2018-10-3
在线时间
107 小时
发表于 2021-8-16 18:22:09 | 显示全部楼层
zhoujc1997513 发表于 2021-8-16 17:51
我把代码贴出来吧 帮我看一看各位
void dmx_send(uint8_t* buf)
{

uart4_mode(0);
GPIOC->BRR = GPIO_PIN_10;        //break位
delay_us(100);
GPIOC->BSRR = GPIO_PIN_10;        //MAB位
delay_us(10);
uart4_mode(1);
HAL_UART_Transmit_DMA(&huart4,dmxBuff,513);

完事。
用DMA发 他不香吗。
回复

使用道具 举报

0

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2021-8-5
在线时间
7 小时
发表于 2021-8-16 18:23:47 | 显示全部楼层
wklhwkl 发表于 2021-8-16 18:22
uart4_mode(0);
GPIOC->BRR = GPIO_PIN_10;        //break位
delay_us(100);

谢谢 我试试
回复

使用道具 举报

3

主题

117

帖子

0

精华

高级会员

Rank: 4

积分
559
金钱
559
注册时间
2018-10-3
在线时间
107 小时
发表于 2021-8-16 18:32:01 | 显示全部楼层

注意发送间隔就行   一般25ms一包。
回复

使用道具 举报

0

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2021-8-5
在线时间
7 小时
发表于 2021-8-17 09:13:41 | 显示全部楼层
wklhwkl 发表于 2021-8-16 18:32
注意发送间隔就行   一般25ms一包。

解决了 thanks,主要发现我程序的问题了
uart4_mode里面是用来转换输出引脚模式的,在发送dmx512数据的时候,我又在那里面又把串口初始化了一次,导致我的startcode发送不正确,现在我把uart4_mode里面关于串口初始化的删了,只做了io口的模式改变,就正确了
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2024-4-28
在线时间
1 小时
发表于 2024-4-28 16:30:14 | 显示全部楼层
wklhwkl 发表于 2021-8-16 18:22
uart4_mode(0);
GPIOC->BRR = GPIO_PIN_10;        //break位
delay_us(100);

为什么我的不行呀
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 23:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表