| ホーム |     私の電子工作作品集

151. 電子メトロノームU

[ 初公開日:2013年6月17日 ]

 サイト "電子工作etc (現在リンク切れ)" で紹介されていた "簡易電子メトロノーム" です。 以前作製した、ロジックを組み合わせた 電子メトロノーム とは違って、PIC を使用しています。

 また、オリジナルでは mikroC PRO でプログラムが作成されていますが、Cコンパイラがないこともあり、ここではアセンブラで作成をしました。

■ 回路図 ■

| 回路図 (ElectronicMetronomeII.CE3) | ページトップ |

■ ケース外観と内部の様子 ■

ケース外観 ケース上面のパネルを開いたところ
正面の斜め上から見たところ ケース内部を真上から見たところ 背面の斜め上から見たところ
パネル裏面を真上から見たところ パネル裏面のLCDモジュール、SW・LED基板の取付の様子 パネル裏面を斜め上から見たところ

| ページトップ |

■ プログラム ■

 冒頭でも述べたように、オリジナルでは mikroC PRO でプログラムが作成されていますが、Cコンパイラがないこともあり、ここではアセンブラで作成をしました。 またオリジナルではPICに PIC16F88 を使用していますが、A/D変換機能は不要なのでここでは手持ちの多い PIC16F648A に変更しました。 そのため内臓クロックでは 4MHz モードしかないため、外付けで 8MHz のセラロックを使用しました。

 当初、LCD へのスタートメッセージの表示前後でのサウンド(dl_mi_so_dh, dh_so_mi_dl)は正常に出力されるのですが、メインルーチンに移ったとたんに、大きな "ジィーーー" という 雑音が混ざってサウンドが出力されました。 このサウンドはタイマー0オーバフロー割り込みを利用して作成していたのですが、メインルーチンに移る直前に CCP1(コンペア)割り込みを 許可しています。 そして割り込み処理内では、タイマー0オーバフロー割り込みの方が優先順位が高く、CCP1(コンペア)割り込みよりも先に処理を行っていました。

 そこで割り込み処理内での優先順位を変更し、タイマー0オーバフロー割り込みよりも CCP1(コンペア)割り込みの方が先に処理を行うように変更をしてみました。 その結果、みごとに 雑音は消滅しました。 ただし、次に行った変更での出力サウンドと聴き比べてみると、全体的に少々濁ったような音に聞こえます。

 オリジナルのプログラムではどのような処理をしているのか非常に興味があったので、HEXファイルを逆アセンブルして調べてみました(Sound_Play関数:上述のようにオリジナルは mikroC PRO で作成されているためソースからは分からない)。 オリジナルの処理では、割り込みを一切使用しない通常の処理でサウンドを出力しています。 そこでこの割り込みを使用しない 通常の処理を真似て、そのサウンドルーチンを組み込んでみたところ、変更前に比較して、実に澄んだサウンドが出力されることが分かりました。 ・・・ さすが mikroC PRO !!

 また、オリジナルのプログラムでは、各スイッチを必要以上に長時間押し続けた場合、その間中各LEDの点滅やサウンドがストップし、メトロノームの機能が停止するようになっています。 したがって Tempoを大幅に変更したいような場合には、何十回となく Tempoの Upまたは DownスイッチのON/OFFを繰り返さなければなりません。 これはかなり操作性が悪くスムーズでは ありません。 そこでこれを改め、スイッチの誤動作を防止するために押してから250mS間は続く ON動作を受け付けませんが、それ以上に長時間押し続けた場合には、250mSに一回ずつ ON動作を受け付けるように変更しました。 したがって上述のように、特に Tempoを大幅に変更したいような場合には威力を発揮します。

       <仕様>   設定範囲:   Beat … 1 〜 8 、  Tempo … 40 〜 210

 次に、オリジナルで最も良くないと思うこと(ごめんなさい)は、EEPROMへの書き込みのタイミングです。 Beatや Tempoを次回の電源投入時に備えてEEPROMへ記憶する という発想はいいのだけれど、Beatや Tempoが変更された都度すぐに書き込んでいます。 たとえば Tempoを100から200に変更した場合には、100回書き込むことになります。 これは 書き込み回数に制限があると言われているEEPROMにとっては最悪です。 本来は、次回の電源投入時に備えて― という意味合いから、電源の切断の直前にその時の状態を記憶する― というのが最も理想的ではありますが、そんなことは自動的にはとうていできません。

 そこでEEPROMへの無駄な書き込みはしないように、極力書き込み回数を減らすように改めました。 上述のように Tempoを大幅に変更した場合にも、最終的に変更されたときから 約2.5秒間待って、それでも変更がなければそこではじめて書き込むようにしました。 また、書き込む前には前回書き込んだ内容を読み出し、これから書き込む内容と比較して同値の場合には 新たな書き込みは中止し、異なった場合のみ新しい内容を書き込むようにしました。

 この変更で本当に書き込みの制限をしているかの確認をするために、実際の書き込みの回数を同じくEEPROMに記録して、正しく動作をしているかの検証をしました (OKを確認)。 現状のプログラムには、この検証ルーチンが組み込まれたままですが、メトロノーム機能としては何ら問題はないので、このまま本番で使用するものとします。


現在の最新バージョン: Ver. 1.05

 外部サウンド・サブルーチン(Sound.sub)の変更にともなって、本ソースリストの記述も少々変更。 ついでに本プログラム内で使用している音程を一部変更。 基本的には前バージョンと大きな相違はない。

| ページトップ |

■ プリント基板(1)パターン図 (部品面) ■

"電子メトロノームU" 全体をケースに収納するように設計変更をしたため、プリント基板もケースに合わせて新しく作り直すことになった。 (参考: 旧プリント基板

| プリント基板(1)パターン図 (部品面) (ElectronicMetronomeIIPC.CE3) | ページトップ |

■ プリント基板(1)パターン図 (ハンダ面) ■

| プリント基板(1)パターン図 (ハンダ面) (ElectronicMetronomeIIPC1.CE3) | ページトップ |

■ プリント基板(2)パターン図 (部品面) ■

ケーブルを 取り付け前の様子 , 取り付け後の様子

| プリント基板(2)パターン図 (部品面) (ElectronicMetronomeII2PC.CE3) | ページトップ |

■ プリント基板(2)パターン図 (ハンダ面) ■

ケーブルを 取り付け前の様子 , 取り付け後の様子

| プリント基板(2)パターン図 (ハンダ面) (ElectronicMetronomeII2PC1.CE3) | ページトップ |

■ ケース加工図 ■

 使用したケースは、"タカチ" の "SW-100" プラスチックケースです。

| ケース加工図 (ElectronicMetronomeIICS.CE3) | ページトップ |

■ 使用部品表 ■

(主要部品: IC, トランジスタ等)

(データシート)
PICマイコン .................... PIC16F648A
LCDモジュール .................... S-10551D
圧電ブザー .................... SPT08

| 部品表 | Excel ファイル (ElectronicMetronomeII_parts.xls) | ページトップ |

■ 参考サイト ■

簡易電子メトロノーム ..... http://www8.plala.or.jp/InHisTime/page195.html  (現在リンク切れ)

| ページトップ | ホーム |


Copyright (C) 2010-2023 やまもとみのる
初版:2010年9月24日、初公開:2013年6月17日、最終更新:2023年11月3日