雨で外出もできないので久々にマイコン工作。
LEDキャンドル的なものを作ってみました。
スイッチ付けたらヒカルだけでは面白くないので、ボリュームで明るさを調整できるようにしました。
実用性を考えてサイズは最小化。5cm x 4cmくらい。
ボタン電池LR44 x2個で動きます。PIC12F1822使用。
回路はこんな感じ。
部品数が少ないのにちゃんと動くのがPICマイコンの偉いところ。
MPLABのXC8とPICkit3で構築。
◆ピンの設定
TRISA = 0b010000;
ANSELA = 0b010000; // RA4をアナログ入力
PORTA = 0b000000;
WPUA = 0b000000;
ANSELA = 0b010000; // RA4をアナログ入力
PORTA = 0b000000;
WPUA = 0b000000;
◆PWM関連
CCP1CON = 0b00001100 ; // PWM機能を使用する
CCP1CON = 0b00001100 ; // PWM機能を使用する
CCP1SEL = 1; // CCP1/P1A の機能を RA5 に割り当てる
T2CON = 0b00000001 ; // TMR2プリスケーラ値を4倍に設定
CCPR1L = 0 ; // デューティ値は0で初期化
TMR2 = 0 ; // Timer2カウンターを初期化
PR2 = 255 ; // PWMの周期を設定(4MHzなら249=1000Hz)
T2CON = 0b00000001 ; // TMR2プリスケーラ値を4倍に設定
CCPR1L = 0 ; // デューティ値は0で初期化
TMR2 = 0 ; // Timer2カウンターを初期化
PR2 = 255 ; // PWMの周期を設定(4MHzなら249=1000Hz)
TMR2ON = 1; // TMR2(PWM)スタート
◆AD変換関連
ADCON0 = 0b00001101; // AN3(RA4)をアナログ チャンネル選択 ADC を有効
ADCON1 = 0b00010000; // 左詰め FOSC/8 V_DDを参照
◆AD変換関連
ADCON0 = 0b00001101; // AN3(RA4)をアナログ チャンネル選択 ADC を有効
ADCON1 = 0b00010000; // 左詰め FOSC/8 V_DDを参照
◆AD変換実行
GO_nDONE = 1;
while(GO_nDONE);
GO_nDONE = 1;
while(GO_nDONE);
今回は左詰めにして上位8bitだけ参照してchar型の変数に格納して使いました。
i = ADRESH;
i = ADRESH;
これを
CCPR1L = akarusa; // 大きいほどLEDは暗い
すればほぼ出来上がり。
たったこれだけですが、鈍った半田ごて裁きを取り戻すにはよかったかも。簡単な工作ですが、ちゃんと調光できるので面白いですね。このくらいならマイコンいらなくねとか思うけど、まぁオートパワーオフとか炎のようにゆらゆら点灯とかもプログラム次第ではできるので。
※コメント投稿者のブログIDはブログ作成者のみに通知されます