今日も仕事終わってからやきとり屋で作業してます。
今宵は PCA9622DRの理解を深めるをテーマにやってます。
スイッチサイエンスさんの
LEDドライバ PCA9622DR の使い方
少し理解ができてきて余裕ができたのか
ようやく書いてることが理解できました
サンプルプログラムの上から順に
覚えるべきは3箇所をまとめます。
調光用デューティー比の設定
PWMを使った明るさを調整する設定で
各LED毎に設定できます。
0x00〜0xFFまでHEX(16進数)入力
254段階の明るさが調整できます。
// 調光用デューティー比の設定 ledPWM[0] = 0x10; ledPWM[1] = 0x04; ledPWM[2] = 0x02; ledPWM[3] = 0x01; ledPWM[4] = 0x00; ledPWM[5] = 0x01; ledPWM[6] = 0x04; ledPWM[7] = 0x10; ledPWM[8] = 0x10; ledPWM[9] = 0x30; ledPWM[10] = 0x80; ledPWM[11] = 0xD0; ledPWM[12] = 0xFF; ledPWM[13] = 0x70; ledPWM[14] = 0x30; ledPWM[15] = 0x10; datasend(PCA9622DR_ADDR, PWM0 | AI_ALLEN,ledPWM,16);
※サンプルプログラムではLED0から3の設定が省かれてます。
全体点滅の設定
点滅の幅と時間の設定ができます
// 全体点滅の設定 int grp_pwm = 0x80; // 5:5 datasend(PCA9622DR_ADDR, GRPPWM,&grp_pwm,1); int grp_freq = 0x2F; // (0x2F+1)/24 秒周期 = 2秒周期 datasend(PCA9622DR_ADDR, GRPFREQ,&grp_freq,1);
・変数grp_pwmはデューティー比の設定
0x00〜0xFFまでHEX(16進数)入力
254段階の幅を調整できます。
・変数grp_freqは点灯周期の設定
0x00〜0xFFまでHEX(16進数)入力
41msから10.73sの周期が設定できます。
LED出力設定
各LEDの点灯の設定をします
// ledOut[0] = B01010101; // LEDの個別調光や全体の点滅(PWM)は影響されない ledOut[1] = B10101010; // LEDは個別調光に影響される ledOut[2] = B10101010; ledOut[3] = B11111111; // LEDは個別調光と全体の点滅(PWM)に影響される datasend(PCA9622DR_ADDR,LEDOUT0 | AI_ALLEN,ledOut,4);
・各LED2ビットを使って点灯設定します
00 =消灯
01 =点灯
10 =PWM調光
11 =PWM調光 + 全体点滅
・一つの配列変数で4つのLEDを制御します。
ledOut[0] =LED0〜3の設定を行います
ledOut[1] =LED4〜7の設定を行います
ledOut[2] =LED8〜11の設定を行います
ledOut[3] =LED12〜15の設定を行います
16個を制御するため4つの配列変数が必要となります。
スイッチサイエンスさんと同じ内容ですが
少し言い回しを変えて書いてみました。
- やきとり屋リノベーション ダウンライト設置完了しました。
- PCA9622DR I2C 16ch LEDドライバ基板がやっと理解できました。
- なぜI2Cにこだわるのか?まずは、うだうだ書いて、あえて公開する。