テキスト ボックス:  ADC121C021

 

 

 

 

I2Cセンサーの種類

12bit アナログデジタルコンバーター

主な機能

1ch12bit A/Dコンバーター

アナログ電圧をデジタル信号に変換します。

I2Cデバイス名

ADC121021

写真

GROVE - I2C ADC

開発したデバイスの入手先 

製品名 品番・型番

スイッチサイエンス

GROVE – I2C ADC (SEEED-103020013

デバイスのData-Sheet

http://www.tij.co.jp/jp/lit/ds/symlink/adc121c021.pdf

デバイスの主な仕様

電源電圧

I2Cアドレス

分解能

I2C通信速度

サンプリング速度

3.3V~5.0V

050 ~ 0X5A (ジャンパー切り替え可能)

12bit

100K/400K/3.4Mbps

22.2KhzI2C通信速度 400Kbps時)

説明

この基板のリファレンス電圧がVCC電圧の1/2で回路構成されていますので、VCC3.3V時にアナログ入力を3.3V入力しても0XFFF では無く0x7FFに成ります。

その他の機能としてアラートフラグ、オーバーレンジアラート、アンダーレンジアラート、ヒステリシスの設定が可能です。

測定値の読み出すResult
Register
は、12bitの分解能の為、2つの8bitのレジスタよりデータを得て合算して計測値を得る必要が有りますが、I2Cセンサードライバーでは12bitへの合算処理、計測値データには不要のアラートフラグが有る為、除去を行い、12bitデータのみをプロパティに返します。

アラートフラグはアラートフラグのプロパティで個別に得る事ができます。

通常のレジスタの読み書きは、register
address
を指定した後に処理を行いますが、I2Cセンサー・ドライバーを使用する場合は使用するプロパティにregister addressが紐づけして有る為レジスタアドレスの指定は不要でプロパティへ値の代入、読み出しのみで可能です。

  開発・テスト風景

IMG_2431

テストはVCCの電圧をボリューム可変させてアナログ入力し確認しました。

I2Cデバイス内部のレジスタ構成(レジスタに対する設定値、レジスタの内容内容等のご質問はお答えできません)

Address
Pointer Register

Conversion
Result Register

Alert
Status Register

Configuration
Register

Alert
Limit Register – Under Range

Alert
Limit Register – Over Range

Alert
Hysteresis Register

Lowest
Conversion Register

Highest
Conversion Register

 

I2Cセンサー・ドライバーで準備済みのプロパティ・メソッド

 

     プロパティ

機能名

機能説明

Polarity

このビットは、ALERT出力ピンのアクティブレベルの極性を設定します。

0:アクティブ・ローのALERTピンを設定します。

1:アクティブ・ハイにALERTピンを設定します。

AlertPinEnable

0ALERT出力ピンを無効にします。ピンが無効になっているときにALERT出力はハイインピーダンスになります。

1ALERT出力ピンを有効にします。

AlertFlagEnable

0:変換結果レジスタにおける障害のアラートステータスビット[D15]

1:変換結果レジスタ内のアラートステータスビット[D15]を有効にします。

AlertHold

0:アラートは、意志、自己明確なとき、ヒステリシス・レジスタの値以上により制限内で測定された電圧が移動します。

1:アラートが自己明確ではないだろうと1がアラートステータス・レジスタ内のアラート高いフラグまたは警告低フラグに書き込まれたときにのみクリアされます。

 

機能名

機能説明

CycleTime

0: 自動モード無効

1: Tconvert x 32

2: Tconvert x 64

3: Tconvert x 128

4: Tconvert x 256

5: Tconvert x 512

6: Tconvert x
1024

7: Tconvert x
2048

ResultValue

最新の変換結果

AlertFlag

最新の変換結果のアラートフラグ

OverRangeAlert

VHIGHリミットレジスタに格納されたVHIGHの限界を超えた場合、ビットは1に設定されています。

UnderRangeAlert

VLOWリミットレジスタに格納されVLOW限界を下回ったときにビットが1に設定されています。

VLOWLimit

アラート条件を決定するために使用される下限閾値

VHIGHLimit

アラート条件を決定するために使用される上限閾値

Hysteresis

アラート条件を決定するために使用されるヒステリシス値

LowestConversion

最低の変換結果

HighestConversion

最高の変換結果

ReadBuff

読込生データ

 

     メソッド 

機能名

機能説明

Init

I2Cバスコントローラに指定された接続設定を使って非同期的に接続します。

Read

指定レジスタ読込

Write

指定レジスタ書込

 

定数

機能名

機能説明

定数値

REG_ADDR.RESULT

Conversion Result

0x00

REG_ADDR.ALERT

Alert Status

0x01

REG_ADDR.CONFIG

Configuration

0x02

REG_ADDR.LIMITL

Low Limit

0x03

REG_ADDR.LIMITH

High Limit

0x04

REG_ADDR.HYST

Hysteresis

0x05

REG_ADDR.CONVL

Lowest Conversion

0x06

REG_ADDR.CONVH

Highest
Conversion

0x07

 

I2Cセンサードライバーを使ったVBでのサンプルソース

 

Imports I2CLibrary

Public NotInheritable Class ADC121C021Page

 Inherits Page

 Private Const ADC121C021_Address As Byte = &H50

 Private ADC121C021 As ADC121C021 = New ADC121C021()

 Private WithEvents RefreshTimer As DispatcherTimer = New DispatcherTimer()

 Public Sub New()

  InitializeComponent()

  Call Init()

 End Sub

 Private Async Sub Init()

  Await ADC121C021.Init(ADC121C021_Address)

  ’ HighestConversion初期化

  ADC121C021.HighestConversion = 0

  ADC121C021.Write(ADC121C021.REG_ADDR.CONVH)

  ’ LowestConversion初期化

  ADC121C021.LowestConversion = &HFFF

  ADC121C021.Write(ADC121C021.REG_ADDR.CONVL)

  ’ コンフィグ書込

  ADC121C021.AlertFlagEnable = True

  ADC121C021.AlertPinEnable = True

  ADC121C021.Write(ADC121C021.REG_ADDR.CONFIG)

  ’ 上限値

  ADC121C021.VHIGHLimit = 2000

  ADC121C021.Write(ADC121C021.REG_ADDR.LIMITH)

  ’ 下限値

  ADC121C021.VLOWLimit = 500

  ADC121C021.Write(ADC121C021.REG_ADDR.LIMITL)

 End Sub

 Private Sub btnStart_Click(sender As Object, e As RoutedEventArgs)

  RefreshTimer.Interval = TimeSpan.FromMilliseconds(100)

  RefreshTimer.Start()

 End Sub

 Private Sub Measurement(sender As Object, e As Object) Handles RefreshTimer.Tick

  RefreshTimer.Stop()

  ADC121C021.Read(ADC121C021.REG_ADDR.RESULT)

  Debug.WriteLine(“{0:F} {1}”, ADC121C021.ResultValue,  ADC121C021.AlertFlag)

  ADC121C021.Read(ADC121C021.REG_ADDR.ALERT)

  Debug.WriteLine(“{0} {1}”, ADC121C021.OverRangeAlert,  ADC121C021.UnderRangeAlert)

  ADC121C021.Read(ADC121C021.REG_ADDR.CONVH)

  Debug.WriteLine(“{0:F}”, ADC121C021.HighestConversion)

  ADC121C021.Read(ADC121C021.REG_ADDR.CONVL)

  Debug.WriteLine(“{0:F}”, ADC121C021.LowestConversion)

  RefreshTimer.Start()

 End Sub

 Private Sub btnStop_Click(sender As Object, e As RoutedEventArgs)

  RefreshTimer.Stop()

  ADC121C021.HighestConversion = 0

  ADC121C021.Write(ADC121C021.REG_ADDR.CONVH)

  ADC121C021.LowestConversion = &HFFF

  ADC121C021.Write(ADC121C021.REG_ADDR.CONVL)

 End Sub

 Private Sub btnBack_Click(sender As Object, e As  RoutedEventArgs)

  RefreshTimer.Stop()

  ADC121C021.close()

  App.rootFrame.Navigate(GetType(MenuPage))

 End Sub

End Class