目次
前
次
A/Dコンバータ処理
ワンチップマイコンでは、物理上のピンが複数のモジュールで兼用されて
いるので、どのピンが利用できるのかを確認しておきます。
ポート3の機能を見ると、次のようになっています。
Configurationには、対応ピンの2ビットに10を設定しますが
どのビットを使うのかは、GP3CONレジスタにて指定します。
ADuC7026の内部レジスタは、32ビット構成なので1ポートが8ビット
であれば、32/8=4ビットごとに機能指定します。
ビット0、1をA/Dコンバータで使う場合は、次のように設定。
GP3CON = (2 << 4*1) | (2 << 4*0) ;
or
GP3CON = 0x00000022 ;
16進数表記してみると、1桁でどのビットの機能を指定するのかが
わかるようになっています。
ポート4の機能を見ると、次のようになっています。
ADuC7026は、12ビットの12個のA/Dコンバータと12ビットの4個の
D/Aコンバータをもっています。P4.4からP4.7が、AD12からAD15に
割当てられているので、AD11までを利用します。
A/Dコンバータを使うために、モジュールのブロック図とレジスタ
のビット割当てを確認します。
ブロック図から、内蔵キャパシタに電荷を蓄えるためのスイッチング
回路があります。スイッチングのためのクロックが必要とわかります。
スイッチングのためのクロックは、クロックソースとプリスケーラを
指定しなければなりません。
クロックソースとプリスケーラは、ADCCONレジスタの12から10の
ビットの組合せで指定します。
データ取得のタイミングは、ADCCONレジスタの9、8のビットの
組合せで指定します。
A/D変換器の入力は、ディファレンシャルタイプになって
いるので正側、負側にどのピンを割り当てるのかを指定
して対応します。
ディファレンシャル、シングルエンド動作にするには、正側を
GNDに接続できるので3レジスタにパラメータを設定する関数
を定義して利用するのがよいと思います。
typedef unsigned char UBYTE ;
void set_condition(UBYTE xcks,UBYTE xaq)
{
ADCCON = (xcks << 10) | (xaq << 8) ;
}
void set_pch(UBYTE x)
{
/* set channel */
ADCCP = x & 0x1f ;
/* set A/D converter mode */
if ( x < 16 ) {
/* select PORT */
if ( x < 8 ) { GP3CON = (2 << 4*x) ; }
else { GP4CON = (2 << 4*(x-8)) ; }
}
}
}
void set_nch(UBYTE x)
{
/* set channel */
ADCCN = x & 0x1f ;
}
(under construction)
目次
前
次