ボリュームによる調光はADCのときになるかな
PWMは前回のとおりパルス幅変調のことで印刷で言えば黒の点が多いほど濃く見えて、少ないほど薄く見えるというのと原理は同じ。
LPCでPWMを使用するには以下の手順を行えばいい。
1.PCONPレジスタを設定しパワーONにする
2.PCLKSEL0レジスタを設定しクロックONにする。
3.PINSELレジスタでポートの機能設定をする。
4.MCRレジスタ、CCRレジスタを設定してスタートする。(割り込みをする場合はNVICを利用し有効にする)
以下しょうゆ
#define PCPWM 1 << 6 //pwm power on
#define PCLK_PWM 1 << 12 //pwm clock on
#define PWM_MODE 1 << 0 | \
1 << 2 | \
1 << 4 | \
1 << 6 | \
1 << 8 | \
1 << 10 ; //pwm clock on
#define PWM_CON 1 << 0
#define PWM_ENA 1 << 3
int main(void) {
LPC_SC->PCONP |= PCPWM;//パワーオン
LPC_SC->PCLKSEL0 |= PCLK_PWM;//クロックオン
LPC_PINCON->PINSEL4 |= PWM_MODE;//ポート設定
LPC_PWM1->PR = 120;//プリスケール 120MHz / 120 = 1MHz
LPC_PWM1->MCR = 1 << 1;//マッチコントロールレジスタ reset on mr0
LPC_PWM1->MR0 = 1000;
LPC_PWM1->MR1 = 1;
LPC_PWM1->MR2 = 5;
LPC_PWM1->MR3 = 20;
LPC_PWM1->MR4 = 100;
LPC_PWM1->MR5 = 300;
LPC_PWM1->MR6 = 800;
LPC_PWM1->LER = 0x7F;//マッチレジスタを反映 ラッチ
LPC_PWM1->PCR = 0x3F << 9;//出力ポートの設定PWM1~6をPWM出力
LPC_PWM1->TCR = PWM_CON | PWM_ENA;//PWMスタート
while(1) {
}
return 0 ;
}
■実行結果
MR1 暗め

/a>
MR4 意外と明るい

MR6 アカルイネ


MR1だけ波形予想図を描いた

3.3Vの幅が0.001m秒と非常に短いため暗い。
次のMR4になるとすごい明るくなった。ダイオードの周波数特性の悪さによるものかなと。
MR6になるとほぼツーツー状態の明るさ
次回はADCかポート割り込みか迷うところだけどとりあえず有給とりたいね