Arduino DUE

Arduino DUE に関する記事です。



Arduino DUE

Arduino DUE は Arduino MEGA2560 の上位機種と考えていいでしょう。DUE はイタリア語で数字の 2 を意味します。ZERO (0), UNO (1), DUE (2), TRE (3), QUATTRO (4)...となります。

MCU は Atmel AT91SAM3X8E で、書き込めるスケッチの最大サイズは 524,288 バイト (約 512KB) です。SAM というのは "Smart ARM-based Microcontroller" の略です。Atmel 製の ARM って事ですね。

See Also:


購入

Amazon で買えます。

私が購入したのは互換ボードです。eBay で購入しました (¥1,697)。


各部詳細

外観は MEGA 2560 とほぼ同じですが二つの USB ポートがあります。

画像上側がネイティブ USB ポートで、画像下側がプログラミングポートです。

ボード上にある小さなボタンは 1 秒以上長押しするとフラッシュメモリに書き込まれたプログラムを消去します。ブートローダーは消えません...というか DUE のブートローダーは ROM なので絶対に消えません

よって、ICSP 端子 (に見える SPI 端子) からブートローダーを書き込む機能もありません。

SPI

UNO と異なり、SPI 用のピンは D13~D10 ではありません。MEGA 2560 とも異なり D50~D53 には出ていません。

ICSP 端子 (ICSP 機能はないため SPI 端子となっている) を使えばピン互換にできます (SS は除く)。

DUE UNO LEONARDO MEGA 2560
SCK ICSP 3 D13 / ICSP 3 ICSP 3 D52 / ICSP 3
MISO ICSP 1 D12 / ICSP 1 ICSP 1 D50 / ICSP 1
MOSI ICSP 4 D11 / ICSP 4 ICSP 4 D51 / ICSP 4
SS D10 D10 (TX LED) D53

正直 SPI 端子が使いにくいのでピンソケットを向かい合わせにハンダ付けした メス<->メスコネクタを作っておいた方がいいと思います (参考: Raspberry Pi 用のメス<->メスコネクタ)。

I2C

DUE は 2 系統のI2C を持っています。I2C は割と鬼門です。他の 3.3V 系ボードで動作するものが DUE では動作しない事があります。i2c_scanner で検出されないものもあるのでオシロとか必要かもですね。

また、SDA1/SCL1 にはプルアップ抵抗が入っていません。

I2C DUE UNO LEONARDO MEGA 2560
Wire Wire1
SCL D21 SCL1 A5 / SCL D3 / SCL D21 / SCL
SDA D20 SDA1 A4 / SDA D2 / SDA D20 / SDA

D20 / D21 は Wire オブジェクト、SDA1 / SCL1 は Wire1 オブジェクトとしてそれぞれ宣言なしに利用可能です。

JTAG (Joint Test Action Group) コネクタ

デバッグ用の JTAG コネクタです。

画像右下が 1 ピンです。

Pin 名称 名称 Pin
1 3.3V TMS 2
3 GND TCK 4
5 GND TDO 6
7 (NC) TDIK 8
9 GND RESET 10

SWD (Serial Wire Debug) コネクタ

デバッグ用の SWD コネクタです。

画像右が 1 ピンです。

Pin 名称
1 GND
2 DCLK
3 DIO
4 RESET

See Also:


セットアップ

Arduino DUE を Arduino IDE から使うには [ツール | ボード | ボードマネージャ] で Arduino SAM Boards (32-bits ARM Cortex-M3) を探してインストールします。

ボードは [ツール | ボード | Arduino Due (Programming Port)] を選択します。USB ケーブルは下側に接続します。Arduino Due (Native USB Port) でもアップロードできますが、その際には USB ケーブルを上側に接続します。

Arduino DUE の VID は 2341、PID は 003D (プログラミングポート) / 003E (ネイティブ USB ポート) です。

※ プログラミングポートでアップロードできない場合には、スケッチ転送前に [ERASE] ボタンを押してみてください。

See Also:


HID

Arduino DUE は LEONARDO (or Atmega32U4 搭載品) 同様に、HID デバイスになる事ができます。やり方は LEONARDO と全く同じです。

HID デバイスになれるのはネイティブ USB ポート の方なので、USB ケーブルを抜き差しするか、2 本接続して対応してください。

See Also:


USB ホスト

Arduino DUE は USB ホスト機能も持っています。USB ホスト機能が使えるのはネイティブ USB ポート の方です。

See Also:


DAC

Arduino DUE には DAC 用のピンが用意されています。

定数 ピン
DAC0 66
DAC1 67

See Also:


CAN

Arduino DUE には CAN 用のピンが用意されています。

車屋さんで「コンピュータ(で)見てみますね!」と言われたら、故障診断機を車に OBD2 (自己診断: On Board Diagnosis 2nd generation) 接続するのですが、そのプロトコルの一つが CAN (Controller Area Network) です。

しかしながら、このピンを使うには外部パーツが必要になり、そのようなパーツを使うくらいなら CAN バスモジュールと DUE でない任意の Arduino ボードを使った方が安くてお手軽という本末転倒な事になってしまいます。日本車の OBD プロトコルは CAN ではなく K-LINE (ISO 9141-2, ISO 14230) ですし、その OBD 用自己診断機にしたって安いのが Amazon で売られています。

CAN プロトコルは車の OBD 以外にも使われてはいますが、それを Arduino DUE でやるのかといったら...?

See Also:


Serial

たとえば、次のようなスケッチがあったとします。普通の Arduino ではシリアルモニタを開けば、"Hello,world." が繰り返し表示されます。

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println("Hello,world.");
  delay(1000);
}

Arduino DUE ではネイティブ USB ポートに接続していると表示されません。ネイティブ USB ポートでシリアルモニタに表示させるには、Serial ではなく SerialUSB を使います。

void setup() {
  SerialUSB.begin(9600);
}

void loop() {
  SerialUSB.println("Hello,world.");
  delay(1000);
}

電源投入後に自動でプログラムが実行されない?

デッドストックの DUE には電源投入後に自動でプログラムが実行されない問題を抱えているものがあるようです。

問題が発生するのは Arduino DUE の Rev 2 以前で、解決方法は 16U2 用 ICSP コネクタの脇にある MOSFET の足に 10KΩ(0805) の抵抗をハンダ付けする事のようです。互換品がどのリビジョンを模倣しているのかは判断しにくいですが、R3 という文字があったり、問題の MOSFET が縦向きになっていれば Rev 3 以降という事らしいです...普通に純正品を買うのが間違いがなくていいのでしょうね。

See Also:


ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。

メニュー: