(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使能脚常态是高,每变换一次就发出一系列范围内的脉冲数。