单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 909|回复: 1
收起左侧

P8913三路恒流256级RGB彩灯驱动使用资料(STM32F1为例)

[复制链接]
csy-2015-06 发表于 2018-10-13 09:49 | 显示全部楼层 |阅读模式
P9813驱动RGB灯珠
1          P9813简介及特点:
2          P8913常见接线图
因为所有的颜色都是由三原色组合而成,这个RGB彩灯就是让我们给它红绿蓝三种不同比例就可以显示出各种颜色。R:red (红色) G:green(绿色)B:blude(蓝色)。驱动芯片负责把三种颜色的颜色系数给到灯珠,灯珠就会显示彩色。三原色国际色卡自行百度。
3          驱动时序图及工作参数
  • 前32 位“0”为起始帧,在Cin 上升沿时打入,并且时序DIN要先于CIN;
                  ② 标志位为两个“1”;
                   校验数据“B7’”与“B6’”为蓝色灰度数据的“B7”与“B6”的反码;
                  ④ 灰度级数据要高位先入,并且是蓝绿红顺序。
由此可得,MCU需要发送的数据
32位0起始信号:        0000 0000 0000 0000 0000 0000 0000 0000
第一点32位灰度数据:   11B7’B6’ G7’G6’R7’R6’ xxxx xxxx xxxx xxxx xxxx xxxx
第二点32位灰度数据:   11B7’B6’ G7’G6’R7’R6’ xxxx xxxx xxxx xxxx xxxx xxxx
                                          (红色码  绿色码  蓝色码)

可见需要延时操作,单片机执行汇编代码需要时间,所以延时不用太久1us就行。
此外,单片机要发送的数据为

4          驱动思路4.1    发送一位数据:
DIN=0/1    //数据线准备数据
CIN=0   
延时
CIN=1
延时       //时钟线拉高后变低,数据传输到芯片内

4.2    发送32位数据
发送32位数据
For(i=0;i<32;i++)
{
发送一位数据:
}
5          实战代码5.1    整合3个三原色数据到一个变量。
u32 Color_Data(unsigned int r,unsigned int g,unsigned int b) //写入三个八位的值,返回一个32位的数值
{                                       
              u32 temp=0;

              temp |=0x03<<30;         //0xc0--> 1100 0000     1010 1010
              temp |= ((~b)&0xc0)<<22;  //取蓝色最高两位取反,得到B7’ B6’
              temp |= ((~g)&0xc0) <<20; //取绿色最高两位取反,得到G7’G6’
              temp |= ((~r)&0xc0) <<18;   //取绿色最高两位取反,得到R7’R6’
              temp |= b<<16;
              temp |= g<<8;
              temp |= r<<0;

              return temp;
}


5.2    MCU发送数据到芯片
void RGB_Send_Data(u32 data)
{
              unsigned int i;
              for(i=0;i<32;i++)
              {
//取data的最高位,如果是1就写1(注意按位操作是写16进制)
                            if(data&0x80000000)//准备一位数据  
                            {
                                          RGB_DATA_H;
                            }
                            else
                            {
                                          RGB_DATA_L;                   //否则写0
                            }
                            data<<=1;//每取出一个数据,让次高位变成最高位,遍历整个32位的data值
                            RGB_CLK_L;
                            Delay_us(1);
                            RGB_CLK_H;
                            Delay_us(1);
                            /*以上四步操作令CLK产生上升沿*/
              }
}

5.3    最终的控制函数
void RGB_Color_Control(unsigned int r,unsigned int g,unsigned int b)
{
              u32 color_data;
              color_data= Color_Data(r,g,b) ;

              RGB_Send_Data(0);//先发送32位低电平起始信号
              RGB_Send_Data(color_data); //发送第一个32位灰度数据
              RGB_Send_Data(color_data); //发送第二个32位灰度数据

}

5.4    IO口初始化略(推挽输出)
0.png

全部资料51hei下载地址:
P8913驱动RGB彩灯(stm32F1为例).zip (1.07 MB, 下载次数: 15)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

tianqi911 发表于 2019-1-10 17:02 | 显示全部楼层
正需要,参考学习。
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51Hei单片机16群 联系QQ:125739409;技术交流QQ群7344883

Powered by 单片机教程网

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