2020年9月1日火曜日

おしゃべり時計withUSB開発日誌(8)、USBメモリ エニュメレーションの遅延

時計回りの機能を、色々とデバッグ中。
省電力の為、通常はPICはSleepしてUSBの電源も落としておいて、スイッチが押されたら、もしくは1分経過したら、SLEEPから復帰しUSBメモリの電源を入れて、時間を喋る事になる。

しかしながら、USBメモリは電源を入れたら直ぐに使えるわけではなく、アドレスを割り振るなどのエニュメレーションをして、Configuredのステータスにならないとメモリの内容を読み出せない。 これに1~2秒、USBメモリによっては数秒かかるのだ。

なので、USBのエニュメレーションが終わってから、USBメモリから音声データを読み出して音声を再生する必要がある。 そうしないとエラーとなる。悪くすれば処理が帰ってこず、プログラムが暴走するなんて事もある。 つまりUSBメモリのステータスを見て処理を進めていかなければならず、地味にめんどくさかったりする。

しかしながらここは肝の処理なので、注意してデバッグしていく必要がある。

20200829(+4.0)


おしゃべり時計のメインの機能にチャイムがある。 これはchime.txtに列記した時間になると”何時何分です。”と時間を喋る機能である。 これ自体は、以前のプログラムを踏まえて問題なく実装する事が出来た。

おしゃべり時計のもう一つのメインの機能が音楽ファイルを順番に再生していく機能がある。これも順番に再生するだけならば問題なく実装する事が出来た。


音楽を順番に再生しているときに、チャイムの時間が来たらどうするかというと、一旦音楽を中断して時間を発話させたい。だって、時計なのであって、音楽の再生はおまけの機能なのだから。 これを実現する為の処理の流れは下記のようになる。

1.音楽を再生中

2.チャイム発生時間の到来を検知。

3.再生中の音楽をストップ

4.chime.txtのファイルをサーチして該当した時間の音声データファイル名を取得する。

5.時間の音声データファイルを再生する。※複数ある場合、複数回再生する。

5.次のチャイムの時間を、chime.txtをサーチして取得する。

6.上記3.でストップした音楽をはじめから再生する。

といった具合になる。 今回作成している”おしゃべり時計withUSB”は、ファイルオブジェクトは一つしか実装していない。バッファを8Kbyteも使う為、メモリを圧迫してしまうからだ。

なので一つのファイルオブジェクトを使い回すことになる。上記1~6を実現するのに5つ以上のファイルをとっかえひっかえ読み出す必要がある。 これの切り替えがなかなか上手く出来ずに何日か悩みつつデバッグしていたが、本日ようやく何とかスムーズに切り替える事が出来るようになった。

まだまだ、スイッチメニューの切り替えが上手くいかなかったりするので、今しばらくはこのあたりのデバッグに時間がかかりそうである。

20200901(+8.0h)




0 件のコメント:

コメントを投稿

KT0913 FMラジオの作成(8) 出来上がったPCB基板にミスあり。

  FusionPCB から基板がとどきました。20240121. 1月11日に発注したので10日で出来上がって届きました。 早速組み立てましたがが、イヤホンジャックのフットプリントが裏返っており、痛恨のミス。。。 しかしながら、他にも問題が無いか一通り組み立ててチェックしました...