Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
27
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

Arduino Leonardo/Micro風に、LUFAでUSBデバイスを作ってみる

貧乏人はマイコンだけ使いたいのだ!。。。が!??

micro

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のスペックをみてみました。ところが。

ATMega32U4のスペック
32u4.png

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を使って回路を作ることにしました。

90usb162.png

32ピンとはいえLQFPパッケージなので、変換基板が無いとブレッドボードやユニバーサル基板で回路作れません。
一緒に変換基板も買って帰ってさっそく回路を作ります。

回路

下記サイトを参考にさせていただいて、回路を組んでみました。

回路

基板はこんな感じに。

基板

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チカ

謎のボード用の超シンプルにしたUSB-MIDIのサンプル

まとめ。確かに手を動かして何かを作った気になった。。。。。が?

LUFAを使うと確かに簡単にUSB機器が作れそうです。
ただ、いままでArduinoになれた身としては、様々なライブラリをどこから探してどう組み込めばよいか、正直まだよくわかっていません。
おそらく、AT90USB162にはUSB-MIDIの機能だけ実装してSPIかUSARTで別のATmegaなどと通信させ、そちらで様々な機能を実装するのでしょう。

。。。。それって。。。。

  • Arduino UNOとおんなじ!!!!!!!!!!!!!!
  • Arduino UNOを使ったUSB-MIDIシリアルは Moco for LUFA

はい!

どうやら、車輪の再発明すらできてない、というオチでしたw

↓ココに見事に戻りました!

超簡単!Arduino UNOをMIDIコントローラーにしよう!

いろいろやってみたが、振り出しに戻った!という感じ。LUFA実験終了!!w (まったくバカっぽい)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
27
Help us understand the problem. What are the problem?