您的位置:首页 > 编程语言

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

2011-11-05 00:48 232 查看
(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使能脚常态是高,每变换一次就发出一系列范围内的脉冲数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: