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);
}