PIC18でのA/D変換
PIC18F67J60-l/PT(40MHz)で、C18を使ってA/D変換を行うプログラムを作成しました。
しかし、実際に接続をしてみると上手く動作しませんでした。
具体的には、Web上でA/D変換の結果を表示して確認しているのですが、
結果の値がばらついたり、0か1023が表示され、安定しません。
(1023以上の値が表示されないので、表示するプログラムには問題ないと思います)
ピンの接続を何度も確認したり、接続状況を変えたのですが、
問題を解決するまでに至りませんでした。
プログラムに問題があるか、初心者なのでよく分かりません。
参考書や資料を見る限りではプログラムに問題はないと思うのですが、
皆様のご指摘を頂きたいと思います。
宜しくお願いします。
-------------------------------------------------------------------
(前提条件)
Vref-はAN2(0V)、Vref+はAN3(3.3V)から取り、
入力をAN4、AN7、AN8、AN9から取り込む。
(作成したA/D変換プログラム)
//各レジスタの設定
ADCON1 = 0x35; //VREF-はAN2、VREF+はAN3
TRISA = 0x2F; //AN2,AN3は入力モード
TRISF = 0x1C; //AN7~AN9を入力にする
ADCON2 = 0xB6;
//AN4用 加速度センサA1
ADCON0 = 0x11;
Delay10TCYx(0);
ADCON0bits.GO = 1;
while(ADCON0bits.GO);
Delay10TCYx(0);
uitoa(*((WORD*)(&ADRESL)), AN4String);
//AN7用 加速度センサA2
ADCON0 = 0x1D;
Delay10TCYx(0);
ADCON0bits.GO = 1;
while(ADCON0bits.GO);
Delay10TCYx(0);
uitoa(*((WORD*)(&ADRESL)), AN7String);
//AN8用 加速度センサB1
ADCON0 = 0x21;
Delay10TCYx(0);
ADCON0bits.GO = 1;
while(ADCON0bits.GO);
Delay10TCYx(0);
uitoa(*((WORD*)(&ADRESL)), AN8String);
//AN9用 加速度センサB2
ADCON0 = 0x25;
Delay10TCYx(0);
ADCON0bits.GO = 1;
while(ADCON0bits.GO);
Delay10TCYx(0);
uitoa(*((WORD*)(&ADRESL)), AN9String);
// AD converter errata work around (ex: PIC18F87J10 A2)
#if !defined(__18F452)
PRODL = ADCON2;
ADCON2bits.ADCS0 = 1;
ADCON2bits.ADCS1 = 1;
ADCON2 = PRODL;
#endif