ATmega32U4搭載マイコンボードをmacで使ってみる
スイッチサイエンスさんのATmega32U4搭載マイコンボードを購入して遊んでみました。
ATmega32U4の概要
- Arduino Leonardo互換として扱える
- USBでパソコンにつなげば、マウスやキーボードデバイスとして利用できる(HID対応)
- VCCの出力は5V
- さらに詳細はスイッチサイエンスさんのATmega32U4ブレークアウトボードのページを見てください。
ちゃんとArduino互換にするには、ブートローダーを書きかえる必要がある。けど、やらなくてもなんとかなる
- このマイコンボードはデフォルトでDFU(Device Firmware Update)機能が有効になっており、USB経由でソフトウェアを書き換えることができます。
- ただし、DFU機能では、ブートローダー自体は書き換えできないため、完全にArduino互換にするにはAVR ISP mkIIや、別途Arduino UNOなどを用意して、ブートローダーを書き換える必要があります。
- UNOを利用したArduino化はこちらのサイトが参考になると思います。
今回は、ブートローダーの書き換えは行わず、DFU機能でファームウェアの転送を行いました。(UNOもってない・・)
- この状態だと、Arduino IDE上でコンパイルはできるのですが、IDE上でマイコンへの書き込みができません。別のソフトウェア(dfu-programmer)を使うことになります。
- ちょっとめんどくさいけど、なれれば何とかなります。
macからのファームウェア転送方法
Arduino IDEは1.6.9を使っています。
最初にmac にdfu-programmerをインストールしておきます。ターミナルアプリで以下を実行
sudo port install dfu-programmer
Arduino IDE上でTools/Boardから、「Arduino Leonardo」を選択
Arduino IDE> Preference で「より詳細な情報を表示する」の「コンパイル」にチェック
Arduino IDE上アプリケーションを普通に開発、ビルドできるかチェック
マウスが勝手に動くサンプルはこんな感じ
#include <Mouse.h> int phase = 0; int full = 100; int radius = 100; int delay_msec = 2; int x = radius; int y = 0; void setup() { } void loop() { ++phase; phase %= full; double th = 3.141592 * 2 * phase / full; int xx = radius * cos(th); int yy = radius * sin(th); Mouse.move(xx - x, yy - y, 0); x = xx; y = yy; delay(delay_msec); }
- ビルドすると下部のログウインドウに、/var/folders/・・.tmp/といったテンポラリファイルのパスが表示されるのでターミナルアプリでそこを開く。 以下のような感じです。 core/core.aは無視してください。
cd /var/folders/・・.tmp
このフォルダに、ファイル名.ino.hexというファイルがあるのを確認してください。
マイコンをUSBでmacに接続して、マイコンのリセットボタンを押してから、ターミナルから以下のコマンドを実行
dfu-programmer atmega32u4 erase dfu-programmer atmega32u4 flash ファイル名.ino.hex
- 書き込みが完了した後、USBを刺しなおすと、アプリが動き始めます。
ピン対応の一覧表
ピン配置はいろいろなサイトに載っていたのですが、どうも同じように動かない。
自分で調べた結果は以下の感じ。#pinの数字を指定してやれば、制御できます。(保証はしません)
#pin | 表記 | Function | - | Function | 表記 | #pin |
---|---|---|---|---|---|---|
? | B0 | SS | - | ADC0 | F0 | A5 |
15 | B1 | SCK | - | ADC1 | F1 | A4 |
16 | B2 | MOSI | - | TCK | F4 | A3 |
14 | B3 | MISO | - | TMS | F5 | A2 |
- | RST | - | - | TDO | F6 | A1 |
- | VCC | - | - | TDI | F7 | A0 |
? | D2 | INT2/RXD1 | - | - | AREF | - |
? | D3 | INT3/TXD1 | - | - | GND | - |
? | D1 | INT1/SDA | - | CLK0 | C7 | 13 |
? | D0 | INT0/SCL/OC0B | - | ADC9 | D6 | 12 |
24 | D4 | ADC8 | - | RTS | B7 | 11 |
? | C6 | OC1A | - | ADC13 | B6 | 10 |
6 | D7 | ADC10 | - | ADC12 | B5 | 9 |
7 | E6 | - | - | ADC11 | B4 | 8 |
Leonard 系のTips
- setupにおいてSerial通信が始まるまで実行をまつ
setup(){ Serial.begin(38400); while (!Serial) ; //シリアルウインドウが開くまで何もしない }