音声告知クロック...page.7/7
4.動作確認
電池3本をセットします。
ボリュームは中間程度にしておきます。
マニュアル音声告知ボタンを押下すると「Pi...12時です」と喋ることを確認して下さい。
テスターをお持ちの方は、通常は約10μA、音声告知時は数10mA〜になることを確認してみましょう。
ただし、μAオーダーの電流計レンジではテスターの内部抵抗によって動作しないことがあるので、起動時のみ電流計をシャントさせるなどの工夫が必要な場合があります。
尚、マニュアル音声告知ボタンを押下しながら電池をセットするとテストモードとなり、全てのフレーズを発声した後、通常動作となります。
使い方
ボリュームは環境に合わせて適度に調整しておきます。
時刻調整ボタンでは、「分」調整時のみ「秒」を0クリアしています。
即ち、押下により「Pi...7分」といえばPiっと鳴った瞬間から0秒より時計が進んでいきます。
「時」調整によって「秒」はクリアしていません。
時刻調整ボタンは押下し続けている間はインクリメントされます。
「分」調整で「59分」の次は「0分」と喋らず無音となっていますのでご注意下さい。
毎時になると「PiPi...○○時です」と喋り、毎時30分では「Pi...○○時30分です」と喋ります。
回路電流は約10μAととても小さいので電池は長持ちします。
時間が勝手にリセットされたり、音が小さく歪みが感じられたら電池の交換時期です。
トラブルシューティング
クォーツ時計ですが、より精度を高める場合は、クリスタル:32.768KHzの容量負荷33pFの一方を10〜100pF程度のトリマーとして気長に調整願います。
私ならば1pF、2pF、3pF、5pF、7pF、10pF、15pF、22pFのセラミックコンデンサを使ってカットアンドトライします。
スピーカーの振動とケースの「鳴き」で聞きにくい場合は、スピーカー後方をフェルトで覆うか、ケース側面に穴をあけて対処します。
ROMのアドレスマップと改変のヒント
音声にはサンプリング8000Hz、8ビットのWAVファイルからファイルヘッダ情報を除いた波形データを使っています。
8ビットWAVは符号無しで00h〜FFhの間で変化し、無音(中間)を80hとしています。
S/N比を高めるためにも振幅は大きくしたほうが望ましいのですが、最大振幅を95%としました。
よって、実データには00hやFFhは実在しないことになります。
そこで、時刻告知に必要なフレーズの波形データの間にFFhのデータを挿入して並べてROMに入れておき、必要なフレーズの開始アドレスを指定してシーケンス読み出しを行ないながら音声出力し、途中でFFhのデータを読み込んだらフレーズが終了したと判断させました。
ROMに格納するフレーズとアドレスは下表の通りです。
じゅうにじ 00000h はちじ 06AD0h ごじゅっぷん 10000h さんぷん 16D20h いちじ 011D0h くじ 07A60h じゅう 111B0h よんぷん 18190h にじ 01FF0h じゅうじ 08340h にじゅう 118F0h ごふん 19080h さんじ 02970h じゅういちじ 08F00h さんじゅう 12570h ろっぷん 1A050h よじ 037F0h じゅっぷん 0A510h よんじゅう 13490h ななふん 1B350h ごじ 042D0h にじゅっぷん 0B5A0h ごじゅう 14420h はっぷん 1C130h ろくじ 04D10h さんじゅっぷん 0C940h いっぷん 14F90h きゅうふん 1D100h しちじ 05BA0h よんじゅっぷん 0E2D0h にふん 160D0h です 1DF70h
上記32のフレーズでは重なる部分が多いので少なくしてもいいのでは?と思われますが、アクセントが不自然なものになってしまいます。
不自然にならないようにしたところ、上記の32フレーズとなりました。
WAVファイルの編集にはヤマハのTiny Wave Editorを使いました。
このROMデータを作るまでPIC側のプログラムより時間を要したのは言うまでもありません。
PIC側ソフトは32.768KHzを1/2プリスケーラを介して16ビットカウンタをフリーランさせ、4秒間隔でタイマー1オーバーフロー割り込みをしています。
音声告知するときだけ割り込みを全て禁止にしています。これはノイズを低減させるためです。発声時間は4秒を越えることはないので時間の誤差は生じません。発声途中でタイマー1がオーバーフローしても割り込みフラグは立つので発声が終了次第割り込みプログラムを実行してくれます。
ただし、アラーム機能を付加して、モーニングコールとして恋人の音声を生成するなど4秒を超える場合は発声中でも割り込みを許可させておく必要があります。
プログラムの殆どはCALL命令によりサブルーチンを読み出すようにしており、現状で最大6個のスタックメモリを消費します。
PIC16Fはスタックメモリは8個までしかありませんので改変時はご注意下さい。
プログラム容量は1Kバイトもありませんので高機能とさせることも可能です。
アラームやタイマーなどの付加機能追加は貴方の課題として下さい。
音声データが多い場合はROM容量を拡張する必要があります。
1Mビット:I2C-EEPROM:24C1024のデバイスアドレスは1本あり、2Mビットまで増設可能です。
この場合はデバイスアドレスピンだけを外側に向けてVCCに接続し、既存のROMに亀の子のように重ねるといいでしょう。