PICを用いてAD変換をしようとしていますが,思うように出力が出ず困っています.
可変抵抗を用いて0-5V間を調整可能な入力をAN0ピンに接続し,AD変換の結果をBポートに出力しようとしています.
使用条件は,mikroC使用,PIC16F877使用,C言語使用,水晶20MHz,Aポート入力(AN0ピンアナログ入力),Bポート出力,Tad=1.6μsです.
以下のプログラムで間違っている点をご指摘いただきたいと考えています.
unsigned int out_b;
void port_initialize()
{
INTCON=0; //割り込みなし
ADCON0=0x81;
ADCON1=0x8E; //AD変換中の入力範囲設定は電源と共有
TRISA = 0x3f; //AD変換用ポート(1で入力)
TRISB = 0; //出力用ポート(0で出力)
PORTB = 0;
}
void value_initialize()
{
out_b=0;
PORTB=out_b;
}
void main()
{
port_initialize();
value_initialize();
while(1){ //endless
ADCON0=0x81; //AD変換bitを選択
Delay_us(24); //アクィジション時間+AD変換後の待ち時間
ADCON0=0x85; //AD変換開始
Delay_us(20); //AD変換待ち時間
out_b=ADC_Read(0);
PORTB=out_b;
}
}
No.3
- 回答日時:
それでは、ADC_Read()が悪さをしているとしか思えません。
直接AD変換結果をリードしたらどうでしょう。?
この回答への補足
AD変換の結果はADRESH,ADRESLに保存されるので,ADC_Read()を用いずに
out_b=ADRESH;やout_b=ADRESL;のように結果を直接出力してみようとしましたが,出力ポートは反応しませんでした.
No.2
- 回答日時:
質問者が「0になっていると考えている」と考えているのと
実際にそうなっているかは違います。
調べるのに時間はかかりません、調べてみればどうでしょう。?
以下のように変更してテスターでPORTB0,1がHIレベルで有れば
正解です。
void main()
{
port_initialize();
value_initialize();
PORTB = 0; // <-----------
while(1){ //endless
ADCON0=0x81; //AD変換bitを選択
Delay_us(24); //アクィジション時間+AD変換後の待ち時間
ADCON0=0x85; //AD変換開始
// ここから
if (ADCON0 & 0x04) {
PORTB |= 0x01;
}
Delay_us(20); //AD変換待ち時間
if ((ADCON0 & 0x04) == 0) {
PORTB |= 0x02;
}
// ここまで
out_b=ADC_Read(0);
/* PORTB=out_b; */
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ノートパソコン MacBook、USB他各ケーブルに強い方にお聞きします。 MacBook pro m1を保有してい 3 2022/10/05 23:58
- モニター・ディスプレイ 液タブの画面が映りません 1 2022/06/04 15:48
- Excel(エクセル) フォルダ階層が深いファイルの拡張子の一括変換 2 2022/12/23 18:40
- 英語 TOEIC公式問題集のリスニングの一部分に “I’ll get an ad in the local 2 2022/08/17 18:52
- Word(ワード) MSオフィスのIMEは以前より文字変換能力が低下していませんか?(ATOKを買うべき?) 4 2023/08/03 09:15
- Android(アンドロイド) Android携帯のキーボード入力で時間入力を簡単にしたい 1 2023/05/17 02:13
- その他(パソコン・スマホ・電化製品) hdmlのオスをusbAのポートに変換する商品はありますか? テレビの外付けレコーダーを買ったのです 4 2022/05/05 19:10
- その他(パソコン・周辺機器) USB変換アダプターについて、よくわかりません。 ロールアップピアノを購入する際、USBケーブルが付 4 2022/03/26 11:29
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# 至急教えてください!プログラミングの問題です。 割られる整数と割る整数を受け取って、商と余りを出力す 3 2022/07/05 10:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
緯度、経度の 10進法と 60進法...
-
Mac 乗数の入力方法
-
家電製品の電力周波数を変える機械
-
Excel-VBAのmsgBox()の不思議
-
isoをimgに変換したいのですが...
-
C++からCへのソース変換について
-
魚眼レンズの画像処理
-
【PICマイコン】AD変換中にタイ...
-
VBへの変換の仕方 RS232C送信...
-
VB6からVB2010への変換について
-
bmp→jpgに、jpg→bmpに
-
C言語のプログラムのFORTRANへ...
-
C/C++→JAVAに変換するツール
-
エクセルのvbaで検索ボタンを作る
-
Win32APIのFTPクライアントにつ...
-
3のつく数字と3の倍数のみを表...
-
分を時間に変換するプログラム
-
FortranをC++(VC++)へ変換
-
10進数をBCDに変換する方法
-
なぜ通信には16進数文字列が使...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
緯度、経度の 10進法と 60進法...
-
Excel-VBAのmsgBox()の不思議
-
Mac 乗数の入力方法
-
家電製品の電力周波数を変える機械
-
3のつく数字と3の倍数のみを表...
-
bmp→jpgに、jpg→bmpに
-
10進数をBCDに変換する方法
-
【EXCEL】カナ、ひらがなを英字...
-
StrConvの使い方について教えて...
-
分を時間に変換するプログラム
-
画像ファイル変換(Tiff→PDF)
-
マンセル⇔XYZ,RGB変換式或いは...
-
C/C++→JAVAに変換するツール
-
VB6からVB2010への変換について
-
c++でmatからvectorへの変換の...
-
DOSコマンドでの文字コード変換...
-
SJIS⇔UTF-8の文字コード...
-
C#でのpngからbmpへの変換について
-
VB.NETをJavaに変換するツール...
-
なぜ通信には16進数文字列が使...
おすすめ情報