2017.5.14(前回まではこちら)GW中の帰省先ですこしいじってみました。いわゆる「プレ夏休みの工作」ですね(笑)。安い!amazonをみていると、安いモジュールが色々とみつかります。リアルタイムクロックモジュールが200円でありました。これに搭載されているDS3231だけでも、DIGIKEYで買おうとすると2000個単位でも500円くらいします。このモジュールにはさらにEEPROMも搭載されているのですが、これがなぜ200円で作れるのか不思議です。これがなんと200円です。ちなみに、こんな感じで売られいます。動くのかな?ちゃんと動くのかどうかまずは手持ちのI2Cコントローラでチェックです。I2Cコントローラ基板に取り付けてチェックです。問題なく動くようです。こりゃいい買い物かもです。頂き物のLEDがあったので、それをつかって時計を作ってみました。ダイナミック点灯としているのでトランジスタが結構必要でした。GWの工作の完成です!さて、I2Cコントローラのマニュアルを作らないと、そろそろ使い方を忘れそうです。2017.10.3秋月電子で購入したI2Cで動作するIOエキスパンダMCP23017を使ってみました。そのICは100円と安くていいです。DIPなのですこしパッケージが大きいので、DAC基板には使いにくいところはありますが、基板サイズに余裕があれば大いにつかいたいところです。I2Sで動くIOエキスパンダーとLEDをつけてみました。このIOエキスパンダは下表のようにすごく機能が豊富です。逆にどのようにつかうか迷ってしまいっます。実際につかうのはこのIOエキスパンダを単なる出力ポートで使用するとした場合、使うレジスターは4つだけです。最初のIODIRA,IODIRBはポートの入出力を決めるレジスターで既定値は入力になっていますが、ここにすべてゼロを入れて出力に定義します。あとは、GPIOA、GPIOBに必要なデータを書き込むだけです。使うレジスターは限られます。LEDを点灯させるだけの簡単なプログラムですが、これでも思うように動くとすこしうれしくなってきます。こんな形でデータを入れます。I2Cアドレスは「4E」です。LEDが点灯しました。マニュアル作成!ドラフト版ですがマニュアルを作成しました。マニュアルを作成すると、頭の整理にもなります。これから1週間ほど出張〜。作業がすすまないです。2017.10.12使い方の例についてはマニュアルにもに例題を入れていますが、ここではDAI9211をつかってみましょう。簡単にプログラムが組めます。ここでは押したボタンに応じてSPDIF0〜3、AUXIN0、AUXIN1、AUXIN2の7つの入力を選択して出力するようなプロググラムとしてます。SPDIF0〜3のときの出力フォーマットはI2Sとしてます。接続I2C-OSの出力とDAI9211のPICと接続してI2C信号を共有します。実際の接続した状態はこんな感じです。こんな感じで接続します。互いの基板にはI2C信号のプルアップ抵抗が付いているので、両方が動作するとすこし電流が流れすぎるのでI2C-OS側のプルアップを切り落とします。切り落としやすいパターンをつけています。I2Cのプルアップ抵抗がDAI9211とダブルのでI2C-OS側を切断しておきました。DAI9211では3.3Vで動作しているので、I2Cの制御信号のレベルも3.3Vにする必要があるのでマニュアルの5.(3)の3.3V動作に設定しておきます。あとはプログラムを書くだけです。テキストエディタ等で下記のようなプログラムをかきます。コマンドはマニュアルを参照してください。DIX9211のレジスターの設定についてはDIX9211のデータシートを参照してください。ON(AUXIN2)e動かしてみましょう!I2C-OSとDAI9211の両方に電源を入れて、I2C-OS側はPCとUSB接続してターミナルソフトを起動します。プログラムのロードです。”L"コマンドを入れるとプログラムロードモードになるので、あとはテキストを転送します。”L"を入力してプログラムロードモードにします。プログラムをテキスト転送します。正常に転送できれば、自動的にPIC内のEEPROMに書き込みされます。動かしてみましょう!まずは簡単にターミナル上からコマンド入力して動作させます。”X”を入力して起動します。電源ONで自動起動させる場合はJP3を短絡させておけばOKです。プログラムコマンドの容量は57行ですのでPICの容量(最大330行)から比べるとわずかでした。なによりも、C言語でプログラムを組むよりもはるかに簡単です。複雑な制御には向きませんが単純にI2Cデバイスをコントロールするには便利です。必要ならI2C−OS基板からPICをはずして、ターゲット基板(DAI9211等)に実装すればいいでしょう。2017.10.14つかっていてDAIの入力切替だけなら、このままでまったく問題ないのですが、たとえば出力フォーマットも変更可能なように、たとえば基板上のジャンパーピン設定に相当する機能があれば便利だな〜と思って、ソフトを改造することにしました。この改造はプログラムの構造にもすこし影響がでるのですこし時間がかかるかな。あと、1つのコマンドラインに使用するデータは今までは3バイトでしたが、今回の改造で4バイトになります。そのため1024ByteのEEPROMをもつPICをつかってコマンド行は最大250(以前は330)になります。250行もあれば十分ではありますが。プログラム改造完了!今回の改造でDIX9211をつかったプログラムを書き直しました。24Bite朱記のジャンパーピン機能により追加された部分です。MASKこの行はPORT-BのB9,B6をジャンパーピン機能として定義することを意味しています。1の部分がジャンパーピンとなるところです。24Bitここはジャンパーピンの状態によりI2Cデバイスに送るデータを定義しています。お茶目にこのプログラムでは切り替えを行ったチャンネルのLEDが点灯するようにしています。ON(SPDIF5)このままだと、単に点灯するだけですが、ちょっとお茶目にちょっとだけフラッシュさせようとしたプログラムが下記になります。LEDなんとなく無駄に長くなりますが、それでも全体のコマンド行は90程度ですので、PICのEEPROMの最大容量の250行から十分余裕があります。そろそリリースかな〜。