世纪电源网社区logo
社区
Datasheet
标题
返回顶部
未解决

何如实现单线归零码程序?

[复制链接]
查看: 3971 |回复: 8
1
ZWC317441532
  • 积分:14432
  • |
  • 主题:54
  • |
  • 帖子:1254
积分:14432
LV10
总工程师
  • 2020-5-6 15:23:21
10问答币
何如实现单线归零码程序?可以有人会说,这个网上一搜索,就有结果了。
如下面的代码?
void RGB_WByte(uint8_t byte )
{
  uint8_t i;
        for(i=0;i<8;i++)
    {
                        if((byte<<i)&0x80)
                        {               
                        Wrte1();        
                        }
                        else
                        {               
                        Wrte0();                                
                        }
                }
}
但是在实际中,Wrte0()和Wrte1()的内容都输出端 置1后的延迟几个周期就置0,置0后延迟几个周期开始下一位的发送。
在实测波形置1的波形与设定时间基本一致,置0的波形与设定时间都会多出很多时间来。分析可能是循环(for)和判断
(if)语句占用了几个周期。所以一直调不到所需要的置0时间。

另外有资料说用ISP+DMA方式来做,但我这个芯片没有DMA功能。

有没有,实际应用的成功案例分享一下?本次实验的SM16703 单线串行三通道LED驱动芯片.


收藏收藏
fesens
  • 积分:146
  • |
  • 主题:0
  • |
  • 帖子:2
积分:146
LV2
本网技师
  • 2020-6-27 13:29:16
  • 倒数8
 
6月份帮 朋友做了个灯   内置的是WS2812 ,   网上的例程 全部试了没有一个能用的。
花了一天的时间调了时序才搞定,MCU 用的是STC15的 用KEIL C。   移植到飞凌上也可以使用(实际测试带500多个幻彩灯珠没有任何的问题,带的灯珠数越多,对时序的要求越高)
有偿提供 原理图  例程序  ,有需要的可以联系我,私信我也可以。
ZWC317441532
  • 积分:14432
  • |
  • 主题:54
  • |
  • 帖子:1254
积分:14432
LV10
总工程师
  • 2020-6-30 08:46:47
  • 倒数5
 
这个问题已经搞定了,我采用STM32的单片机就可以了,它的系统频率72MHZ,有主函数C文件(附件不支持上传.C格式,实际为.TXT格式)提供参考哟!DMX512灯光数据是如何动起来的
BingSun
  • 积分:10963
  • |
  • 主题:54
  • |
  • 帖子:1975
积分:10963
LV10
总工程师
  • 2020-7-1 17:59:46
  • 倒数4
 
楼主好!!!1、就标题,我不知道是什么意思?什么归零?跟DMX512有什么关系?。

2、关于DMX512,我现在也在写,DMX512是一种非常简单的通信,RGB肯定是需要三个通道,否则无法单独控制RGB亮度。

标准DMX512由一个启始位与一个零位开始,后面跟着512个数据。

设备可根据自己地址接收数据就可以了,简单方便。
Coming.Lu
  • 积分:50193
  • |
  • 主题:39
  • |
  • 帖子:15999
积分:50193
版主
  • 2020-6-30 08:22:33
  • 倒数7
 
很多例程都是太理想化,想当然,并没有考虑实际应用带来的问题。
任何一条指令都是要时间的。
都要考虑这条指令执行的时间是否对整个功能有影响。

比如,前段时间在搞个恒压电流反馈
首先保证ADC采样率不能变,然后在每次ADC间隔完成计算。
为了保证反馈计算的时间足够,还特意搞到个IO口上,看时间,如下图。
ADC总共是三个通道,其中时间最短(占空比最小)的是没有反馈计算,另一个有计算时间相对较短的是电流反馈,计算时间长(占空比最大)的是电压反馈。
电压反馈计算时间长,是因为还要做两次计算输出值的比较,并把参数写到PWM模块。

Coming.Lu
  • 积分:50193
  • |
  • 主题:39
  • |
  • 帖子:15999
积分:50193
版主
  • 2020-6-30 08:26:46
  • 倒数6
 
对时间要求比较高的功能,一般都要用定时器。
定时器不停地跑,这样能保证计时不会受程序影响。
然后程序做些判断和转换至输出的工作。
BingSun
  • 积分:10963
  • |
  • 主题:54
  • |
  • 帖子:1975
积分:10963
LV10
总工程师
  • 2020-7-1 18:15:46
  • 倒数3
 

ZWC317441532
  • 积分:14432
  • |
  • 主题:54
  • |
  • 帖子:1254
积分:14432
LV10
总工程师
  • 2020-7-2 08:02:31
  • 倒数2
 
就是这个芯片,芯片的协议周期时间1.2US,实际时间在2.1US也是可以工作的.
BingSun
  • 积分:10963
  • |
  • 主题:54
  • |
  • 帖子:1975
积分:10963
LV10
总工程师
最新回复
  • 2020-7-2 15:29:50
  • 倒数1
 
我的理解是这种芯片可以更低成本更方便的应用。不管你是1.2还是2.1或者到5.1uS都可以用,与串口通信相比它并不需要一个高精度与高稳定度的振荡器,所以在成本一会有优势,特别是以前国产芯片很不稳定的时候,更显优势。而且控制非常方便,比如你前面提到要控制100个RGB,那么只需发100个数据包就可以了。
热门技术、经典电源设计资源推荐

世纪电源网总部

地 址:天津市南开区黄河道大通大厦8层

电 话:400-022-5587

传 真:(022)27690960

邮 编:300110

E-mail:21dy#21dianyuan.com(#换成@)

世纪电源网分部

广 东:(0755)82437996 /(138 2356 2357)

北 京:(010)69525295 /(15901552591)

上 海:(021)24200688 /(13585599008)

香 港:HK(852)92121212

China(86)15220029145

网站简介 | 网站帮助 | 意见反馈 | 联系我们 | 广告服务 | 法律声明 | 友情链接 | 清除Cookie | 小黑屋 | 不良信息举报 | 网站举报

Copyright 2008-2024 21dianyuan.com All Rights Reserved    备案许可证号为:津ICP备10002348号-2   津公网安备 12010402000296号