「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



山根さんの本を読みながら、AVRのTWI(I2C)i/f
のデータと処理の流れについて整理していました。

gccやarduino等のコンパイラを使ってしまえばそれほど
難しいものでもないのですが、アセンブラで組むとなると
状況はちょっと違ってきまして…

というのは、以前TINY2313用に作ったスプライト
表示器や背景表示器↓
http://picavr.uunyan.com/avr_m_sprite.html
http://picavr.uunyan.com/avr_m_bg.html

をMEGA48用に作り変えつつ、TWIi/f対応かつ
カラー表示にも対応しようかと思っていて…

これらはシビアなタイミングで動かさないといけないので、
NOP命令などで1クロック単位でタイミング調整しながら
動いている代物。当然フルアセンブラなんです。

USARTならダブルバッファが効いていているし、
制御は物凄く簡単に済ませられるのですが、TWI
(I2C)となると話は別。通信プロトコルを
1ビット単位で解ってないと…。

というわけで、改めて山根さんの本の解説文やサンプル
プログラムを熟読し、データと処理の流れを理解
し直してました。

とりあえず、バスマスター側(こっちは高級言語で良い)
とスレーブ側(こっちは上記のとおりフルアセンブル)と、
その間を流れるTWIバス(I2Cバス)上の電圧の状態や、
バスを更新するのがマスタなのかスレーブなのか、
それはソフト側で処理するのか、内蔵ハードが勝手に
処理してくれるのか、等など、かなり厄介なことを図に
まとめてみました。

あ、そうそうすみません。AVR専用です。さらに、
ハードウェアTWI登載機だけです。
(USIのTWIモードはクロックもマスター側が
ソフトで生成する必要があるとか、スレーブ側は
スレーブアドレスをソフトで判別しないとならない
とか…色々制約があって正直実用性に乏しい…)


マスターからスレーブに1バイトのデータを送信(書き込み)
する時のスキームです。2バイト以上続けて送る時には
色が濃くなっているところを繰り返すだけ(のはず)です。

この図だけご覧になっても「なんのこっちゃ」だと思うので、
いずれサイト上に解説付きでアップしておきたいと思います。
(①~⑦がなんなのかも書いてませんし…)

まぁ、私の頭の中はかなりすっきり整理できました。


山根さんの本だと、マスター側はマスター側だけ、
スレーブ側はスレーブ側だけで分けて描かれていたり、
解説文が「マスター」の話なのか「スレーブ」の
話なのか明示されていなかったり(主にマスター側の
処理が書かれているのですが)と、なかなかか
解読が大変だったのですが、こんな風に整理しておけば
ひとまずデータ送受信処理をプログラムする際の情報
として役に立ちそうです(アセンブラでも)。

ちなみに、エラー処理は全然考慮してません。
(ステータスが多すぎて…)
マルチバスマスターの調停なども考慮してません。
(処理の枝分かれが多すぎて…)


いずれにしても、山根さんの本に纏められている
表4-6-1~表4-6-4のステータスコード一覧
は便利。
さすが本のタイトルに「リファレンス」を謳っている
だけのことはあります。

書き込みはこんな感じで良いんですが、この逆にデータを
読み出す場合はさらにもう少し厄介な処理が必要なんですよね。


最終的には、スプライトや背景表示を、シリアルEEPROM
のICと同じようなアクセス方法で制御できるように
したいと思っています。そうすれば、gccやarduino
等からでも簡単に使えますし、シリアルEEPROM等も
スプライト表示器並行してバス上に並べて使うことも
出来ますし。

どうなることやら…



コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする




ここ1~2日、arduinoの公式サイトが繋がりにくく
なってましたが、回復したようです。

というわけで、シリアル版arduinoの基板などが
載っているページ↓
http://www.arduino.cc/en/Main/ArduinoBoardSerialSingleSided3

ここに載ってるやつを作りました。シリアル版なので
PC側には当然シリアルポートがないと繋がりませんが、
USBシリアル変換器を使えば普通にarduino-IDEと
通信できます。

ページ右の方にある白い電解コンが問題の無極性タイプ
というヤツです。10uF。
多分内部では2つの電解コンが向かい合わせ
に直列接続されているのかなと思うのですが、デバイスの
中身には詳しくないので、想像の範囲ですが。
それ以外は特に珍しい部品はありません。

そういえば、3つ穴が空いていますが、これって
何に使われるんでしょうねぇ?一応穴あけ位置に
従って空けておいたんですが、使い道あるのでしょうか?

diecimilaなどにも穴がいくつか空いているんですが、
この位置とはまた違っているみたい…
何の穴だろう???



コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする