• 追加された行はこの色です。
  • 削除された行はこの色です。
#freeze
 閲覧総計:&counter();  (本日:&counter(today);  昨日:&counter(yesterday);)
 
 *A/D値でLED点滅間隔変更 [#d667f35f]
 
 【目次】(項目をクリックすると飛べます)
 #contents
 ~
 「A/D変換」を利用した簡単なプログラムを作成し、18F2320の「A/D変換」機能の利用法、
 稼働を確認しました。
 
 A/D変換値(0〜1023)を用いて発光ダイオード(LED)の点滅間隔を0msec〜1023msec
 にスムーズに変化させる。 07/10/06
 
 ※C18のプログラムを追記した。 08/08/31
 
 |&attachref(P1010554.JPG,zoom,150x150,button){新しい写真添付};|&attachref(,zoom,150x150,button){新しい写真添付};|
 
 *Mikro Cのプログラム [#caec292c]
  /**
  * 18F2320 アナログ入力テスト 0-5V入力−LED点滅時間
  * A/D値で発光ダイオード(LED)の点滅間隔を変更する
  *
  * PIC18F2320
  *
  * A/D: RA1(AN1) (10KΩ半固定抵抗で分圧しアナログ値を生成)
  * LED: RC1
  *
  *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 int temp; //使用変数の定義
  
      //PICの初期化
      PORTA = 0b00000000; //PORTAの中身をきれいにする
      PORTC = 0b00000000; //PortCの中身をきれいにする
      OSCCON = 0b01110000; //内蔵発信機 8MHz使用に設定
      //A/D変換clock設定 0.125us*16倍=2.0us
      ADCON2.ADCS2=1;
      ADCON2.ADCS1=0;
      ADCON2.ADCS0=1;
      TRISA = 0b00000010; //RA1のみ1:入力に設定、他は0:出力
      TRISC = 0b00000000; //PortC 8個全て0:出力設定
      //マイコンの初期化終わり
  
      do
      {
          //アナログデータの取得 10bit(0~1023)
          temp = ADC_Read(1); //RA1(AN1)アナログ入力
  
          //LED点滅間隔が0-1023msecで滑らかに変更出来る
          PORTC.F1 = 1;
          VDelay_ms(temp);
          PORTC.F1 = 0;
          VDelay_ms(temp);
      } while(1);
  }
 
 ★この情報は役に立ちましたか?
 #vote(はい[13],いいえ[7])
 - 08/09/08-09/13に掛けてSPAM投稿がありました。
 08/09/14 comment_nospamプラグインを導入し
 http://www.sue445.net/wiki/?Plugins%2Fcomment_nospam.inc.php
 ページの「#comment」記述を「#comment_nospam」に変えました。 -- [[PICとMikroC]] &new{2008-09-13 (土) 11:29:41};
 
 #comment_nospam
 
 *C18のプログラム [#cf6e87f6]
  /**
  * 18F2320の稼働テスト アナログ値の取得
  * A/D値で発光ダイオード(LED)の点滅間隔を変更する
  *
  * A/D:RA1 (10KΩ半固定抵抗で分圧しアナログ値を生成)
  * LED:RC1
  * Clock: 8.0MHz 内蔵発振器使用
  *
  * C18 StudentEdition v3.12
  */
  #include <p18f2320.h>
  #include <adc.h>
  #include <delays.h>
  
  //config設定
  #pragma config OSC = INTIO2 //内部発振器を利用
  #pragma config WDT = OFF //ウォッチドッグタイマOFF
  #pragma config MCLRE = OFF //MCLRをOFFし、RE3として利用
  #pragma config DEBUG = OFF //デバッグ可にし、RB6,RB7はICD用に利用
  #pragma config LVP = OFF //低電圧ICSP制御OFF
  //その他のconfigはデフォルト設定のまま
  
  //関数のプロトタイプ宣言
  void my_delay_ms(unsigned int x); //at 8MHz
  
  void
  main(void)
  {
      //使用変数の定義
      int result; //A/D値(10bit)の受け
      
      //PICの初期化
      OSCCON = 0b01110000; //内蔵発振器を8MHz使用に設定
      TRISA = 0b00000010; //PortAのRA1を1:入力に他は0:出力に設定    
      TRISC = 0b00000000; //PortC 8個全て0:出力設定
  	
      OpenADC( //第1引数
               ADC_FOSC_16 & //AD変換用クロック:システムクロックの16倍 0.125μsec*16=2.0μsec
               ADC_RIGHT_JUST & //変換結果の保存方法 右詰め
               ADC_0_TAD, //AD変換のアクイジションタイム選択 0Tad 
               //第2引数
               ADC_CH1 & //AD変換するのチャンネル選択(PIC18Fは同時に複数のAD変換はできない) 
               ADC_INT_OFF & //AD変換での割込み使用の有無 割込み無し
               ADC_VREFPLUS_VDD & //Vref+の設定 PICの電源電圧と同じ:ADC_VREFPLUS_VDD or 外部(AN3)の電圧:ADC_VREFPLUS_EXT
               ADC_VREFMINUS_VSS, //Vref-の設定 PICの0V:ADC_VREFMINUS_VSS or 外部(AN2)の電圧:ADC_VREFMINUS_EXT
               //第3引数
               0b0000); //ポートのアナログ・デジタル選択 (ADCON1の下位4ビットを記載) AN0-AN12全てアナログ使用
      Delay10TCYx( 5 ); //50TCY待つ
  
      while (1)
      {
           SetChanADC( ADC_CH0 ); //AD入力チャンネルの設定
           ConvertADC(); //AD変換実行
           while( BusyADC() ); //AD変換が終わるまで待つ
           result = ReadADC(); //AD変換値(10bit)読込み
  
           LATCbits.LATC1 = 1; //LED ON
           my_delay_ms(result);
           LATCbits.LATC1 = 0; //LED OFF
           my_delay_ms(result);
       }
  }
  
  void
  my_delay_ms(unsigned int x) //at 8MHz
  {
      while (x)
      {
          Delay1KTCYx(2); //1mS遅延 at 8MHz
          x--;
      }
  }
 
 ★この情報は役に立ちましたか?
 #vote(はい[4],いいえ[0])
 #vote(はい[5],いいえ[0])
 
 #comment_nospam