#freeze
閲覧総計:&counter();  (本日:&counter(today);  昨日:&counter(yesterday);)

*A/D値でLED点滅間隔変更 [#reb68eca]


「A/D変換」を利用した簡単なプログラムを作成し、12F683の「A/D変換」機能の利用法、
稼働を確認しました。

A/D変換値(0〜1023)を用いて発光ダイオード(LED)の点滅間隔を0msec〜1023msec
にスムーズに変化させる。 07/02/03

|&attachref(P1010275.JPG,zoom,150x150,button){新しい写真添付};|&attachref(12F683_PIN.JPG,zoom,150x150,button){新しい写真添付};|

 /**
 * 12F683の稼働テスト
 * A/D値で発光ダイオード(LED)の点滅間隔を変更する
 *
 * A/D: GP4 (10KΩ半固定抵抗で分圧しアナログ値を生成)
 * LED: GP2
 *Clock: 8.0MHz 内蔵発振器使用
 *Device Flags:
 * _CP_OFF  _MCLRE_OFF _PWRTE_ON _WDT_OFF _INTRC_OSC_NOCLKOUT
 *
 * MikroC v6.2.1
 */
 
 void main() {
     //使用変数の定義
     //unsigned short int temp; //間違い修正 07/11/28
     unsigned int temp;
  
     //マイコンの初期化
     //内臓クロック8MHzに設定
     OSCCON.IRCF2=1;
     OSCCON.IRCF1=1;
     OSCCON.IRCF0=1;
 
     //A/D変換clock設定 0.125us*16倍=2.0us
     ANSEL.ADCS2=1;
     ANSEL.ADCS1=0;
     ANSEL.ADCS0=1;
 
     // A/D利用ピンの設定 // ANALOG=1, DIGITAL=0 //
     ANSEL.ANS3 = 1; //AN3(GP4)のみアナログ使用
 
     GPIO = 0b00000000; //GPIOの中身をきれいにする
     TRISIO = 0b00010000; //GP4を1:入力、他5個を0:出力設定
     //マイコンの初期化終わり
  
     do {
         //アナログデータの取得
         //10bit(0~1023)
         temp = ADC_Read(ANS3); //ANS3アナログ入力
 
         //LED点滅間隔が0-1,023msecで滑らかに変更出来る
         GPIO.F2 = 1;
         VDelay_ms(temp);
         GPIO.F2 = 0;
         VDelay_ms(temp);
     } while(1);
 }
★この情報は役に立ちましたか?
#vote(はい[14],普通[0],いいえ[1])
- unsigned int? -- [[ら]] &new{2007-02-25 (日) 23:53:04};
- 参考になりました!! -- [[むっちゃん]] &new{2007-08-28 (火) 16:18:40};
- こんなことしてました、http://www.flipclip.net/clips/mutanet/ -- [[むっちゃん]] &new{2007-08-28 (火) 16:20:28};
- ら サンに賛同! -- [[むっちゃん]] &new{2007-11-27 (火) 22:11:33};
- らさん、むっちゃんさん、ご指摘ありがとうございます。
unsigned short int は 0〜255
unsigned int は 0〜65535 ですね。
temp は 0〜1023の範囲ですから、unsigned int temp で定義する必要がありますね。
上記プログラム修正しました。-- [[PICとMikroC]] &new{2007-11-28 (水) 22:42:31};

#comment