[lang:ja] いすプロジェクト (IsuProject) メモ

ギャラリー


最新版プログラム

mbed LPC1768 にプロジェクトを移行しました

Import programIsuProject_LPC1768

MP3-capable chair with sensor-embedded weight scale.


更新履歴

詳細は /users/kayekss/code/IsuProject_LPC1768/shortlog を参照してください.

RevisionMessage
3:64f0ba828a2e(1) フォトセンサ入力回路にシュミットトリガ・インバータ 74HC14 を増設したため,入力クラスをデジタル入力 (BusIn) に変更
(2) 入力切替スイッチ (inputSelector) の論理を反転
2:844bedc9dc63クロック変更による影響で,pollAndRequest 割り込み周期が長くなっていた問題を修正
1:ef257d63d970(1) LPCXpresso の拡張ピンへの割り当てをやめ,かわりに mbed 40pin の範囲内のみ使用するように変更
(2) ダウンクロック,周辺機能への電源供給停止等の省電力化処理を追加
(3) LCD に表示する情報を変更
0:d9789f57fd9dmbed LPC1768 に移行
0:0451ba2f1062リリース初版.
最終非公開版 (2013/12/20) からの変更点は,
(1) 曲再生中にファイル終端に達した後,自動で頭出し再開されない問題を修正
(2) 再生中に持続回数が一定値未満であるノイズ入力が発生した場合,再生要求を出しなおさないように変更
(3) SD カード・セルフテストを強化

概要

単一の mbed プログラムで,現在想定している一連の動作をすべて実行します.

  1. フォトセンサ読み取り→負荷の有無・重さを判定
  2. 一定回数負荷状況が変化しなければ,曲の停止および再生開始命令を発行
  3. 2. の命令に応じて,再生および停止処理を実行
    • SD カードからのデータ読み取り,および VS1053 IC への転送

回路図

/media/uploads/kayekss/isuproject_sch_sheet1.png /media/uploads/kayekss/isuproject_sch_sheet2.png /media/uploads/kayekss/isuproject_sch_sheet3.png /media/uploads/kayekss/isuproject_sch_sheet4.png


動作・プログラム詳説

  • 処理を複数のマイコンに分離しやすくするため,前節の箇条書き 2. 3. に当たる処理を関数化しています.
    • void pollAndRequest()
      フォトセンサ入力を読み込み,安定状態を検出したら要求を発行
    • void controlTrack()
      現在の状態に応じて,要求通りに再生・停止処理を実行
  • 現在状態/発生要求別動作一覧表
    controlTrack 関数は次の図をもとに実装されました. /media/uploads/kayekss/behaviour.png
  • pollAndRequest を Ticker による周期割込みで,controlTrack を main ループで実行するようにしました.逆の場合でも一応動作はしますが,こちらのほうが安定に動作します.
  • 調整の余地がある各種定数は defs.h に記載しています.

SD カード セルフテスト

  • 起動時に,SD カードにアクセスし,曲ファイルのひとつを試しにオープンします 4 曲すべての曲ファイルをチェックするようになりました.失敗した場合は,ファイル存在なし もしくは フォーマット破損と見做して動作を停止します.

デバッグ用表示

秋月電子取り扱い製品, I2C キャラクタ液晶モジュール「DisplayTronic ACM1602NI」 (通販コード P-05693) を使用したデバッグ用表示を行います.

Import libraryACM1602

Displaytronic (Xiamen Zettler)'s I2C text LCD driver


省電力化

mbed LPC1768 をそのまま使用する場合では性能が余剰となるので,動作周波数を 48 MHz に低下させています.また,使用していない Ethernet PHY の電源供給をオフにしています.

参考: Power management - 省電力化 (LPC1768) - okini3939 様のノートブック


VS1053

Import libraryVS1053

Just a simple library for VLSI's mp3/midi codec chip

MP3 デコーダ IC,VS1053 用のライブラリです.SPI モードによる最低限の再生/停止処理のみに対応している暫定実装となっています.12/20 4:14:15 コミット分のバージョン (5:cbf43dc9c947) にて,実装済み関数の動作テストがすべて完了しました

以下に,クラスリファレンスを日本語で表記したものを掲載します.


VS1053(PinName mosiPin, PinName misoPin, PinName sckPin, PinName csPin, PinName bsyncPin, PinName dreqPin, PinName rstPin, uint32_t spiFrequency=1000000)
VS1053 クラスのコンストラクタです.mosiPinmisoPinsckPin の 3 ピンは SPI 使用できるピンを選んでください.spiFrequency は SPI クロック (sck) の周波数を Hz 単位で指定します.省略時は 1MHz ですが,これは普通の MP3 ファイルにとってはそれほど速くありません.高音質のファイルを再生するときは,より大きい値を指定する必要があるかもしれません.

~ VS1053()
VS1053 クラスのデストラクタです.インスタンスを破棄する理由はたぶんないと思うので省略.

void hardwareReset()
VS1053 の rstPin (RESET#) を叩いて,ハードウェア的に IC を黙らせます.設定はすべて初期化されます.通電したままの連続稼働における前回動作の影響を残さないために,開始時に必ず一度呼び出してください.

void sendDataByte(uint8_t data)
VS1053 のデータバスに,1 バイトのデータ data を送信します.

size_t sendDataBlock(uint8_t* data, size_t length)
VS1053 のデータバスに,ポインタで指定したデータ列 data より,長さ length バイトを書き込みます.関数側での終端チェックはしていません.
この関数は,送信を行ったデータ長さを返します.

void clockUp()
VS1053 のコマンドバスにて内部 PLL 倍率設定変更命令を送信し,DSP コアの動作周波数を引き上げます.設定値は 43.0MHz (minimum) です.MP3 等圧縮オーディオ・ファイル形式のデコード再生を行う場合は,必ず初期化処理に含めてください.

bool sendCancel()
VS1053 のコマンドバスにてキャンセル命令を送信します.
曲データ転送途中の停止を行いたい場合,最初にこの関数によってキャンセル命令を送信する必要があります.
この関数は,VS1053 がキャンセル命令を受理できた場合に true を返し,そうでない場合 false を返します.

bool stop()
VS1053 のデータバスにて,停止データ (endFillByte という後始末用データ) を送信します.
VS1053 が曲再生処理を中断して次のデータを受け入れ可能になるためには,sendCancel 関数の成功後さらに十分な長さの停止データを転送しなければなりません.
この関数は,VS1053 が停止処理を完了できた場合に true を返し,そうでない場合 false を返します.

曲停止方法のまとめ

曲の停止 (中断) は二種類の関数を順番に呼び出します.手順は次の通りです.

  1. (再生中のファイルをクローズする) … fclose
  2. sendCancel 関数を,成功するまで繰り返し実行.成功時 true が返ります
  3. stop 関数を,成功するまで繰り返し実行.成功時 true が返ります
    • 2. 3. の処理は,途中でやめることはできません.どうしてもという時には,hardwareReset をすることになります.


Please log in to post comments.