マイコン工作実験日記

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

加速度ログを採ってみる

2013-03-30 16:22:14 | SAM3
新しく作ったボードでSAM3Nを使ったLチカができたので、今度はSAM3Sの方を使って加速度センサーとSPIフラッシュを使ってみました。




SPIフラッシュにはFatFsを使ってファイル書き込みができますので、加速度変化のログを記録する実験をやってみました。これまで、MMA8452QやMMA8652FCではイベント検出の実験ばっかりやっていて、加速度データを直接読み出すような「普通の使い方」をまったくやっていませんでした。今回はMMA8652FCのFIFOとHPFを有効にして、取得した加速度データを記録してみました。

MMA8652FCではMMA8451Qと同じように32サンプル分のFIFOが用意されています。12ビットの分解能で使用した場合には、実際のデータは2バイトになりますが、このデータをX, Y, Z軸の各軸毎に32サンプル分FIFOに貯めておくことができますので、2×3×32=192バイトの容量のFIFOを持っていることになります。今回はデータの出力レートを200Hz、FIFOの動作モードをFillモードに設定。この設定だと32サンプル分のFIFOが一杯になると割り込みで知らせてくれますが、それには160msかかることになります。そのため、読み出したデータをSPIフラッシュに書き出していても充分に時間に余裕があります。そこで、取得したデータは、FatFsのf_printf()関数を使ってCSV形式で書き込むことにしました。

データが記録できたら、MSCを有効にしてボードを再起動。記録したファイルを読み出してGoogole DriveのSpread sheetでグラフ化してみました。縦軸の値は12ビットのデータを16ビットに左づめしていますので、実際の値を16倍したものになっています。




ダブルタップを3回行った様子です。タップ操作では、急峻な加速度変化が生じていることが良くわかります。




こちらは、基板を縦に持った腕を振り下ろしてみました。しっかりと振り止めたつもりでもタッピングと違って反動が続くことがよくわかります。

どちらの例もハイパスフィルタ(HPF)を有効にしていますので、静的に加わる重力加速度成分が打ち消されたデータを読み取ることができています。そうは言っても、HPFが重力加速度を消し去るにはいくつかサンプリングしてみなければならないはずです。ダブルタップの例ではZ軸、振り下ろしの例ではX軸の加速度値が最初に下がってほぼゼロになっているのが読み取れます。これは、タッピングではZ軸を上にて基板を置き、振り下ろしではX軸を上にして実験を開始した事実と符号しています。この立ち下がり時間が、HFPが働いて重力成分を消し去るのに要している時間なのでしょう。

PとNの違い

2013-03-27 22:16:17 | Weblog
先週Digikeyで買ったSAM4LSを引っ張り出す。QFPパッケージが欲しかったけど、まだ在庫がないのでQFNパッケージのものを買っておきました。変換基板を使えばなんとかなるだろうと思っていましたが。。。




考えが甘かった。QFP用の変換基板のパターンではQFNパッケージの壁に届きません。涙。
aitem-labの変換基板でも確認してみたけど、同じように届かず。QFN用基板を探さないとダメかな。ちょっとくじけてQFPパッケージが在庫されるのを待とうかな。

SAM3Nでブリンク

2013-03-24 08:59:00 | Weblog
以前作ったSAM3S用に作ったLED Blinkボードを引っ張りだして、新たに作ったSAM3Nボードを載せました。



同じSAM3シリーズなのでソフトの移植はもちろん比較的容易なのですが、PWMに関してはSAM3Sが機能豊富なのに対してSAM3Nはシンプルな構成となっており、反転出力端子も無し。そんな都合でコードの修正は必要でしたがちゃんと動くようになりました。MMA8652Fもひととおり動いているようです。ついでに、これまで試してなかった機能についても動作実験してみました。
  • これまではデモを休止してLEDをブリンクさせない間は、SAM3をWait modeにしていたが、今回はBackup modeに遷移させてみた。どちらもCortex-M3の deep sleepモードに基づく低消費電力モードですが、Backupモードでは内蔵レギュレータも停止させてしまうので、さらに消費電力が少ない。
  • MMA8652Fの自動sleep機能を利用。22.4秒間なんの操作も行わずMMA8652Fがイベントを検出しないでいると、MMA8652Fは自動的にsleep状態に遷移するとともに、それを割り込みで通知。SAM3N側ではこれを受けて、Backupモードに遷移。

このように、Auto-sleepを使うことで放置するだけで自動的に電源を落とす機能を実現することができます。そして、シェーク動作で電源を入れることができます。今年はこの機能を使ってBlueSAMを作り直そうかと思います。そんなことを夢想しながらLEDブリンクを眺めるのは実に楽しいものです。

日米在庫の違い

2013-03-19 21:30:35 | Weblog
Cortex-M4ベースのSAM4Lの在庫がDigikeyにあることに気がつきました。Mouserを確認してみるも、こちらはま入荷待ちで入荷日もよくわからない。そこで試しにDigikeyから買ってみようかと思ったら。。

当初DIgikeyのUSサイトでSAM4L在庫有りで検索すると、8商品が該当との結果が出ました。内容としてはSAM4LSとSAM4LCの両方が含まれています。ところが、実際に発注してみようかと思い、日本サイトからログインして再度検索してみると、SAM4LSの3商品しか検索できません。これはいったいどういうことなんでしょう? Digikeyでは、全ての商品はUSの倉庫から出荷されるので、日米どちらのサイトから注文を入れても同じ倉庫から引き当てされるハズです。なのに、日本サイトからだっとまったく在庫が見えない商品があるようです。輸出制限に該当するような商品とも思えないんですが。。。

「しばらく待てば見えるようになるかも」と、期待して待つこと数日。依然として、見えない商品は見えないまま。しょうがないので、とりあえずSAM4LS2AとSAM4LS2Bを注文。どうせならUSBホスト機能も使えるSAM4LCを買いたいと思っていたのですが。。

SAM4LはこれまでのSAM7やSAM3とは各デバイスの使い方が異なるので、SAM4LSのひととおりの使い方を習得するだけでもかなりの時間楽しめる(苦しむ?ハズです。


新基板へ移行

2013-03-16 20:45:16 | SAM3
CDC+MSCのドライバとFatFsを入れたMiniSAMボードですが、今後の開発は新たに製作したボートに舞台を移して作業することにしました。このボード1ヶ月以上も前に届いていたのですが、製作が後回しになっていました。




基本的な構成は似たようなものなのですが、外観的にはARM10ピンのJTAGコネクタに変更したのが一番の違い。一度ケーブルを入手してしまうと、この大きさと使いやすさは大きな魅力です。




新旧のボードを並べてみたところ。右側の新ボードでは使用する部品も一部変更しています。大きな変更は加速度センサーをMMA8452Qから同じくFreescaleのMMA8652FCに変更したこと。パッケージは3mm×3mmのパッケージから2mm×2mmのパッケージに小型化されていますが、0.5mmピッチ16ピンから0.4mmピッチ10ピンへと変わっています。パッケージが小さくなったからといって基板が小さくなるわけでもなく、ピン間が狭くなることでハンダ付けが難しくことを心配していましたが、実際にやってみると、心配したほどではありませんでした。
  • 16ピンのMMA8452では四方にピンがあるので、ハンダ付けの際に位置がずれてしまわないように注意が必要だったが、10ピンMMA8652では両サイドにしかピンがないので、位置ずれの心配や影響が少ない。0.4mmピッチのハンダ付けも思ったより簡単だった。
  • 機能的にはMMA8652はMMA8451とほぼ同等であると思われる。新製品のせいか、MMA8652の方が価格は安い。
  • ピン数が少なくなった影響でI2Cアドレスの選択はできなくなったけど、とりあえず自分には影響なさそう。



裏側では使用するSPIフラッシュをAT45DB161DからAT45DB642Dへ変更。パッケージが違うのですが、ピン間は同一だったので基板パターンは変更せずにハンダ付け。アンチエイリアス処理のためにピクセルあたり4ビットから8ビットの深さのあるフォントビットマップを使おうと思うと16Mbitの容量ではフォントだけでいっぱいになってしまいそうなので、一気に大容量化してみました。

ついでにもう一枚作成。こちらはLチカ遊び用に用意しました。


このボードは電池で使うことを前提としていますので、レギュレータやUSB関連部品を搭載していません。USB使わないので、水晶も使わず内蔵RC発振器で動作させます。写真がピンボケになってしまったので、わかりずらいのですが実はマイコンもSAM3S4Aではなくて、SAN3N0Aを使っています。SAM3NはSAM3SからUSBを取り去って安価にしたような製品です。今回はフラッシュ容量32KBのSAM3N0Aを使用。これで、一応SAM3Nにも手をつけたという自己満足達成が一番の目的なんですが。

4層サービス

2013-03-13 12:15:24 | Weblog
久しぶりにseeedstudioのブログをチェックして、Fusion PCBのサービスに4層が加わったことを今頃になって知りました。5枚からのオーダも可能になったというのも嬉しい知らせです。

2層と同じくEagleのCAMファイルも用意されているので、わたしのような者でも取りかかれそうな気がします。機会があったら4層に挑戦してみたいものですが、auto routerに頼りっぱなしの状況から脱却する努力が必要かな。

Saleae USB Logic Analyser

2013-03-11 13:56:20 | Weblog
秋月で販売されているSaleaeのUSBロジアナがEEVblog #436でレビューされていたので見てみました。正確にはレビュー対象は8チャネルのLogicで、秋月で売られているのは16チャネル対応のLogic 16であり、チャネル数以外にも仕様の違いはあるようですが。。



ハードウェアは、サイプレスのUSB FX2ベースのようです。というか、ほとんどFX2しかないというべきでしょうか。安くできるわけですねぇ。そういえば、しばらく前にai***doがsaleaeのソフトが動くと銘打ったコンパチ基板を出してヒンシュクかっていましたっけ。

とにかく、ホストのPCにデータを取り込んで、あとはPC側のソフトでデコードするだけのようですが、そのソフトはトリガ機能などが不十分とコメントされており、参考になりました。まぁ、機能よりも大きさが小さいのが魅力と割り切って使えばいいんではないでしょうか。。大きさ重視であれば、1.8V系では使えなくても値段の安い8ポートのLogicでもいいかな。個人的には、MacやUbuntuでも使えるという点に魅力感じます。

Daveのちょっと厳しいコメントをSaleaeは謙虚に受け止めて、HW/SWの改良に取り組む旨をtwitterで表明しています

LCD画面とアイコン - その2

2013-03-07 07:28:13 | Weblog
このタイトルで前記事を書いてから、あっという間に3ヶ月ほど経ってしまいました。いろいろと試行錯誤を繰り返しているうちにアイコンの使い方が若干変わるとともに、9種類のアイコン全てを使うことになりました。まずは、9つのアイコン全てが点灯している状態です。




117に発呼して通話中の状態です。電話番号の上には通話時間が表示されています。




それぞれのアイコンの使い方を左側から説明すると、
  • HFP接続表示。アンテナアイコンの下の数字が信号強度を示します。
  • オフフック表示。オンフック状態では消灯。
  • SPP接続表示。SPP接続があり、WT32からの出力をSPPリンクに送信することを示す。
  • A2DP接続表示。
  • AVRCP接続表示。
  • ペアリング不可表示。他のデバイスから発見されない状態であり、ペアリングできないことを示す。
  • スリープ状態表示。WT32にsleepコマンドを送信してあることを示す。
  • 電池残量表示
  • キーパッドモード表示。DTMF音送出が可能であることを示す。
キーパッドモードは通話中にのみ存在するモードなので、全部のアイコンを表示できるのは通話中だけになります。電池残量表示については、端末の電池残量ではなくBlueHANDのLiPo電池の残量を示しています。しかしHFP接続があるときは端末の電池残量、HFP接続が無い場合にはLiPo電池残量表示というのも良いのではないかと思いついたので、そのうちに変更するかも。

キーパッドへの機能割り当て

2013-03-03 18:19:57 | Weblog
これまでチビチビとBlueHAND-miniのソフトウェアの作成を進めてきましたが、だいたいの仕様が固まってきたので、何回か関連する記事を書いておこうと思います。まずは、キーパッドの使い方について。



BlueHAND-miniで使用しているキーパッドは3X4のマトリックス構成です。電話機と同じキー配列ではありますが、携帯電話機と比べるとキーの数が足りません。通常の携帯電話機にはオンフック/オフフックキー、メニュー操作用の十字キーと決定キーといったキーが備わっているので、これらのキーを使って発着呼や機能選択操作を行うことができます。

電子工作用のキーパッドとしては上の写真のような4x4のマトリックスのものもしばしば見受けますが、電話機のイメージからは外れた感じがします。右側よりも上側にキーが増えて、オンフック/オフフックのキーが欲しいところです。

大きさの都合もあり3x4のキーパッドを選択しているので、12個のキーだけで操作することを考えねばなりません。オンフック/オフフック用にタクトスイッチを追加するという方法も考えられますが、キーの高さが変わってしまうのも嫌だったので12個のキーだけでやりくりする操作方法を考えることにしました。
  • まずは、オンフック/オフフック操作のためのフックスイッチ機能が必要です。これには*キーを割り当てることにしました。*キーを押す毎にLCDの電話機マークが点灯/消灯し、点灯時にオフフック状態を示します。上記の写真はオフフックしたところを示しています。
  • オフフック状態ではキーを押すことでダイアル番号入力をすることができます。ただし、*キーは1桁消去キーとして機能することにしました。1桁も入力が無い状態で*キーが押されれば、オンフックとなります。この結果、ダイアル番号には*は使えないことになります。
  • 通話状態でも*キーはフックスイッチとして機能しますので、*を押すことで呼を切断します。
  • HFP接続が無い場合には、*キーを長押しすることでペアリングの受付を開始し、他のBluetoothでバイスから発見可能とします。*キーを押すことでペアリング受付を中断することができます。
  • 着信中は#キーを除く任意のキーを押すことで応答することとしました。#キーは着信応答拒否を指示します。

以上はHFP接続してハンドセットとして使う場合のキー割り当てですが、WCA-009を使えばA2DP/AVRCPでの接続と制御も可能ですので、それらに対応するためのキー割り当ても必要となります。そこでオンフック状態では、次のようなキー操作を可能としました。
  • 2ならびに8のキーを押すことで、A2DPでの音楽再生時の音量を増減させる。HFPで通話中も同じように音量調節可能。
  • 0を押すことで再生/停止操作
  • 4と6を押すことで次の曲/始まりに戻る操作。
  • 7と9を押すことで巻き戻し/早送り操作。

これで、キーパッドだけでだいたいの操作ができるようになりました。しかし、このままでは通話中のキーパッドも音量調節や呼の切断のための機能を割り当てられており、キーに対応するDTMFを送出することができません。そこで、メインボード上にあるタクトスイッチであるMODEボタンの助けを借りることにしました。通話中にMODEボタンを押すと、キーパッドモードに切り替わることとし、キーパッドモードではDTMFトーンを生成することにしています。操作性は悪いですが、使用頻度は高くないので、これで妥協することにします。

どこかで緑色/赤色の電話機マークがついたオフフック/オンフックボタンがついているキーパッド入手できないでしょうかねぇ。Nokia携帯の修理用パーツとかを流用するしかないのかなぁ?