ws2812幻彩灯珠使用stc/AI8G1K08控制

控制核心内容

时间的控制是关键

查看手册分析,数据传送中的逻辑0和1都有高低电平,主要控制高电平时间。

颜色分析

每个灯需要24bit的数据控制一个灯的亮度和颜色显示。

个人遇到的问题的原因分析

时间的控制,个人遇到一直显示白光,这表示数据逻辑都发送是逻辑1,也就是高电平时间太长。如果一直是白色光,那么只要减少高电平时间就可以,若直到减少到一个时钟周期nop依然显示白光,那么就需要提高周期频率。

单片机运行周期分析

传统的51单片机 中,晶振频率如果是12MHZ,那么机械周期被12分频,那么一个时钟频率就是1Mhz,也就是最小时钟周期是1x10-6 s=1us,但对于逻辑的0和1控制的ns明显时间控制完全不行,不会传输逻辑0的数据。

在stc/AI8G1K08中,内部默认晶振是24MHZ,而且时钟周期不用12分频,那么时钟周期就是1/24x10-6 s=1/24us ≈41.67ns ,可以看出时间控制的准确性也不太理想,而且在函数调用过程中的时间消耗也变得不可忽略。在尝试后发现,若把软延迟通过函数调用则需要再次减少NOP时间。

硬件连接设计

PCB图像

模拟3D的PCBA的图像,中间图像控制开关,圆形触摸控制灯亮的方式

整体程序分析

下面是传送一个字节数据的时候逻辑值的部分代码,

整体LED控制程序如下,

c 复制代码
#include "intrins.h"
#include "STC8G.h"
#include "delay.h"
#include "led.h"

sbit WS2812_DIN = P5^5;

/*24Mhz时,每个nop表示一个时钟周期也是一个机械周期,不是传统51还需要12分频才是1个机械周期
一个nop周期约为1000/24ns约等于41.67ns
0:高电平:7个nop约290ns;低电平:20个nop约800ns
1:高电平:20个nop;低电平7个nop
void delay290ns(void);
void delay800ns(void);
*/
void led_init(void){
    P5M1 &= ~0x20;  /* 清除 P5.5 的 M1 位0010 0000*/
    P5M0 |=  0x20;  /* 设置 P5.5 为推挽输出*/
}

void send_bit(unsigned char one_bit){
	WS2812_DIN =1;
	if(one_bit){
		_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();  //到7个就认为是逻辑1,不用到22个nops
	}
	else{
		_nop_();_nop_();_nop_();_nop_();
	}
	WS2812_DIN =0;
	_nop_();_nop_();_nop_();_nop_();
}

void led_sendbyte(unsigned char dat)
	{
		 unsigned char i;
    for (i = 0; i < 8; i++) {
        if (dat & 0x80) {
					send_bit(1);
				}
				else{
					send_bit(0);
				}
				dat <<= 1;
			}
		
  }
void led_send_led(unsigned char g, unsigned char r, unsigned char b)
	{
	  led_sendbyte(g);
		led_sendbyte(r);
		led_sendbyte(b);
  }

void led_reset(void)
	{

		 WS2812_DIN =0;
	  Delay1us(300);
  }
	
相关推荐
宵时待雨2 小时前
STM32笔记归纳7:EXTI
笔记·stm32·单片机·嵌入式硬件
古译汉书2 小时前
部分.exe文件打开但是一直显示界面,点击任务栏持续无反应
开发语言·单片机·嵌入式硬件
恒锐丰小吕3 小时前
屹晶微 EG27517 高速低侧单通道驱动芯片技术解析
嵌入式硬件·硬件工程
三佛科技-134163842124 小时前
FT61E13x家族解析(FT61E131/3F/32/33/35)8位AD型MCU之间的区别
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
恒锐丰小吕4 小时前
屹晶微 EG1416 低压高速低侧单通道驱动芯片技术解析
嵌入式硬件·硬件工程
良许Linux4 小时前
51单片机都有哪些优缺点
单片机·程序员·嵌入式·编程
启友玩AI4 小时前
方言守护者:基于启英泰伦CI-F162GS02J芯片的“能听懂乡音”的智能夜灯DIY全攻略
c语言·人工智能·嵌入式硬件·ai·语音识别·pcb工艺
ℳ๓. Sweet5 小时前
【STM32】一种最简单的合并bootloader和app的固件bin文件方法
stm32·单片机·嵌入式硬件
数字芯片实验室5 小时前
怎么定义芯片上的异步时钟?
单片机·嵌入式硬件·fpga开发