備忘録 I2Cコントローラ 2015.12.13

こんな書き込みをいただきました。


ソフト制御ができるICについては、その制御方法は大きく2つあり、1つは3線式制御と、もうひとつは2線式制御です。
 3線式制御はSPIともよばれますが、DATA、CLOCK、STROBE(LATCH)の3線で制御するものです。書き込みだけなら
3線で済みますが、読み出しも行う場合は4線になります。この制御方法は古くからありますが、
制御する対象のチップが複数ある場合には、あまり向きません。というのも、どのチップを選択するかは、別途その制御信号を
制御側が用意する必要があり、必要な線数が多くなってしまい小型機に向きません。
 2線式制御はI2C制御(これはメーカでの商標名)とも呼ばれていますが、クロックとデータのみで制御されますが、
非常に巧妙な制御が行われており、2線にもかかわらずデータの書き込みだけでなく、読み込みも可能になっています。
さらに制御データにはチップ選択を行うアドレス情報も付加されることから、2線だけで複数のチップ制御が簡単にできます。

I2Cコントローラを作っています。 

I2C制御を行うICを評価するときに、任意のアドレスに任意の値を書きむことができるツールがあると便利なので
こんなものを作っています。

I2Cコントローラ


回路はきわめてシンプルです。

使い方は

使い方は簡単で、最初にI2Cアドレスを設定し、制御レジスターの最初の値と最後の値を指定します。
これは未使用のレジスターに書き込みや読み出しをしないための工夫です。


最初にI2C制御のアドレスを設定します。


次に、読み書きするレジスターのスタートアドレスです。


次に、読み書きするレジスターのエンドアドレスです。

上記の設定が終わったら、レジスタアドレスの読み書きできるようになります。

備忘録代わりです。



このコントローラのバイナリーです。
なお、上記の記載を含めて、正しいかどうかは保障できませんので、
参考に作ってみる場合は、あくまで自己責任でお願いします。

:1000000004308A000E2C00000A108A100A118207A0
:100010004934323443342034413444345234533438
:100020003A3400340A108A100A11820753345434C7
:1000300041345234543420344134443452345334EF
:100040003A3400340A108A100A11820745344E34BB
:100050004434203420342034413444345234533432
:100060003A340034491943104529D2275200201050
:100070002010201020102010201020102010000030
:1000800049194310C3274E2AD2274C26452900017F
:10009000503084008313000803195C280330F800F3
:1000A000F701F70B5128F80B50283C30F700F70BFD
:1000B00057285A28800B4E280800FF3083168500E9
:1000C000860087008312AC132C08831687008312E6
:1000D0002C132C08831687008312AC122C0883166D
:1000E00087008312AC102C088316870083122C1112
:1000F0002C08831687008312AC112C088316870006
:1001000085128312851686128316861283121F1398
:100110009F1783169F1783121F148316031709084E
:10012000C039890003131F129F1201300317880082
:100130000030F800831203131F08C33978049F00AE
:1001400007309000FF3083169500811383128A11C7
:100150000A12312C561EAE288717AF288713D61DDA
:10016000B3288715B4288711561DB8280715B92854
:100170000711D61CBD288714BE288710561CC2281C
:100180008716C328871208000717C6280713C82830
:1001900008006430D00048200330D600AA20C420D4
:1001A0000530D00048200330D600AA20C4200130FA
:1001B000D00048200330D600AA20C4200130D0004F
:1001C00048200230D600AA20C4200130D0004820A8
:1001D0000230D600AA20C4200130D00048200E30C2
:1001E000D600AA20C4200130D0004820D601AA2081
:1001F000C4200130D00048200830D600AA20C420F6
:100200000130D0004820D601AA20C4200130D000FF
:1002100048200C30D600AA20C4200130D00048204D
:10022000D601AA20C4200130D00048200630D600D4
:10023000AA20C4200130D0004820D601AA20C42022
:100240000130D00048200130D600AA20C42002305E
:10025000D00048208A110A12322CD601AA20C420CC
:100260000230D600AA20C4200230D00048208A11D3
:100270000A12332C520ED3000F30D305D2051030A2
:100280005307D400D600AA20C42010305207D4004F
:10029000D600AA20C4202130F700F70B4D29080012
:1002A000831603178C170C140000000083120C082F
:1002B0007F39031994290313CF0003170D08031383
:1002C000D00003170F080313D1004F08D2003A21C2
:1002D000500803178D000313510803178F0083166E
:1002E0008C170C140000000083120C0D0E0D7F39CA
:1002F000031994290313CF0003170D080313D0002B
:1003000003170F080313D1004F08D2003A215008F9
:1003100003178D000313510803178F008D0A03196B
:100320008F0A031350290317031308005008003ADB
:100330000319A429013A0319A529033A0319A82985
:10034000013A0319AB29AE29AF294030CF07AF29B5
:100350001430CF07AF295430CF07AF29AF298030F1
:100360004F07D2005208D300530EF7000F30F705A5
:1003700077080F39D50053080F39D4005508D60037
:10038000AA20C4202130F700F70BC4295408D60056
:10039000AA20C4202130F700F70BCC290800CF0198
:1003A000D00196210800373003178D0000308F00F0
:1003B000031350210800CF21D321CF010130D000F9
:1003C0009621D321CF210800D01BF6290F30F7004A
:1003D0004F0EF7050A3077020318F1293030F7077E
:1003E000F3295008F7077708D2003A210F30CF05DC
:1003F0000A304F020318FE293030002AD01350086B
:10040000CF074F08D2003A210800CC01DB21061E9D
:10041000622ACF01D00196214A08840083134B1829
:10042000831780080319262AD0010408CF00501032
:10043000831B50140008D2003A214F088400831314
:1004400050188317840A0319850A112A4C08CF0013
:100450005730D000E421CF010130D00096214C0864
:10046000CE00CD014D08073C031C4A2A4D08043C30
:10047000031D3D2A2030D2003A21CE1F432A3130BD
:10048000D2003A21462A3030D2003A210310CE0D54
:10049000CD0A322A8619522A0310CC0D4C100A308C
:1004A000D000482006195A2A0310CC0D4C140A30EB
:1004B000D0004820861D5D2A061D5A2A0A30D00029
:1004C0004820072A0A30D0004820061E652A0A3034
:1004D000D00048204C08F800080085166F2A702AC2
:1004E0000000051283160512752A762A0000831271
:1004F00085127A2A7B2A0000080083160516802AB6
:10050000812A000083128516852A862A000085121A
:10051000892A8A2A00000800051283160512902AEB
:10052000912A000083128516952A962A00008512CA
:10053000992A9A2A00000800CF014F08063C031CA4
:10054000AA2ACE1FA52A7D22A62A8C220310CE0D10
:10055000CF0A9D2A0800CE0183160516AF2AB02ABD
:10056000000083128516B42AB52A0000051EC12A90
:10057000B92ABA2A0000CE0A4E08643C0319C12ADF
:10058000B62A8512C32AC42A0000C62AC72A000038
:10059000051283160512CC2ACD2A000083124E08BC
:1005A000643C031DE82ACF01D001962132300317A5
:1005B0008D0000308F00031350210430CF00FA303B
:1005C000D0004820CF0BDF2A0130F800EB2AEB2ABD
:1005D0000030F800EB2A0800051283160512F02AF5
:1005E000F12A000083128516F52AF62A00008316E8
:1005F0000516FA2AFB2A0000831208006D224A0819
:10060000CE009C228C22AB22F80803190B2BEC2283
:100610000130F800732BCC014C08073C031C192B4C
:10062000CB1F142B7D22152B8C220310CB0DCC0A53
:100630000C2B85161B2B1C2B000083160516202B5C
:10064000212B000083128512252B262B00008516F6
:10065000292B2A2B00000512831605122F2B302B75
:10066000000083128512342B352B00004A08CE007F
:100670009C227D22AB22F8080319422BEC22013088
:10068000F800732BCD01CC014C08073C031C622BF6
:100690000310CD0D83160516831285164F2B502B94
:1006A0000000051E562B0130CE00572BCE018512BF
:1006B000592B5A2B00004E08F800F808031D4D1462
:1006C000CC0A442B83160516652B662B000083127B
:1006D00085166A2B6B2B000085126E2B6F2B00008A
:1006E000EC224D08F8000800CB01CA018618CA0A9E
:1006F0004A0824020319862B4A08A4000A30D000B5
:100700004820CA08031D862B0330CB00CA010618F7
:10071000CA0A4A0825020319972B4A08A5000A307D
:10072000D0004820CA08031D972B0430CB00CA0113
:100730008619CA0A4A0826020319A82B4A08A600E5
:100740000A30D0004820CA08031DA82B0130CB0076
:10075000CA010619CA0A4A0827020319B92B4A080E
:10076000A7000A30D0004820CA08031DB92B023068
:10077000CB00CA01061ACA0A4A0828020319CA2B62
:100780004A08A7000A30D0004820CA08031DCA2B17
:100790000530CB004B08F8008A110A12E52C6D22B7
:1007A0004A08CE009C228C22AB22F8080319DC2BCD
:1007B000EC220130F8000B2CCD014D08073C031C46
:1007C000EA2BCB1FE52B7D22E62B8C220310CB0DD1
:1007D000CD0ADD2BAB22F8080319F22BEC220130F5
:1007E000F8000B2CCD014D08073C031C002CCC1F3E
:1007F000FB2B7D22FC2B8C220310CC0DCD0AF32B7E
:10080000AB22F8080319082CEC220130F8000B2C5D
:10081000EC220030F8008A110A12262D840183137D
:100820001F3083050130A400A500A600A700A80082
:10083000AA01A901AB00FF30AC0083160317090819
:10084000C039890003131F129F120030031788005C
:100850008312870188018901C8300313D000482022
:100860005D28C9282D29403003178D0000308F00E6
:10087000031350210430CA00FA30D0004820CA0BBC
:100880003C2CCA01CB013630840083134A0884070C
:100890004B080420800000380319512CCB0ACA0AE7
:1008A000432CCB013630CA0005227808A000CA01CB
:1008B000CB013630840083134A0884074B0812208A
:1008C000800000380319672CCB0ACA0A592CCB01C7
:1008D0003630CA0005227808AE00CA01CB01363096
:1008E000840083134A0884074B08222080000038C4
:1008F00003197D2CCB0ACA0A6F2CCB013630CA00F3
:1009000005227808AF002E08B00086160A30D00005
:1009100048202008CA003008CB00FE227808B10029
:10092000B500DB21CF01D00196213008CF00373050
:10093000D000E4212030D2003A213108CF003730F6
:10094000D000E4212030D2003A210630CF00D0017F
:1009500096213108B400B3013308073C031CC42CB2
:100960003308043C031DB72C2030D2003A21B41FB9
:10097000BD2C3130D2003A21C02C3030D2003A2187
:100980000310B40DB30AAC2C0630CF000130D000F8
:1009900096213508B400B3013308073C031CE42C4E
:1009A0003308043C031DD72C2030D2003A21B41F59
:1009B000DD2C3130D2003A21E02C3030D2003A2107
:1009C0000310B40DB30ACC2C742B7808B200320893
:1009D000033C031DFB2C2F083002031DF22C2E08B4
:1009E000B000F32CB00A2008CA003008CB00FE2269
:1009F0007808B100B5003208043C031D0F2D2E0805
:100A00003002031D062D2F08B000072DB00320086B
:100A1000CA003008CB00FE227808B100B500320BC6
:100A2000142D0310B50D35103208023C031D1B2D8B
:100A30000310B50D35143208053C031D2D2D20087B
:100A4000CA003008CB003508CC00CF2B2008CA00E4
:0E0A50003008CB00FE227808B100922C630023
:04400E00822CFF3FC2
:00000001FF
;PIC16F886
;CRC=3FC4 CREATED="10-3-15 21:36"

以上、備忘録かわりです。

面白そう、

いろいろと考えてみて、単なる1素子のI2Cのコントローラだけでなく、
組み込み用のI2C制御マイコンみたいなコンセプトで考えてみても面白いかな〜っと思っています。
というのも、あらかじめレジスターへのデータの書き込みテーブルを用意しておいて、
任意のキーを押されたら、そのテーブル値をI2Cデバイスに送信できるようにするものです。
こうすれば、簡単にI2Cデバイスをつかって機器がくめそうです。
テーブルの書き込みも、少し面倒ですが、スイッチをつかってパチパチと入力してやれるようにすれば
いいでしょう。
 たぶんあまりイメージは伝わらないと思いますが(笑)。

機能は

こんな感じでしょう。
1.I2C素子の評価モード
  指定したI2Cアドレスの素子のレジスタに任意のデータ値を書き込めるモード。
  いわゆる一番最初に書いたI2Cコントローラと同じ機能です。

2.プログラムモード
  PICのIO端子(Bポート)に入力されたときに、I2C素子に送り出すための
 データをあらかじめ準備するものです。使用するIOポートをBポートすべてとすれば、
 全体で8端子あります。データは1セットで、
  押されるIO端子、I2Cデバイスアドレス、レジスター、データ
 の4バイト構成です。PICの場合はEEPROMが256バイトですから、約60セットのデータ郡が準備できます。
 IO端子8本に平均的に割り付けてもIO端子1本あたり、7〜8セットのデータが準備できるので十分でしょう。

3.実行モード
  これは2.のプログラムモードで準備したデータを、あとは押されたIO端子に応じてI2Cデバイスに送出するだけです。

4.実行デバッグモード
  基本は3.と同じですが、実行状況をLCDに逐次表示するようにします。

あとは、8kバイト程度のPICにこれだけの内容が盛り込めるかどうです。
入らなければ機能削減で対応かな〜。


あたらしいファームをつくってみましょう。 2015.12.19

PICのEEPROMにデータを書き込むとすると、操作ボタンが5つ程度では極めて面倒そうなので、
すこし多めのスイッチがあつかえるファームを作ることにしました。
ボタンの間隔が不均一な理由はのちほど。

新しいファームをつくっています。

発想をかえて・・・・
 2016.8.25

いままでI2Cコントローラはスタンドアロンでつくろうと思って、基板にSWやLCDを載せて実現しようと思っていましたが、
大抵の場合、机の前にはPCがあります。ということは、そのPCをつかってコントロールする基板をつくった方が入力なども
簡単そうです。
 ただ、問題はPCとのインファーフェイスとなるとUSBをつかうのが便利なわけですが、USBを直接コントロールするソフトをつくると
なるとPC側のソフトもそれなりに作らないといけないので、反対に大変になってしまいます。
 というわけで、PCとの接続はUSBをつかいますが、その中間インターフェイスにFT232をつかって、一旦RS232のシリアルインターフェイス
に変更した上で、PICで受けることにしてやりました。FT232は秋月で安価に手にはいりますし、FT232のWINDOWSのドライバも
PCには常備されているようなので接続するだけで認識可能です。
 そしてPC側のソフトはTERA−TERMあたりをつかえばいいな〜と思っています。
 ということで、思い立ったら吉日で手元にある基板で組み立て始めました。

こんな感じで小型のI2Cコントローラを考えています。


中間インターフェイスにはFT232を使います。

コントローラ完成? 2016.8.27

まずは完成です。あとはソフトを書いていきましょう。

表側です。


裏側です。


コントローラは手持ちのPIC16F88をつかってみましょう。


備忘録の回路図です。

動かしてみましょう!

I2Cで動くデバイスをつないで、動作させてみましょう!とりあえず手元にあったCS8416を使ってみました。


CS8416を使っての動作確認です。


こんな感じで動いています。

こんなご意見も 2016.8.28

I2Cでの制御デバイスとの通信方法については、こんなご意見もいただきました。


たしかに、PICにはUSBとの直接接続できる機能がありますが、残念ながらPC側でのソフトを組む自信がありません(汗)。
RaspberryPiを使うのも一考ですね。最近遊んでいるichigoJamなんかもI2Cの制御ができるので、色々なデバイスが試せそうです。

今回は

今回は、最終的にはすこしちがった使い方をイメージしています。というのも、I2Cの制御パラーメータを色々ろいじったあとは、
それらの内容をPIC内のEEPROMに書き込んでおいて、その後はPIC単体で動作させるようにしようと思っています。
すなわち、PICのBポートにスイッチを接続しておいて、あるスイッチを押せば、特定のI2Cコードを送出し、同時にPICの
IOポートにも特定の値を設定できるようにしようと考えています。さすがにLCDの制御を行うことまではできませんが、
単純な入力スイッチと出力ポートの制御のI2Cデータ送出が簡単に設定できるように、すなわちPICに簡単なIO制御用の
OSを載せてやろうと思っています。

 これにより、I2Cデバイスを用いる場合でもいちいちマイコンにプログラムをしないで使えるようにすれば何かと便利かな〜とおもっています。
厳密にはI2Cパラーメータを設定する必要がありますので、ある意味ではプログラムは必要ですが、いわゆるC言語でプログラムを
組んで、コンパイルしてマイコンで書き込むといった作業はなくなることを目指しています。

ということで、こんな基板を作ってみようかとおもっています。まあ、これだけでは完全に非オーディオネタです(笑)。

こんな感じの制御の基板です。


実際にはユニバーサル部分も一緒です。でないと、被制御側のICがのらないですからね。

小型用も 2016.8.30

18pinのPIC用の基板も描いてみました。

かなり小ぶりの基板です。

こんな感じで基板を作ってみましょう。

基板ができあがりました。 2016.9.5

28PinのPIC用です。


こちらは18PinのPIC用です。

一気につくってみました。
これらは部品点数も少ないので一気につくってみましょう。
必要なのはソフトの製作ですが、これはどこでもできるので、また帰省先でもとりくみましょう。

I2Cコントローラの「大」基板です。


I2Cコントローラの「大」基板の全体です。お出かけ用にパチリです。


こちらは小さいPIC用です。

ソフト作成完了! 2016.9.12

週末に帰省先でシコシコとソフトを作ってみました(笑)。
動作確認中ですが、一部パターン忘れを発見です。LEDを点灯させるための抵抗のGNDへの接続が
1箇所抜けていました。これらを接続しして一応完成です。


一箇所抜けていました。


抵抗の片側をGNDへ接続します。

(その2につづく)