マイコン工作実験日記

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

HFユニットでできそうなこと -- その2

2010-12-30 23:45:41 | Weblog
今年最後の記事は簡単な実験結果の報告です。

以前から一度動作確認をしてみよと思っていたのですが、忘れていたものです。Bluetooth Class 2はおよそ10mの到達範囲だと言われています。HFPのリンクを張った状態で端末から離れていけば、ある程度離れたところでこのリンクが切断されます。そこで切断通知を契機としてブザーを鳴らしたり、振動モータを動かすことで、携帯電話の置き忘れ機能を実現することができます。Bluetooth対応腕時計とかブレスレットが、この機能を売り文句にしています。

WT32ではどのように切断通知が出るのか動作確認してみました。



はい、ちゃんとNO CARRIERのメッセージで切断を知ることができました。ERRORの後は切断原因を示しているようですが、409という番号はどの層で検出されているエラーコードなのでしょう。ちょっとBluetoothについて勉強が必要なようです。

2011/1/1 追記:マニュアルを確認したところ、RFCで始まるエラーはRFCOMMの層で検出されたエラーであることがわかりました。

発掘、そして埋め戻し

2010-12-25 21:51:07 | Weblog
すでに年末モード突入です。カミさんにせっつかれ、雑誌や部品でちらかったままの部屋をわずかではありますが、整理。納戸の中にしまわれたままだった、古いPCのボードやキットの基板等も廃棄処分に。そんななかに、何を入れたか全く覚えのない箱がひとつ出てきました。開けてみると、昨年末の大掃除の際に未使用部品を整理しておいた箱でした。結局、1年間死蔵されただけだったというありがちな展開。。。

今の住居に引っ越してきて9年になるのですが、引っ越し依頼一度も開封されていない文庫本やら雑誌の詰まった段ボール箱の廃棄を命じられました。なんだかんだで、合計600冊くらいの文庫本と雑誌を捨てたでしょうか。しかし、それでもやはり捨てられないものもあります。そんな一冊がコレ。





Intelの4ビットマイコン、4004/4040のアセンブリ言語マニュアルです。実際には4004/4040を使ったことはなく、チップも持っていません。単なるコレクションのようなものですが、自分にとっては永久保存資料なわけです。

そんなわけで、これら部品や本は再度埋め戻されたのでした。

HFユニットでできそうなこと

2010-12-22 12:43:57 | Weblog
W-SIMのBluetoothジャケットでは、WT32をHFPのAG (Audio Gateway)側として使用していましたが、これをHF Unitとして設定した場合には、どうなるかを試してみました。WT32の設定を変更してリセットするだけです。

わたしのDoCoMoの端末側で登録をすると、こんな出力が。。



端末の状態を通知する一連のメッセージが出力されます。
  • battchgは電池の充電状況を示しています。電池の残りを知ることができます。
  • signalは電波強度に相当します。
  • callとかcallsetupは呼の状態を示すものですね。
  • NETWORKは説明するまでもなく、事業者名です。
ふつうのBluetooth対応ヘッドセットでは、充分な情報表示能力が無いために、これらの情報は全く利用されていないわけですが、ちょっとしたLCDを使えば電池残量アイコン表示とアンテナ表示が簡単に用意できることがわかります。

続いて呼を入れてみると。。



CALLERIDで発信者番号はわかりますが、電話帳からの名前情報は渡ってこないようです。AT+CSCSであらかじめ文字コードを指定しておく必要があるかとも想像しましたが、そのコマンドはサポートしていないようです。どうやらわたしの端末(N-02A)がこの機能をサポートしていないようです。また、端末から時刻情報をもらうコマンドAT+CCLKもサポートしていないようです。

発信者番号から発信者名を調べる方法としては、上記のようにiWRAPのCALLERID情報(実際には端末からのCLIPメッセージ)以外にも、電話帳にアクセスする方法が考えられます。端末によってはOPPを使って電話帳を転送することもできるので、あらかじめ転送しておいた電話帳から検索するわけです。また、近頃のスマートフォンはPBAPをサポートしているものが多くなっているようですので、これを使って検索することも可能なようです。残念ながら、わたしの端末ではどちらもサポートしていないので名前検索は断念せざるを得ませんけど。

今後の参考のために端末がサポートしているプロファイルくらいは整理されていないかと探したところ、サスガはドコモ、このページを見つけました。iWRAPはPBAPをサポートしていますので、これを使うことで発信履歴や着信履歴も参照することもできそうです。サポートするスマホに機種変更するとか、やはりPBAPをサポートするiPhoneに乗り換えるとかすれば、実験して遊べるのですが。。。W-SIMも維持している我が身としては、金欠状態なので当分は携帯にこれ以上費用かけられません。

早くも来年の構想を練る

2010-12-18 11:05:11 | W-SIM
今年後半は、Bluetooth対応W-SIMジャケットを中心に製作をすすめてきました。昨年のMP3プレーヤの延長線上にあったとも言えます。自分ではあまり意識はしていませんでしたが、部品としてはタッチパネル付きLCDやBluetoothモジュールがそれなりの値段します。Fusion PCBで作成したプリント基板は10枚ありますから、まだ余っています。これを頒布するなりしてもいいわけなのですが、パターンミスがあるうえに部品代が1万円以上かかるので、そこまでして自作してみたいという人もいないだろうと思われます。

そろそろ次のW-SIMジャケットの構想を練るにあたり、次回作ではコストを半分程度に抑えて、基板頒布できるようなものにしようかと考えています。一昨日読んだKonyaさんの記事にも刺激されたのも一因です。またMTM06でもキットとか基板を販売する人が多いせいか、訪れた人からも「キットは無いのか?」と聞かれましたし。まぁ、キットを用意するのは大変ですので、実際にできるのは基板頒布がいいとこでしょうけど。

現在思い浮かべているおおまかな構想は次のとおりです。
  • こんどこそ、ATMELのSAM3Sを使う!!
  • 表示の液晶は小さく
    コストを抑えるうえでは重要な要素。1,000円以下で買えるもの。いいとこOLEDの小型のもの。
  • CODECチップは使わない
    CODECに頼らず、マイコンだけでなんとかする。12bitのDA, ADが使えるので、音質的にもほぼ満足できると思われる。

機能的には通話しかできないシンプルなもので、待ちうけ画面に時計表示くらいはある程度でしょうか。SAM3Sの勉強を兼ねて、基本に立ち返ってみようかと思います。キーパッドをどうするかも課題なのですが、あいかわらずSAM3Sの入手に時間がかかりそうなのも悩ましいとこです。Digikeyで調べたところでは、デバイスにもよるのですが来年2月~5月というありさまです。

またW-SIM無しで、WT32を使ったBluetoothデバイスを作ってみたくなってきました。機能的にはMW600みたいなものです。サイズははるかに大きくなってしまいますが、その分LCDも大きくして情報表示量を増やして遊べそうな気がします。MouserでもBluegigaの取り扱いを開始したようで、WT32もSparkfunに比べて安価に入手できるようになったのも好都合です。こちらも、マイコンに何を使うか悩ましいですが、当面は手持ちのもので実験を進めることにしようかと思います。

ひっかけた、裂けた、泣けた

2010-12-15 23:26:59 | Weblog
都合良く秋月のポリカーボネート・ケースにBluetoothジャケットを納めることができて、ひとり悦に入っていたのですが、そんな幸運もつかの間 悲劇がやってきました。

ケースに入れたままではファームの更新ができないため、いったん基板をケースから取り外す必要があります。ファームを更新してから、ケースに戻して電源を入れてみるとタッチパネルが機能しなくなってしまいました。しばらくしてアイドルタイマーが働いてバックライトが消えた場合には、タッチによって画面が戻ります。どうやらタッチは検出できても、座標が拾えなくなってしまっているようです。再びケースから取り外して、デバック用のコンソールをつなげてみると、X座標が拾えなくなってしまっていることがわかりました。



そこで、LCDパネルの左下部分から出ているフレキ・ケーブル部分をよく見てみると。。



なんと、フレキの一部が裂けてしまており、その結果一番右の線が断線しています!! こいつが、X1か X2に相当しており、その結果X座標が読めなくなってしまったようです。おそらくケースから取り出す時に、フレキがケースに引っ掛かってしまったのでしょう。それに気が付かずに基板を引っ張り出したために、ケーブルが裂けてしまったと推測されます。上からテープでも張って保護すれば、こんなことにはならかかったのでしょうが、それは後になって気が付いたことです。タッチパネルが動かないと、ケースに入れても何の操作もできません。せっかく箱に入れたのに、飾りにしかならなくなってしまったという悲しい現実です。

このLCD, ちょっと値下げされたとはいえ、$80もします。送料含めると$90。ちょっとした不注意で$90の出費というのは、とっても辛いのですが、ここまできて単なるお飾りというのも虚しいので、修理用に発注しました。タッチパネルが使えなくなったものは、LCDとして使いまわすことにします。

うーん、それにしても悔しいなぁ。

ポリカーボネートは固かった

2010-12-12 21:03:25 | W-SIM
Bluetooth対応ジャケットの基板は、何も考えずにEagle freeware版での最大サイズである80mm x 100mmで作ったので、ちょうどいいサイズのケースなんて都合良く見つかる訳が無いと思っていたのですが、予想に反して簡単に手ごろなケースが見つかってしまいました。



使ったのは秋月のポリカーボネート・ケースです。内寸が112x80x24mmの112-TSを使用。幅が80mmなので作成した基板がピッタリと収まってくれて気持ちいいです。高さは基板長100mmに対して112mmと長めですが、W-SIMがはみ出す作りになっていたので、これもちょうどいい具合に収まりました。秋月の商品カタログでは深さは14mmとなっていますが、これはタイポで実際には24mmあります。ちょっと深めで、Lipo電池が動いてガタガタするので裏側にはプチプチを詰め物として入れました。



ポリカーボネート・ケースって初めて使ってみたのですが、ドリルで穴開けてもヒビが入るようなこともありませんし、ネジ穴とか開けるには使いやすそうだと感じました。今回はタッチパネルを使うためにLCDを出すための穴をあけなければならず苦労しました。適切な電動工具でもあれば何でもない作業なのでしょうが、手作業でドリル穴をつなげてゆき、ヤスリがけする作業で何時間もかかってしまいました。この作業で疲れてしまったので、その後は充電用にUSBコネクタの穴を開けるので精いっぱい。W-SIM挿抜用の穴は省略です。詰め物をして蓋を閉めれば基板が動くこともないので、基板のねじ止めも省略しています。

電源スイッチとリセットスイッチを操作するためには、フタを開いてやる必要があるのが難点です。それでもケースに入れることで見違えるようにまとまった工作に仕上がった印象になり、自分ではかなり満足しています。


MW600の動きを調べてみる -- その2

2010-12-10 23:21:18 | Weblog
MW600の続きです。今回はMW600の動きをWT32側から見てみます。MW600の電源を入れると、直前にペアリングしてあった相手に自動的に接続してきますが、その時の様子を見てみると。。↓



HFPの接続後に、MW600はなにやらいくつものATコマンドを送ってきているのですが、WT32はこれらをサポートしていないためにメッセージを表示しています。これらのコマンドのうち、AT+CCLK?が時刻を問い合わせているコマンドのようです。こいつに応答して現在の時刻を表す文字列を返してやれば、MW600はそのディスプレイに時刻を表示してくれるのであろうと推測されます。

発信者番号については、WT32にRINGコマンドを送る際に、引数で番号を指定してやります。最初の引数は着信音を鳴らす最大回数です。



とすると。。




このとおり、発信者番号が表示されます。最初にプラスが表示されてしまうのは、番号のフォーマットの指定の問題だと思うのですが、iWRAPからどのようにしてフォーマットのタイプを指定するのかわかりません。ちょっと気になるのですが、見て見ぬフリをする方向で。。

上記の例ではMW600を使って応答した後で、MW600から切断をかけています。音声も呼もちゃんと切れるのですが、どういうわけかA2DPとAVRCPの接続まで切れてしまいます。ログでNO CARRIER 4が通話のSCOが切れたところなのですが、続く3, 2, 1のNO CARRIERでA2DPとAVRCPが切れてしまっているのです。この問題、いつも発生するわけでもないようなのですが、どうもiWRAPとMW600のBluetoothスタックの相性というか、どちらかの実装に問題があるんじゃないかと思われます。

発信者番号だけでなく名前も引数として追加してやると最初に着信音が鳴る時には番号が表示されますが、2回目以降は名前が表示されるようです。最初のATコマンドでUTF8という文字が見えたので、UTF8で送ってやれば日本語での表示もできるのではないかと想像して試してみました。



予想どおり、バッチリ日本語表示できました↓。文字数は、これが限界のようで、横スクロールするような芸はありませんでした。



このように名前を表示するための手段はわかったのですが、今のところジャケットには電話帳機能がありません。そのため、発信者番号から名前を求めることができないので、この機能を活かすことができず、発信者番号の表示しかしていません。

もうひとつの残念な機能が曲名表示。こちらはAVRCPの機能なのですが、WT32 iWRAPのtarget側実装ではこの機能がサポートされていません。controller側には、曲名情報を要求するコマンドがサポートされているのですが。。。まぁ、iWRAPという仕掛けの制約というか限界というところでしょうか。こうゆう制約を見るにつけ、やはりWT32はAVRCPではtarget側よりはcontoller側、HFPではAGよりもHF側として使った方が、その機能を活かすことができるように思われます。つまり、MW600のようなものを自作するのに向いていると言えます。

MW600の動きを調べてみる -- その1

2010-12-07 22:57:17 | Weblog
前回の記事に書いたように、新たに購入したMW600はなかなか高機能なのですが、残念ながらBluetooth対応ジャケットでは使用できないものがいくつかあります。今回はいままでに分かっている範囲内で、使える/使えない機能を整理してみることにします。おそらくは普通の携帯電話とペアリングしたとしても、使えない機能はあるでしょう。ソニエリの製品ですから、全機能を活かしきるにはソニエリの携帯電話が必要なのかもしれません。Bluetooth対応の歴史が長いSoftbank端末ならけっこういいセンいけるでしょうか。

機能使える?
HFPでの接続
着信音
発信者番号表示
発信者名表示×
着信応答
通話
通話切断
ボイスダイアル×
時刻表示×
A2DPでの接続
AVRCPでの接続
再生開始/停止
曲送り
曲戻し
早送り
巻き戻し
楽曲タイトル表示×


MW600は1行だけですが、表示部分をもっています。そのため、着信中には発信者番号/発信者名、待機中には時刻、曲再生中にはタイトル表示をすることができます。しかしながら、Bluetoothジャケットでは発信者番号表示はできるものの、他の機能についてはサポートできていません。これらの機能がサポートできていない原因はWT32にあったり、ジャケットのファームにあったりするのですが、そのあたりの事情については、次回の記事で書こうと思います。

早送りについては、実際には次のアルバムへのスキップ機能として使用しています。ボタンを押し続けることで、連続して早送り指示が送られてくるのですが、その機能には対応していません。巻き戻しについては、前のアルバムへ戻る機能として使用しています。

なんとか新基板で動作

2010-12-04 11:35:18 | Weblog
PCB自作2枚目となるBluetooth対応W-SIM基板へのコード移植作業を進めてきましたが、これまでにユニバーサル基板上で組んだ機能をひととおり動かすことができました。そこで、昨夜はET2010後にあった飲み会にこのボードを持参、なんとかデモすることができました。わたしはET2010には出展も見学もしていないので、その期間の時間も使って移植をしてたりしたのですが。。



Bluetoothヘッドセットは、先日購入したソニエリのMW600です。先月、新色のホワイトが発売になったのをきっかけに購入しました。今回は、こいつとペアリングしてデモ。これまで使っていたDR-BT140とちょっと動きが違っているところがあるために、まだ時たまおかしな動きをすることがあるようです。機能的にも、MW600の方が豊富なのですが、それらの機能を生かすことができていないというか、できなかったりします。この問題については、後日記事を書きたいと思います。

リポ電池は基板の下部に配置することを想定したので、多少大きくなってもいいだろうということで、2000mAhと容量の大きなものを購入しました。



使用するマイコンが実験ボードのLPC2388からLPC2387に変わったこともあり、使用するGPIOの割り当てを変更しています。それに伴い、LCD基板上のLCDコントローラとNANDフラッシュへのアクセス部分を変更する必要が生じたのですが、その部分のつまらないバグをとるのに随分と時間を費やしてしまいました。

画面に表示するアイコンはこれまではLPCの512KBの内蔵フラッシュ領域に書き込んでいました。しかし、Bluetoothの状態表示アイコンを追加したり、電話用のダイアルパッドのボタンもビットマップデータとして用意したため、画面表示に使用するビットマップデータだけでも100KBほどになってしまいました。LPCのフラッシュを消費するのももったいないので、この機会にLCD基板上のNANDフラッシュへビットマップデータを追い出しました。空いたマイコン側フラッシュには、これまで抜いてあったAACのデコーダを入れ戻し、AAC(M4A)の曲データの再生も可能となっています。

なんとか新基板で動作するところまでは漕ぎつけたので、電池とともにケースに収納したいところです。適当なケースが見つかるといいのですが。。。そもそも、使用するケースを想定して基板設計をしなけばいけないとは頭ではわかってはいますし、MTM06でもYukiさんの作品とお話しを聞いて、それを再認識させられました。しかし、細かい事前準備をしっかりとするということができないズボラな性格のわたしは、どうもそういう作業ができません。用意したケースにぴったりと入るよう作品に仕上げるためには、いま一度(あるいは2度くらい?)基板を作りなおす必要がありそうです。これは、来年の課題かな。

WT32の初期設定

2010-12-02 23:15:29 | Weblog
プリント基板上のWT32は、アプリケーションに合わせて適切に設定しておく必要があります。これで3つ目のWT32なので、同じことを繰り返すのもこれで3度目になるのですが、これを機会にWT32に必要な初期設定作業や、設定項目/設定値を整理してまとめておくことにします。まぁ、自分のためのメモなわけですが、今後新たに設定必要な項目が生じた時にも、このページを適宜更新しようかと思います。


新たなWT32を使用する際には、次の作業をおこなう。
  1. ファームウェアのバージョンアップ購入したWT32に入っているファームがiWRAP3.0である場合には、これをiWRAP4.0にバージョンアップする。
    1. SET RESETにより、設定を初期状態にクリアしておく。
    2. RTS端子とCTS端子をつないでおく。
    3. SerialDFUを用いてバージョンアップをおこなう。

  2. PSTOOLによるパラメータ設定PSTOOLを使って、次のパラメータを設定する。iWRAPが立ち上がっている状態でPSTOOLを立ち上げると、自動的にモードを変更してPSTOOLが動作する。ただし、iWRAPで設定したVREGENの設定が動作しなくなるので、この機能を利用している場合には注意が必要。
    PS KEY意味初期値設定値
    PSKEY_CHARGER_CURRENTSet the charger current010
    PSKEY_CHARGER_TRIMTrim value for the current charger1110
    PSKEY_DIGITAL_CONFIGDigital Audio Interface configuratin settings0x00060x0406
    PSKEY_COUNTRYCODECountry codeNorth American and EuropeJapan
    PSKEY_PCM_CONFIG32PCM interface settings bitfields0x008000000x18000002
    PSKEY_PCM_FORMATPCM data format0x006c0x0180

    COUNTRYCODEについては、現在のファームでは使われていないパラメータであることが判明したので、設定しなくてもかまわない。

  3. PCMの設定PCMの設定はPSKEYでもおこなえるが、iWRAPコマンドでもおこなえる。初期値は、

    set control pcm
    SET CONTROL PCM 00800000 006c

    であり、これを

    set control pcm
    SET CONTROL PCM 18400002 0180

    に変更する。PCMの設定は、このようにSETコマンドで変更可能であるが、SET単独でリストをとっても表示されない。上記のようにSET CONTROL PCMで表示される。最初の引数はPSKEY_PCM_CONFIG32に相当する。2つ目はPSKEY_PCM_FORMATに相当する。configはPCMデータのビット数や使用クロックなどを定め、Data sheetで説明されているが、Bluegigaの提供するツールで求めることもできる。ふたつめの引数では使用コーデックを定める。それぞれの意味は次のとおり。
    引数意味
    初期値config00800000Master, Frame Sync:long
    format006c入力:Linear, 16bit, 2の補数, 無線区間:CVSD
    設定値config18000002Slave, Frame Sync: Long, 8bitin 8bit slot
    format0180入力: μ-Law, 無線区間: CVSD

  4. 使用するプロファイルに応じて、SETコマンドで設定をおこなう。現在のHFP-AG, A2DP, AVRCPを使う設定は、次のとおり。
    set
    SET BT BDADDR 00:07:80:94:50:10
    SET BT NAME WT32-WSIM
    SET BT CLASS 200408
    SET BT AUTH * 0000
    SET BT IDENT BT:47 f000 4.0.0 Bluegiga iWRAP
    SET BT LAP 9e8b33
    SET BT PAGEMODE 4 2000 1
    SET BT PAIR 58:17:0c:e7:b8:9f 47cbf3abafd23ce52e9e4be5a58f8a14
    SET BT POWER 0 0 0
    SET BT ROLE 0 f 7d00
    SET BT SNIFF 0 20 1 8
    SET BT MTU 667
    SET CONTROL AUDIO PCM I2S_SLAVE
    SET CONTROL BAUD 115200,8n1
    SET CONTROL CD 00 0
    SET CONTROL CODEC SBC MONO 32000 0
    SET CONTROL ECHO 7
    SET CONTROL ESCAPE 43 00 1
    SET CONTROL GAIN 8 8
    SET CONTROL MICBIAS b 0
    SET CONTROL MSC DTE 00 00 00 00 00 00
    SET CONTROL PREAMP 1 1
    SET CONTROL READY 00
    SET CONTROL VREGEN 2 400
    SET PROFILE A2DP SOURCE
    SET PROFILE HFP-AG HF Voice Gateway
    SET PROFILE SPP Bluetooth Serial Port
    SET PROFILE AVRCP TARGET
    SET

以上。