« 子どもを育てるはなし | トップページ | AM変調のはなし »

2014年9月26日 (金)

I2C出力 A/Dコンバーターのはなし

I2C出力 A/Dコンバーターのはなしとは

高周波アンプの出力デバイス消費電流は、A級アンプの場合はあまり出力レベルによって変化しないが、AB級のアンプではパワーや周波数によって、流れすぎないように監視する必要が多々あります。
 そんな監視に適した ICをいろいろ試しましたが、携帯機器のバッテリー監視ICなどでは、高周波によって、オペアンプ入力のダイオードが飽和してしまったり、I2Cバス制御がうまく動かなくなったりして、エラーが出たりしました。
 最近改めて、RFによるトラブルに強そうな I2C A/Dコンバーターで AD7991 というICを試してみました。
Ad7991_pin
8Pin SOT23 と大変ちいさなパッケージですが、 12Bit 分解能で 4CH 入っています。I2C バスなので電源 GND も含めて 4本で繫げるのが使いやすいポイントです。
 しかしながら、当初データーシートを見た時に、「1) チャンネル指定レジスタを、いちいち設定するのは面倒みたい」「 2) アドレスが固定で、2品種しか無いので、合計8CHしか使えない」と思って、使用するのにはちょっとためらっていました。
 しかしながら、 1) のCHレジスタ指定は「オートインクリメンタリーモードがデフォルト」ってことで、解消されました。電源 ONで自動的にチャンネルが更新されるのです。
20140926_113804
しかも、どのチャンネルのデーターかは、読み出した2バイトのデーターの中(上記表)の最初の Bit5:4 にあるので、手間がかかりません。
それで、以下のようなコードで使っています。必要な分解能は 8 Bit で問題ないので、上位8bit のみ使ってます。 以下は読み出し部分のみ....   
// ------------ temp_buffer[] に2バイト i2C から受信する -----------
    while( getsI2C(temp_buffer,2) ); //recieve data 2Byte
     uc =( temp_buffer[0] & 0x30) >> 4 ;   // Get CH number
     data = temp_buffer[0]<<4 ;                  // 上位 4Bit 代入
     data |= temp_buffer[1] >> 4 ;     // 2byte 目の上位4Bitを加算
     volt_data[ uc ] = data ; // 結果レジスタにストア
* 実際使用する時は、前回値と平均する等の演算処理が必要です。
2)の問題は 10Bit ですが、8CHの AD7997 という品種が、同じソフトウエア処理で使えそうなのです。このICは AS ピンの電位でアドレスが変えられるようなので、1品種2個、2品種あるので、同じバス上に4個接続出来ます。
20140926_120537
なかなか便利な時代になってきましたが、こんどは選ぶのが大変になりそうですね。
 

|

« 子どもを育てるはなし | トップページ | AM変調のはなし »

アナログ」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: I2C出力 A/Dコンバーターのはなし:

« 子どもを育てるはなし | トップページ | AM変調のはなし »