閲覧総計:18906 (本日:1 昨日:0)
【目次】(項目をクリックすると飛べます)
「A/D変換」を利用した簡単なプログラムを作成し、18F2320の「A/D変換」機能の利用法、
稼働を確認しました。
A/D変換値(0〜1023)を用いて発光ダイオード(LED)の点滅間隔を0msec〜1023msec
にスムーズに変化させる。 07/10/06
※C18のプログラムを追記した。 08/08/31
/** * 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); }
★この情報は役に立ちましたか?
/** * 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) { 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--; } }
★この情報は役に立ちましたか?