続・GPIO (sysfs) を使ったソフトウェア I2C
なんかうまく AVR だと動かなかったりしたので、カっとなってテストを充実させた。(動くようになった)
とはいえ、コード上でテストだけ書いてもよくわからないので、可視化させながらやった。つまり時系列にバスの動きをシミュレーションできるようなコードを書いた。Ruby で cairo が結構かんたんに使えたので良かった。Time.now によってグラフを書いているので、多少ゆらぎがある。しかしこうすることで、意図せず状態を変えてしまっているのが一目でわかるようになったので大変役にたった。
例えば、i2cset のテストの場合
i2cget のテストの場合
見ての通り get のほうが複雑、というのも get するためにどのアドレスを get するかを書かないといけないから……
オシロスコープでの実際の波形
テストと同じデータの送受信 (対 AVR)。波形を綺麗にするために速度を 1kHz 程度に制限して (周辺処理に時間がかかるので最終的に400Hz程度だけど) sleep をちゃんと入れるようにしている。速度は下がるけど波形は綺麗になる。時間の単位さえ気にしなければ I2C 動いてる感がある。
i2cset
i2cget
AVR での repeated start condition in slave
AVR 向けだと repeated start condition を発行したとき AVR がハングする問題があって、解決方法がわからないので stop condition を常に挟むように実装を変えた。MPL115A2 だと普通に動くんだけど……
関連エントリー
- Linux 上の LL で I2C する (Ruby) なんとなく i2c-dev.h とかで定義されているAPIを呼ばないと使えないのかなあと思っていたけど、デバイスファイルの読み書きと ioc...
- AVR TWI (I2C) 用のライブラリ そこそこ使いやすい感じなのを学習しながら書いてみた。 https://github.com/cho45/avr-utils/blob/mas...
- GPIO (sysfs) を使ったソフトウェア I2C 普通の GPIO 経由で I2C できたらなんとなく嬉しいかなと思って作ってみた。つまりソフトウェアでピン状態をいじって I2C 通信すると...
- AVR で USB 接続の PC キーヤーを作る PC からモールス符号を発生させて無線機に入力するものが欲しいと思っていた。当然既にそういうのはあるんだけど、どうも気に入るのがないので、必...
- マイコン周りのシリアル通信プロトコルまとめ なんかいろいろあって??ってなるので特徴を覚え書き。線は信号に関係するものだけ (普通は +VDD が必要) 名前 線 特徴 速度 備考 1...



