船や車の中でいろいろな機器を使用するとき、
あったら便利というのがこれだ。
特に照明などのLED の調光には必須だ。
12V用のLED を調光しようと思っても電圧で行うことは
完璧にはできない。
扇風機も同様。
そこでこの機器の登場。
回路は簡単だが、注意点がある。
FETにP型を使う必要があるということである。
PICで出た出力で P型を制御するには 2SC なにがしの Tr で制御しなければならない。
また、最終出力をオシロで確認するとき、負荷をつながいとオシロでは
見えません。
さんざん悩むことになる。 1KΩでも負荷につなぐと完全に
確認できるが そこまでの道のりは長かった。
やってみてください。
/*
XC8 2.3?
VRで明るさ調整できるBOXを作成するために試作
* 34khzにて 0.1%?100%で可変 50KΩ使用
* PICv5V FET 2SJの実験用に製作 オシロの見方で
* 負荷がコイルなどの場合問題ないが LEDなどの
* VF が存在する場合は VFの電位がオシロにあらわれるのであった。
* deok
*/
#include <htc.h>
#define _XTAL_FREQ 8000000 //PICの動作クロック8MHz __delay関数に必要
/*_CONFIG(FOSC_INTOSCIO & WDTE_OFF & PWRTE_ON
& BOREN_ON & MCLRE_OFF & IESO_OFF
& FCMEN_OFF & CP_OFF) ;
*/
// CONFIG
#pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled)
#pragma config BOREN = ON // Brown Out Detect (BOR enabled)
#pragma config IESO = OFF // Internal External Switchover bit (Internal External Switchover mode is disabled)
#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled)
//コンフィグレーション設定
//(内蔵クロックを使用(CLKOUTは汎用入出力) & ウォッチドッグタイマ無効化 & パワーアップタイマ有効
// & ブラインアウト有効 & MCLRは汎用入力 & 2速度スタートアップ切替負荷
// & クロックモニタ検出不可 & プロテクト無効)
//旧版(MPLAB IDE v8.66以前)はコンフィグレーション設定やレジスタ名が異なるため注意
short int Ad_data;
int a;
int b;
int c;
void main(void){
OSCCON = 0b1110000;
//111=8M 110=4M 101=2M 100 = 1M 011=500k 010=250k 001 =125k 000=31k
//1=外部クロック 0=内蔵クロック (発振器使用状態)
//1=発振安定 0=発振不安定 (高速クロック)
//1=発振安定 0=発振不安定 (低速クロック)
//1=内蔵クロック使用 0=コンフィグレーション指定のクロック使用
ANSEL = 0b1011010; //Fosc/16|GP1(AN1),GP4(AN3)以外デジタル設定
CMCON0 = 0b111; //コンパレータは試用しない
TRISIO = 0b011010; //GP 5,4,3,2,1,0 (1=入力; 0=出力)
TMR2 = 0; //TMR2プリスケール値
CCP1CON= 0b101100; //Duty微調整|PWMモード
T2CON = 0b100;// 0b110; TMR2ON | プリスケーラ x4
/*ADC初期設定*/
ADCON0 = 0b10000101;//右詰め|基準電圧は電源Vdd)|空白|空白||AN1(GP1)|ADC終了|ADC有効
while(1){
GO = 1;//ADC変換開始
while(GO);//ADC変換終了までループ待機
a = ADRESH*256 + ADRESL;//aにADC 0?1024段階の値を入れる
PR2 =250; //254まで 250で7KHzだす。なぜなら8bitだからです・
CCP1CON= 0b101100; //Duty微調整|PWMモード
GP0=1; //モニタLED点灯
CCPR1L =a/4;//0.1%?100%まで 7KHzにて変化可能
}
}