目次

D/Aコンバータ制御

 工業用のD/Aコンバータは、12ビットが主流なので、  2種のシリアルインタフェースD/Aコンバータの制御を  説明する。  MAX539は、1チャネルのシリアルインタフェースD/Aで  10年以上使い続けているので、はじめにこちらの制御を  説明する。  MCP4922は、2チャネルのシリアルインタフェースD/Aで  複数チャネルのD/Aコンバータの代表として説明する。
  1. ChipSelectをenableにする
  2. 制御ワードをclockに同期させて入力
  3. 数値をclockに同期させて入力
  4. ChipSelectをdisableにする

MAX539制御

 MAX539は、1チャネル出力をもつ12ビットのD/Aコンバータ。  nCS、SCLK、DINの3ピンで制御する。  関数を徐々に、仕上げていく。  関数名はdac_write、数値を入力パラメータとする。 void dac_write(UWORD x) { }  数値は12ビットの範囲で、0〜4095なので  この範囲にあることを確認する。 void dac_write(UWORD x) { /* レンジチェック */ if ( x > 4095 ) { x = 4095 ; } }  制御信号とクロックの初期状態と終了状態を加える。 void dac_write(UWORD x) { /* レンジチェック */ if ( x > 4095 ) { x = 4095 ; } /* set initial value */ DA_CS = ON ; DA_SCLK = OFF ; /* H -> DA_CS */ DA_CS = ON ; }  ChipSelectを加える。 void dac_write(UWORD x) { /* レンジチェック */ if ( x > 4095 ) { x = 4095 ; } /* set initial value */ DA_CS = ON ; DA_SCLK = OFF ; /* 0 -> CS */ DA_CS = OFF ; /* H -> DA_CS */ DA_CS = ON ; }  数値出力を加える。 void dac_write(UWORD x) { UBYTE i ; /* レンジチェック */ if ( x > 4095 ) { x = 4095 ; } /* set initial value */ DA_CS = ON ; DA_SCLK = OFF ; /* 0 -> CS */ DA_CS = OFF ; /* looping */ for ( i = 0 ; i < 12 ; i++ ) { /* set bit datum */ DA_DIN = OFF ; if ( x & 0x800 ) { DA_DIN = ON ; } /* H -> SCLK */ DA_SCLK = ON ; /* shift data */ x <<= 1 ; /* L -> SCLK */ DA_SCLK = OFF ; } /* H -> DA_CS */ DA_CS = ON ; }

MCP4922制御

 MCP4922は、2チャネル出力をもつ12ビットのD/Aコンバータ。  nCS、SCK、SDI、nLDACの4ピンで制御する。  関数を徐々に、仕上げていく。  関数名はdac_write、数値を入力パラメータとする。  入力パラメータは、16ビットで上位4ビットをチャネル、バッファリング  ゲイン等を指定し、下位12ビットの数値を含める。 void dac_write(UWORD x) { }  制御信号とクロックの初期状態と終了状態を加える。 void dac_write(UWORD x) { /* set initial value */ DA_DAC = ON ; DA_CS = ON ; DA_SCK = OFF ; /* H -> DA_CS */ DA_CS = ON ; }  ChipSelectを加える。 void dac_write(UWORD x) { /* set initial value */ DA_DAC = ON ; DA_CS = ON ; DA_SCK = OFF ; /* 0 -> CS */ DA_CS = OFF ; /* H -> DA_CS */ DA_CS = ON ; }  制御パラメータと数値を出力する。 void dac_write(UWORD x) { UBYTE i ; /* set initial value */ DA_DAC = ON ; DA_CS = ON ; DA_SCK = OFF ; /* 0 -> CS */ DA_CS = OFF ; /* loop */ for ( i = 0 ; i < 16 ; i++ ) { DA_SDI = OFF ; if ( x & 0x8000 ) { DA_SDI = OFF ; } DA_SCK = ON ; x <<= 1 ; DA_SCK = OFF ; } /* H -> DA_CS */ DA_CS = ON ; }  転送した内容をDACの出力ピンに印加する。 void dac_write(UWORD x) { UBYTE i ; /* set initial value */ DA_DAC = ON ; DA_CS = ON ; DA_SCK = OFF ; /* 0 -> CS */ DA_CS = OFF ; /* loop */ for ( i = 0 ; i < 16 ; i++ ) { DA_SDI = OFF ; if ( x & 0x8000 ) { DA_SDI = OFF ; } DA_SCK = ON ; x <<= 1 ; DA_SCK = OFF ; } /* LOAD */ DA_DAC = OFF ; DA_DAC = ON ; /* H -> DA_CS */ DA_CS = ON ; }  制御の4ビットは、下記の組み合わせになる。
目次

inserted by FC2 system