- 追加された行はこの色です。
- 削除された行はこの色です。
#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(はい[15],いいえ[7])
#vote(はい[15],いいえ[8])
- 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(はい[6],いいえ[0])
#vote(はい[6],いいえ[1])
#comment_nospam