• 追加された行はこの色です。
  • 削除された行はこの色です。
閲覧総計:&counter();  (本日:&counter(today);  昨日:&counter(yesterday);)
 
 【目次】(項目をクリックすると飛べます)
 #contents
 ~
 *発光ダイオード(LED)の明るさを変える(PWM) [#cf5faf89]
 
 PIC内蔵の「PWM(Pulse Width Modulation)機能」を利用した簡単なプログラムを作成し、
 18F2320が持つ2つのCCPの「PWM制御」機能の利用法、稼働を確認した。  07/09/29
 
 注)18F2320の場合、PWM信号はCCP1がRC2から発振され、CCP2の発振は、RC1かRB3かの
 便利な方を選べる。
 注)CCP = Compare/Capture/PWM
 
 ・内蔵発振器(8MHz)を利用する。
 ・MCLRはPIC内部プルアップで利用する。
 
 【結果】PWMで2つの発光ダイオード(LED)の明るさを独立して制御出来る事が確認
 出来た。
 
 ※C18のプログラムを追記 07/10/04
 
 関連MikroC関数
 void Pwm1_Init(unsigned long freq);
 void Pwm2_Init(unsigned long freq);
 void Pwm1_Change_Duty(unsigned short duty_ratio);
 void Pwm2_Change_Duty(unsigned short duty_ratio);
 void Pwm1_Start(void);
 void Pwm2_Start(void);
 void Pwm1_Stop(void);
 void Pwm2_Stop(void);
 
 &attachref(P1010549.JPG,zoom,150x150,button){新しい写真添付};
 
 **MikroCのプログラム [#q6cbfaca]
 
  /**
  * 18F2320の稼働テスト
  * PWM機能で2つの発光ダイオードの明るさを徐々に変える
  *
  * RC1: LED (CCP2出力)
  * RC2: LED (CCP1出力)
  * RC3: LED (照度比較用)
  *
  *Clock: 8.0MHz 内蔵発振器使用
  *Device Flags:
  * _INTIO2_OSC_1H _WDT_OFF_2H _MCLRE_OFF_3H _LVP_OFF_4L
  * (その他はデフォルト設定でOK)
  *
  * MikroC v7.0.0.3
  */
  void main()
  {
      unsigned short int i; //使用変数の定義
  
      //PICの初期化
      PORTC = 0b00000000; //PortCの中身をきれいにする
      //内蔵発信機 8MHz使用に設定
      OSCCON = 0b01110000;
      TRISC = 0b00000000; //PortC 8個全て0:出力設定
      PWM1_Init(5000); //PWM1の初期化 (5KHz周期指定)
      PWM2_Init(5000); //PWM2の初期化 (5KHz周期指定)
  
      PORTC.F3 = 1; //照度比較用LED ON
  
      PWM1_Start(); //PWM1機能スタート
      PWM2_Start(); //PWM2機能スタート
  
      do //doとwhileの間を繰り返す
      {
          //2つのLEDの明るさを徐々に変える
          for (i = 0; i < 256; i++)
          {
              PWM1_Change_Duty(i); //PWM1のDuty変更
              PWM2_Change_Duty(255 - i); //PWM2のDuty変更
              Delay_ms(30); //30msec待つ
          }
      } while(1); //doとwhileの間を繰り返す
  }
 
 **C18のプログラム [#e86730a2]
 
 関連C18関数
 void OpenPWM1(char period);
 void OpenPWM2(char period);
 void SetDCPWM1(unsigned int dutycycle);
 void SetDCPWM2(unsigned int dutycycle);
 
  /**
  * 18F2320の稼働テスト
  * PWM機能で2つの発光ダイオードの明るさを徐々に変える
  *
  * RC1: LED (CCP2出力)
  * RC2: LED (CCP1出力)
  * RC3: LED (照度比較用)
  * Clock: 8.0MHz 内蔵発振器使用
  *
  * C18 StudentEdition v3.12
  */
  #include <p18f2320.h>
  #include <pwm.h>
  #include <delays.h>
  
  //config設定
  #pragma config OSC = INTIO2 //内部発振器を利用
  #pragma config WDT = OFF //ウォッチドッグタイマOFF
  #pragma config MCLRE = OFF //MCLRを内部プルアップ
  #pragma config LVP = OFF //低電圧ICSP制御OFF
  //その他のconfigはデフォルト設定のまま
  
  void main(void)
  {
      unsigned int i; //使用変数の定義
  	
      //初期化
      PORTC = 0b00000000; //PortCの中身をきれいにする
      OSCCON = 0b01110000; //内蔵発振器を8MHz使用に設定
      TRISC = 0b00000000; //PortC 8個全て0:出力設定
  
      PORTCbits.RC3 = 1; //照度比較用LED ON
      OpenPWM1(255); //PWM1をオープン
      OpenPWM2(255); //PWM2をオープン
  	
      while(1)
      {
          //LEDの明るさを徐々に変える(1024分解能)
          for (i = 0; i < 1024; i++)
          {
              SetDCPWM1(i); //PWM1のDuty変更
              SetDCPWM2(1023 - i); //PWM2のDuty変更
              Delay10KTCYx(1); //5msec待つ
          }
      }
  }
 
 
 ★この情報は役に立ちましたか?
 #vote(はい[3],普通[0],いいえ[2])
 #vote(はい[3],普通[0],いいえ[3])