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


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


■生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; とかにすると、すぐに止まってしまう。