PCC(Pulse count control)编程之一:线性计数

(1)原理:PCC编程是一种一线控制的编程方式,使用一根传输线就可以完成命令或者数据的传输。以一个LED控制芯片SN3228为实例来说明它的使用。SN3228的原理图如下:

                                                              

(2)参数:EN/SET脚接受外界的不同数据的脉冲,从而解析成不同的控制参数去控制LED的亮度。其中,亮度对照表如下:

                                                                     

(3)程序实例:因此,只需要一个GPIO模拟出不同数目的上升沿脉冲就可以实现不同亮度的控制,程序如下。

static int brightness_set_gpio(int gpio_num, enum led_brightness level)    
{
        int i,n,count;
    mt_set_gpio_mode(gpio_num, GPIO_MODE_GPIO);
    mt_set_gpio_dir(gpio_num, GPIO_DIR_OUT);   //设置GPIO输出工作模式

             if(level)   //非0亮度,<255
             {
                      mt_set_gpio_out(gpio_num, GPIO_OUT_ZERO);
                      if(level<=34)
                              count=15;
                      else if(level<=51&&level>34)
                              count=14; 
                      else if(level<=68&&level>51)
                              count=13;
                      else if(level<=85&&level>68)
                              count=12;
                      else if(level<=102&&level>85)
                              count=11;
                      else if(level<=119&&level>102)
                              count=10;
                      else if(level<=136&&level>119)
                              count=9;
                      else if(level<=153&&level>136)
                              count=8;
                      else if(level<=170&&level>153)
                              count=7;            
                      else if(level<=187&&level>170)
                              count=6;  
                      else if(level<=204&&level>187)
                              count=5;
                      else if(level<=221&&level>204)
                              count=4;
                      else if(level<=238&&level>221)
                              count=3;
                      else if(level<=255&&level>238)
                               count=2;
                      for(i=1;i<count;i++)
                      {
                               mt_set_gpio_out(gpio_num, GPIO_OUT_ZERO);
                               udelay(1);
                               mt_set_gpio_out(gpio_num, GPIO_OUT_ONE);
                               udelay(1);
                      }
                      udelay(600);
           }
          else 
                      mt_set_gpio_out(gpio_num, GPIO_OUT_ZERO);        //全灭
          return 0;
}

GPIO使能脚常态是高,每变换一次就发出一系列范围内的脉冲数。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值