ともさんのHP >ものつくり >2次元CCDを使った自作カメラ >天体写真用冷却CCDカメラの製作(ADコンバータ-作動試験)
天体写真用冷却CCDカメラの製作(ADコンバータ-作動試験)
ADコンバータを動かしてみました。使ったのはADS8320という分解能16BITのもの。12BIT以上のADコンバーターはなかなか売っていないので入手に苦労しました。ついでに小さいので半田付けも苦労しました。
使い方はインターネットでデータシートを入手て調べました。
マイコンにつないで動かしたところ...まったく動かない。いろいろ調べてみると、 マイコン 楽天 のポートが入力専用ポートを使っていたので信号が出力されていなかったためと判明。繋ぎ直したらきちんと動きました。
下はマイコンH8-3069を使ってADコンバータADS8320を動かすための関数。動作は確認すみ。
/*ads8320.c 2003/02/13 作成開始 Tomoyuki
Ito*/ /*ADC ADS8320チップにアクセスしてAD変換を行い、結果を取得する関数*/ /* PortB-0 : シリアルdata入力端子 PortB-1 : クロック出力端子 PortB-2 : SC~(チップセレクト)出力端子 に繋ぐ。SC~はプルアップしておく H8-3069用(20MHz) 2003/3/17 動作確認 */
#include <h8/reg3067.h> /*I/Oアクセス用インクルード*/ #include"y_sci1.h"
/*AD変換実行関数*/ unsigned int ads8320( void ); /*初期化関数*/ void ads8320ini( void ); /*待ち時間を作る関数*/ void dowait( void );
unsigned int ads8320( void ) { unsigned char tmp5, tmp0; int I; unsigned int data = 0; //端子初期出力値の設定 tmp5 = PBDR; tmp5 = tmp5 & (~0x02); // 1bit目,clockを0に設定 // PBDR = tmp5 ; // tmp5 = (tmp5 | 0x04 ); //2bit目、CS~を1に設定 tmp5 = (tmp5 & (~0x04) ); //2bit目、CS~を0に設定 PBDR = tmp5 ; dowait(); tmp5 = (tmp5 | 0x02); // 1bit目,clockを1に設定 PBDR = tmp5 ; dowait(); tmp5 = tmp5 & (~0x02); // 1bit目,clockを0に設定 PBDR = tmp5 ; dowait(); tmp5 = (tmp5 | 0x02); // 1bit目,clockを1に設定 PBDR = tmp5 ; dowait(); tmp5 = tmp5 & (~0x02); // 1bit目,clockを0に設定 PBDR = tmp5 ; dowait(); tmp5 = (tmp5 | 0x02); // 1bit目,clockを1に設定 PBDR = tmp5 ; dowait(); tmp5 = tmp5 & (~0x02); // 1bit目,clockを0に設定 PBDR = tmp5 ; dowait(); tmp5 = (tmp5 | 0x02); // 1bit目,clockを1に設定 PBDR = tmp5 ; dowait(); tmp5 = tmp5 & (~0x02); // 1bit目,clockを0に設定 PBDR = tmp5 ; dowait(); tmp5 = (tmp5 | 0x02); // 1bit目,clockを1に設定 PBDR = tmp5 ; dowait(); tmp5 = tmp5 & (~0x02); // 1bit目,clockを0に設定 PBDR = tmp5 ; dowait();
for( I=0; I<16 ; I++) { data = data << 1; tmp5 = (tmp5 | 0x02); // 1bit目,clockを1に設定 PBDR = tmp5 ; asm("nop") ;asm("nop") ;tmp5 = PBDR; //y_outch16i1( (unsigned int)tmp5 ) ; dowait(); tmp5 = tmp5 & (~0x02); // 1bit目,clockを0に設定 PBDR = tmp5 ; dowait(); //data取得 tmp5 = PBDR; tmp0 = tmp5 & (~0xfe); //y_outch16i1( (unsigned int)tmp5 ) ; //tmp0=1; data = data + tmp0; } tmp5 = PBDR; tmp5 = (tmp5 | 0x04 ); //2bit目、CS~を1に設定 PBDR = tmp5 ; return data; }/*ads8320*/
void dowait( void ) { int I=0; for(I=0;I<10;I++){ asm("nop") ; } return; }
void ads8320ini( void ) { unsigned char tmp5; //端子初期出力値の設定 tmp5 = PBDR; tmp5 = (tmp5 | 0x04 ); //3bit目、CS~を1に設定 tmp5 = tmp5 & (~0x02); // 1bit目を0に設定 PBDR = tmp5 ; asm("nop") ; //端子の入出力設定 tmp5 = PBDDR ; tmp5 = ( tmp5 | 0x06 ); // 1, 2bit目を1に設定(出力) tmp5 = tmp5 & (~0x01); // 0bit目を0に設定(入力) PBDDR = tmp5 ; asm("nop") ; //端子初期出力値の設定 tmp5 = PBDR; tmp5 = (tmp5 | 0x04 ); //3bit目、CS~を1に設定 tmp5 = tmp5 & (~0x02); // 1bit目を0に設定 PBDR = tmp5 ; }/*ads8320ini*/
|
最終更新日: 2003-02-19 00:00:00
ともさんのHP >ものつくり >2次元CCDを使った自作カメラ >天体写真用冷却CCDカメラの製作(ADコンバータ-作動試験)
ツイート