arduinoを2台使ってTWI通信の実験をしてみました。

右側はreduino-nano、左側は自作のシリアル版
arduinoです。
シリアル版の方はreduino-nanoのVccとGNDから電源
を取って動いてます。2台持っていれば、ブレッドボード
上でこんなことも簡単にできちゃいますね。
白い線と黄色い線がTWIの信号線です。
信号線のプルアップ用抵抗(4.7kΩ)は
ブレッドボード上に置かれてます。
reduino-nanoの方はarduino-IDEでスケッチを
作ってアップロードしたもの。
シリアル版arduinoの方にはAVR-studio上で作った
アセンブラプログラムを書き込んで使いました。
(AVR-ISPmkⅡでの書き込みが必要です)
arduinoのスケッチのお勉強というより、TWIを
アセンブラでアクセスするためのお勉強です。
この間描いた↓このスキームの確認が目的です。

マスター側をarduino-IDEで、スレーブ側を
アセンブラで組んでいます。
マスター側に何バイトかのデータを用意しておいて、
これを1バイトずつ区切って送信します。
(START→SLA+W→DATA→STOP をデータ数の分
繰り返し送りつづけるという形に区切って送信)
スレーブ側は、自アドレス宛のデータを1バイト分
受信するたびに、それをシリアル送信で出力し
PCのシリアルソフト(tera termを使いました)で
受信して表示。
マスターから送ったものと比較して、抜けや化けが
無いことを確認してみました。
どうやら、上手い具合に動いています。(≧v≦)σ
ここまでは想定どおりにサクッと動きました。
よかった、よかった。
心配していたのは、スレーブ側の処理時間を長く
取った時に「クロックストレッチ」がきちんと
働くのかどうか。
もう少しきちんと確認してみないとなんとも
いえないのですが、幾つかのバリエーションで
実験してみた範囲ではクロックストレッチが
上手く働いているように見えます。
一方、1回の送信で複数バイトのデータを送ろうと
すると、なんとなく上手く行ってないような…
複数バイトというのは、START→SLA+W→DATA
DATA→DATA→…→DATA→STOPといった流れで
データを送る場合です。
何が原因で通信が止まっちゃうのかが目下不明。
こういうときにシリアルアナライザがあると
いいんだけどなぁ…
というわけで秋月さん、ぜひpic-kitシリアル
アナライザ、仕入れてくださーーーーい!
実験に使ったスケッチとアセンブラソースは、
近いうちにarduinoの別館サイトの方にアップして
おきます。



|