エレキジャックNo.6基板をPICマイコンで動かす

Topics PICC Lite Exam AD convert Interrupt PIC12F675

はじめに



エレキジャックもとうとうNo.6まで発行された。実は私は全部買っているのだが、未だに何一つ作っていない。この雑誌に限らず、キットなども買っていても作っていなかったりするものを結構持っている。

今回の特集は、NE555特集ということで一通り記事を読んだ。NE555は21世紀になっても残るデバイスとは思ってもいなかったほど、古いものである。



NE555は1971年にシグネスティック社(フィリップスを経由し現NXPセミコンダクタ)から発売されたタイマーICであり、内部構成はコンパレータ、RSフリップフロップ、トランジスタのシンプルな構成であるが、応用範囲は広く、現在までも使われてきたと思われる。今もオリジナルであるインターシル社CMOS版555(ICM7555)やセカンドソース(例えばNEC)も豊富にある。555の名前の由来は5ピンに電圧を変化させると、周波数が変化するので、多数のNE555の5番ピンをまとめて接続して電圧制御すれば、全部のNE555が相対的に比例して制御できるという由来がある。また、アナログ変調を入れると、FM変調としても使えた。尤もこれは昔の話で、今では更に高性能のデバイスは存在する。

今回エレキジャックの記事を読むと、この記事の大半を作った経験があり、過去をフラッシュバックしたような雰囲気であったと同時に、NE555を使わないでPICでも出来るのではないかなどと思ったわけで、あえてPICマイコンを使って製作を試みることにした。

※注釈:作者の記事を否定しているわけでありません。自分の勉強と好奇心で今回作成しました。



Misson4のタイマIC555 PIC12F675で電子オルガンを作ろう



今回のターゲットは、このオルガンである。



まず、NE555は8pinDIP形であるため、PICであれば8pinデバイスを選定。アナログを扱うので、12F675を使うのが妥当と考える。基板はそのまま使えるのか?NE555の電源とPICの電源を比べてみる。Vcc=8ピンに対して、PICは1ピン、グランドは1ピンに対してPICは8ピンと逆になっている。基板のパターンをカットして配線しても良かったのだが、今回はいかに基板をそのまま有効に利用して製作することを重点に製作を進めることとした。





回路図



回路を検討してみた。PICのアナログ入力を使い、7ピンからアナログデータを取ることにして、C1の代わりに抵抗1KΩを取り付け、ボリウムは全部10KΩ、バイパスコンデンサ以外は殆どショートして使った。PICの出力ではスピーカーを駆動できないので、圧電素子に置き換える。電源も、PICの動作電圧範囲の上限を考えると4.5V、つまり電池3本で動作させることにした。





回路は1KΩと10KΩの中間電位をADコンバータで読み取る方式にした。ADコンバータは10ビットを使用して、約1V〜4Vの範囲の変化を周波数に変える。


PIC12F675 NE555 pic function name Function
1 8 VDD Power
2 7 GP5 未使用(入力)
3 6 GP4 未使用(入力)
4 5 GP3(input only) 未使用(入力)
5 4 GP2 未使用(入力)
6 3 GP1 Sound out
7 2 GP0/AN0 Analog sens
8 1 VSS GND

こちらはオリジナル(雑誌より)



そしてこちらは今回のPICで作った基板


半田は鉛フリーを使ったが、初めての方は作業性の事を考えると鉛入りの半田をお勧めする。





開発環境



今回はICSPを使用せず、このアダプタを使用した。


開発風景





プログラムダウンロード

タイプ1



ADコンバータの値に応じた発振で出力。これはNE555を使っている感じに一番近い。
欠点としては、回路の制約上、高音域になるほど調整が難しくなる欠点があるのと、音を正確にあわせ難い。(c:\picsrc\ej_organとして使用すれば、プロジェクトのまま使用できます)


タイプ2 初心者にオススメ



ADコンバータからの値により、ボリウムの角度にて音階を決めうちする方式。対数的になる調整を、ソフトウェアで補正して、調整角度がおよそ均等になるようにした。これなら調整は楽であるし、音階が予め調整されたものしか出力されないので正確な音程を実現できる。しかし、あまりにもデジタル的な処理であるので半音が出せないなどの不満は残る。(c:\picsrc\ej_organ2として使用すれば、プロジェクトのまま使用できます)
math.hで対数を使ってボリウムの補正を掛けようと思ったが、このクラスのPICマイコンでは無謀で、容量が全く足りなかった。それでテーブル式にして変換をすることにした。本来計算で出すべきテーブルの値は、私が横着だったので、あえて、ボリウムを回しながら、実測値を使ってテーブルを作った。


あとがき



やってみると、意外とプログラムの面白さを感じた。改良の余地はまだある。例えば、使用していないときはスリープにするとか、面白い音を出すとか。

全てのミッションも恐らくPICで出来てしまうと思う。スリープタイマーとかは実用的だ。興味があれば、是非トライしてみることをお勧めする。




2008/5/11 初版作成

(C)2008 air variable All Rights Reserved..

ホーム