2019年5月11日土曜日

arduino M0 と I2S DAC、コンパイル通らない系の地雷

I2S DACを動かしたくて、ARM coreが載っているArduinoを買った.中華通販で¥1200ぐらいだったかな? もちろん互換品である.通販タイトルは
「SAMD21 M0. 32-bit ARM Cortex M0 core. Compatible with Arduino Zero, Arduino M0. Form R3.」
となっている.
Arduinoには様々なバラエティがあり、自分が買ったのは何の互換品なのだろう? どういうkey wordで括れる互換品なのだろう? わからんなぁ......

PC版Arduino IDEを起動してboardをUSB接続する.LED blinkのスケッチを焼いてみるが焼けない.

【地雷1】
Arduino IDEに正しいボード名を指定してあげる必要がある.
でも、どれを選択すればいいのかが不明.
結果的には「Arduino M0」が正解だった.

「Arduino Zero」かな?
「Arduino Feather Zero」かな?
「Arduino SAMD21」かな?
そういうのは全部ハズレだった.

ハナシは少し戻るが、Arduino IDEのデフォでは「Arduino M0」は導入されていなかった.明示的に導入せないかんかった.
どうやって導入したか?
   ツール→ボード→ボードマネージャ
で「SAMD」で検索する.
下記をinstallしたところ、「Arduino M0」を選択できるようになった.
「Arduino SAMD Boards(32-bit ARM Coretex-M0+)」
それではお試しにLED blinkでも焼いてみよう.
Arduino IDEにデフォで入っているBlinkを呼び出す.
つつがなく終了.LEDはブリンキングしてくれてる.

以上で地雷原1は通過完了.

------
さて次は、なんらかのI2Sスケッチをコンパイルしてみよう.
    ファイル→スケッチ例→I2S→SimpleTone
を呼び出す.
このスケッチ例は地雷1でinstallしたArduino M0のフォルダ配下に同時に生成されたもののようだ.親切でよいが、実はコンパイルが通らないんだがなこれが.

【地雷2】
SimpleToneをコンパイルしてみる.
エラー発生!
Arduino:1.8.9 (Windows 7), ボード:"Arduino M0"
C:\Users\hira\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.21\libraries\I2S\src/I2S.h:111:2: error: #error "I2S is not supported on your board!"
 #error "I2S is not supported on your board!"
彼が何を云いたいのかというと「お客様がお挿しにおなりのボードはI2Sが非サポートです」とゆうことだ.しかもAppDataなんつう随分と深い場所に在るファイルを指している.AppData配下のフォルダなんか知らんつーの.

ここで、windows版 Arduino IDE(1.8.9)の主なフォルダを知っといたらいいかもしれない.意外とバラけているみたいなんだ.設定で可変だとは思うけど、そういう操作はしない状態でのハナシ.解りやすい順に、
1)ライブラリ→ドキュメント→Arduino
ここには、DLしたライブラリやスケッチ例などが置かれている.

2)C:\Program Files (x86)\Arduino
IDEのexeファイルなどはいわずもがな.デフォのスケッチ例もここにある.

3)C:\Users\hira\AppData\Local\Arduino15
AppDataなんか普段あまりおおっぴらには使わない場所だろう.謎のbinary fileが置かれてたりしてここには足を踏み込みたくない場所でもあろう.しかしもう少し下に降りてみると、地雷1でinstallしたArduino M0のファイル置場がここだと判る.
C:\Users\hira\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.21
先ほどのI2Sスケッチ例もAppData配下にあるのだ、うげ~.
C:\Users\hira\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.21\libraries\I2S
なんだかなーだよ.(加藤恵)

地雷2の話題に戻る.
先人の知恵によるトラブルシュートが見つかった.これに則って修正を試みる.
深い場所にあるvariant.hというファイルを書き換える.このファイルにはCPU chipのピンアサインが書かれているみたい.
C:\Users\hira\AppData\Local\Arduino15\packages\arduino\hardware\samd\1.6.21\variants\arduino_mzero\variant.h
arduino_mzeroというフォルダ名がここでは重要だ.
variant.hのポイントだけ抜き出すと、USBの下にI2S Interfacesを追加する.
/*
 * USB
 */
#define PIN_USB_HOST_ENABLE (32ul)
#define PIN_USB_DM          (33ul)
#define PIN_USB_DP          (34ul)

/*
 * I2S Interfaces
 */
#define I2S_INTERFACES_COUNT 1

#define I2S_DEVICE          0
#define I2S_CLOCK_GENERATOR 3
#define PIN_I2S_SD          (9u)
#define PIN_I2S_SCK         (1u)
#define PIN_I2S_FS          (0u)

#ifdef __cplusplus
}
#endif

SimpleToneをコンパイルしてみる.  → サクッと通る.めでたい.

-----
しかし中華通販からまだI2S DACが届いてないので、実際に動かしてみるわけにはいかないんだ.ざんねん.

今宵は此処までにしとうございます.

かしこ

2 件のコメント:

  1. ArudinoかRaspberryPiを買ってプログラムしてみようかなと思っているのですが、互換基板は大変そうですね。同じトラブルに直面したらギブアップしそう・・。

    返信削除
    返信
    1. RapsberryをtelnetかSSHでリモート使いするのがなにかと便利でおすすめかもしれません.
      Arduinoは中華で買えば安くてウキャキャですが、 日本で売られてるのはコスパがいまいちでいかんです.
      Arduino UNOみたいな低級品は互換基板でもno troubleで動かせると思います.
      がんばってください

      削除