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



ここ数日、2台のarduinoでTWIの通信テストを
しています。
また今もちょこっと続きをしてみました。

1台はarduinoのIDEでデータ送信をする
スケッチを書き、それをアセンブラで書いた
プログラムを書き込んだもう1台のarduino
側で受信し、受信したデータをUARTで
表示するという処理をしています。

arduino-IDEで書いたスケッチは単純
ですし、アセンブラ側のプログラムは
シミュレータで動かしてみたところ思った
とおり動いているのですが、実機で動かすと
上手く動きません。

なんとなくそれっぽいデータは流れているん
ですが、tera term画面上に表示される
文字列がなんだかおかしい…
データの個数が…


うーん、なんとなくTWI上を流れている
データの内容がおかしい気もするし、
そうでは無い気もするし…

やはり通信内容を直接アナライザで拾わ
ないと、これ以上の原因追求はなかなか
難しいなぁ…。

いずれにしてもやはり、実機デバッグの環境が
無いとこういう時には厳しいなぁ。

JTAGICE-mkⅡにしても、
シリアルアナライザにしても、その手の
機器を使わずにテストをするっていうこと
自体は「本来形」じゃぁないからなぁ…

USARTやSPIは操作が簡単だから
机上デバッグでもある程度絞り込んで
いけると思うんだけど、TWIともなると
やっぱりアナライザが欲しくなるなぁ…。

完璧な機能とまでは行かなくても、ネコロジー
にTWIの簡易アナライザ、もしくはバスモニタ
程度の機能はつけてみようかな?

当然PC側ソフトでの対応が必要になるわけですが、
VBであまりゴチャゴチャしたプログラム組むのは
好きじゃないしなぁ。VBのIDEは、ちょっとした
プログラム作るにはいいんだけど、長いプログラム
組むにはなんだか使い難いしなぁ。

うーん。
なんだかんだで、PICkitシリアルアナライザ
が一番安いのかな?そもそもこれって、単なる
モニタとしてつかえるのかな?



コメント ( 0 )




arduinoでTWI接続をする実験の続きです。

1バイト毎に区切って送信すれば上手く行くという
ことに気を良くしていたのですが、もう少し処理の
タイミングをシビアに行ってみようと思い、
送信側のスケッチを見直してみました。

送信側スケッチの処理中に、UARTでモニタ宛への
出力を行っていて、これが送信タイミングを少し
遅めていることに気付いたので、モニタ宛への表示
をコメントアウトしてみました。

すると、受信側がデータの取りこぼしをしてしまう
ことに!

受信側では、1回の受信ごとに時間稼ぎ(60μ秒
程度)のから回しをしているのですが、
この時間稼ぎのことを送信側にうまく伝えられて
いないようです。

60μ秒というのはそれほど大きな意味があるわけ
ではなく、スレーブ側の処理が忙しい時にデータが
たくさん送られてきた場合、「忙しくてデータが
受け取れませんよ」、ということを送信側も検知
できるようにしたいだけなのですが…

送信側CPUが無尽蔵にデータを垂れ流している
状態で受信側がデータの取りこぼしをするようだと、
通信処理にはかなりの制約が生じてしまうので
なんとか上手いタイミング制御が出来ないかを
画策しているのですが…

現状でも1ミリ秒に1回程度の受信なら何の問題
も無いのですが…
1ミリ秒ではNTSCの1フィールド表示の間
(約1/60秒)に16バイトしか送信できない
ことになります。

実際はさらに速い速度でも取りこぼしは起りませんが、
いずれにしても気に入らないのは送信側の送信処理で
時間稼ぎを都度行わないとならないという制約。

希望としては、マスター側からTWI本来の通信
プロトコルでデータを延々と送りつけて、それを
上手く入力してくれないと使い勝手が…

処理上、なにか上手い具合にタイミングを調整することが
出来ればよいのですが…

1バイト送るごとに、リターンコードを返してもらう
っていうのは上手く行くかのかな?

確かTWIではクロックもマスター側で生成していたと
思うんですが、スレーブ側からクロックストレッチを
おこなう(スレーブ側の処理時間の都合でクロックを
引き延ばす)ことができるのかどうか…

gccにしてもarduinoにしても、PICのCCS-Cに
しても、いずれの高級言語でもTWI(I2C)を
使うこと自体は簡単なのですが、やはりアセンブラで
TWIを込み入った事情まで考慮してコントロール
し尽くすのはなかなか難儀です。

そういえば、1回のSTART~STOPで複数バイトのデータを
送信するのもうまく行ってないしなぁ…。

SPIなら処理はもっと簡単に済むんだけど、通信速度が
TWIよりもさらに速いので、NTSC走査線1本で
1バイトの送受信となると、やはり送信側でフロー制御を
しないとならなくなるのでイマイチ。

いずれにしても、もう少しTWIの中身のお勉強を
しないと、太刀打ちできそうに無いなぁ…。



コメント ( 0 )




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の別館サイトの方にアップして
おきます。



コメント ( 0 )




arduinoの公式サイト曰く、来週中に公式サイトを
移転すると表明しています。

ここのところ、サーバーが度々ダウンしていたこと
に因る物かと思われます。

公式サイトの運用をしている方々は引越し作業で
大変だろうとは思いますが、陰ながら応援させて
いただきたいと思います。

(具体的に何か出来るわけではないとおもいますが…)

ドメイン自体が変わるかどうかはよく判りませんが、
多分近々アナウンスがあるのではないかと思われます。



コメント ( 0 )




http://shop.tsukumo.co.jp/search/?referer=header&return_url=&category=&keyword=chumby080904

ツクモでChumbyが予約開始だそうです。
10月入荷予定とのこと。

うーん、かなり弄ってみたい!

29800円かぁ。



コメント ( 2 )



« 前ページ 次ページ »