貧乏人はマイコンだけ使いたいのだ!。。。が!??
Arduino LeonardoやMicroを使えばUSBキーボードなどのデバイスを簡単に作ることができます。
でも、USBデバイス1つ作るたびに、Arduinoを1台買うなんて、貧乏くさい私には到底できることではありません。
というわけで、少しインターネットで調べてみると、どうやらUSB機能を搭載したAVRに、Dean Cameraさんが作成したLUFAというライブラリを使ってファームを書き込めば、様々なUSBデバイスが作れるみたいです。
LUFA (Lightweight USB Framework for AVRs)
というわけで、やってみました。
どのAVRで作る?
LUFAは、非常に多くのAVRマイコンをサポートしています。
とりあえず、今回試したいのは、Arduino LeonardoみたいなUSBデバイスなので、Arduino Leonardoに使われてるのと同じATmegaを使おうと思います。
と思って、ATmega32U4のスペックをみてみました。ところが。
44PIN!
。。。。普段8PINとか、多くても14PINとかのATTinyしか使ってないヘタレはピンの数だけで挫折気味です。配線する気になれない。。。w (だから最初っから皆ボード使うんですよ。という声が聞こえてきそう。)
というわけで、32U4は早速あきらめ、できるだけPINが少ないAVRを探してみることに。
LUFAが対応しているAVR8のピン数は下記の通りでした。
AVR | ピンの数 |
---|---|
AT90USB82 | 32 |
ATmega8U2 | 32 |
AT90USB162 | 32 |
ATmega16U2 | 32 |
ATmega16U4 | 44 |
ATmega32U2 | 32 |
ATmega32U4 | 44 |
AT90USB646 | 64 |
AT90USB647 | 64 |
AT90USB1286 | 64 |
AT90USB1287 | 64 |
どうやら、後ろが2で終わるAVRが32PINで、この中ではピンが少ないようです。それでも多いんですけど。。。
いろいろ探してみると、秋月で下記2つが見つかりました。(海外でも探したのですが、USB対応のAVRはそれほど安くありません。秋月の現在の価格は海外と比べても安い方です)
データシートを見比べても、容量以外あんまり変わらないですね。
ADCやI2Cが無いですが、今回はとりあえず簡単にLUFAを使うことが目的で、かつROM 16Kbyteもあれば十分なので、安いAT90USB162
を使って回路を作ることにしました。
32ピンとはいえLQFPパッケージなので、変換基板が無いとブレッドボードやユニバーサル基板で回路作れません。
一緒に変換基板も買って帰ってさっそく回路を作ります。
回路
下記サイトを参考にさせていただいて、回路を組んでみました。
- ATmega32U2でArduinoモドキを作る by kosakalabさん
- AVR PROGRAMMER MODELLED AFTER THE MKII – USES LUFA
- Teensy(1.0)互換ボード (すzのAVR研究) by すzさん
基板はこんな感じに。
Arduino Leonardoのニセモノ!です。例によってカッチョ悪いですが!w
MacでLUFAをビルドするための準備
これまでArduinoしかやったことが無かったので、これまたインターネットに教えてもらいながら環境構築からです。
下記手順でできました。
1. LUFAのダウンロードと解凍
-
LUFAから、
LUFA 140928
をダウンロード - ダウンロードしたzipを解凍したフォルダを適当なパスに置きます
2. CrossPack AVRのインストール
-
CrossPack AVRをインストール。(最新版で良いはずだが、私は同時に進めているATTiny841の環境との兼ね合いもあり、
CrossPack-AVR-20131205.dmg
を入れた)
3. dfu-programmerのインストール
これは、Arduino UNOとの兼ね合いもあるので、Arduino UNO R3 + dfu-programmerって、みんなどうしてるの?を参考に、dfu-programmer v0.6.1をインストールします。ビルド済みbinと、libusb(macportsで入れれば良い)を入れます。
4. Mac再起動 (pathを有効にする?)
まぁ、いろいろ入れたので一度Macを再起動しましょうw
これで、ビルドの準備が整いました。
とりあえずビルドしてみる
LUFAを解凍したディレクトリを~/lufa
に置いたとして、下記のようにコマンドを入力すればビルドできます。
cd ~/lufa
make
しかし!
これだと、ものすごい数のいろいろなものがビルドされます!
というか正直何がなんだかわからないw
何がなんだかわからないので、とりあえず1つだけビルドしてみる
とりあえず、個人的な趣味で、USB-MIDIをビルドしてみることにします。
せっかくボードを作ったので、ボードにあわせて少し修正します。
~/lufa/Demos/Device/ClassDriver/MIDI
に、USB-MIDIのサンプルがありますので、これをベースに修正します。
最初、こんな感じになっていますが、
MCU = at90usb1287
ARCH = AVR8
BOARD = USBKEY
F_CPU = 8000000
これを、下記のように修正します。
MCU = at90usb162
ARCH = AVR8
# BOARD = USBKEY
F_CPU = 16000000
あと、LEDやらJoyStickやらのコード例が入っているのですが、正直そんなモノは付いてませんw
サンプルからまずははずしたいところですので、いろいろとコメントアウトします。
~/lufa/Demos/Device/ClassDriver/MIDI
をもとに、下記機能だけにしたものをgithubに置いておきました。
- ボタンを押したらLチカ
- MIDI受信してもLチカ
まとめ。確かに手を動かして何かを作った気になった。。。。。が?
LUFAを使うと確かに簡単にUSB機器が作れそうです。
ただ、いままでArduinoになれた身としては、様々なライブラリをどこから探してどう組み込めばよいか、正直まだよくわかっていません。
おそらく、AT90USB162にはUSB-MIDIの機能だけ実装してSPIかUSARTで別のATmegaなどと通信させ、そちらで様々な機能を実装するのでしょう。
。。。。それって。。。。
- Arduino UNOとおんなじ!!!!!!!!!!!!!!
- Arduino UNOを使ったUSB-MIDIシリアルは Moco for LUFA
はい!
どうやら、車輪の再発明すらできてない、というオチでしたw
↓ココに見事に戻りました!
超簡単!Arduino UNOをMIDIコントローラーにしよう!
いろいろやってみたが、振り出しに戻った!という感じ。LUFA実験終了!!w (まったくバカっぽい)