電音の工場ブログ

当ブログは…

自作エフェクターシンセサイザ製作のネタや開発覚え書きなど、筆者の電音活動を記録しています。お探しの記事が見つからない方は、検索カテゴリ一覧をご利用ください。

スパマーが来訪すると、ときどきコメントをはてなユーザのみに絞ったり開放したりすることがあります。

2009-08-12

FMラジオのためのArduino

| FMラジオのためのArduino - 電音の工場ブログ を含むブックマーク はてなブックマーク - FMラジオのためのArduino - 電音の工場ブログ FMラジオのためのArduino - 電音の工場ブログ のブックマークコメント

製作中のFMラジオの制御をこちらのデッドコピーで行おうとしている。

【武蔵野電波のプロトタイパーズ】第9回「憧れの機能満載デジタル式FMラジオ」 - PC Watch

3.3V動作のArduinoが必要なのだけど、買ってある Arduino Duemilanove を使うのはもったいない。だって高いんだもん。

ということで、自分でブートローダを焼いてArduino互換チップにしてしまう 俺duino (命名 俺) をやろうとしているんだけど…

うまくいかーーん

ブートローダ自体は焼けていると思われる(ATmegaBOOT_168_pro_8MHz.hex)。AVRJTAGICE mkII にて書いて、VerifyしてOKでた。fuseも読み書きできている。

USBコントローラには秋月の AE-UM232R (マニュアル(pdf))を使用。

が、どうにもLEDをブリンクするサンプルスケッチをアップロードできないのよね。症状はこちらと同じ。

twitter でぼやいたら tokoyaさんからもアドバイスをいただいたので、自動リセット周りをオシロ当たってみた。DTR_n線の立下りでAVRにリセットかけてブートローダシーケンスを開始するという奴です*1。通信が始まるときDTR_nがバタバタして何度かリセットが発行されて、ほどなくしてUSB-シリアルからAVRになんかシリアル信号が出力されているんだけれど、AVRからは何も戻っていないというような症状。

シリアルの転送速度が合っていないのかもしれない。AVRのクロックを内蔵RCを使った8MHz動作 や 外部水晶発振子を使った8MHz動作 にフューズを切り替えてみたが現象変わらず(それに合わせてIDE動作を lilypad にしたり Arduino PRO にしたり)。Arduino-IDE の preference を書き換えてシリアルの通信速度を遅くしてみたり。

ちょっとトッ散らかってきたので現在クールダウンモード。仕事も忙しいのに何やってるんだか。


さて、こんな調子で8月15日に間に合うのでしょうか。まぁ、最悪 NHK-FM固定マイコンがあるのでいいんだけど。

*1:他の実装例では DSR_n を落としてあったのだけど、これが必要だろうか?

pcm1723pcm17232009/08/12 08:53まず、リセットするとディジタル 13 番ピンに接続してある LED が点滅するでしょうか?
ブートローダの最初の方でこの点滅を行っているので、LED が点滅すればブートローダの実行を始めていることが分かります。
次に、Arduino IDE ではなく、ターミナルソフトを立ち上げて、ブートローダ・コマンドを手で打ち込んで反応を見ます。
ボードをリセットしたら、素早く "1 " (数字の '1'(0x31) とスペース ' ' (0x20)) を入力すると、ブートローダが正常に動作していれば "AVR ISP" というレスポンスが返ってきます。
コマンドを入力せず、放置しておくとタイムアウトしてフラッシュに書かれているはずのユーザ・プログラムの実行に移ります。
このタイムアウト時間は対応機種により違い、2009 用は短く、ng 用、 pro 用などは 10 秒程度だったと思います。

ChuckChuck2009/08/12 16:36プロトコルの解説をありがとうございます。ブートローダのコードを読んで動作を理解しました。早速チェックをしたところ、最初のLEDの点滅からして在りませんでした。AVRのフラッシュ領域を読んでみると全部FFです。0x3800以降になにかしらコードがあって然るべきなんですよね? AVR JTAG ICE mk2 でやっても STK500 でやっても同じ状況でした。ちなみにデバイスはATmega168Pで、複数個ためして同じ状況でした。
さて、どういうわけだろう。

pcm1723pcm17232009/08/12 18:36ブートローダを使う場合には、フューズバイトは通常の下位 (L)、上位 (H) に加えて、拡張 (X) バイトを設定する必要があります。
具体的には 2 進数で '000' に設定すれば、ブートローダ・サイズ 2 K バイト、リセット後にブートローダに制御を移すモードになります。
ブートローダを使用しなければいじる必要がない部分なので、忘れがちかも知れません。

ChuckChuck2009/08/12 21:37動きました! bootloaderが書かれてないことが原因でした。AVR Studio を最新版の 4.17 にすることで正しくbootloaderを書くことができました(リセット直後のLEDブリンクを確認)。ターミナルソフトから "1 " → "AVR ISP" のチェックを経てArduino IDEからサンプルスケッチを転送してArduinoとして機能するようになりました。pcm1723さん、アドバイスありがとうございました。

トラックバック - http://emusic.g.hatena.ne.jp/Chuck/20090812