JL690X(2)驱动RGB灯带

AC690X驱动WS2812(SM16703P)点亮RGB灯带

        在使用AC690X系列蓝牙时,需要设计驱动几十个RGB灯带的程序,经一段时间学习后成功驱动,现在把实现过程分享给大家共同学习。

      1.芯片说明

        此类芯片协议采用的是单极性归零码,每一个码元都必须有高低电平。本协议的每个码元起始为高电平,高电平时间宽度决定“0”码或者“1”码。
在这里插入图片描述

名称描述最小值典型值最大值单位
T0H0码,高电平时间0.3us
T1H0码,低电平时间0.9us
T0L1码,高电平时间0.9us
T0H1码,低电平时间0.3us
TrstReset码,低电平时间80us

        关于其他的参数,级联等,芯片手册均有说明,这里不再赘述。作者在查阅资料时发现关于归零码高低电平时间的定义有多种,只要范围在如下时间左右基本都可实现驱动,零码:高电平时间400ns,低电平时间800ns;‘1’码:高电平时间800ns,低电平时间400ns,‘0’码:高电平时间400ns,低电平时间800ns。

      2.驱动方法

        作者通过SPI驱动RGB灯条,在AC690X的SDK基础上利用SPI1的PB12和PB11分别作为数据线和时钟线进行驱动,此驱动方法的弊端就是PB11会有时钟信号输出不能再用于其他功能,PB10只要设置SPI1为单向通讯即可做普通IO使用。

      3.代码设计

        SPI1驱动的方式是8 Bit 模拟一个归零码的一个‘0’或者‘1’;因此‘0’码对应的数据为0xC0,‘1’码对应的数值为0xFC。读者亦可使用三个时钟周期模拟一个‘0’码或者‘1’码,这种方式一个IC的24BIT刚好是1Byte的时钟周期,注意两种模拟方式时钟周期不同。回归正题,首先在lcd_spi.c文件做出如下修改:

//#if LCD_128X64_EN 
#if 1

        尽量不要在sdk_cfg.h中直接修改LCD_128X64_EN 的值为1,这样的操作会编译不需要的代码。 开启此SPI相关函数定义之后,在初始化时初始SPI相关寄存器(SDK直接调用SPI1_init()函数即可,速度设置为8M)。

while(1)
{
	clear_wdt();
	SPI1_DmaWrite(RGBData,24*RGBNum);
}

RGBNum为RGB灯珠的数目,可依据实际数目进行设置参数;若实际RGB颜色出现混乱的现象,RGBData数据组成修改为:N个0x00 + RGB数据 + M个0x00,N和M的取值用户自行设置验证。

      4.结束语

        以上便是本人使用AC690X设计RGB驱动的实现过程,鄙人才疏学浅,文章如存在错误之处望大家不吝赐教,赠于鄙人学习的机会。欢迎大家进行交流学习,企鹅583671536。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值