#freeze
閲覧総計:&counter();  (本日:&counter(today);  昨日:&counter(yesterday);)~
~
*発光ダイオード(LED)の明るさを変える [#e8372b5b]

PIC 16F628A内臓のPWM機能を利用し、発光ダイオードの明るさを徐々に変えてみよう。  06/10/28

注)16F628Aの場合、PWM信号はRB3から発信される。

関連MikroC関数
void Pwm_Init(unsigned long freq);
void Pwm_Change_Duty(unsigned short duty_ratio);
void Pwm_Start(void);
void Pwm_Stop(void);

|&attachref(LEDの明るさを変える.JPG,zoom,150x150,button){新しい写真添付};|&attachref(LEDの明るさを変える.jpg,zoom,150x150,button){新しい写真添付};|

 /**
 * PWM機能で発光ダイオードの明るさを徐々に変える
 * PIC 16F628A
 * 発信器:内臓4MHz 
 * 電源:乾電池3本
 * RB3: LED (CCP出力)
 * RB2: LED (照度比較用)
 * Device Flags: _BODEN_OFF _BOREN_OFF _CP_OFF _PWRTE_ON _WDT_OFF
 *        _LVP_OFF _MCLRE_OFF _INTRC_OSC_NOCLKOUT
 * 言語 MikroC v6.2
 */
 void main(){ //メイン プログラム
     unsigned short int i; //使用変数の定義
     PORTB = 0b00000000; //PORTBの中身をきれいにする
     TRISB = 0b00000010; //RB1は1:入力、他のPORTBは0:出力に設定
     PWM_Init(5000); //PWMの初期化 (5KHz周期指定)
     
     PORTB.F2 = 1; //照度比較用LED ON
     
     PWM_Start(); //PWM機能スタート
     do { //doとwhileの間を繰り返す
         //LEDの明るさを徐々に変える
         for (i = 0; i < 256; i++) {
             PWM_Change_Duty(i); //PWMのDuty変更
             Delay_ms(100); //100msec待つ
         }
     } while(1); //doとwhileの間を繰り返す
 } //メイン プログラム終了

★この情報は役に立ちましたか?
#vote(はい[11],普通[1],いいえ[4])
- このプログラムの追加で徐々に減光するプログラムを書いているときに気が付きましたが、for条件式iの比較値が256ですと255からインクリメントした際にiが0になりforループから抜けられなくなるようです。 -- [[Mojo]] &new{2008-01-29 (火) 17:32:40};

#comment_nospam