PIC16F690を使用しLCDにA/D変換をした数値を表示させる物を作ったのですが
抵抗を一定の速度で回しても数値が一定の速度で変化しません。
詳しく説明しますと、今回書いたプログラムは8bitで255までの値を表示させるものです。
抵抗をめいいっぱい回して数値を1にし(0にはどうしてもなりません。おそらく抵抗の問題)
そこからゆっくりと一定の速度で抵抗を回すと数値が上がっていきます。
30辺りまでは一定の速度で数値が変化するのですが、そこから少し回すといきなり数値が220ぐらいにまで上がります。(一応30~210までの数値も出ている様なのでいきなり飛んでるわけではない)
抵抗を1Kのものから10Kものに変えてみたりしたのですが症状に変化はありませんでした。
どうしても解決できなかったので質問をした次第です。
解決方法がわかる方がいらっしゃいましたらお教え下さい。
プログラムを載せておきます。
#include<pic.h>
#include<stdio.h>
#include"lcd.h"
unsigned int temp;
unsigned int x = 1;
unsigned char outString[20];
unsigned char count[20];
void init_a2d(void){
ADCON1=0x10;// A/D Clock Fosc/8
ADCON0=0x01;// A2D 入力をChannel 0 (RA0),
// Left justified, A/D をON
}
// 指定された入力チャネルをA/D変換し8 bitの結果を返す
unsigned char read_a2d(unsigned char channel){
channel&=0x0F;// 4 bitsを確認し
ADCON0&=0xC3;// 現行入力チャネルをクリア
ADCON0|=(channel<<2);// 新入力チャネルを設定
GODONE=1;// 変換開始
while(GODONE)continue;// 変換終了を待つ
return(ADRESH);// 8 bitの結果を返
}
void main(void)
{
pic_init();
init_a2d();// A/D モジュール初期化
lcd_init();
lcd_goto(0x00);
while(1)
{
__delay_us(50);// 50uS待ち(AD充電待ち)
temp=read_a2d(0);
sprintf(outString,"A/D=%2d",temp);
lcd_puts(outString);
lcd_goto(0x40);
sprintf(count,"Count=%d",x);
lcd_puts(count);
x++;
__delay_ms(100);
lcd_clear();
}
}
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>解決方法がわかる方がいらっしゃいましたら
原因もわからないのに解決したいなら、プロに費用を払ってゼロから製作依頼すればいいです。
今のところ、ハードウェアが既製品ならともかく、自作ならそこら辺に容疑があります。
VREF を使ってるのか、使ってるならどうする予定で外付け部品をどのようにつないでるか、
VREF は兼用端子なので、端子がオープンなのにVREFとして使おうとしたら多分
不具合あるでしょう(このPICの詳細は知らないので断言しませんが)
また、VREF へのアナログ電圧を外部から与えるとしたら、どのような回路で与えてるのか。
抵抗値を変えてるというが、接続の仕方が間違ってればおかしな動きになります。
試験的には、3端子の可変抵抗なら1に電源、3にGND、2で分圧された電圧をアナログ入力に与えるのがよく使われる方法だと思いますが、このようにしてますか?
ここら辺も「まず疑ってみる」姿勢で明記した方が解決に近づきます。
大抵は「いいと思ってたつもりがまちがってた」とか、
細かい部分は正しくても組合わせ方がまずいのが原因だったりします。
No.1
- 回答日時:
可変抵抗器は、抵抗の変化のカーブにA・B・Cの3タイプがあります。
(参考ページ参照)音楽等のボリューム調整に使われるのはほとんどタイプAで、片方の端では緩く、もう片方の端では急激に変化します。
一度、テスターでゼロ値・MAX値・中央時の値を測ってみるとどうなるでしょうか。
中央時の抵抗値が、ゼロ値とMAX値の平均値から大きく外れているようなら、本当にその様な変化をしていて、PICプログラミングは間違っていなかった、ということになります。
(参考)抵抗器 - 可変抵抗器
http://www.piclist.com/images/www/hobby_elec/res …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
高校物理解説お願いします!
-
サーミスタから出力される電圧...
-
2つの抵抗の間にある点Aの電圧は?
-
並列回路において、抵抗Rにおけ...
-
可変抵抗器には何故足が3本ある...
-
オシロスコープによる抵抗の電...
-
並列回路と抵抗と電圧
-
【電気工事士試験】開放回路に...
-
可変抵抗器の、端子ってそれぞ...
-
電気回路の書き換え方がわかり...
-
DCモータの抵抗値
-
ファン電圧制御による可変抵抗...
-
三相三線の電圧降下について教...
-
テブナンの定理 合成抵抗で電...
-
T 型抵抗減衰器の考え方について
-
パソコンのATX電源をDC12V電...
-
インダクタ分と抵抗分
-
高校物理Iの電力についての質問...
-
物理の問題について質問です 問...
-
電気(交流)回路:キルヒホッ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
サーミスタから出力される電圧...
-
並列回路において、抵抗Rにおけ...
-
オシロスコープによる抵抗の電...
-
可変抵抗器には何故足が3本ある...
-
2つの抵抗の間にある点Aの電圧は?
-
最大電圧5Vのアナログ信号を最...
-
図に示すπ形抵抗減衰器の減衰量...
-
T 型抵抗減衰器の考え方について
-
電気回路の書き換え方がわかり...
-
DCモータの抵抗値
-
テブナンの定理 合成抵抗で電...
-
FETについて
-
物理 (3)がわかりません。 P=IV...
-
オン抵抗と耐圧
-
四角錐での電気抵抗
-
トランジスタの調光回路につい...
-
界磁損
-
高校の電気回路について! 一辺...
-
ファン電圧制御による可変抵抗...
-
合成抵抗の求めかた
おすすめ情報