AW20216配置记录

记录调试艾为的aw20216灯板

使用软件IIC配置,IIC的使用不记录,以下是参考数据手册总结的初始化函数以及控制灯亮的函数

aw20216初始化

void aw20216_Set_GloabalCurrent(DevDriver_t* driver,uint8_t current)

{

   unsigned char data = 0;

   data = AW20XXX_CMD_PAGE0;

   AW20216_Write_Byte(driver,AW20XXX_PAGE_ADDR,&data,1);

   data = current;

   AW20216_Write_Byte(driver,REG_GCCR,&data,1);  

}

static char Check_chipID(DevDriver_t *driver)

{

   unsigned char ret = 0;

   AW20216_Read_Byte(driver,REG_RSTN,&ret,1);

   if(ret == AW20XXX_CHIPID)

   {

      LOG_DEBUG("aw20216 chip id 0x%x\n", ret);

      return 0;

   }

   else

   {

      LOG_DEBUG("ERROR chip id 0x%x\n", ret);

      return -1;

   }

}

static void aw20216_chip_swen(DevDriver_t *driver)

{

   unsigned char val = 0;

   AW20216_Write_Byte(driver,AW20XXX_PAGE_ADDR,(unsigned char *)AW20XXX_CMD_PAGE0,1);

   AW20216_Read_Byte(driver,REG_GCR,&val,1);

   val &= BIT_CHIPEN_DIS;

    val |= BIT_CHIPEN_EN;

   AW20216_Write_Byte(driver,REG_GCR,&val,1);

}

char aw20216_init(DevDriver_t* driver,unsigned char)

{

   char reg = 0;

   unsigned char data = 0;

   driver->power(1);

   driver->reset(1);

   aw20216_chip_swen(driver);

   reg = Check_chipID(driver);

   data = 0xff;  /* 4. config global current 0x01 0xff*/

   aw20216_Set_GloabalCurrent(driver,data);

   data = 0x04;  /* 5. enable page4 0x46 0x04*/

   AW20216_Write_Byte(driver,REG_MIXCR,&data,1);

   if(!reg)

   {

     LOG_DEBUG("AW20216 INIT finish \r\n");

   }

   else

     LOG_DEBUG("AW20216 INIT failed \r\n");

   return reg;

}

1.这个片子总体来说初始化是不复杂的(不玩花活的话,本人小白,研究的并不深入),初始化就第一个硬件给电,我这里使用了一个DevDriver_t结构体包装了一下,主要是为了统一

DevDriver_t driver_aw20216 =

    {

        .Client = (void *)&i2c_AW20216,

        .power = AW20216_Power,

        .reset = AW20216_Reset,

};这个是结构体的三个元素,power就是硬件使能脚,

reset是软件复位,

static void AW20216_Reset(unsigned char reset)

{

    unsigned char data = 0;

    if (reset)

    {

        data = AW20XXX_CMD_PAGE0;

        AW20216_Write_Byte(&driver_aw20216, AW20XXX_PAGE_ADDR, &data, 1);

        data = 0xAE;

        AW20216_Write_Byte(&driver_aw20216, REG_RSTN, &data, 1);

        vTaskDelay(3);

    }

}

第0页的2F寄存器,写入0xAE是复位,所有寄存器恢复默认值。

2.以上两步做完之后开始软件启动,第0页的GCR寄存器bit7:bit4根据自己的项目需求开启对应的sw通道,bit3,我选择的逻辑电平是2.4/0.6V , bit2:bit1我是默认开启判断的(后面没怎么用这个功能),最后bit0,要写成开启。

3.检查一下芯片ID读取正不正确(这个可以放在最开始就检查,只要保证IIC没有问题)

4.设置全局电流,我直接按最大算,这个应该不影响啥(除非你的项目对功耗有要求)

5.开启第四页的快速设置功能

以上初始化就完成了。

下面是我写的几个快速亮灯的代码,仅供参考

const int aw20xxx_reg_map[] = {

/* PWM,  SL,*/

#if AW20216_CHIP_ENABLE

    //rgb0

    0x00,0x01,0x02,

    //rgb1

    0x12,0x13,0x14,

    //rgb2

    0x24,0x25,0x26,

    //rgb3

    0x36,0x37,0x38,

    //rgb4

    0x48,0x49,0x4a,

    //rgb5

    0x5a,0x5b,0x5c,

    //rgb6

    0x6c,0x6d,0x6e,

    //rgb7

    0x7e,0x7f,0x80,

    //rgb8

    0x90,0x91,0x92,

    //rgb9

    0xa2,0xa3,0xa4,

    //rgb10

    0xb4,0xb5,0xb6,

    //rgb11

    0xc6,0xc7,0xc8,

    //rgb12

    0x03,0x04,0x05,

    //rgb13

    0x15,0x16,0x17,

    //rgb14

    0x27,0x28,0x29,

    //rgb15

    0x39,0x3a,0x3b,

    //rgb16

    0x4b,0x4c,0x4d,

    //rgb17

    0x5d,0x5e,0x5f,

    //rgb18

    0x6f,0x70,0x71,

    //rgb19

    0x81,0x82,0x83,

    //rgb20

    0x93,0x94,0x95,

    //rgb21

    0xa5,0xa6,0xa7,

    //rgb22

    0xb7,0xb8,0xb9,

    //rgb23

    0xc9,0xca,0xcb,



    //rgb24

    0x06,0x07,0x08,

    //rgb25

    0x18,0x19,0x1a,

    //rgb26

    0x2a,0x2b,0x2c,

    //rgb27

    0x3c,0x3d,0x3e,

    //rgb28

    0x4e,0x4f,0x50,

    //rgb29

    0x60,0x61,0x62,

    //rgb30

    0x72,0x73,0x74,

    //rgb31

    0x84,0x85,0x86,

    //rgb32

    0x96,0x97,0x98,

    //rgb33

    0xa8,0xa9,0xaa,

    //rgb34

    0xba,0xbb,0xbc,

    //rgb35

    0xcc,0xcd,0xce,



    //rgb36

    0x09,0x0a,0x0b,

    //rgb37

    0x1b,0x1c,0x1d,

    //rgb38

    0x2d,0x2e,0x2f,

    //rgb39

    0x3f,0x40,0x41,

    //rgb40

    0x51,0x52,0x53,

    //rgb41

    0x63,0x64,0x65,

    //rgb42

    0x75,0x76,0x77,

    //rgb43

    0x87,0x88,0x89,

    //rgb44

    0x99,0x9a,0x9b,

    //rgb45

    0xab,0xac,0xad,

    //rgb46

    0xbd,0xbe,0xbf,

    //rgb47

    0xcf,0xd0,0xd1,



    //rgb48

    0x0c,0x0d,0x0e,

    //rgb49

    0x1e,0x1f,0x20,

    //rgb50

    0x30,0x31,0x32,

    //rgb51

    0x42,0x43,0x44,

    //rgb52

    0x54,0x55,0x56,

    //rgb53

    0x66,0x67,0x68,

    //rgb54

    0x78,0x79,0x7a,

    //rgb55

    0x8a,0x8b,0x8c,

    //rgb56

    0x9c,0x9d,0x9e,

    //rgb57

    0xae,0xaf,0xb0,

    //rgb58

    0xc0,0xc1,0xc2,

    //rgb59

    0xd2,0xd3,0xd4,



    //rgb60

    0x0f,0x10,0x11,

    //rgb61

    0x21,0x22,0x23,

    //rgb62

    0x33,0x34,0x35,

    //rgb63

    0x45,0x46,0x47,

    //rgb64

    0x57,0x58,0x59,

    //rgb65

    0x69,0x6a,0x6b,

    //rgb66

    0x7b,0x7c,0x7d,

    //rgb67

    0x8d,0x8e,0x8f,

    //rgb68

    0x9f,0xa0,0xa1,

    //rgb69

    0xb1,0xb2,0xb3,

    //rgb70

    0xc3,0xc4,0xc5,

    //rgb71

    0xd5,0xd6,0xd7,

#endif

};

int aw20216_rgb_ctrl_multi(DevDriver_t* driver,uint8_t rgb_id,uint8_t length,uint32_t rgb_color,uint8_t brightness)

{

    unsigned char data;

    unsigned char LED_R = 0,LED_G = 0,LED_B =0;

    int ret = 0;

    if(rgb_id + length*3 > 218)

    {

        LOG_DEBUG("error, wrong start id or length\n\r");

        return -1;

    }

    LED_R = rgb_color >> 16 & 0XFF;

    LED_G = rgb_color >> 8 & 0XFF;

    LED_B = rgb_color & 0XFF;

    for(int i = rgb_id;i<(rgb_id + length);i++)

    {

        aw20216_page4_data[aw20xxx_reg_map[i*3]][0]   = LED_B;

        aw20216_page4_data[aw20xxx_reg_map[i*3]][1]   = brightness;

        aw20216_page4_data[aw20xxx_reg_map[i*3+1]][0] = LED_R;

        aw20216_page4_data[aw20xxx_reg_map[i*3+1]][1] = brightness;

        aw20216_page4_data[aw20xxx_reg_map[i*3+2]][0] = LED_G;

        aw20216_page4_data[aw20xxx_reg_map[i*3+2]][1] = brightness;    

    }

    data = AW20XXX_CMD_PAGE4;

    AW20216_Write_Byte(driver,AW20XXX_PAGE_ADDR, &data,1);

    if(ret)

    {

        LOG_DEBUG("set AW20216 REG page error\n\r");

        return -1;

    }

    AW20216_Write_Byte(driver,aw20xxx_reg_map[rgb_id], &aw20216_page4_data[aw20xxx_reg_map[rgb_id]][0], length*3*2);

    if(ret)

    {

        LOG_DEBUG("set AW20216 RGB COLOR error\n\r");

        return -1;

    }    

    return 0;

}



int aw20216_rgb_ctrl_single(DevDriver_t* driver,uint8_t rgb_id,uint32_t rgb_color,uint8_t brightness)

{

    unsigned char data;

    unsigned char LED_R = 0,LED_G = 0,LED_B =0;

    int ret = 0;

    if(rgb_id > 215)

    {

        LOG_DEBUG("ERROR LED ID \r\n");

        return -1;

    }

    LED_R = rgb_color >> 16 & 0XFF;

    LED_G = rgb_color >> 8 & 0XFF;

    LED_B = rgb_color & 0XFF;

    LOG_DEBUG("rgb_id is  %d\r\n",rgb_id);

    LOG_DEBUG("rgb is  %x   %x   %x\r\n",LED_R,LED_G,LED_B);

    aw20216_page4_data[aw20xxx_reg_map[rgb_id]][0]   = LED_B;

    aw20216_page4_data[aw20xxx_reg_map[rgb_id]][1]   = brightness;

    aw20216_page4_data[aw20xxx_reg_map[rgb_id+1]][0] = LED_R;

    aw20216_page4_data[aw20xxx_reg_map[rgb_id+1]][1] = brightness;

    aw20216_page4_data[aw20xxx_reg_map[rgb_id+2]][0] = LED_G;

    aw20216_page4_data[aw20xxx_reg_map[rgb_id+2]][1] = brightness;

    data = AW20XXX_CMD_PAGE4;

    ret = AW20216_Write_Byte(driver,AW20XXX_PAGE_ADDR, &data,1);

    if(ret)

    {

        LOG_DEBUG("set AW20216 REG page error\n\r");

        return -1;

    }

    ret = AW20216_Write_Byte(driver,aw20xxx_reg_map[rgb_id], &aw20216_page4_data[aw20xxx_reg_map[rgb_id]][0], 3*2);    

    if(ret)

    {

        LOG_DEBUG("set AW20216 RGB COLOR error\n\r");

        return -1;

    }

    return 0;      

}



int aw20216_led_ctrl_single(DevDriver_t* driver,uint8_t led_id, uint8_t brightness)

{

        unsigned char data;

        int ret = 0;

        if(led_id > 215)

    {

        LOG_DEBUG("ERROR LED ID \r\n");

        return -1;

    }

        aw20216_page4_data[aw20xxx_reg_map[led_id]][0]   = 0xFF;

        aw20216_page4_data[aw20xxx_reg_map[led_id]][1]   = brightness;

        data = AW20XXX_CMD_PAGE4;

   

        ret = AW20216_Write_Byte(driver,AW20XXX_PAGE_ADDR, &data,1);

    if(ret)

    {

        LOG_DEBUG("set AW20216 REG page error\n\r");

        return -1;

    }

        ret = AW20216_Write_Byte(driver,aw20xxx_reg_map[led_id], &aw20216_page4_data[aw20xxx_reg_map[led_id]][0], 2);    

    if(ret)

    {

        LOG_DEBUG("set AW20216 RGB COLOR error\n\r");

        return -1;

    }

    return 0;

}

上面的是三个点灯,第一个是点多个灯,第二个是点单个RGB,最后一个是点亮一个灯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刚入行的小吴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值