|
プログラムはやまねこさんのを参考にして作りました。
/*電圧を取り込む(A/D変換)*/
#include <h8/reg3067.h>
#include <mes2.h>
#define VREF 5
int main(void){
unsigned int data;
volatile int r;
float v;
while(1){
data = 0;
r = ADCSR;
//読み込んでエンドフラグを0にする
sleep(10);
ADCSR = 0x20;
//0chで変換スタート
sleep(10);
while(!(ADCSR | 0x80)){;}
//最上位ビットに1が立ったら変換終了
sleep(10);
data = ADDRAH << 2;
//上位8ビット
data |= ADDRAL >> 6;
//下位2ビット
v = (float)data * VREF / 1024;
//電圧になおす
printf("%d\r", data);
printf("%d.%01d[V]\r",(int)v,
(int)(v * 10) % 10);
sleep(1000);
}
}//main
ここにプログラムをおきます。拡張子をtxtからcに変換してお使いください。
いたるところにsleep()が入っているのは、昔、AD変換がうまくいかなかったときに入れた名残です。ちゃんと変換できさえすれば不要です。
ポイントはADCSRレジスタのそれぞれのビットの意味を知ることです。めんどりは全く分からなかったので、ルネサステクノロジのサイトからH83069Fマイコンのハードウェアマニュアルをダウンロードし、かじりました。
ちなみに、文系出身のめんどりなので、最初はまるで何を言っているのかマニュアルの読み方がさっぱり分からなかったです。職業訓練校の先生に教えてもらって、やっとなんとなく見方が分かりました。
それから、電圧の小数点第一位までの表示は、C言語の教科書のprintfの辺りを読めばなんとかなります。
まず、可変抵抗の値を調節して、AN0に0.4Vが掛かるように調整しておきます。ハイパーターミナル上も同じになればOK。電圧の上に表示されている、84や85等の数値は生値。0から1023のうちの84もしくは85ですよ、という意味です。


あとは、ぐりぐりと可変抵抗を回して、ハイパーターミナル上の表示が一緒に変化することを確認します。
次は13.温度センサLM35DZをつなげる(A/D変換)です。>>
|