打印
[DemoCode下载]

WS2812如何控制?简单,直接NOP延时模拟时序

[复制链接]
487|41
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
捉虫天师|  楼主 | 2024-9-6 22:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
en-us--EC_M0A23_GPIO_ARGB_LED_Control_V1.00 (1).zip (5.25 MB)
使用 GPIO 控制 ARGB LED,主要透过 NOP() 命令让高低电平往后延迟一段时间,程序中设定系统时钟 HIRC 为 48MHz,执行一个命令时间约 1 / 48MHz ( 20.83ns ),由执行命令时间即可得到需要执行几次 NOP() 命令。
void ARGB_sendBIT0()
{
    Dout_Pin = 1;
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    Dout_Pin = 0;
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
                __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
                __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
}

/**
  * [url=home.php?mod=space&uid=247401]@brief[/url]  Send BIT1
  * @param  None
  * @retval None
  */
void ARGB_sendBIT1()
{
    Dout_Pin = 1;
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    Dout_Pin = 0;
                __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
    __NOP();
}

/**
  * @brief  Send Trst
  * @param  None
  * @retval None
  */
void ARGB_sendReset()
{
    int i = 0;
    Dout_Pin = 0;

    for (i = 0; i < 3200; i++)
    {
        __NOP();
    }
}
应了那句话:天下武功,为快不破。

使用特权

评论回复
沙发
两只袜子| | 2024-9-7 15:40 | 只看该作者
所以要打闪电战吗

使用特权

评论回复
板凳
hilahope| | 2024-9-9 10:31 | 只看该作者

WS2812是一种智能控制LED灯源,它可以通过单根信号线控制多个灯点,实现全真色彩显示。

使用特权

评论回复
地板
mnynt121| | 2024-9-9 11:09 | 只看该作者
NOP指令的执行时间取决于单片机的时钟频率。例如,如果单片机的主频是72MHz,那么一个NOP指令的执行时间大约是1/72us。

使用特权

评论回复
5
yorkbarney| | 2024-9-9 12:15 | 只看该作者
使用NOP(No Operation)指令进行延时是控制WS2812信号时序的一种方法。这要求精确计算NOP指令执行的时间及所需数量,以确保符合WS2812的时序要求。例如,如果系统时钟为48MHz,则每个NOP的时间为1/48MHz,即大约20.83纳秒。因此,发送一个比特的数据可能需要执行数十个NOP指令来满足时间上的高电平和低电平持续时间的需求。

使用特权

评论回复
6
modesty3jonah| | 2024-9-9 14:42 | 只看该作者
采取必要的抗干扰措施,确保系统的稳定性和可靠性。

使用特权

评论回复
7
wilhelmina2| | 2024-9-9 16:09 | 只看该作者
WS2812的数据帧由高低电平的持续时间决定,通常高电平(T1H或T0H)和低电平(T1L或T0L)的持续时间需要非常精确。例如,数据帧为1时,高电平持续T1H,低电平持续T1L;数据帧为0时,高电平持续T0H,低电平持续T0L。

使用特权

评论回复
8
benjaminka| | 2024-9-9 19:24 | 只看该作者
WS2812是一种集成了控制电路和RGB芯片的智能控制LED灯源,它的控制主要是通过模拟其特定的时序来实现的。在使用GPIO(通用输入输出)模拟时序驱动WS2812时,通常会采用__NOP()(无操作指令)延时的方法来精确控制高低电平的时间长度,从而生成符合WS2812要求的0码和1码。

使用特权

评论回复
9
51xlf| | 2024-9-9 22:25 | 只看该作者
当控制多个WS2812灯珠时,需要连续发送每个灯珠的24位数据。

使用特权

评论回复
10
eefas| | 2024-9-10 01:27 | 只看该作者
控制WS2812时,需要考虑MCU的系统时钟频率。不同的MCU时钟频率会影响__NOP()延时的精确度。例如,STM32F4系列的系统时钟频率为84MHz,每个__NOP()大约占用11.9ns。因此,需要根据具体的系统时钟频率来计算所需的__NOP()数量。

使用特权

评论回复
11
mollylawrence| | 2024-9-10 04:27 | 只看该作者
软件实现上,可以使用内联函数来减少函数调用的开销,提高时序控制的精度。

使用特权

评论回复
12
我喜欢打游戏| | 2024-9-10 16:08 | 只看该作者
这个实现确实简单,但是这种方式不太推介

使用特权

评论回复
13
1988020566| | 2024-9-10 16:20 | 只看该作者
WS2812是一种集成了控制电路和RGB芯片的智能控制LED灯源,它的控制主要是通过模拟其特定的时序来实现的。在使用GPIO(通用输入输出)模拟时序驱动WS2812时,通常会采用__NOP()(无操作指令)延时的方法来精确控制高低电平的时间长度,从而生成符合WS2812要求的0码和1码。

使用特权

评论回复
14
mnynt121| | 2024-9-10 18:31 | 只看该作者
控制WS2812时,需要考虑MCU的系统时钟频率。不同的MCU时钟频率会影响__NOP()延时的精确度。例如,STM32F4系列的系统时钟频率为84MHz,每个__NOP()大约占用11.9ns。因此,需要根据具体的系统时钟频率来计算所需的__NOP()数量。

使用特权

评论回复
15
olivem55arlowe| | 2024-9-10 20:18 | 只看该作者
为了提高代码的执行效率,可以尽量减少循环和函数调用,直接使用宏定义或内联函数来执行NOP延时。

使用特权

评论回复
16
zerorobert| | 2024-9-10 22:07 | 只看该作者
WS2812 在数据传输之前需要一个复位信号,复位信号的持续时间也需要满足一定的要求,通常是一个较长的低电平脉冲。在模拟时序时,要确保复位信号的正确性,以便 WS2812 能够正确接收后续的数据

使用特权

评论回复
17
jimmhu| | 2024-9-11 10:38 | 只看该作者
如果在程序中使用了中断,要确保中断不会影响到 NOP 延时的准确性。在控制 WS2812 时,最好关闭不必要的中断,或者在中断服务程序中尽量减少执行时间,以免干扰到 WS2812 的信号传输

使用特权

评论回复
18
pentruman| | 2024-9-11 12:23 | 只看该作者
NOP指令产生的延时取决于单片机的时钟频率。确保你知道你的单片机运行在什么频率下,并据此计算所需的NOP次数。

使用特权

评论回复
19
zerorobert| | 2024-9-11 14:02 | 只看该作者
NOP延时容易受到外界干扰              

使用特权

评论回复
20
earlmax| | 2024-9-11 16:02 | 只看该作者
硬件的时钟源稳定,避免因时钟频率波动导致 NOP 延时不准确,从而影响 WS2812 的控制时序。如果时钟频率不稳定,可能会导致 WS2812 无法正确识别信号,出现显示异常等问题。

使用特权

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

本版积分规则

191

主题

3040

帖子

7

粉丝