PrISMによるRGB LED制御

PSoC4 BLE KitにはRGBのLEDが搭載されています。今回は、RGB LEDをPrISM IPを使用して制御してみます。

PrISMコンポーネントについて

PrISMコンポーネントはPWMを出力するものですが、このコンポーネントの興味深いところは、PWMの出力が乱数によって生成されることです。下記例ではLEDのRED,GREEN,BLUEをPWMによって輝度調整しており、8bitの解像度をもっているので表現できる色は255x255x255=16581375色ということになります。このとき、PWMの出力の位相は乱数によって異なります、もしこれを単純なPWMで生成した場合は、PWMの開始点、終点が同一となってしまい、オン、オフが重なるポイントが多くなってしまいます。これにより、重なった区間においては電力消費量が多くなり、ノイズ源となってしまいます。これはEMC的には不利な状況となります。しかし、PrISMはこれを乱数によって、位相が同一にならないような工夫がなされています。

回路構成

PSoC Creatorで下記のようにコンポーネントを配置します。

PrISMのコンフィグレーション

点滅可能とするために、PWMを追加

PWMのコンフィグレーション

初期化、開始プログラム

initialize pwm

PWM_1_Start();

PrISM_1_Start();

PrISM_2_Start();

PrISM_1_WritePulse0(0);

PrISM_1_WritePulse1(0);

PrISM_2_WritePulse0(255);

RGBセット関数

SetRGB

void SetRGB(uint8_t r, uint8_t g, uint8_t b)

{

PrISM_1_WritePulse0(r);

PrISM_1_WritePulse1(g);

PrISM_2_WritePulse0(b);

}

ブリンクタイミング関数

SetBlinkTiming

void SetBlinkTiming(uint16_t tm_compare, uint16_t tm_period)

{

PWM_1_WriteCompare(tm_compare);

PWM_1_WritePeriod(tm_period);

}