AD変換器は マイコン 内臓があるのだけれど、分解能が10bitしかない。0〜5Vの範囲を0〜1024(2の10乗)の数値に変換してくれるのだが、CCDからの信号を受けるのにはもうちょっと細かくしたい。そこでADコンバーターを外付けすることにする。といっても手に入ったのは12bitのもの。0〜4096(2の12乗)に分解できる。もっと細かく分けたいけど、手に入らないので仕方がない。これを使うことにしよう。
使用するADコンバーターはマイクロチップ社のMPC3204というもの。これも秋月電子通商にて購入。使い方は同社のHPから入手できるデータシートに書いてある。
配線は下図のようにする。
VddとVrefには5V、AGNDとDGNDにはグランド(マイナス極)を繋ぐ。CH0にはCCDからの信号を繋ぐ。
CLK、CS~、DOUTはマイコンの汎用入出力ポートに繋ぎます。 DINにも本来信号線を繋がないといけないのだけど、今回のように端子CH0しか使わないのであれば、GNDをつないでおけばOK。

で、AD変換を行う プログラム は以下のとおり。ただし、まだ動作確認してません。
| /*admcp320x.c 2003/01/07 作成開始*/ /*ADC MCP320Xチップにアクセスして0chのAD変換を行い、結果を取得する関数*/ /* Port5-0 : シリアルdata入力端子 Port5-1 : クロック出力端子 Port5-2 : SC~(チップセレクト)出力端子 に繋ぐ。SC~はプルアップしておく */
#include <h8/reg3067.h> /*I/Oアクセス用インクルード*/
unsigned int admcp320x( void ); void admcp320xini( void );
unsigned int admcp320x( void ) { unsigned char tmp5, tmp0; int I; unsigned int data = 0; //端子初期出力値の設定 tmp5 = P5DR; tmp5 = (tmp5 | 0x04 ); //2bit目、CS~を1に設定 tmp5 = tmp5 & (~0x02); // 1bit目,clockを0に設定 P5DR = tmp5 ; asm("nop") ;asm("nop") ; //100ns tmp5 = (tmp5 | 0x02); // 1bit目,clockを1に設定 P5DR = tmp5 ; asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ; //250ns tmp5 = tmp5 & (~0x02); // 1bit目,clockを0に設定 P5DR = tmp5 ; asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ; //250ns tmp5 = (tmp5 | 0x02); // 1bit目,clockを1に設定 P5DR = tmp5 ; asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ; //250ns tmp5 = tmp5 & (~0x02); // 1bit目,clockを0に設定 P5DR = tmp5 ; asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ; //250ns
for( I=0; I<12 ; I++) { data = data *2; tmp5 = (tmp5 | 0x02); // 1bit目,clockを1に設定 P5DR = tmp5 ; asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ; //250ns tmp5 = tmp5 & (~0x02); // 1bit目,clockを0に設定 P5DR = tmp5 ; asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ;asm("nop") ; //250ns //data取得 tmp5 = P5DR; tmp0 = tmp5 & (~0xfe); //tmp0=1; data = data + tmp0; } return data; }/*admcp320x*/
void admcp320xini( void ) { unsigned char tmp5; //端子初期出力値の設定 tmp5 = P5DR; tmp5 = (tmp5 | 0x04 ); //3bit目、CS~を1に設定 tmp5 = tmp5 & (~0x02); // 1bit目を0に設定 P5DR = tmp5 ; //端子の入出力設定 tmp5 = P5DDR ; tmp5 = ( tmp5 | 0x06 ); // 1, 2bit目を1に設定(出力) tmp5 = tmp5 & (~0x01); // 0bit目を0に設定(入力) P5DDR = tmp5 ; //asm("nop") ; }/*admcp320xini*/ |
作成日: 2003-01-18 00:00:00
このページは「ともさん」が個人的に運営しています。