CQ_I2C_book


We are the team of "I2C sample book" by CQ publishing

welcome

I2Cサンプルブックのページヘようこそ!

CQ出版『トライアルシリーズ(トランジスタ技術 2015年4月号増刊)・LED/モータからA-D/D-A変換まで2線インターフェースI2Cで数珠つなぎ! - マイコンにプラス! シリアル拡張IC サンプルブック[基板付き]』に関連した情報をまとめたページです.

cover

PCA9955A → PCA9955B,PCA9956A → PCA9956B

LEDドライバ「PCA9955A」と「PCA9956A」の新版:「PCA9955B」,「PCA9956B」がリリースされました.
この末尾に「B」が付く新版は,ハードウェアにマイナーな改良が行われたものです.

PCA9955B,PCA9956Bはハードウェア,ソフトウェア共に互換で,これまでのA版の基板とコードををそのまま使うことができます.

PCA9955B,PCA9956Bのデータシートは,次のURLで公開されています. http://www.nxp.com/documents/data_sheet/PCA9955B.pdf http://www.nxp.com/documents/data_sheet/PCA9956B.pdf

公開コード

この本に収録されたサンプルの,データシート,基本操作例のコード,クラスライブラリ(一部非対応)を下の公開コードの一覧の表にまとめます.

2種類の公開コード

基本操作例のコード

中の「基本操作例のコード」は書籍内で紹介された各サンプルデバイスの操作例コード公開ページへのリンクです.mbed-SDKで提供されるI2CのAPIを直接操作して,デバイス内部のレジスタにアクセスしてみる例になっており,よりハードに近い部分を通してのデバイスの挙動を理解するのに良い例となっています.各コード公開ページ内の「Import this program」ボタンを押すことで,サンプルコードをそのまま自分のコンパイラページに取り込み,すぐに試してみることができます.

code_importing 基本操作例のコードのインポート(図のクリックで拡大)

クラスライブラリ

もう一つのプログラム例「クラスライブラリ」は,コンポーネントページへのリンクとなっています.
コンポーネントはmbed環境で使うことのできる「ソフトウェア部品」です.
各デバイスに対応したソフトウェア部品はクラスとして用意されいるので,各クラスによりインスタンスを作成し,APIを呼び出すだけで,デバイスの操作ができるようになっています.
各デバイス用クラスにはHelloWorldプログラム(API使用例サンプル)も用意されています.

また別ページ:「I2Cサンプルブック対応クラスライブラリ」に,このサンプルブック用に用意されたクラスライブラリの使い方や,ちょっとしたコツをまとめました.合わせてご覧ください.

さらにGPIOエキスパンダLEDコントローラについては,これらをさらに使いやすくする高水準APIも設けました.このAPIの使い方は「I2Cサンプルブック対応クラスライブラリ:GPIOエキスパンダ,LEDコントローラ用 高水準API」のページに解説があります.

公開コードの一覧

ページ種類デバイス名基本操作例コードクラスライブラリ
14I2C解説記事のためコード例なし
241GPIOエキスパンダ・8ビットPCAL9554B/teams/CQ_I2C_book/code/PCAL9554B//components/PCAL9555-PCAL9554-16-8-bit-GPIO-expander/
347GPIOエキスパンダ・16ビットPCAL9555A /teams/CQ_I2C_book/code/PCAL9555A//components/PCAL9555-PCAL9554-16-8-bit-GPIO-expander/
453I2CバスバッファPCA9600バスバッファなのでソフトによる制御部分なしバスバッファなのでソフトによる制御部分なし
556I2CバスバッファPCA9517Aバスバッファなのでソフトによる制御部分なしバスバッファなのでソフトによる制御部分なし
659LEDコントローラ・4ch・PWM制御PCA9632/teams/CQ_I2C_book/code/PCA9632//components/PCA9632-4ch-LED-driver-voltage-switch-ty/
765LEDコントローラ・8ch・PWM制御PCA9624/teams/CQ_I2C_book/code/PCA9624//components/PCA9622-PCA962-PCA9626-8-16-24ch-LED-dri/
871LEDコントローラ・16ch・PWM制御PCA9622/teams/CQ_I2C_book/code/PCA9622//components/PCA9622-PCA962-PCA9626-8-16-24ch-LED-dri/
977LEDコントローラ・24ch・PWM制御PCA9626B/teams/CQ_I2C_book/code/PCA9626B//components/PCA9622-PCA962-PCA9626-8-16-24ch-LED-dri/
1084LEDコントローラ・16ch・PWM&電流制御PCA9955B (PCA9955A の互換後継品)/teams/CQ_I2C_book/code/PCA9955A//components/PCA9955A-PCA9956A-16-24-channel-constant/
1197LEDコントローラ・24ch・PWM&電流制御PCA9956B (PCA9956A の互換後継品)/teams/CQ_I2C_book/code/PCA9956A//components/PCA9955A-PCA9956A-16-24-channel-constant/
12105I2C→UART(シリアル)変換ブリッジSC16IS750/teams/CQ_I2C_book/code/SC16IS750//components/SC16IS750-I2C-or-SPI-to-UART-bridge/
13115温度センサ(±2℃精度)LM75B/teams/CQ_I2C_book/code/LM75B//components/PCT2075-LM75B-I2C-temp-sensor-with-1-deg/
14120温度センサ(±1℃精度)PCT2075/teams/CQ_I2C_book/code/PCT2075//components/PCT2075-LM75B-I2C-temp-sensor-with-1-deg/
15125ステッピングモータ・コントローラPCA9629A/teams/CQ_I2C_book/code/PCA9629A//components/PCA9629A-Stepper-motor-controller/
16136マスタ・セレクタPCA9541A/teams/CQ_I2C_book/code/PCA9541A/なし
17143バススイッチ・4chPCA9546A/teams/CQ_I2C_book/code/PCA9546A//components/PCA9546A/
181478ビット A/D,D/AコンバータPCF8591/teams/CQ_I2C_book/code/PCF8591//components/PCF8591/
19153リアルタイムクロックPCF85263A/teams/CQ_I2C_book/code/PCF85263A/なし
20160リアルタイムクロック(水晶内蔵)PCF2129AT/teams/CQ_I2C_book/code/PCF2129AT//components/PCF2127-High-accuracy-RTC-module/


I2Cのピン指定について

このサンプルブックに用意されたサンプルコードの動作確認は,すべて青mbed (mbed LPC1768)で行われています.このため,サンプルコードのI2Cピンの指定はSDA=p28SCL=p27を使用するようになっています.p28p27をそれぞれSDA,SCLとして使う設定は黄mbed (mbed LPC11U24)トラ技ARMライタ (TG-LPC11U35-501)でもそのまま使うことができます.

もちろん,mbed Enabledなプラットフォームであれば,適宜ピンの指定を変更さえすれば動作します(するはずです).

たとえば基本操作例のコードのI2Cインスタンスやクラスライブラリのデバイス・インスタンスを宣言する際のp28p27の部分を他のピン指定に置きかえます.次のコードは,いくつかのプラットフォームに対応したI2Cインスタンス,PCAL9555クラス・インスタンスの宣言例です.

使えるピンとそのピン名は..

I2Cが使えるピンとそのピン名は,各プラットフォーム(基板)によって違います.これについてはそれぞれの解説ページで確認してください.

// 青mbed (mbed LPC1768),黄mbed (mbed LPC11U24),トラ技ARMライタ (TG-LPC11U35-501)
I2C         i2c( p28, p27 );   //  I2Cインスタンスを作成
PCAL9555    gpio( p28, p27 );  //  PCAL9555インスタンスを作成

青mbed (mbed LPC1768)黄mbed (mbed LPC11U24)トラ技ARMライタ (TG-LPC11U35-501) で SDA=pin28,SCL=pin27
青mbed (mbed LPC1768)であればSDA=p9SCL=p10を使うこともできます.

// mbed LPC1114FN28
I2C         i2c( dp5, dp27 );   //  I2Cインスタンスを作成
PCAL9555    gpio( dp5, dp27 );  //  PCAL9555インスタンスを作成

mbed LPC1114FN28で SDA=pin5,SCL=pin27

// Switch Science mbed LPC824
I2C         i2c( dp4, dp5 );   //  I2Cインスタンスを作成
PCAL9555    gpio( dp4, dp5 );  //  PCAL9555インスタンスを作成

Switch Science mbed LPC824で SDA=pin4,SCL=pin5

// Arduinoピン互換品 (LPCXpresso824-MAX,LPCXpresso1549,LPCXpresso11U68,Freescale-FRDMシリーズ,ST-Nucleoシリーズなど)
I2C         i2c( D14, D15 );   //  I2Cインスタンスを作成
PCAL9555    gpio( D14, D15 );  //  PCAL9555インスタンスを作成

LPCXpresso824-MAXLPCXpresso1549LPCXpresso11U68, Freescale-FRDMシリーズ, ST-Nucleoシリーズ などで SDA=D14,SCL=D15


mbed-SDK関連

mbed APIの使い方

書籍内の記事「サンプルコードを使ってみる」内の「mbed APIの使い方」の節で紹介した内容は,mbedのハンドブックページの内容を元にしています.
mbedの公式I2C API解説はこちらのページを参照ください.(菅工房さんによる日本語翻訳ページはこちら)

I2C APIで接続されたデバイスの内部レジスタを読み書きする具体的な解説はこちらのページ:「I2Cアクセス例」(ページ後半に日本語版あり)にも用意されています.

mbed SDKの中身

「mbed SDKの中身」の節で紹介したコードへのリンクも紹介します.

mbed SDKのコードはオープンソース・プロジェクトとしてGitHubで開発・管理されています.
mbedのオンラインコンパイラで使われるmbed SDKは,このGitHubの状態を適宜オンライン環境に持ってくる形で更新されます.

最新mbed SDKのソースは以下のリンクで確認できます.
https://github.com/mbedmicro/mbed/tree/master/libraries/mbed

I2CのAPI定義は
https://github.com/mbedmicro/mbed/blob/master/libraries/mbed/api/I2C.h

"I2C.h"は"mbed.h"をインクルードすれば,その中でインクルードされるようになっています.
https://github.com/mbedmicro/mbed/blob/master/libraries/mbed/api/mbed.h

I2C APIの実装部分は
https://github.com/mbedmicro/mbed/blob/master/libraries/mbed/common/I2C.cpp

実際のI2Cの動作の実装は,ターゲットとするマイコン毎に異なるため,各マイコンに対応した部分を見る必要があります.記事で紹介されている「青mbed:mbed LPC1768」の実装は
https://github.com/mbedmicro/mbed/tree/master/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC176X

さらにこのディレクトリの中の「i2c_api.c」にI2C動作が書かれています. https://github.com/mbedmicro/mbed/blob/master/libraries/mbed/targets/hal/TARGET_NXP/TARGET_LPC176X/i2c_api.c

mbed.orgサイト内でのmbed-SDKのソースコード確認

記事内ではGitHubでのコードを紹介しましたが,mbed.org内のオンライン環境でも,これと同じコードがmbed-srcという名のソースコード付きのライブラリとして公開されており,ここでも中身を確認することができます.
このライブラリはプログラムにインポートして使うこともできます.たとえばmbed-SDKに何らかの変更が必要になった際には,そのような使い方も可能です.

Import librarymbed-src

mbed library sources


I2C仕様

I2Cの仕様へのリンクを載せておきます.
(日本語版はRev.5,英語版ではRev.6となっています.5と6の違いは,図41と図42の訂正だけなので,Rev.5を参照いただいてもほぼ問題ありません)
UM10204 I2C-bus specification and user manual(英語版)
UM10204 I2C バス仕様およびユーザーマニュアル(日本語版)

変更履歴

  • 2015年3月28日:発売日初期バージョン
  • 2015年3月29日:「公開コードの一覧」を本の章ごとの順に変更
  • 2015年7月7日:「PCA9955A→PCA9955B」のお知らせを掲載
  • 2016年9月14日:ページ内のリンク切れを解決