RxD が LCD バックライトの PWM に使われていたりする。TxD は、空いているような気がするが、カーネルメッセージを垂れ流していたりしそう。I2C は、FMラジオ(大概オプションになっている) 接続に使っているので、使えるのだ。
I2C 経由で付けてみたいデバイスは、Bluetooth , キーパッド(or フルキーボード) , GPS , Gセンサ , 温度/湿度計 , 電圧/電流計 ぐらいか。
温度/湿度計 は ロギングが目的なのだが ... バックライト OFF でいったいどれぐらいバッテリーが持つのだろう? 一度ちゃんと調べてみたい。
A-33 で ちょっとやってみている。5 時間で 目盛り 1 つ減っただけ。11 時間で目盛り2つ。14 時間で目盛り 3 つ減った。だが 15時間は持たなかった。
ちなみに、状態は LCD のバックライトを Off にして IDLE 状態。サスペンドしているわけではない。400mAH の容量を 15時間で使うとすれば 平均 26mA 流れていることになる。.. これはまぁそんなものか。
-- ただどうもおかしい。1 時間ほどで Full 充電になった。今度は A-41 でやってみる。
そういうものにデバイスを付けたい場合、マイクロコントローラでスレーブI2C デバイスを作り、シリアルなどに変換してやる必要がある。
一例として、RS232C を付けたい場合どうしたら良いのか考察してみる。
I2C の性質について
- I2Cスレーブは、マスタが決めたタイミングで データを返さないといけない。だから、データが用意できるまでホストを待たせるようなことはできず、既にあるデータしか返せない。
- データの受け取りも同様で、バッファリングできる分しか一時には受け取れない。
- READ/WRITE はパケットの属性で、SPI のように コマンドを送っての READ という操作はできない。
ただし、複数のパケットの送受信を連続して行うことはできる。 - 送られたデータの受け取り拒否はだけはできる。WRITE の場合、スレーブは、バッファ以上のデータを受け取らないことはできるが、READ で 存在しないデータの READ が来てもなんらかのデータを返さなければならない。
こういう性質のもので、一般に 多数の機能がある I2C スレーブ IC などは次のような使い方をする。
- WRITE する場合、レジスタ番号(or ファンクション番号) を 第一バイトに設定する。次からのデータは、レジスタに書き込むデータ(or その機能に対して送るデータ)。
- メモリのようなデバイスは、第二、第三バイトにアドレスを設定し、そこから後にデータが続くような使い方をする。
- READ の場合は、すべてのレジスタを順に送るタイプがある。
- 最初に レジスタ番号だけ WRITE して、それから READ を行い 該当レジスタのデータを送るようなタイプもある。
- メモリのようなデバイスは、最初に アドレスだけ設定して データなしの WRITE を行い。次の READ で 該当アドレスからの READ を行う。
プロトコルの基本的な設計
さて、RS232C はストリームなので、アドレッシングの機能は必要ないのだが、バッファーは FULL になる場合が出てくる。READ も同様で バッファーが空のときどうするか考えないといけない。
とりあえず、
- 制御とかする必要があるので、第一バイトは ファンクション番号とする。
- READ も複数のデータの種類があるので ファンクション番号だけの WRITE が、READ のデータの種類を 設定する機能と定義
ということにしておこう。
バッファーの 制御については、
- WRITE で FULL になったら NAK を返し受け取り拒否
- READ の第一バイトは、最大データ数として データが続く。空になったら 不定のデータを返す。
こんな風にしておけば良さそう。
制御については、
- 多バイトのコンフィグレーションレジスタを定義する。
- 1 バイトしか WRITE しなければ 1 バイト目だけを変更する。
- 後ろの方のバイトに あまり使わない機能を置く。
こんな感じで設計すれば良いだろう。
上記を基本の設計として、すこしモデファイすることにする。
READ で、READ のデータの種類を設定するのに、ファンクション番号だけの WRITE を使うと書いたが、READ のデータの種類を 1 種類にして、WRITE を不要にする。
- ステータス(1バイト) -- READ 可能なバイト数 -- 実際のデータ
という風にひとつづきにして、ステータス だけが必要なときは 1 バイトの READ を行う。
どれだけ READ できるか知りたいときは、2 バイトの READ を行い、あらためて データの READ を行う。
大きなバッファーを用意して その分を読み込み 有効な データを 後で知るという使い方も OK 。 - WRITE バッファーの残量をステータスに含めたいところだが、Xon/Xoff のように 1/3 以下になったら bit を立てるというものでも制御するには十分だろう。
プロトコルの詳細な設計
上記の考察をもとに 詳細を決めていこう。
(後述)
どんなマイクロコントローラを使うか
普通なら AVR を使うとして、Tiny2313 で 作れそうな内容。ただバッファーが少ない。GPS などはそれでも十分だろうが、Bluetooth では足りないかも知れない。まぁそういうときは、Mega328P を使えばよい。
ついでに書くと I/O エクスパンダなどは、I2C の線に 加えて 割り込み用の線を持っている。普通だとポーリングするしかないのだが、割り込みを使えれば、オーバヘッドと応答性能を改善できる。
普通と書いたが、USB Bluetoothドングル を使うなら、PIC24FJ64GB002/PIC24FJ32GB002 を使うことになるだろう。
プログラムが作り易く、コンパクトで USB HOST の機能を持っているのはこれぐらいしかないので、これ一択になるはずだ。
I2C スレーブの機能もあるし、メモリも多いので、十分だろう。
おまけ TI の キーパッドスキャン IC TCA8418
I2C は、低速のデバイスを接続するなら十分。キーパッドを付ける専用の IC も出ている。
この IC は、8 ROW x 10 COL で 80個までのキーを扱える。ちょっとデータシートを見てみたが、キーの状態を読み取れるが、キーの PRESS / RELEASE イベントを発生させ 10 個まで FIFO でバッファリングできるようだ。
RS232C の実装でヒントがないか -- バッファリングの部分をチェックしてみようと思う。
おなじような キーパッド制御をするプログラムを書くときにも プロトコルが参考にできそうだ。
( このチップ自身は BGA なので、個人では使えない )
たぶんこういうのも Tiny2313 でぎりぎり実装できるのだろう。
キーの数がすくなければ、14 pin の Tiny44A も使えそうだ。
メモ:I2C 経由で付けてみたいデバイスについて
Gセンサ:
3軸加速度センサモジュール MMA7455L(ディジタル出力 とか 3軸加速度センサモジュール KXP84−2050 とか。-- MMA7455L なら直結できる。
温度/湿度計:
Sensirion 1チップ温度・湿度センサ [SHT-11] とか。-- これも I2C
温度計:
アナログ, I2C 多くの種類がある。I2C だと以前記事にした I2C温度計のつかいかた
電圧/電流計(ADC):-- 高精度・低速なADC をイメージしている。
AVR でも良いのだが、精度がよい基準電圧が課題。I2C の ADCもある。MCP342x とか。
キーパッド(or フルキーボード) :
BlueTooth も良いが、有線だと消費電力を減らせる。
専用IC は種類が少ないので AVR とかで組む。
キーパット(4x4)[KEYPAD-4X4] とかを接続。(キャップだけ入手できると嬉しいが..見つけられていない)
Bluetooth:
wii 用 bluetooth モジュール , 格安 Bluetooth ドングルの記事は、I2C 経由での接続をイメージして書いている。
wii 用 bluetooth モジュール(たぶん RS232C)が使えると良いのだが...
GPS:(時刻も分かる)
GPSモジュール[G591] とか。-- RS232Cが一般的。
https://wakelet.com/wake/_MVAlcilsuZxxnS71_YhF
https://wakelet.com/wake/9pz8pXPAJmoeHUr8r_qlu
https://wakelet.com/wake/0A1_C2C1gOsF0H9IUbPYz
https://wakelet.com/wake/8Iumowq2RZ5S34gqZ0w8o
https://godkunsnazaga.wixsite.com/tenettoilia/post/death-note-english-subtitles-downloadl
https://wakelet.com/wake/jsJV6iFIHEIUI2dRBbtBU
https://wakelet.com/wake/icwFMnVEkbLOWJCrwmnha
https://trello.com/c/2u4AJux2/12-torrent-querys1392005387408118614-keygen-file-pc
https://ducreyfunne.weebly.com/3-idiots-2-full-movie-tagalog-version-of-let-it-go.html
https://vomicaldi.mystrikingly.com/blog/cyberplanet63premiumfullcrack211
https://sistematizm2015.wixsite.com/kaahighkilpo/post/activation-lumapix-fo-software-exe-32
https://seesaawiki.jp/synchdigglihu/d/Nightmare On Elm Street Collection Torrent Mkv 4k Dubbed Mp4 zhuahenr