« PSoCでの超音波距離センサー | トップページ | 380モーター?? »

2010年11月 4日 (木)

ArduinoとPSoCとのI2C通信成功!!

ArduinoとPSoCとのI2C通信が成功しました!
3時間弱、格闘して、やっと成功したのです!うれしい!3時間弱なのにとーっても長い道のりだった気がします。

今回実験したものは
①ArduinoがマスタでPSoCがスレーブ
②ArduinoとPSoCにそれぞれLEDとスイッチを1つずつつなぐ
③ArduinoとPSoCとの間はGND、VDD、SCL、SDAの4本だけでつなぐ
④Arduinoのスイッチを押したらPSoCのLEDが点灯し、PSoCのスイッチを押したらArduinoのLEDが点灯する
こういう単純なものです。

今回、成功するまでのバグを書きます。
①PSoCのLEDにつなぐピンを間違えていた→直した
②PSoCで内部プルアップがうまくいかなかった→内部プルアップは外して外部プルアップにした
③PSoCでのスイッチ割り込みがうまくいかなかった→割り込みはせず普通の入力にした
④PSoCで②の割り込みの設定を消すときにM8C_EnableGInt;というコマンドも消してしまってI2Cができなくなった→消してしまったM8C_EnableGInt;を初期化の位置に追加した

いまだに②と③は謎のままです・・・(とりあえずI2Cができたので今回はこれでよし!)

これらの目的は
①超音波センサーからArduinoに信号を送る際に、アナログ電圧でするとノイズによって距離の誤差が増えてしまうのではないかと考え、デジタルだとノイズの影響が少ないので、I2C通信で送れるようにするため。
②Arduinoはアナログ入力が少ないのでIRセンサーもI2Cにできれば、4本だけをArduinoにつなぐだけでよくなるから。
なお、目的①のノイズの影響についてですがアナログが劣化するというのはあくまで想像です。ただ、ノイズに強くなると強いモーターが使えて、ノイズによる誤動作の心配がいらなくなるかなと。

マスターは1個の予定なのでたぶん競合の心配はいりません。(というかArduinoって競合調停の機能ってあるんでしょうか?どっちでもいいですが・・・)

あとArduinoのI2Cってたぶん再度開始条件って使えないんですかね?(こっちは外部EEPROM用)
停止条件のあと開始条件を出すしかない気がするのですが・・

« PSoCでの超音波距離センサー | トップページ | 380モーター?? »

Arduinoマイコン」カテゴリの記事

PSoCマイコン」カテゴリの記事

コメント

すごい進み具合ですね。
PSoC勧めた手前,うまくいってくれてほっとしています。

で,プルアップの②に関してですが,
http://blog.goo.ne.jp/toko0131/e/c0b84861be14e4663aac59770d4e9872
が参考になるかもしれません。

割り込みについては,よくわかりませんが,うちでは本の割り込みのところの通りでうまくいきました。

>PSoCの割り込みの設定は
>・マスクレジスタで「どのピンの変化を監視するか」を指定
>・ピン毎に「立ち上がり/下がり/両方の、どの条件で割り込むか」を指定
>できる。でもこれはPSoC Designerが自動生成してくれるので下手に触る必要は無い。
(橋本商会より)らしいので,他には特に何もしなくてもよかったはず。

あとは,
#pragma interrupt_handler INT_GPIO
と割り込みルーチンを書けばいいはずですが,もしかしたら,スイッチ入力のプルアップのせいかも?

ありがとうございます。
かなり参考になりました。
内部プルアップがうまく行かなかった理由が分かりました。
割り込みはたぶんプルアップのためにうまくいかないと誤解していて、実際はうまくいっていた気がします。

はじめまして、edyと申します。
PSoCで検索していてこちらを知りました。
勝手ながらリンクさせて頂きましたが、よろしかったでしょうか?

全然構いません。
PSoCマイコンでいろいろなことをされているのですね。
では、こちらもリンクさせていただきます。

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1389908/37532847

この記事へのトラックバック一覧です: ArduinoとPSoCとのI2C通信成功!!:

« PSoCでの超音波距離センサー | トップページ | 380モーター?? »