- 締切済み
ATmega128のアナログ変換(ADC)の使用について
ATmega128のアナログ変換(ADC)の使用について ATmega128(L)を外部クロック8MHzで使用しています。 AREFは0.1μFのコンデンサを通してGNDに接続 AVCCは3.3V(VCC)に接続しています。 電圧は、CPUのそれぞれのPINでオシロで測定 内部基準電圧(2.56V)で、AD変換させようとしていますが、 例えば、外部に何も接続されていないADC0(オシロで見て一応0V)のアナログ入力のチャネルを 単独変換動作、A/D変換割り込みなしで読もうとしていますが、3ff(10bitとして使用) の値が返ってきます。期待は0 ADC0の信号(CPUピン)をみると、ADMUXにデータを書いた際、約1Vまで電圧が上がり、 徐々に0Vに収束していくのが観測できます。(A) 開発言語はGCCです。 ADCの初期化は下記のとおり ADCSRA ADENを1に(A/D許可) ADIE 0 (A/D割り込み禁止) ADPS2-0 6 AD変換クロック(CK/64) ADMUX REFS0,1を1に(内部基準電圧使用) ADLARを0にしています。 AD変換のデータ読み込み処理 ADMUX = ((ADMUX & 0b11000000) + i) (今は固定でi = 0にしています) ---- (B) ADCSRA |= (1<<ADSC); (変換スタート) while(ADCSRA & 0b01000000); (ADSCが落ちるのをまつ) data = ((ADCL) | ((ADCH)<<8)); これでdataが3ffとなります。 (A)の現象は、(B)を実行した際、観測できます。 ((B)をコメントにすると起こらないので推定) 半田不良含め、ハードなのか、ソフトなのか?? AREFのピン(CPUの62)を測定すると2.56Vくらいあります。 どなたか、教えてください。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- P0O9I
- ベストアンサー率32% (693/2146)
一般的な話ですが、ADコンバータの入力をオープンにして、読み出しデータが0になるわけありません。オシロを接続して、0Vであっても、それはオシロ・プローブの10MΩの入力抵抗が入っての電圧です。オープンでは浮遊電圧の何Vがかかっているのか、分かりません。 GNDにつないで測定をしてみましょう。
補足
説明がわかり難くすみません。 オシロスコープで、AD変換を行わなければ(正確にはADMUXに値を設定しなければ) 0Vで読めています。(ADCのコネクタオープンでも) (GND側は、AD対象のGND、ATmelのAGND、オシロのGNDを1点で共通にとっています。) ADMUXというレジスタに基準電圧を設定すると、電圧が1V付近まで一瞬で立ち上がり、 コンデンサが放電されるように、徐々に0Vへ近づいてきます。 この電圧が1V付近まで一旦上がるのが何故かと思っています。 0Vの電圧を与えると、0V付近の値0~2の値が読めます(10bit分解能) すみません、よろしくお願いします。