Arduino+ダイセンモータードライバー(その3)

f:id:studio_k:20100306175500j:image:w240

いろいろ実験して、前回から分かったこと。

■生AVR+ダイセンモータードライバー

  • ダイセンモータードライバーの6番ポートを使用するとおかしくなる。
  • WinAVRのコンパイルの最適化は関係ない。(-Osでも問題なし)
  • データ送信後の終了処理の前のWAITは少し必要(1msぐらい)。

■Arduino+ダイセンモータードライバー

  • ダイセンモータードライバーの6番ポートを使用しなければ問題なし。
  • スレーブアドレスは1ビット右シフトする。Wire.beginTransmission(0x14>>1);

モータードライバの1ポートが使えないものの、これで万事問題なしでした。

そういえば、以前からこのモータードライバの6番ポートはおかしいとのうわさがあったのですが。

もっとも、今回実験したボードは1年ぐらい前に購入したものですので、今は直っているかもしれません。

また、結局関係なかったのですが、Arduino IDEでコンパイルの最適化オプションは変えられないようです。

Arduino IDEのソースを確認したところ、コンパイルオプションのところがハードコーディングされていました。

pde.jarをjarコマンドで展開して、classファイルをバイナリエディタで変更したところ、

最適化オプションを変更できたことは確認できました。

【最終版スケッチ】

#include <Wire.h>
#define TJ3M_ADDR (0x14>>1)
byte b[6];
int i =0;
void setup()
{
Wire.begin();
pinMode(13, OUTPUT);
delay(100);
}
void loop()
{
Wire.beginTransmission(TJ3M_ADDR);
for (int j=0; j<6; j++) {
if (i==j) b[j] = 50;
else b[j] = 0;
}
b[5] = 0;
Wire.send(b, 6);
Wire.endTransmission();
if ((i&1) == 0)
digitalWrite(13, HIGH);
else
digitalWrite(13, LOW);
delay(10);
i++;
if (i>=6) i=0;
}

b[5] = 0; のところを b[5] = 50; とかにすると、すぐに止まってしまう。

本格派対局将棋 ぴよ将棋
本格派対局将棋アプリ ぴよ将棋
[Android] [iOS]

かわいい「ひよこ」と対局する将棋アプリ。かわいいけどAIは本格派!
対局後の検討機能や棋譜管理機能も充実!棋譜解析機能も搭載!

「Arduino+ダイセンモータードライバー(その3)」への1件のフィードバック

  1. PONTA 様

    モッパーと申します。遅いコメントで申し訳ありません。

    Arduino でダイセンモータードライバーを制御しようとしてハマり、こちらのサイトを随分参考にさせて頂きました。こちらでの動作報告が無ければ諦めたと思います。本当にありがとうございました。当方はちょっと現象が違うので、以下に当方での解決策をアップさせて頂きましたのでご報告させて頂きます。
    http://moparlab.sblo.jp/article/32042991.html#comment
    今後ともよろしくお願いします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です