2012年2月1日水曜日

USBasp のファームウェアアップデート その2

aitendo USBasp-B のファームウェアアップデートについて、Arduino as ISP を使う方法を紹介しましたが、OS X 環境ではどうも再現性が低く、再度試したらだめでした。

そこで、、、


もう一個買ってきました。

USBasp を使って、USBasp のファームウェアを書き込みます。
2台をUSBasp をストレート結線でつなげばOK です(アップデートされる方の J3 ジャンパをショートします)。

千石で良いケーブルを売っていました。210円。
何も書いていませんでしたが、Sparkfun のDEV-09215 だそうです。

これは10pin - 10pin のストレートコネクタに加えて、AVR 用の 6pin ICSP コネクタがついています。
これで変換基板を作らなくてもOK。


このケーブルとUSBasp があれば、Arduino の自作も簡単です。
USBasp のファームウェアアップデートは、しなくても問題なさそうですが、
ケーブルとUSBasp 2つ買っても2010円。
はじめからこの値段だと思えば、、、、

高いか。


参考までに、aitendo USBasp-B を2台使って2011-05-28版ファームウェアを書き込む方法
(あくまで、私が購入したときのファームウェアから、2011-05-28 にする方法です。既に新しい版になっているかもしれません。)


プログラマーとして使う方をUSB で接続します。(J3, J5オープン、J4クローズ)
アップデートする対象をストレートケーブルで接続します。(J5 オープン、J3, J4 クローズ)

avrdude のバージョンは5.2 以上が必要です。
(確認コマンド)
$ avrdude -v

ファームウェアのあるディレクトリで
$ avrdude -c usbasp -p m8 -U flash:w:usbasp.atmega8.2011-05-28.hex:i
(fuse bit の書き換え:1度だけ)
$ avrdude -c usbasp -p m8 -U hfuse:w:0xC9:m



2012年1月28日土曜日

MIDI Library for Arduino 1.0


Arduino でMIDI を扱うネタはこれまで何度か紹介しています。
今回は Arduino IDE 1.0 でMIDI ライブラリを使う方法を紹介します。
回路はこちらのシールドを使用します。

MIDI 送信は標準のサンプルがあります。
File > Examples > 4.Communication > MIDI

以前のサンプルと異なり、
Serial.print(val,BYTE);
ではなく、
Serial.write(val);
を使っています。
BYTE を指定する書き方は、Arduino 1.0 IDE ではエラーになるので、以前の書き方で作ったスケッチは修正する必要があります。


受信には、MIDI メッセージのパースが必要なので、ライブラリを使います。
MIDI のライブラリは Arduino Playground で紹介されている Arduino MIDI Library と、以前紹介した Tymm's MIDI Library などがあります。
Playground の MIDI Library v3.1 はまだ1.0 対応していないようです(簡単な修正で使えます)。

Tymm's MIDILibrary は1.0 テスト版があるので、こちら紹介します。

サンプルコードは MidiSendExample、MidiReceiveExample、MidiPneumaticsExample があります。
(Pneumatics は内容が良くわかりません。)

MidiReceiveExample を使ってみましょう。
MIDI の送信は iOS アプリとMIDI アダプタを使って、iPod Touch から行ないます。

このサンプルは Note On メッセージで LED On、Note Off でLED Off という簡単なものです。
これは、MIDI 対応 鍵盤アプリを使って簡単に試す事が出来ます。(例えば bs-16i など)。



次に、MIDI スライダーを使って、LED の明るさをコントロールしてみましょう。
スライダーが使える iOS アプリの Touch OSC または、MIDI Monitor などを使います。


MIDI Monitor の Mixed Control では CC #11 からCC #16 がスライダーに割り当てられています。


Touch OSC の Simple Layout はCC #0からCC #3 が スライダー(縦)に割り当てられています。


CC (ControlChange) メッセージ を受け取るには、handleNoteOn, handleNoteOff などにつづいて、handleControlChange を実装します。
(コメントアウトされた状態で用意されています。)


例えば
void handleControlChange(unsigned int channel, unsigned int controller, unsigned int value){
if (controller==0 || controller==11){
analogWrite(3, map(value,0,127,0,255));
}
if (controller==1 || controller==12){
analogWrite(5, map(value,0,127,0,255));
}
if (controller==2 || controller==13){
analogWrite(6, map(value,0,127,0,255));
}

}

この例では、CC #0 またはCC #11 で 3番ピンを、CC #1 または CC#12 で 5番ピンを、 CC #2 または CC #13 で6番ピンを、それぞれ PWM 制御しています。
PWM の使えるピンは 3,5,6,9,10,11 の6本なので、これらのピンを使ってRGB 制御をすることができます。(→こちらの記事参照)
MIDI で送るデータは、0から127 の128 段階なので、map 関数で0から255 に範囲を変えています。(128段階なのは変わりません)

Note On/Off や ControlChange 以外のMIDI メッセージもこのライブラリで扱う事が出来ます。
何を何に割り当てるかは自分で自由に決められるので 本来のMIDI の枠に捕われずに使って良いと思います。



2012年1月27日金曜日

USBasp のファームウェアアップデート


以前に紹介した aitendo AVR-USBasp-B はファームウェアが古いようです。
Arduino IDE 1.0 と組み合わせて使用すると、次のようなメッセージが出ます。


avrdude: Warning: Found USB device "USBasp" with old VID/PID! Please update firmware of USBasp!
avrdude: warning: cannot set sck period. please check for usbasp firmware update.


エラーではないのですが、できればなんとかしたいです。


ショップのページをみると、「JP3 とJP4 を同時にON にしてファームウェア書き換えモード」とありますが、より正確には「外部のISP プログラマーを使ってファームウェアを書き換えるモード」です。これ単体でアップデートはできません。

仕方ないので、このArduino as ISP を使ってみます。
どうも私の環境では安定しないので、(そもそも、安定していれば USBasp 不要ですし、、、)ちょっと不安です。

よくわからないエラーと格闘しつつ、なんとか書き込むことができました。
(イレースだけされて書き込めない時もあり、焦りました。リセットを手動で押したり、何回も試しました。)

書き込みに使ったツールは avrdude です。
Mac への導入方法は今回、割愛します。Arduino IDE の中にも含まれています。

書き込むファームウェアはこちらの 2011-05-28版をダウンロード。
aitendo-AVR-USBasp-B はAtmega8 なので、
bin > firmware の中の
usbasp.atmega8.2011-05-28.hex を書き込みます。
Makefile も用意されていますが、もう一つUSBasp がないと使えません。

いろいろ試して、書き込めたコマンドはこのような感じでした。
$ avrdude -P/dev/tty.usbserial-A700eY3o -b19200 -c arduino -p m8 -U flash:w:usbasp.atmega8.2011-05-28.hex:i

-P /dev/tty.usbserial-A700eY3o
 シリアルポート指定 これは各自の環境でことなります。
 指定するシリアルポートの名前を調べるコマンドは  $ ls /dev/tty.*usb*

-b 19200
 ボーレート指定 Arduino ISP の場合19200です。
-c arduino
 プログラマタイプの指定、Arduino as ISP はおそらくこれです。(avrisp でも良い?)
-p m8
 書き込む対象のマイコン atmega8を指定(実物を確認して下さい)
-U flash:w:usbasp.atmega8.2011-05-28.hex:i
 カレントディレクトリにある usbasp.atmega8.2011-05-28.hex というファイルを書き込み

もうひとつ、hfuse ビットが変わっていたので、こちらも書き換え

$ avrdude -P/dev/tty.usbserial-A700eY3o -b19200 -c arduino -p m8 -U hfuse:w:0xC9:m



これで Arduino IDE から使っても Warning がでなくなりました。

作るより買った方が簡単だと思ったのですが、結局手間がかかってしまいました。


2012年1月25日水曜日

Proっぽいduino


Proっぽいduino は Arduino Pro に近い構成をしたArduino 互換機です。
秋月のAE-ATMEGA 基板を使って組みました。

AE-ATMEGA のシリアル変換部、電源部を使わず、FTDI アダプタを使うための6pin を出しています。
(電源、GND、リセット、TX、RX をそれぞれ接続。CTS はオープン)



Arduino Pro は5V 版と3.3V版が存在し、それぞれクロックが16MHz、8MHz となっています。
Arduino で使用している ATmega328p は16MHz で動作させるために、4.5V 以上の電圧が必要です。(3.3V で16MHz にしても動作はすると思いますが、定格の範囲外なので、安定動作しない可能性があります。)

Proっぽいduino は5V/3.3V 両対応にするべく、クリスタルを取り外せるようにしてみました。クリスタル交換ってラジコンみたいですね!



この基板で試したかったのは、3.3V 仕様のArduino でSparkfun のUSB Host Shield が使えるかどうかです。シールド上にあるレギュレータ(5V/3.3V両方) を使わず、3.3Vレギュレータの出力のところに、直接 3.3V 電源を配線して、テストしました。

とりあえず、ADK でLED コントロールできることを確認しました。

Circuits@Home 版が 入手できれば(とくに for Pro Mini)、その方が簡単ですが、入手の容易なSparkfun 版でも、Arduino Fio などの3.3V Arduino と組み合せて使う事ができそうです。

2012年1月22日日曜日

Interface 増刊 Smartphone World (ADK 特集号)


日本Android の会1月定例会からの情報ですが、1月25日発売の「Smartphone World (スマートフォンワールド)」という雑誌でADK の特集をやるそうです。

未だ情報が少ないADK の貴重な書籍になりそうです。
ADK のみならず、WiFi やBT, Microbridge など、さまざまな方法で接続するとか。

Amazonで予約受付中。


RT 社のプレゼン、私のみどころはこの辺でした。


16:44 ごろ RT 社が考える ADK の活用方法


23:43 ごろ RT-ADK mini のテキストおよびキットについて(5-6月頃発売)
(それにともなう試行会をおこなうとのこと 3月頃)

試行会(ADK ハッカソン?) 、ぜひ参加したいです。

RT-ADK mini 初期ファーム


昨日購入したRT-ADK miniこの手のものは自分でファームを書かないと使えないと思っていたのですが、例のRT 社プレゼンにて、「Microchip のデモプログラムで動かせるファームウェアを書き込み済み」と言っていたので、結構期待をしていました。

Microchip のAndroid 用のプログラムはこちらからソースをダウンロードして作成するか、Android マーケットから「基本的なアクセサリのデモ」という名前のアプリをダウンロードします。
(名前変わるかも知れないので、[microchip] で検索して下さい。)


出来る事は 8ch のアウトプット(LED制御)、4ch のインプット(プッシュボタン状態)、そして1ch アナログインプット(ポテンショメーター)。

ところが、、、、

RT-ADK mini のピンと、このソフトの割当の資料がない。仕方ないので適当に部品を差したりしながらあたってみると


LED1 ... AIN3
LED2 ... AOUT2
LED3 ... 不明
LED4 ... 不明
LED5 ... AIN2
LED6 ... AOUT1
LED7 ... AOUT0
LED8 ... DIN3

Button1 ... DOUT3
Button2 ... DOUT2
Button3 ... DOUT1
Button4 ... DOUT0

POT ... AIN0

割当不明
AIN1
DIN0
DIN1
DIN2

PICkit用端子(※回路図から まだ試していません)
MCLR
+3.3V
GND
AOUT0 ... PGEC1
AOUT1 ... PGED1

基板上のボタン(SW1) ... DIN0
基板上のLED(LED1) ... DOUT0

という結果に。なんだこれは。
前記事で書いた、「初期ファームのままでも十分使える」は訂正します。
使えない事は無いのですが、ラベルと内容が合っていないので、、、結局このボードは自分でファームウェア書かないとだめですね。

初期ロットだけの問題かもしれませんが、購入時にファームのバージョンはわからないので、PICkit なしでも使えるという認識は危険ですね。

いずれにしても、micro USB はPower のみで信号線の結線はないこと、CN1 コネクタは電源っぽいけど、実はRS485 用(MAX485 に接続)、リセットスイッチっぽい SW1 とPower インジゲータっぽいLED1 はそれぞれ汎用ピンに接続されている点は要注意です。(電源を接続しても、LED1 が点灯しないのは正常です。)

2012年1月21日土曜日

RT-ADK mini



PIC 版のADK ボード、RT-ADK mini を購入しました。千石で3980円
気になりつつも、買わない予定だったのですが、先日行なわれた日本アンドロイドの会定例会でRT 社のプレゼンを見ていたら欲しくなってしまいました。
(→ビデオが公開されています。)

買わないでいようと思った理由は、現在 Arduino 版ADK にハマっていること、そして、上位互換のPIC24FJ256GB106 が載ったボードを既に持っている事。
欲しくなった理由は、なぜか MAX485 のチップが載っていた事、、、

プログラムを作成するにはPIC の開発環境が必要です。
MPLAB IDE v8か、OSX にも対応している MPLAB Xでもできるはず。
書き込みにはPICkit3 を使います。

ADK に興味がある人は大きく分けて
a) Android のプログラムを作っている → Android と連携するガジェットをつくりたい
b) マイコンを使って遊んでいる → スマホにつなげたい
の2通りに分けられますが、前者は「マイコンの開発がやりたい」わけでは無いでしょう。

このRT-ADK mini は、ボタン入力や ON/OFF コントロールをするだけなら、最初のデモ用ファームでも十分使えます。
PIC のマイコンだと意識せずに、Android 専用のI/Oボードだと思って使っても良いと思います。→訂正します。初期ファームはかなり微妙です。



連結ソケットがハンダ付け済みで販売されていますが、ピンが逆(太い方が基板側)では、、、?

端子は幅広タイプ(600mil) の28pin IC ソケットと同じ。電源はmicro USB(メス) 端子から5V-500mA を供給します。

私がArduino が好きな理由は、大勢の人が「同じボードを使っている」こと。
他の人が作ったサンプルをそのまま使える。これは本当に大きなメリットです。
PIC 版ADK も、既にいろんな方が作られていますが、使っているチップもまちまちです。

Arduino のシールドのように、このボードにつなげて使う機器が販売されるようになると面白いですね。

2012年1月19日木曜日

USBasp


USBasp はAVR マイコンのプログラマー(書き込み機)です。
以前に紹介した、「Arduino as ISP」のようなものです。
新品の(何もプログラムされていない)Atmega328p にArduino ブートローダを書き込んだり、ブートローダーを使わず(シリアル経由のプログラム転送をせず)にプログラムを書き込む事が出来ます。

Arduino IDE でISP プログラマーを使ってプログラムを転送する場合、以前は設定を自分で書く必要があったのですが、Arduino IDE 1.0 からは設定が不要になりました。

USBasp は設計仕様がオープンになっており、こちらのサイトで回路図やプログラムが公開されています。
今回は手軽に使える市販品を紹介します。(aitendo AVR-USBasp-B 900円)


メーカー(ATMEL)純正のISP プログラマーは AVRISPmkII があります。(秋月で3000円
純正開発環境 AVRStudio (Windows版のみ)などで使う場合はこちらがお勧めです。


購入した aitendo のモノは基板に2011.07 と書かれたものでした。中身のバージョンは分かりません。
以前のバージョンは不評の様で心配でしたが、今回購入したものは Arduino 用として特に問題なく使えました。


Arduino IDE 1.0 でのISP プログラマーの使い方


[1] Arduino ブートローダーの書き込む場合

1) USBasp をUSB ポートに接続する(Mac はドライバ不要。Windows はドライバーのインストールが必要。)
2) Arduino のICSP 端子に接続する(接続ケーブルなどの作成が必要)
3) Tools > Programmer > USBasp を選択
4) ボードの選択
 ・Atmega328p チップにOptiboot (Arduino Uno用)のブートローダを書く場合
  Tools > Board > Arduino Uno
 ・ Atmega328p チップにNon-Optiboot (Arduino Uno以前) のブートローダを書く場合
  Tools > Board > Duemilanove w/ ATmega328
を選択

5) Tools > Burn Bootloader
ちょっと時間がかかります。


firmware のアップデートをしなさい、とメッセージが出ていますが、とりあえず書き込めたようです。
アップデート方法は後日調べてみます。

[2] ISP 経由でプログラムを書き込む場合
1) USBasp をUSB ポートに接続する
2) Arduino のICSP 端子に接続する
2) Tools > Programmer > USBasp を選択
3) Tools > Board を選択
4) File > Upload Using Programmer (または、Shift キーを押しながら転送ボタンを押す)で書き込みを実行

ISP でプログラムを書き込むとブートローダーは上書きされてしまいます。
シリアルポート経由のプログラム転送に戻す場合は、再度ブートローダーを書き込みます。

2012年1月16日月曜日

ADK の電源考 その3



無駄に複雑な配線になっています。
実はこの接続を試したいがために、USB Hub を購入しました。

USB Host Shield (ホスト) > USB Hub
USB Hub >(デバイス) Arduino Uno
USB Hub >(デバイス) Xperia Arc

という接続になっています。

このハブはセルフパワー(AC アダプタから給電)方式なので、スマートフォンへの給電はハブが行なっています。
USB Host Shield は純粋に通信のみを行なっています。
ハブからArduino の接続は給電目的です。(プログラムすれば通信も可能です。)

つまり、これまで検討していた電源まわりの配線を一切いじる事無く、USB Host Shield とスマートフォンの組み合わせで ADK を構成できます。(ただし、Library 2.0 を使うため、リセットまわりの改造が必要です。)

この接続は、USB Host Shield Library 2.0 でUSB Hub に対応したことにより、可能になりました。
旧バージョンの USB Host Shield Library を使っている場合は、この接続をしても通信ができないため、ADK ボードを認識しません。

Library 2.0 に含まれるサンプルコードのADK demokit は、Hub に対応するように書かれているため、そのままで上記接続を試す事が出来ました。


Examples > USB_Host_Shield > adk > demoki_20


新ライブラリで USB Hub を使うには、

1) usbhub.h をinclude する。
2) USBHub クラスのインスタンスを作る。
 (USBHub hub0(&Usb); の行が相当。hub1, hub2 ... と使用するハブの個数分書く。メモリの許す限り最大7個まで使用できる。)

以上です。作成したインスタンスに対して、何か行なう必要はありません。


ADK の電源考 その2


Android タブレットデバイス (acer ICONIA TAB A500 Android3.2.1) でのADK の様子です。

このタブレットは秋葉原のレンタル工作スペース「ナノラボ」さんにて、お借りしました。

スマートフォンとは異なり、通信用のUSB 端子とは別に、充電用の電源端子があります。
また、USB ホスト機能をもつ端子も別に持っています。



以前から気になっていたのは、USB ホストの端子から電源をとれるか?
ということです。

USB ホスト端子とUSB デバイス端子両方同時につかえるのか、電源だけをとることができるか、といった疑問がありましたが、動作しました!

変則的ですが、このような接続もありということで、、、


このタブレットでその1 と同様のVBas 電圧のテストをしたところ、2.8V くらいからADK ボードを認識しました(5V まで上げても充電はしない)。USB Host Shield の5V バイパス改造をしなくても認識できます。