目次

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)

目次

inserted by FC2 system