マイコン工作実験日記

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

早くも来年の構想を練る

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-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挿抜用の穴は省略です。詰め物をして蓋を閉めれば基板が動くこともないので、基板のねじ止めも省略しています。

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


PCMとI2Sの切り替え

2010-09-18 12:29:43 | W-SIM
今回のプロジェクトではMP3による音楽再生とW-SIMによる通話機能の両方をBluetooth対応することを目標にしています。BluetoothモジュールであるWT32は、MP3の再生時にはI2Sを使いLPC2388とつながり、通話時にはPCMを使ってW-SIMとつながることになります。



通話とMP3再生のどちらのタスクが動くかで使用するインタフェースが代わるのですが、ここで困った問題がひとつあります。WT32ではI2S信号の端子とPCM信号の端子が同一のピンを使用しており、兼用になっているのです。そこで、74157を使ってWT32のつながる相手を選択するように配線しました。



通話時はW-SIMがマスターとなってクロックを供給しますので、WT32はスレーブとして動作。MP3再生時も同じようにWT32側はI2Sスレーブとして動作するように設定することにします。こうすれば、兼用されているピン機能を切り替えてもピンの入出力方向は変わらずにすみます。

実際のボードの様子↓。WT32の下にある74157が見えています。USBシリアル変換モジュールは、WT32の設定ならびに動作確認用です。こいつを使ってWT32のiWRAPファームは更新済み。



WT32の上にさらにかぶさるようにして、LCDを載せます。高さをかせぐために連結用ピンヘッダを使っています。




LPC2388とPCM信号 -- その2

2010-09-09 00:38:51 | W-SIM
前回に続いてLPC2388のSSPにW-SIMのPCM信号をつなげてみる実験です。今回は、実際の動作の様子。

まずはW-SIMを音声通話用に初期化するATコマンド列を投入してやります。そして、着呼を入れてやるとRINGメッセージが表示されるので、AT@CALLEDを返します。すると発呼側では呼出音が聞こえます。着信側では続いてATAコマンドで応答してやります。



これで通話状態になって、W-SIMからはPCM信号が流れてきます。pcm startというコマンドでPWM1とSSP1を初期化してやると、SSP1から送信された音声データを聞くことができました。



この例では、33クロック目でPCMSYNC信号の立ち上がりを検出し、CR0にキャプチャされています。MR5を同じ33に設定し、MR6を34にすることで正しく音声データが送信できることが確認できました。MR5を32とか34にすると音が歪んでしまいます。

最後にW-SIMにATHコマンドを投入して呼を切断しています。

こうして、PWMを使って同期信号を細工してやることで、LPC2388のSSPでもW-SIMのPCM信号を送信できることがわかりました。ところが、しばらく通話状態にしていると、突然無音状態になってしまうという症状が発生してしまいました。調べてみると、PWM1CR0にキャプチャされるPCMSYNCの立ち上がり位置が変化しています。基本的にはPCMSYNCは48 PCMCLK周期なのですが、時々同期位置が変化することがあるようです。そこでデータ送信をする割り込み処理のタイミングでCR0が変化したことを検出して、MR5とMR6を再設定してやる処理を追加して問題を回避しています。ときたまノイズが入ることになってしまうのですが、頻度はそれほど多くないのでそれほど気になりません。

データの送受信はMR5が一致したタイミングで割り込みを発生させ、その割り込み処理の中でおこなっています。pcm_syncが割り込みの回数、そしてpcm_xmitとpcm_recvがそれぞれ送信、受信の回数です。受信はFIFOにデータが入った時にだけおこなっているわけですが、どういうわけかpcm_syncの回数よりも少なくなってしまっています。謎です。

データの受信処理では、受信したμ-Lawデータを10ビットの線形PCMに変換して、DAコンバータに出力しています。しかし、今のところDAにアンプをつなげていないので、受信音の確認はできていません。

LPC2388とPCM信号 -- その1

2010-09-06 23:43:16 | W-SIM
LPC2388のSSPはショート・フレーム形式のPCM信号はサポートできますが、ロング・プレーム形式はサポートしていません。W-SIMのPCM信号を直接SSPにつないでしまった場合には、下図に示すようにSSPは1ビット遅れてデータを送受することになってしまいます。



SSPを使って正しく送受するためには、フレーム同期信号であるPCMSYNCが1クロック分早く出てくれればいいことになります。PCMSYNCの周期は48 PCMCLKなので、1クロック早くすることは47クロック遅らせることと同じです。1クロックだけならフリップ・フロップを使うという手もありますが、47クロックを数えるにはカウンタが必要です。そこでPWM1を使って希望する同期信号を生成することにします。

PWM1はPWMモードで使い、PCAP1.1につないだPCMCLKをカウントさせます。周期が48 PCLKですからカウント値の範囲を1~48とし、49になったら1にリセットするためにマッチレジスタMR0を49に設定しておき、MR0との一致でリセットする設定とします。さらにPCMSYNCをPCAP1.0につないでおき、この立ち上がりを検出してCR0でキャプチャしてやります。これで、クロック1から48までのどの位置でPCMSYNCが立ち上がったかがわかります。下図の例ではCR0にキャプチャされる値は、PCMSYNCのタイミングやPWMの動作により、3あるいは4のいずれかになるものと考えられますが、これは実験で確認することにします。



欲しい同期信号はキャプチャできた位置から1クロック早く立ち上がって、1クロック後に落ちてくれればいいいので、キャプチャができたら、CR0の値に基づいてMR5とMR6を設定して、PWM1.6の出力にはダブル・エッジモードを選択。MR5との一致でセット、MR6との一致でリセットするように設定してやります。このPWM1.6の出力をPCMSYNCの代わりとしてSPPに与えてやればいいわけです。



実際に実験するためには、音声データを送受信する仕掛けも必要です。今回は送信側だけを実験してみることとし、あらかじめ用意しておいた音声データを順次SSPへ送信していくこととします。送信データは、MR5との一致が生じた時点で割り込みを発生させて、そのタイミングでFIFOに書き込むこととしました。ホントはこのタイミングでは遅いわけですが、1/8000秒遅れるだけですので、気にしないことにします。

ちょっと説明が長くなってしまったので、実際に実験してみた様子と、その結果わかったことについては、また次回。

PCM信号のつなげかた

2010-09-03 07:19:01 | W-SIM
しばらく前にW-SIMのPCM信号についての簡単な説明を書いたので、今回はPCM信号をどのようにして使うのかについて具体的な例を挙げて説明してみたいと思います。

まず一番簡単なのは、前回も書いたように適切なCODECを選択して、それとつなぐことです。何も難しいことはありません。似たような名前の線をつなげばいいようなもんです。例としてML7041を使った場合を下図に示します。



CODECを使う場合のメリットは、次のようなことです。
  1. 簡単な追加回路で、マイクやスピーカ、ヘッドフォンをつなぐことができる。
  2. 音量やミュートの制御をおこなうことができる。
  3. DTMF音やダイアル・トーン、着信音などの生成がおこなえる。
  4. 通話にはマイコンは介在しないので、マイコンに負荷を与えない。
ソフトについても通話中にはマイコンが介在しないので、呼の制御さえやってやれば良く、通話中には何の処理もいりません。簡単でいいのですが、用意されたメッセージを再生したり、通話を録音したりということがしたければ、マイコンを介在させる必要が生じます。

W-SIMのPCM信号をマイコンで送受するためには、ロング・フレーム形式のPCM信号を送受できるインタフェースがマイコン側に必要です。AT91SAM7シリーズの同期式シリアルインタフェースであるSSCは、設定によりロング/ショートいずれのフレーム形式のPCM信号も送受することができます。そのため、例えば次のようにして、W-SIMを直接マイコンと接続することができます。SSCはロング・フレーム形式のスレーブ側に設定して、W-SIMから供給されるPCMCLK, PCMSYNC信号に同期して動作させます。



マイコンでの処理では、毎秒8000回送受されるPCMデータを取りこぼさないようにする必要があります。AT91SAM7では、DMA機能を使って割り込み処理の負荷を減らすことができます。

今回のプロジェクトではBluetoothで音声を飛ばすことが目標ですが、使用するBluetoothモジュールであるWT32はPCM信号を送受することができ、ロング/ショートのいずれのフレーム形式もサポートしています。そこで、SSCの時と同じように、WT32側をロング・フレーム形式のスレーブ側に設定してやれば、次のようにW-SIMと直結できることになります。



W-SIMが送受するPCMデータは8ビットのu-Law形式ですが、WT32はこのu-Lawを扱うこともできます。適切にWT32を設定してやれば、受信したu-Law形式の音声データをBluetoothの無線区間上ではCVSDという符号に変換して送ることもできるハズです。

このようにW-SIMと同じロング・フレーム形式をサポートできる同期式シリアルのインタフェースがあればPCM信号は簡単につなぐことができます。今回マイコンとして使用するLPC2388は同期式シリアルインタフェースとしてSSPを持っており、SPI, 4-Wire TI SSI, NS Microwireの3種類のフレーム形式をサポートしています。このうち、TI SSIは、PCMのショート・フレーム形式と同一なのですが、残念ながらロング・フレーム形式はサポートされていません。そのため、SSPとW-SIMのPCM信号を直接つないでも正しく動作しません。しかしながら、ちょっとした工夫をすれば、LPC2388の機能を使ってW-SIMのPCM信号をつなぐことが可能なことに気が付きました。次回は、その方法と実験方法について紹介しようと思います。


NS001Uを開いてみた

2010-08-24 23:43:49 | W-SIM
先週、W-SIMのIF_SEL信号はUARTとUSBのインタフェース切替え信号だろうとの情報をいただいたので、手持ちのNS001Uを開いてみました。以前、DDを購入した時には即日分解してみたのですが、NS001UについてはどうせUSB変換チップが入っているだけだろうと思い、中を覗いてみたことはありませんでした。

ケースは小さなネジで止めてあるだけなので、時計ドライバで簡単に開けることができました。



フューズらしきもの1点、ダイオード2点、大きめの抵抗らしきもの1点。保護用のパーツだけで、単純にUSB端子がW-SIMソケットにつながっているだけなのかとも思いましたが。。。

裏返して見ると、予想に反して結構な数の部品が。。。やたらと、RCがある印象を受けます。



USBコネクタに直結というわけではないことはわかりましたが、それ以上の究明については断念。老眼の身には、こういう小さい部品の番号を読み取るのはかなりつらいので。とりあえず、U2は終端ならびにフィルタ用のデバイスだと想像しますが、U1, U5はなんだろう。いちおうIF_SEL端子をテスタであたってみると、Hレベルになっています。DDではLだったので、確かに違いはあるようです。

USBとして使うには思いのほか部品数が必要なように見えるので、「やはりマイコン工作には、これまでどうりUARTにつなぐのが一番簡単だな」というのがきょうの結論です。


W-SIMのPCM信号について

2010-08-17 22:59:38 | W-SIM
W-SIMの信号については、そのピン番号と信号名がWCMのページで公開されています。おそらく通信関係の知識をおもちの方であれば、これらの名前をみるだけでおおよその意味が理解できると思われます。しかしながら、通信関係の知識が無いと、特に音声関連の信号にはなじみが無いと思われます。そこで、今回の記事ではW-SIMを使うための、各ピンの扱いについて簡単に説明してみたいと思います。


まず、誰にでも理解できるのがVcc とGNDです。わたしは、Vcc = 3.3Vで使っていますが、仕様としては5Vまでの電圧で使えるようです。

TXD, RXD, RTS, CTSの4本は、RS232Cを知っている方ならご存知のとおりのシリアル通信制御用の信号です。W-SIMの信号名はホスト側から見た信号に合わせてつけられていますので、それぞれの信号をマイコン側の同じ名前の端子に直結すれば通信できます。例えば、W-SIMのTXD信号(1番ピン)は、マイコン側のUART(あるいはUSART)の送信端子につないでやります。すなわち、TXD信号は入力信号であることに注意してください。他の端子も同様です。

DTR, DCD, RIはちょっとなじみが薄いかもしれませんが、モデム制御用の信号です。マイコン側のUARTがモデム制御信号の端子を持っていれば、それらと直結してやることができます。マイコンにモデム制御機能がなければ、DTRをLにしてやれば、DCD, RIは未接続でもW-SIMを動かしてやることはできます。INS信号は、W-SIM側に電源が入っており、選択されていることを示す信号のようです。モデム制御信号のDSRと同じように扱えるようです。IF_SEL信号は、複数のW-SIMがある場合の選択信号のようなものではないかと想像しています。Lレベルにしてやる必要があります。

と、まぁ、ここまではマイコンを使っている人なら、ほとんどの人が何の問題もなく理解できるところだと思います。わかりにくいのは、音声PCM信号用の4つの信号の意味でしょう。PCMについては、音声や音楽のデジタル化の基本技術ですので、多くの方がご存じだと思うので、基礎的な説明はここでは省略します。電話用途では、人間の音声の帯域が4000Hzを上限として充分に表現できることから、8000Hzでサンプリングするのが標準となっています。国内のISDNあるいはひかり電話のようなデジタル回線上では、さらにサンプリングされた値を対数圧縮した、u-Law符号を用いて1サンプルを8ビットで表現しています。この結果、8 x 8000 = 64Kbpsの帯域で音声を送ることができます。この規格については国際標準であるG.711で定められていますので、もうちょっと勉強したい方はこちらを参照してください。

W-SIMでも上記のように8000Hzでサンプリングした8ビットu-Law符号によって音声データを表現しており、PCM信号の4つの端子を使ってその送受をおこないます。それぞれの信号は次のような意味となります。それぞれの内容の項が示すように、信号は適切なCODECを選択すれば、CODEC側の信号と直接接続することができるようになっています。
信号名内容意味
PCMCLKPCM CODECクロックコーデックに供給するデータシフトクロック
PCMSYNCPCM CODEC同期信号CODECに供給する8000Hzのフレーム同期信号
PCMINPCM CODECデータ入力CODECのデータ入力端子に与える回線からの音声データ信号
PCMOUTPCM CODECデータ出力CODECのデータ出力端子から受け取り、回線へ出力する音声データ信号


CODECというのは、Coder/Decoderのふたつの言葉からなる合成語で、簡単なはなしがA/DとD/Aが一緒になった音声信号用のチップのことです。PCM信号のようなデジタル信号がつながった端子と、マイク/スピーカがつながったアナログ側端子の信号とを相互に変換してくれます。W-SIMを直接接続できる適切なコーデックを選択するための条件は次のようになります。
  • W-SIMからのPCM信号はロング・フレーム形式となっているので、このフレーム形式をサポートしていること。
  • W-SIMはPCMデータをu-Lawで送受するので、u-Law圧縮をサポートしていること。
  • PCMCLKとして384KHzをサポートできること。
  • CODECの動作に必要なクロックは、PCMCLKと非同期なクロックが利用できること。

W-SIMからのPCMデータはPCMCLKに同期して送られてきますが、PCMCLKは経験的に384KHzになっているようです。PCMCLKが384KHzであるのに対し、実際の音声データは64bps分しか使用しませんので、PCMOUT/PCMIN信号の有効部分の始まりを示すための情報が必要となり、そのための信号がPCMSYNCです。PCMSYNCはPCMCLKと同期しており、8000Hzでサンプリングされた音声データの位置を示すことから、その周波数も8000Hzとなります。PCM信号にはPCMSYNCとPCMOUT/PCMINの位置関係によっていくつかの種類がありますが、次に示すショート・フレーム同期とロング・フレーム同期が代表的な同期フォーマットであり、わたしの使っている青耳のW-SIMではロング・フレーム同期が使われています。ひょっとすると、機種によってはATコマンドによってフォーマットを選択することが可能なのかもしれませんが、未確認です。

ロング・フレーム同期


ショート・フレーム同期


ショート・フレーム同期ではフレーム同期信号(SYNC)の長さは1クロック分なのですが、ロング・フレーム同期ではデバイスによって異なっていたり、設定可能になっていたりするようです。どちらのフォーマットでも、1秒間に8000サンプルが送受されることに変わりはありません。受信の場合を例にとれば、受信できた8ビットのデータはu-Law圧縮されているので、まずこれを伸長してからD/A変換することでアナログ音声信号に変換することができます。CODECチップは、この処理をおこなってくれるわけです。

Gadget1 R2

2010-08-09 22:50:14 | W-SIM
遅くなりましたが、「8/7のGadget1 R2に出展してきました」報告です。当日は、午前中約束があったので、11時半に入場して昼休みからの展示開始というスロー・スタート。ほとんど展示会場にしかいなかったので、セッションの状況を知らなかったのですが、どうやら参加者の方も午前中は少なかったらしいので、実際のところ昼開始で良かったのかもしれません。

「Blog読んでます」とおっしゃってくれた方が何人かいらっしゃいまして、それが何よりも嬉しかったですね。以前、1回だけ秋葉での会合に参加してデモしたことがあるのですが、大勢の方々の前でW-SIMジャケットを展示するのは今回が初めてのことでした。また、当日は夕方のLTの時間でもプレゼンの機会をいただいたので、この↓内容でお話しさせていただきました。持ち時間5分で喋れたのは9枚目の5号機の紹介まで。6号機の構想については喋れなかったので、ここで公開ということにします。

携帯できる電話機

さて、当日の展示では、今回新たに製作した箱を展示しました!!
memn0ckさんのこちらの記事も参照してください。



基本的なハードウェア構成は、ほとんど同じなのですが、思い切ってプリント基板を作って、電池もLiPonにすることで、わずかながらではありますが小型化を図ってみました。なにしろ、急遽作ることにしたのでP板.comからあがってきた基板を受け取ったのが、8月2日。先週は、この製作と動作確認、ソフトの一部変更でほとんどの時間を費やし、前日になってどうにか100円ショップで購入したハガキケースに収納。当日になって、電話機も少しでも小さくしようと思い立ち、出かけ際に家電量販店に立ち寄っていったというぐらいのドタバタです。そのため、ブログの記事どころか、プレゼンに新しい箱の写真を入れる余裕すらありませんでした。

Eagleでプリント基板を作るのは初めてだったので、失敗もいくつか。P板さんには、データ不備を指摘していただき助けられました。この点については別途、記事にしてみるつもりです。

当日は、kakoさんやmemn0ckさんにもお会いすることができました。また、午前中プレゼンをされたQualcomm Japanの山田社長ともお話しすることができました。「MTMにも出展せねば!!」という思いを強くした一日でした。

Gadget1に出展します

2010-07-31 16:14:42 | W-SIM
来週8月7日(土)に東京、青山で開催されるGadget1 R2に出展することになりました。時代を先取りするガジェットやツールに関する展示やプレゼンがあるイベントです。スマート・フォンや電子ブックリーダが展示される中、自作ガジェットの一例として、おバカ・フォンである「携帯できる電話機」を展示します。



ここのところPCF2127Aを追加していたりしたのも、この展示に向けての体裁を整えるためです。当日は10:00からイベント開始のようですが、わたしは昼ごろからの参加、展示となるかと思います。