目次
前
次
D/Aコンバータ制御
工業用のD/Aコンバータは、12ビットが主流なので、
2種のシリアルインタフェースD/Aコンバータの制御を
説明する。
MAX539は、1チャネルのシリアルインタフェースD/Aで
10年以上使い続けているので、はじめにこちらの制御を
説明する。
MCP4922は、2チャネルのシリアルインタフェースD/Aで
複数チャネルのD/Aコンバータの代表として説明する。
- ChipSelectをenableにする
- 制御ワードをclockに同期させて入力
- 数値をclockに同期させて入力
- 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ビットは、下記の組み合わせになる。
- 2^16 チャネル選択 0でA、1でB
- 2^15 リファレンス電圧のバッファリング 1でバッファ
- 2^14 ゲイン指定 1でそのまま 0で2倍
- 2^13 パワーコントロール 1で制御イネーブル
目次
前
次