音声告知クロック...page.1/7
はじめに
ROMに記憶させておいた音声データを、マイクロコントローラーによって制御し、時刻を音声告知する時計です。
ROMやマイコンにデータ・プログラムを書き込む環境がなくてもデバイスを送付して頂ければ、書き込んで返信いたしますので安心して取り掛かって下さい。
部品集めから製作、完成後も充分楽します。プログラムを改変して楽しむこともできます。
絵解き図の出力サイズを大きくしてみました。成功率は高いです。
概要
時刻告知に必要なフレーズをI2C-EEPROM:AT24C1024に書き込んで、マイクロコントローラー:PIC16F877Aにより時刻を音声告知させます。
マイクロコントローラーは通常はスリープ状態(32.768KHzのタイマー1のみ稼動)としていますので、電池はとても長持ちします。
デジタル信号をアナログ信号に変換する部分には、ある抵抗値とその2倍にあたる抵抗値で構成するR-2R式ラダー抵抗型としました。
スピーカー駆動はミューティング機能のICを使いたいところですが、入手性を考慮して東芝のTA7368Pを用いました。
TA7368Pの電源はトランジスタで制御し、音声告知する時のみTA7368Pに通電しています。
回路図
難しそうに見えてしまう方もいるでしょう。絵解き図を見て頂ければ何も難しいことはございません。
IC1 | PIC16F877A | R1,2,7 | 2.2KΩ(1/8W) | C1 | 220uF(16Vケミカル) | ||
IC2 | 24C1024 | R3,4,5,6 | 10KΩ(1/8W) | C2 | 2.2uF(50Vケミカル) | ||
IC3 | TA7368P | R8 | 10Ω(1/4W) | C3,4 | 100uF(16Vケミカル) | ||
TR | 2SA950-Y | R9 | 100KΩ(1/8W) | C5 | 1000pF(50Vフィルム) | ||
D1,2,3 | 1N4148 | R10 | 47KΩ(1/8W) | C6 | 0.1uF(50V積層セラミック) | ||
X1 | 20MHz(セラロック) | R11,12,13,14,15,16,17 | 7.5KΩ(1/8W) | C7,8 | 33pF(50Vセラミック) | ||
X2 | 32.768KHz(クリスタル) | R18,19,20,21,22,23,24,25,26 | 15KΩ(1/8W) | VR | 10KΩ(Bカーブ) |
プログラムについて
プログラム完成までの過程や解説を記述すると長文となるので省かせて下さい。
ASMファイルにはできるだけ多くの注釈を記述したので興味のある方は注釈でご理解下さい。
また、主なプログラムはサブルーチン化してCALL命令で呼び出すようにしましたので、改変は行ないやすいと思います。
I2C-EEPROMの読み出しサブルーチンは「回路図集」で掲げておきましたので参考にして下さい。
ROMアドレスマップについては最後の項で記述します。
vck_pro.zip
上のzipファイルは4つのファイルに展開され、下表に内容を記します。
ファイル名 関係デバイス 利用方法 vck_16f877a.asm PIC16F877A ASMファイル。注釈多めにしたよ。
改変時に活用して下さい。vck_16f877a.hex PIC16F877A 上のASMファイルをビルドしたhexファイル。
これをPIC16F877Aに書き込む。コンフィグビットは3F32hです。vck_eeprom.txt I2C-EEPROM:24C1024 アドレス(00000h〜1FFFFh)と実データをタブ区切りしたものです。
ROMライタに合わせて編集して下さい。vck_eeprom.hex I2C-EEPROM:24C1024 秋月電子のPICプログラマーVer.4用に編集したものです。
PICプログラマーVer.4をお持ちの方は編集することなく使えます。
私は株式会社秋月電子さんの宣伝をしているわけではございません。
人気店であることからPICプログラマーVer.4を持っている方は多いのではないかと勝手に予測したものです。
尚、PIC16F877Aのコンフィグビットは表にも記しましたが3F32hとなります。
I2C-EEPROMでは書き込んだ後に、読み込んでみて下さい。
その時の最終アドレス:1FFF0h〜1FFFFhのアスキーコードが私の名前になっていることを確認して下さい。
この部分のデータは動作に全く関係しませんが、正常書き込み・異常書き込みの判断として活用して下さい。
I2C-EEPROMライタやPICライタなどの書き込み環境がない方は デバイスを送付して頂ければ、書き込んで返信致します。 その旨をフォームメールからお知らせ下さい。 |
回路の説明
マイクロコントローラー:PIC16F877Aには2つの発振子が接続されます。
一つはプログラムを動かすメインクロックのセラロック:20MHzで、もう一つは時を正確に刻むクォーツ:32.768KHzです。
メインクロックが稼動するのは音声告知する時で、普段はメインクロックは停止されています。
(音声告知しない場合でもタイマー1により一定間隔で一瞬だけメインクロックは稼動します)
メインクロックの1つだけでも時計の計測は可能ですが、これでは常時20MHz発振回路を稼動させる必要があります。
(音声を正常出力させるためには20MHzは必要でした)
このように2つの発振子を用いた理由は低消費電流を図るためです。
一般に同一デバイスで発振源の周波数を高くすると消費電流は増加しますので、必要なときだけ20MHzをさせて普段は32.768KHzとした方が消費電流が少なくなります。
マイクロコントローラーが音声告知する動作をすると、トランジスタ:2SA950をONにしてスピーカーアンプ回路を動作させて音声出力の準備をします。
アンプ回路の電源回路の途中に抵抗R8:10Ωが接続されているのはポップノイズを低減させる目的があります。
EEPROMから取り出した音声データはリアルタイムに、R-2R式ラダー抵抗型DAコンバーター回路(回路図で7.5KΩと、その2倍にあたる15KΩの部分)に出力します。
DAコンバーターの出力には簡単なローパスフィルター(コンデンサC5:1000pF)を設けています。
この程度のローパスフィルターで充分です。これは高度なローパスフィルターにすることで綺麗な音声となりますが、多少の高調波が交じっているほうが「音飛び」が良いためです。
尚、プログラムではEEPROMから読み込んだデータをそのまま出力させるだけではなく、前回読み込んだデータと最新データの平均値を途中で出力させています。
TA7368Pのスピーカアンプで、3ピンに接続するNFコンデンサ:C2はデータシートでは100μFとされていますが、ここでは低域成分を抑えるように2.2μFとしました。
これは低域成分によってケースの「箱鳴り」でブーミーな音になって聞き取りにくくなるためです。
回路の定数はカットアンドトライで最適なものとなるよう実験するとともに、プログラムでもノイズが出ないように細かなチューニングを施しています。