Memorandumの小部屋
本ページは金銭授受を伴う行為を含むAuctionや商用Web
Pageからの無断リンク・無断参照を禁じます。
無断リンク・無断参照が判明した時点で然るべき処置をとらさせて頂きます。
Pi_Pi_IC PICでVFコンバータ
1.こんなICが欲しい
Memorandumの小部屋で電池ボックス電子工作を公開していますが、この電池ボックス電子工作の出力としてブザー音とLEDを使いたいと思っておりました。 入力電圧に応じてLEDの点滅間隔とピィッ、ピィッ音の間隔が変化するような機能です。
この出力を実現するためにプロトタイプとして下記回路のようなタイマーIC555を2個使用した試作回路を作成しました。
U1の555はVFコンパーターとして使用しています。 入力信号電圧に応じた周波数で発振し、OUT端子(3番ピン)からパルス出力します。 この発振周波数及びパルス幅はC1,R1,R2の定数で決まります。 このOUT端子にLEDを接続することで入力電圧に応じてLEDを点滅します。
U2の555では50%dutyのパルスを発生させ、ブザー音の発振器として使用しています。 U1のパルス信号をQ1で反転し、これをU2のRES端子(4番端子)に入力しています。 U2のRES端子がHレベルの時にVR1・C2の定数で決まる周波数のパルスを発生します。 このOUT端子にアンプを接続することでLEDが点灯している間にブザー音を鳴らすことができます。
しかし、この回路では、(a)部品点数が多い、(b)連続発振ができない、(c)入力電圧レンジを調整するのに別に回路が必要、など電池ボックス電子工作用には使用できません。
このような事情もあり、8pinDIPサイズで適切なICがないか探してみました。 要求使用を下記します。 しかし、これはといったICを見つけることができませんでした。
(1) | 電圧入力に応じて発振周波数が変化する出力があること。 (つまりVFコンバータですね。) この出力を使ってLEDを点滅させる。 以降、この信号をLED信号と称する。 |
(2) | LED信号がLEDを点灯しているときに、ブザー用の発振をするための出力を設ける。 以降、この信号をブザー信号と称する。 |
(3) | 連続発振、発振停止の入力電圧のしきい値を任意に設定できる。 |
(4) | 入力電圧の変化に応じて発振周波数の増減方向を変えられる。 |
(5) | 必要な外付け部品が少なく、8ピンDIPサイズであること。 |
適当なICがないとなると自分でこの機能を実現することを考えなければなりません。 PICマイコンでアナログ入力の機能を持ったマイコンがありますので、このなかからPIC12F683-I/Pを選択して上記機能を実現することにトライしてみました。
PIC12F683-I/Pを選択した理由ですか? 実は、秋月電子通商の通販のページにおいて、8pinDIPのなかでアナログ入力のあるPICマイコンとして一番最初に見つけたチップであったという理由だけです。 書込器の心配はないと勝手に思いこんでいました。 実際に現品を入手して手持ちのVersionではサポートされていないことを知って慌てました。 でも、アップデートで対応してあり、どうにか本トライを開始できるようになりました。
2. Pi_Pi_ICの仕様
基本的な仕様は前記の「こんなPi_Pi_ICが欲しい。」のとおりです。 前記仕様を実現するためのプログラミングと試作を繰り返し、結果的に下記の仕様としました。
PIN No |
信号名称 (PIC) |
信号名称 (PIC) |
方向 | Hレベル | Lレベル |
1 | VDD | VDD | − | 2.2〜5V | |
2 | GP5 | LED信号 | 出力 | LED点灯 | LED消灯 |
3 | GP4 | ブザー 信号 |
出力 | LED信号がLED点灯時、発振パルス出力。 LED消灯時はLレベル。 | |
4 | MCLR | リセット信号 | 入力 | 通常動作 | 出力停止。(GP4,GP5強制 Lレベル) |
5 | GP2 | 連続点灯信号 | 入力 | 通常動作 | 連続出力。(GP4,GP5 強制 Hレベル) |
6 | GP1 | タイマ選択信号 | 入力 | ベースタイマー 約20ms | ベースタイマー 約5ms |
7 | AN0 | 入力信号 | 入力 | アナログ入力信号 (0V〜VDD電圧の範囲内) | |
8 | VSS | VSS | − | GND (電源の−側) |
PIC12F683-I/Pは内部クロックを500kHz設定で使用します。 このため、命令1Cycleの処理時間は8μsとなります。 また、このICの細かい機能設定をEEPROMの値を設定することで調整できます。
アドレス | データ名称 | 内 容 | デフォルト |
0 | Low電圧しきい値 | UP/DOWN信号=0のとき この電圧以下になると出力停止。 UP/DOWN信号=1のとき この電圧以下になると連続出力。 |
H’33’ (=51) 5V電源時 約1Vに相当 |
1 | High電圧しきい値 | UP/DOWN信号=0のとき この電圧以下になると連続出力。 UP/DOWN信号=1のとき この電圧以下になると出力停止。 |
H’CC’ (=204) 5V電源時 約4Vに相当
|
2 | ブザー発振パルス High時間 パラメータ BH |
ブザー発振信号のパルスのHレベルの時間TH設定パラメータ TH = 3×(BH-1) + 23 |
H’0E’ (=14) (Hレベル時間Thw = TH× 8μs)
|
3 | ブザー発振パルス Low時間 パラメータ BL |
ブザー発振信号のパルスのLレベルの時間設定パラメータ TH = 3×(BL-1) + 23 ブザー発振周波数 fbz =125÷(TH + TL) [kHz] |
H’0E’ (=14) (Lレベル時間Tlw = TH× 8μs) デフォルトのブザー発振周波数fbzは約1kHzとしています。 |
4 | LED信号点灯時間 パラメータ TL |
LED点灯時間設定パラメータ 点灯時間TW ≒ TLED × 16.4 [ms] |
H’06’ (=6) TW ≒ 100 [ms] |
5 | 入力信号倍率 |
入力信号をこの定数倍した値を用いて処理します。 入力信号の変化に対してLED点滅間隔の変化し具合を調整する際に使用します。
上記各bitのうち、1にセットされたビットの倍率の計算結果の総和を求めて、これを入力電圧値と見なします。 倍率範囲は 0 , 1/16 〜 15・(15/16)倍です。 |
H’10’ (=16) 倍率 = 1倍 (1〜3Vで0〜100%変化させるときは約1.67倍することになりますのでH’1B’となります。 しかし、LEDの消灯時間が長くなりますので、あまり倍率を掛けないほうがよいようです。)
|
6 | UP/DOWN設定 | bit0 = 0のとき Low電圧しきい値以下で発振停止。 bit0 = 1のとき Low電圧しきい値以下で連続発振。 bit1〜7は未使用。 |
bit0=0,1 の両方のHEXファイルを掲載しております。 |
7 | OSCTUNE | PIC12F683のOSCTUNEレジスタ設定用 |
H’00’ (=0) |
3. Pi_Pi_ICの試作例
このPi_Pi_ICを使用した回路例を下記します。 光をCDSで受光し、光量の増減に応じて圧電スピーカからのブザー音とLEDの点灯間隔が変化します。
【 Pi_Pi_IC 回路図 】
最近の試作はブレッドボードを使用しています。 高周波以外は全てブレッドボードで試作しています。 結構便利なので使い始めると止められないですね。 (写真用に綺麗に並べ替えましたが、試作中はお見せできないくらいに電線・部品が入り乱れていました。)
【 Pi_Pi_IC 試作例 】
上記の試作を行った結果を以下に示します。 まず、LED消灯時間を短くしたときのブサー信号とLED信号の波形を下記します。
下図のT1は、入力電圧に応じて変化します。
下図のT2はEEPROMのLED信号点灯時間パラメータ TLで設定されています。
下図のfbzはEEPROMのザー発振パルスHigh時間パラメータ BHとブザー発振パルスLow時間パラメータ BLで設定されています。 この場合は約1kHzです。
入力信号にアップダウンした信号を入力したときのLED信号の変化状態を下記します。 このときのLow電圧しきい値=約1V、High電圧しきい値=約4V、LED信号点灯時間 TL=約100ms、入力信号倍率=1倍の場合です。
【 UP/DOWN設定 = 0のとき 】
【 UP/DOWN設定 = 1のとき 】
こんなPi_Pi_ICでよければ、使ってみて下さい。
UP/DOWN設定 = 0 | jsk23_up.hex |
UP/DOWN設定 = 1 | jsk23_down.hex |
4. その他
4.1 初めてのPIC12F683-I/P
PIC12Fのアーキテクチャに初めて接しました。 基本的にはPIC16F84Aと同じですが、機能が増えた分いろいろな設定が必要になってきています。
<GP1入力トラブル>
今回のプログラムで痛い目に合ったのがCMCON0レジスタの不適切な設定でした。 GP1を入力で使用していますが、当初、GP1の入力信号をプログラムで読めない現象が発生していました。 結構な時間を掛けていろいろ調べたのですが、原因を掴むことができなせんでした。
データーシートにサンプルプログラムがあり、CMCON0レジスタの設定が必要ということは知っていましたが、コンパレータを使っていないので真面目に読んでいないのが敗因でした。
GP1(GP0)をディジタル入力で使用するときにはANSELレジスタだけではなく、CMCON0レジスタの「COMPARATOR I/O OPERATING MODE」の設定も必要なのですね。 当初は関係無いと思い、CM<2:0>=0 0 0と設定していました。 最終的にはCM<2:0>=1 1 1で問題解決です。 たったこれだけで延べ何時間かかったことか。。。
<CPUTUNEレジスタ>
CPUTUNEというレジスタで少し遊ばしてもらいました。 その名残もこのPi_Pi_ICに残しています。
CPUTUNEレジスタは -16 〜 +15の間で調整できるようになっています。 この調整を行ったときの周波数変化率を実測してみました。 その結果を下記に示します。
なお、中心周波数はそれなりに調整されているようでした。 結構変化率が大きいようで、0.6%以下の微調整はできないようです。
4.2 EEPROMデータの書き換え
秋月電子通商のPICプログラマキット Ver4.0 (K-200)用ソフト「PIC ProgrammerV4 Beta」以降ではEEPROMだけの書き換えが簡単にできるようになりました。
本ソフトの拡張機能を選択すると拡張プログラミング機能のWindowが開きます。
【 拡張プログラミング機能Window 】
このメニューのPCバッファメモリ修正をクリックすると下記のEEPROMデータ修正Windowが開きます。 このWindowでデータを修正後、拡張プログラミング機能WindowのEEPROM DATAメモリのプログラミングをクリックして書き換えが終了です。
【プログラム書き込みサービス】
まだ試作のため、現状ではPICマイコンの書き込みサービスの対象とはしません。
End of This Page.