マイコン工作実験日記

Microcontroller を用いての工作、実験記録

Bluegiga - バージョンアップ

2010-05-30 00:24:09 | Weblog
いよいよ、実験ボードにつなげたBluegiga(WT32)にPCをつなげて電源投入です。PC側は、115200bps, 8ビット、パリティ無しで端末を開いておきます。電源を入れてみると、次のような出力が出てきました。



WT32は、CSRのBlueCore5というデバイスを使っており、そのうえにiWRAPというファームを載せているようです。購入したボードには上に示したように3.0.0が載っていましたが、BluegigaのTech Forumを見ると4.0.0が上がっていましたので、バージョンアップすることにしました。どうやら、5月始めに正式リリースになったばかりのようです。

バージョンアップ作業は、ファームと一緒に提供されるDFU Toolを使ってシリアル経由でおこなうことができます。



更新終了後、電源を入れ直してみると無事に4.0.0になっていることを確認できました。infoというコマンドでファーム情報表示。



資料を読むと、iWRAP 4.0.0でいろいろと機能が拡充されており、3.0.0ではAVRCPのコントローラ側しかサポートされていなかったのが、4.0.0ではターゲット側もサポートされているようです。これは、かなり嬉しい。MP3プレーヤをヘッドフォンから制御できそうです。

じつは、すでにヘッドフォンでMP3再生を聞くところまで動いたのですが、せっかくなので(?)何回かに分けて説明記事書くことにします。

Bluegiga実験ボード

2010-05-29 12:03:03 | Weblog
新しいオモチャ - Bluegigaで実験するためのボードを用意しました。と、いってもLPC2388で作ったMP3プレーヤなんですけどね。ちょうど、うまい具合にスペースが空いていて助かりました。



BluegigaのI2S信号をMP3プレーヤとつないだだけです。MP3プレーヤの再生出力をA2DPで飛ばして、ヘッドフォンで聞いてみようというわけです。Bluegigaの制御はUART信号でおこなうのですが、こちらはLPC2388とはつながずに、外に出しています。とりあえずは、PCとつなげて手動でコマンド入れて動作を確認することから始めます。じつは、LPC2388側もちょっと手を入れないとUART端子が空いてないという事情もあったりします。



Bluegigaの横につけたスライド・スイッチは、Bluegigaの電源のON/OFF用。Bluegigaのリセット端子は、LPC2388から制御できるようにしていない(つないでいない)ので、手作業での電源再投入でBluegigaにリセットをかけます。早いはなしが、いまあるMP3プレーヤに最低限の配線でBluegigaをつなぎ、ソフトの変更は全くなしで動作確認をしようという魂胆です。

このブレークアウト・ボードですが、サイテーなことにわたしの使いたいI2S信号が端子として出ていません。わたしが必要としないUSBとかSPIとかアナログ入出力は全部出ているのに、デジタル音声I/FであるI2S/PCM信号に限って出ていません。まったく、どういう選択基準じゃ。幸いなことに、ランドだけはあったので、それを使って信号を引っ張り出しました。必要な信号だけなら、半分のスペースで済むのですが。。。自分でbreakout board作れるようになるべきだなぁ。



Bluegiga

2010-05-28 10:47:40 | Weblog
注文してあったBlulegigaがSparkFunから届きました。89.95USDと値段が高いので、安いモジュールだけの方を使いたいところですが、表面実装用なので基板作らないとならないので、やはりブレークアウト・ボードの方を選択。



このモジュール、お値段が張るのにはそれなりにワケがあって、単にBluetooth経由のシリアルポートとして動作するだけでなく、HFP/HSP, A2DP/AVRCPといったプロファイルもサポートしており、音声を扱うことができます。ホスト側とはI2SあるいはPCMで音声パスをインタフェースできます。これを使えば、「Bluetooth対応のW-SIMジャケットが作れるじゃん」というのが新たな目標です。I2Sもありますから、昨年製作したMP3プレーヤの出力をBluetoothでヘッドホンに飛ばすこともできます。HFPとA2DPの両方をサポートしたヘッドフォンを使えば、MP3で音楽聞いている最中に着信があったら、HFPに切り替えて着信通知することもできるんじゃないでしょうか。うーん、ワクワクするなぁ。Bluetoothなんて、ろくに使ったことないんでヘッドフォンも買いました。



SONYのDR-BT140QPです。音的にはシャカシャカしていて好きになれないけど、この形状だとこんなもんでしょうか。工作/実験の観点からは、A2DP, HFP, AVRCPと試してみたいプロファイルに対応していることの方が重要ですし。

さて、このBluegigaですが、SparkFunからダウンロードできる資料以外にもBluegigaから入手できる資料があるようなので、とりあえずユーザ登録。個人での登録はできないので、会社名と会社のメールアドレスの入力を要求されました。おそらく個人では2つ目のモジュールを買うだろうけど、会社じゃひとつも買わないんだよな。

しばらく、こいつで楽しめそうです。

制限承知で作り始めたが...

2010-05-25 23:19:42 | W-SIM
新たに作りはじめた基板ですが、実は大きな制約があります。このボードではAT91SAM7S256を使っていますが、このデバイスはSSCをひとつしかもっていません。前回作成したアナログ電話機ジャケットでは、SSCをふたつ持つAT91SAM7A3を使っていました。SSCをふたつ使っていたのは、SLICボードとW-SIMの要求する/生成するPCMクロックの速度の違いをAT91SAM7A3で変換してやるためでした。AT91SAM7S256ではSSCがひとつしかないので、上りか下りのどちらか一方向の速度変換しかできないことになります。

ほんとはAT91SAM7A3を使うべきなのですが、RAMが32KBしかなくて機能を追加するのが苦しかったのと、そのうちにSAM3シリーズでもSSCをふたつもったデバイスが新たに登場するのではないかという気がするので、それを本命として使いたいという気持ちが強まりました。そんなわけで、とりあえずは死蔵していたMMnetSAM7を使って片方向通話だけでもできる環境を用意して、リポ電池による動作と、機能追加をめざしてみることにしました。

と、まぁそんなつもりで作り始めたのですが、「次回のMTMこそは参加するぞ!!」という気分が高まってきたので、それに向けてまっとうにデモできるものを最重要視する必要性にかられてきました。とりあえず、リポ電池での待ちうけ時間測定までは調べてみるつもりですが、やはりまっとうにデモできる作品を準備するためには方針と優先度変更が必要です。おそらく、今後2カ月くらいでSAM3UとSAM3Sは入手可能になると(勝手に)推測しているので、次のようにして準備を進めていくことにします。

  • まずはSAM3U-EKにW-SIMをつなげて、シリアル部分だけでも動作確認しておく。
  • SAM3Sが入手できたら、そのAD/DAを使って送受話できるジャケットを作成する。
  • 並行して新ネタの準備を進める。

今年はとにかく、SAM3Sを当面の本命と考えて、これでジャケットを作ることを目標とすることにします。SAM3Sが入手できるまでの間は、SAM3Uでシリアルだけでも動作確認しておこうかと思います。ついでに、ひとつ新ネタを思いついたので、それを使った新型ジャケットも製作するつもりです。こちらは、現在ネタを仕入れ中。とりあえずは実験からの開始となりますですので、MTM06までにちゃんとした格好にできるかどうか。。


MTM05

2010-05-22 23:09:28 | Weblog
今日は天気も良かったのでMTM05に行ってきました。普段はブログやホームページで眺めていた作品を実際に見れて、そして作者の皆さんともお会いできるのはやはり楽しいものです。

Sonyブースでは、笠原さんに声をかけられてビックリ。10年ぶりくらいの再会でしょうか。お互いに、MTMのような場に足を運ぶとは思ってもいませんでした。見事に乗せられて、隣接するSwitch ScienceさんのブースでFeliCa Plugを購入。でも、FFCケーブルは売り切れでした。いつ使うかわかりませんが。。

それにしても体育館の熱くて、そして暑いこと。話をしていると顔から汗が落ちてきてしまいました。それに比べて、100年記念館は快適でしたね。出展者のみなさん、あしたも頑張ってください。次回こそは、自分も参加しようと思います。

次作品の製作開始

2010-05-20 00:48:14 | W-SIM
Yoshiponさんにはプリント基板の製作を勧められたのですが、意気地のないわたしは やはりユニバーサル基板で組み始めてしまいました。



この基板は前作の改良版です。小型化することを目標のひとつとしていたのですが、適当な大きさの基板がなかったのでスカスカになってしまいました(基板を切断すればいいだけなんですが、それが面倒くさくて...)。この上にSLIC基板とLCDが載る予定です。SLIC基板がデカイので、どうしても横方向にはこの程度の長さが欲しくなります。SLIC基板を2つに分断してしまおうか迷ったのですが、万が一にも動かなくなったりすると出費がイタイので、結局そのまま使うことにしました。プリント基板起こすのであれば、SLIC部分も含めて製作しないとあまりメリットがありません。しかし、そうすると使用するトランスの選択や入手方法がわからないので、現在のわたしの技量ではちょっと手出しできません。

そんなわけで基板は小さくできませんでしたが、これまでUSBモバイル電源を使用していたのを、リポ電池にすることで小型化を計ることにしました。LDOで3.3Vを作り、さらにDC-DCでSLIC基板用の5Vを作ります。SLIC部分を3.3V単一で動かせないのが残念です。充電制御には、以前SparkFunから購入したMAX1555を使っています。

マイコン基板はMMsam7sです。このモジュールには3.3Vのレギュレータも載っているのですが、上述のようにリポ電池出力からLDOで3.3Vを作っていますので、モジュール上のレギュレータは使っていません。ユニバーサル基板が100x140mmですので、全体をハガキケースに入れるつもりでいます。

SAM3UでASPを動かす - その2

2010-05-16 11:14:44 | SAM3
SAM3UでASPを起動した際の画面を再掲しておきます。



バナーのメッセージは全て正しく表示されているので、タスクが起動される前の初期化で使用されるシリアルポートへの出力は正しく動いています。main_taskの始めで出力されるべきメッセージも正しく表示されています。よって、シリアルの割り込み処理もちゃんと動いているように思われます。ところが、そのあとで例外が発生してしまっているので、何回かシリアル割り込みが連続するか、あるいはタイマ割り込みが発生した時点で例外が発生しているように見受けられます。

そのように考えて、デバイス依存部のコードを見直したのですが、SAM7Sと大きく変わる箇所があるわけでもなし、問題となりそうな点は見つかりません。NVICやSystick関連はSTM32と同一でいいはずで、異なるのはベクタの番号関連の部分だけですし。同じCortex-M3でも、STM32とSAM3Uとで異なる点があるかどうかと考えて、ようやく重要なポイントがあることを思い出しました。STM32はもう2年も前にDWMのおまけになったくらいで、Cortex-M3コアを採用したデバイスとしては比較的初期に登場したものです。そのため、Corex-M3コアのレビジョン1が採用されています。それに対して、まだ発表されて日が浅いSAM3Uはレビジョン2が採用されています。レビジョンの違いいよって例外を生じる要因があるのではないかと推測して、「ARM Cortex-M3システム開発ガイド」の17章を確認すると、レビジョン2では例外処理時のスタックのアライメントがディフォルトで8バイトに設定されっているとの説明を見つけました。SAM3Uのマニュアルを確認すると、確かにCCRレジスタのSTKALIGNビットのディフォルト設定は8バイトになっています。レビジョン1では4バイトで動作するようなので、この点が影響しているようです。

そこでhardware_init_hook()に
    *AT91C_NVIC_CCR = 0;
の1行を追加してビルドし直してみると...



メデタクsample1がちゃんと動くようになりました!! LPC17xxのマニュアルも確認してみましたが、こちらもレビジョン2ですね。同じ箇所で引っ掛かるでしょう。

SAM3UでASPを動かす - その1

2010-05-13 23:25:47 | SAM3
せっかく購入したSAM3U-EKなので、TOPPERS/ASPを動かすことにしました。

ASPではすでにDWMのSTM32おまけ基板がターゲットとしてサポートされているので、こいつを基にすれば容易に移植が可能なはずです。ARM7やARM9では割り込みコントローラやタイマは各ベンダ毎にその仕様がことなっていましたが、Cortex-M3ではNVIC, SysTickとして共通になっていますので、この部分のコードは変更無しに使えるはずです。そのため、SAM3Uへの移植作業はその分簡単になるわけです。

実際の作業はまずはクロックの初期化のコードの準備からです。おおよその流れはSAM7やSAM9と同じなのですが、これまでとは変わった点がいくつかあります。
  • SAM7/SAM9ではリセット後はRC発振器の32KHzで動作開始。SAM3ではRC発振器の4MHzで動作開始。
  • SAM7ではPLLがひとつしかなかったが、SAM3UではUSB用にUTMI PLLが用意されている。
続いてピン・コンフィグですが、これはほぼSAM7,SAM9と同じ考え方。

SAM3Sだと、各PIOピンにはPeripheral A, B, Cの3つの機能を割り当てられるのですが、SAM3Uでは従来どうりAとBのふたつだけになっています。ただし、その選択の仕方が変更されています。これまでは、PIO_ASR、PIO_BSRでPeripheral A/Bの選択をおこない、PIO_ABSRでどちらが選択されているかを示すという方式でした。この方式では、PIO_ABSRはread-onlyのレジスタでした。ところが、SAM3UではPIO_ASR/PIO_BSRが廃止され、PIO_ABSRがread-writeとなって選択機能を持つようになっています。従来の方式は他のレジスタの構成との整合性もとれていたし、解りやすく使いやすいSAM7/SAM9の特徴のひとつを成していただけに、残念ではあります。SAM3UではSAM3Sとの整合性を意識して、このような方式に変更されているようです。SAM3Sでは機能選択のためにPIO_ABCDSR1とPIO_ABCDSR2のふたつのレジスタの操作が必要になっていますが、SAM3UではPIO_ABCDSRが0x0で固定であり、PIO_ABCDSR1がPIO_ABSRという別名で呼ばれていると考えることができるからです。

つづいては、ログ出力用のシリアルポートの設定。SAM7/SAM9ではDBGUの一部の機能でしたが、SAM3ではUARTになっています。位置づけと名前は変更されていますが、機能的には同等。実際のところ、ATMEL提供のヘッダファイルでは従来との互換性を意識してかDBGUという名前でレジスタ参照するようになっていました。

ざっと、こんな作業でASPのバナーが出力されるようになったのですが、その先で例外発生して止まってしまいました。↓



この原因調査でハマッテいたのですが、その件については次回の記事とすることにします。

Night mode

2010-05-09 22:15:14 | CMOSカメラ
久しぶりに、CMOSカメラ実験ボードを引っ張り出したキッカケは、先月読んだEETIMESのこの記事です。Night Vision 2.0というオモチャがOmniVisionのCMOSセンサを使っているということですが、そういえば自分が使っているOV9650にもnight modeという設定があったことを思い出したのです。そのうちに試そうと思っていた機能なのに、まだ試したことがありませんでした。赤外線投光はなくても、CMOSカメラ単独でどの程度明るく撮れるのか試してみたくなったのです。

そんなわけで、実験です。まずは初期設定をおこなった状態で夜間の室内を撮影してみました。



窓側にシェードのかかった室内電球ランプが置いてあるのですが、それ以外はほとんど真っ暗にしか映っていません。かろうじて電話機の留守電ランプを示す赤色LEDの点灯だけが右側に写っています。人間が感じるよりもはるかに暗くなってしまっています。

OV9650のCOM11レジスタを操作して、night modeを有効にするとともにフレームレートを1/8に落として撮影したのが↓です。



おぉ、効果てきめん!! 人間が感じるよりもちょっと明るく写っています。画像が粗くなって、いかにもデジカメでとった夜景という感じです。試しに携帯電話のカメラを夜景モードにして撮ってみたら、はるかにクッキリと撮影できました。近頃の携帯の方が使用している素子も新しいですし、撮影後の信号処理の効果も大きいのでしょう。

そのうちに、赤外線LEDもつけてみましょうかねぇ。

ブートしない理由

2010-05-08 20:09:11 | ARM9
ちょっと遊んでみたいことができて、久しぶりにCMOSカメラ実験用のARM9ボードをひっぱりだしました。

ところが、USBケーブルをつないで電源を入れても、何の反応も無し。仮想シリアルポートとして動くはずなのに、どうしたことか? しょうがないのでフラッシュの内容を書き直してみようと思い、SAMBAジャンパを飛ばして、電源を入れ直し。ところが、それでも何の反応も無し。SAMBAが動きません。ちょっと、あせってきました。



原因調査のためにJTAGで見るかと考え、急遽JTAGコネクタを付けてみました。ところが、それでもデバイスがつながって見えていないようです。「JTAGでも見れないということは、AT91SAM9260を飛ばしてしまったんだろうか?」かなり不安になってきました。

電源を示す赤色LEDは点灯しているので、電源はちゃんと入っています。回路図で再度確認すると、LEDの点灯は3.3Vが来ていることを示しています。と、ここまできて、ようやく気が付きました。ボードにはもうひとつの電源 -- VDDBU、すなわちバックアップ用電池があることに。このボード、出荷時の結線ではDC電源が供給されていても、VDDBUは常に電池から供給されるようになっています。バックアップ電池のCR2032を取り出して、電圧を計ってみると...0.2Vしかありません!! 長らく放置している間に完全に放電されていたようです。

電池を入れ代えると、問題無く動いてくれました。AT91SAM9260は、ブート直後は32KHzのスロークロックで動作を開始するのですが、この部分の電源がVDDBUなので、電池が切れて全く動けなくなっていたというオチでした。