電子工作etc


【PIC12F683】

 ■電子ボリューム
  ★概要
    SANYOの2チャネル用電子ボリューム(LC75366)をPICで制御してみました。
    千石電商で250円で販売していました。
    LC75366は、ボリューム、 バランス、ラウドネスの各機能をシリアルデータ入力によりコントロールできる
    電子ボリュームです。<0dB 〜− 68dB(2dB ステップ)、36 ポジション>

  ★動作原理
    PICにより、10dB、2dBのステップを制御(プッシュSWによりUP/DOWN)します。
    L10dBのボリュームは、約80k、L2dBのボリュームは、約20kです。
     

    これは下図のような回路に概ね等しい事になります。
      【A】は、L10dBOUTとL2dBINを直接に接続した場合です。
      【B】は、L10dBOUTとL2dBINの間にバッファーを挿入した場合です。(本来はこれがお勧めです)
     

    PICから制御する時のタイミングチャートです。3本(CE、DI、CL)でアドレス、データの20ビットをシリアルに
    送信します。(B0、B1、B2...D11の順に送信)
     

    このICは、同一バス上に2個接続できます。その個々の認識はアドレスコードにより行います。
    ラウドネスのON/OFFも出来ますが、今回はOFFとして使用しました。
    Rch、Lchは同時に制御することも、個別に制御することも出来ます。これにより左右のバランスを調整する
    ことが出来ます。
     

  ★回路図
    L10dBOUTとL2dBINの間には、本来はバッファーを入れるべきなのですが今回は省略しました。
    ラウドネス機能は付けませんでした。単純にボリュームのUP/DOWNのみとしました。
     

  ★ソースリスト
    ソースリストはここです。

  ★動作確認
    いつものようにブレッドボードで動作確認です。
    見えにくいですが、緑色のSWがDOWN、黄色のSWがUPです。
     
     0dB -2dB
     -4dB -6dB
     -8dB -10dB

    -10dBで極端に低下しているのはバッファーを省略したからです。
    つまり、10dBのボリュームに2dBのボリューム(20kΩの負荷)が影響を与えてしまうためです。

    外付け部品も少なく、価格も安いのでちょっとしたラジオ、アンプのボリュームには適当かと思います。



【PIC16F88】

 ■簡易レベルメーター
  ★概要
    レベルメーター(LED10点)を作成しました。
    今回は、ソフトウエアでの処理に重きを置きました。なのでハードウエアはとても単純になりました。

  ★動作原理
    通常は、ハードウエアで信号を【増幅】→【平滑】した後でPICでA/D変換しLEDを点灯させるのですが、
    今回は【平滑】回路を使用せずにソフトウエアで信号のレベルを判定します。
      (1)信号を30個取り込む
      (2)その内から最大値と最小値を求める
      (3)最大値と最小値の差を求める
      (4)その差に応じてLEDを点灯させる

  ★回路図
    10kΩのボリュームを廻してコレクタ電圧が約2.5Vになるように調整します。
    そうすると信号に応じてコレクタ電圧が2.5Vを中心に変化することになります。
    信号は、トランジスタで約10倍に増幅された後PICに入力されます。
     

  ★ソースリスト
    ソースリストはここです。

  ★動作確認
    いつものようにブレッドボードで動作確認です。
    先ずは、トランジスタのコレクタ電圧を10kΩのボリュームを廻して2.5Vに調整します。
    下の輝線がGND(0V)レベルです。上の輝線がコレクタ電圧です。(1V/DIV)
     
    小さな信号を入力しました。2.5Vを中心に振幅しますね。
     
    大きな信号を入力しました。
     
    更に大きな信号を入力しました。上下がつぶれました。
     
    PICにこの電圧を入力し、LEDを点灯させます。
    LEDは秋月電子で購入した10点セットのものを利用しました。
     
    CDプレイヤーを接続し、音楽信号を入力してみました。中々宜しいようで...{^_^}!
     



【PIC12F683】

 ■人体(焦電型赤外線)検出ユニット
  ★概要
    焦電型赤外線センサP4488(P2288と同等品)が秋月電子で100円で販売していましたので
    これを利用した人体検出ユニットを作成しました。

  ★動作原理
    一般的には、次のようなオペアンプを利用した回路をよく見かけます。
    秋月電子通商キット取扱説明書回路図集より抜粋しました。
    オペアンプで40倍、40倍の1600倍に増幅し、基準電圧とコンペアし、リレーを一定時間駆動する。
     
    このように結構複雑ですよね。これを何とかシンプルに出来ないものかと考えてみました。

  ★回路図
    低電圧オーディオ用パワーアンプLM386を2個使用して20倍、20倍の400倍に増幅しています。
    この増幅された信号をPICでA/D変換で取り込みソフトウエアで処理しています。
    もう少し感度がほしい場合にはLM386の増幅率を30倍、40倍に上げれば良いと思います。
    その方法はとても簡単です。
    1ピンと8ピンの間を抵抗とコンデンサーで接続するだけで20倍から200倍の倍率を設定する事が出来ます。
    例えば、1.2kΩ+10uFのコンデンサで約50倍の増幅率になります。
    如何ですか、とてもシンプルでしょ?
     

  ★ソースリスト
    プログラムでの処理は、とても簡単です。
    約0.5秒間<10msec間隔で50回>で信号を取り込み、100mV以上信号が変化すると人体を検出したとみな
    します。
    ソースリストはここです。

  ★動作確認
    いつものようにブレッドボードで動作を確認しました。
    ICは、左から、LM386、LM386、PIC12F683です。
    如何ですか? とても簡単ですよね。
     
    左端が、焦電型赤外線センサP4488で、超高感度焦電センサー用レンズを被せた所です。
    右端が、圧電スピーカです。人体を検出すると一定時間ブザーが鳴ります。
     
    こんな簡単な回路でも、数メートル離れている人体を検出し、ブザーを鳴らせる事が出来ます。
    プログラムを少し改造すればいろいろな用途に使えそうですね!



【PIC12F683】

 ■簡易信号発生ユニット(PWM)U
  ★概要
    近々にAMのワイヤレスマイクを作成しようと思っています。
    その発振部に、コイルとバリコンでは、安定性に欠けるので何か方法は無いものかと思案しておりました。
    水晶を使う手もあるのですが、必要な周波数分購入しなければなりません。
    その応用でVXO(Variable-crystal oscillator(可変周波型水晶発振器))はどうかと思いましたが、可変範囲が
    狭すぎます。
    あれこれ思案した末、PICが内蔵しているCCPモジュール(Compare/Capture/PWM)のPWMモードが使用で
    きるのではと考えました。

  ★動作原理
    PICのPWMモードでは、周期とデューティ(duty)が設定できます。
     

    先ず、周期が最高どこまで設定可能かを計算してみます。
      周期=(PR2+1)×4Tosc×(TMR2のプリスケール値)
    クロックが20Mhzの場合には、
      1667kHz≒(2+1)×4(0.00000005)×1
    この時に、PR2の値を2にしたのは、本ユニットの出力は正弦波としますので、デューティは周期の半分と
    なるためです。
    PR2を変化させていくと、次のような周波数を得ることが出来ます。
      2: 1667Khz
      3: 1250Khz
      4: 1000Khz
      5: 833Khz
      6: 714Khz
      7: 625Khz
      8: 555Khz
      9: 500Khz

    これだけの周波数が設定できれば、AMラジオの範囲内としては、十分かなと思います。
    但、PICの出力は、当然のことですが、出力が方形波となってしまいます。
    そこで、この後に2段の同調回路を設けて正弦波に変換することにしました。

  ★回路図
    SW1,2,3で、上記の8種類の周波数を切り替えます。
     

  ★ソースリスト
    ソースリストはここです。

  ★動作確認
    水晶は手持ちの、20.0000Mhzのクロックモジュールを使用、周波数の切り替えは、3個のディップSWで、
    同調は2個のOSCコイルと2連バリコンで行いました。
     
     
     
    上段が(A)PICの出力波形です。
    下段が(B)2段の同調回路を通った後の波形です。
    若干、方形波の立下りに歪が発生します。
     
    流石にクロックモジュールの精度が高いので周波数は結構安定しています。<1Mhz設定時>
     
    安定した周波数をAMラジオの範囲で8段階に設定できるのでとても便利です。
    これをベースにして、AMワイヤレスマイクを作成しようと考えています。



【PIC12F683】

 ■信号発生ユニット(PLL)
  ★概要
    PLLは、電圧に応じて周波数が変化するVCO(電圧制御発振回路)の出力信号と入力(基準周波数)との
    位相差をVCOにフィードバックすることにより、同期(ロック)させるものです。
    このとき、VCO(電圧制御発振回路)の出力信号を分周したものを用いることにより入力信号の周波数を
    逓倍した信号を得ることが出来ます。
    基準周波数をN倍(分周の逆)した周波数を得ることが出来るので「掛算器」とも呼ばれます。

  ★動作原理
    PLL用のIC「4046B」とPIC(2個)を使用しました。
    周波数は、100kHz〜1500kHzまでを、1kHz単位または10kHz単位でUP/DOWNできます。

    4046B(PLL)は、基準周波数と比較周波数の差分を検出する位相比較器、および、デジタルパルスを発生する
    VCOより構成されています。
     

    基準周波数(1kHz)の発振部と分周(÷N)部には、PIC12F683を使用しました。
    発振部のPICでは、CPPモジュールをコンペアモードで使用し、16MHzのクッロクより、精度の高い1kHzの信号
    を出力します。
    分周部のPICでは、CPPモジュールをコンペアモードで使用し、VCOからの出力信号を分周し出力します。
    その時の分周値は、プッシュスイッチにより、UP/DOWNすることが出来ます。
    起動時は、500kHzに設定されています。
    UP/DOWNのプッシュスイッチを同時に押すと500kHzに戻ります。

    ※4046Bは、サトー電子で136円で通販しています。(2007年5月19日時点)
    ※4046Bよりも高機能(上限約16MHz)な74HC4046Pが693円でした。

  ★回路図
     

  ★ソースリスト
    ソースリストはここです。<1kHz発振部>
    ソースリストはここです。<PLLカウンタ部>

  ★動作確認
    左のスライドスイッチで、単位(1kHz/10kHz)を切り替えます。
    青色プッシュスイッチでUP、黄色プッシュスイッチでDOWNします。
     
    出力波形と初期値の500kHzです。
      
    最小値の100kHzと最高値の1500kHzです。
      
    中間周波数とNHK第一放送に設定してみました。
      
    プッシュスイッチで1kHzまたは10kHz単位で設定できますのでとても便利です。
    クッロクモジュールにもっと精度の高い物を使用すれば、更に精度の高い発振器になりますね。



【PIC16F88】

 ■時計ユニット(RTC)
  ★概要
    秋月電子通商で販売している「リアルタイムクロックモジュール(RTC-8564NB)」を利用した時計を作成しまし
    た。このモジュールの特長は以下のとおりです。
     ■セイコーのリアルタイムクロックIC(RTC-8564NB)を使ったクロックモジュールです。 
     ■I2CインターフェースでPICやH8などと通信可能です。 
     ■IC内に高精度クリスタルが内蔵されています。 
     ■パーツは全て実装済み。8ピンDIPのICとしてお使いになれます。 
     ■INT割り込み用のLED付き 
     ■ピンは実装済みです。 
     ■動作電圧:1.8V〜5V 
     ■アラーム機能、タイマー機能、周波数出力機能 
     ■消費電流:330nA(@5V、非アクセス時) 

  ★動作原理
    RTCとPICとの接続は、I2Cインターフェースを使用します。
    I2CとはInter Integrated Circuitの略で、主に同一基板内などの近距離に配置されたデバイス間での高速
    通信(100Kbps/400Kbps/3.4Mbps)を行うための方式です。
    デバイス間はSDA(serial data)とSCL(serial clock)の2本の信号線だけをバスとして共有して通信を行います。

    今回使用したモジュールのブロック図です。
     

    このモジュールは、次のレジスタテーブルを利用して、データの書き込みや読み出しを行います。
    

    今回は、機能を最小限に絞り込みました。
    <時刻の設定>
     プッシュスイッチ(時)が押下されると、「時」データをインクリメント(+1)し、そのデータを、レジスタテーブル
     の04に書き込みます。
     プッシュスイッチ(分)が押下されると、「分」データをインクリメント(+1)し、そのデータを、レジスタテーブル
     の03に書き込みます。

    <時刻の読出>
     時分秒のデータを、レジスタテーブルの02,03,04より順次読み出しLCDに表示します。

  ★回路図
     

  ★ソースリスト
    ソースリストはここです。

    I2Cインタフェースは、今後も使用する機会があると思いますので、汎用性を考えて以下のような関数を用意
    しました。
     ・i2c_Start()
     ・i2c_Stop()
     ・i2c_Ack()
     ・i2c_Nack()
     ・i2c_SendByte(unsigned char data)
     ・i2c_RecvByte()

  ★動作確認
    いつものようにブレッドボードで確認しました。
    左上の黄色と緑色のプッシュSWで時分を設定します。
    LCD表示の下のバーは、秒の変化を表示したものです。
     
    如何ですか、これ以上簡略化が出来ない程にシンプルにしました。



【PIC16F876】

 ■高速AD変換ユニット(AD7820)
  ★概要
    秋月電子通商で300円で購入したANALOG DEVICESのAD7820 8ビットA/Dコンバータを使用してみました。
    AD7820は高速、マイクロプロセッサ・コンパチブルの8ビットA/Dコンバータ(ADC)で、ハーフフラッシュ変換
    技術の採用によって1.36μsecの変換時間を実現しています。
    PICの内臓モジュールでは、12ビット(20MHz)精度で、最小39μsecなので、約28倍も高速に変換できること
    になります。
    【特長】
      ■高速変換時間:1.36μs(max)
      ■トラック・アンド・ホールド回路内蔵
      ■ノー・ミスコードを保証
      ■トリミングの必要なし
      ■単電源+5V動作
      ■レシオメトリック動作
      ■外部クロック必要なし
      ■拡張動作温度範囲
      ■スキニー20ピンDIP、SOICパッケージ
      ■アナログ入力電圧範囲は0〜+5Vで、+5Vの単電源で動作
    AD7820のブロックダイアグラムです。
     

  ★動作原理
    A/D変換したデータを単純にD/A変換(ラダー抵抗方式)する処理を繰り返すだけのものです。
    AD7820には何種類かのモードがありますが、今回は最も簡易なRDモードを採用しました。
     

  ★回路図
     

  ★ソースリスト
    ソースリストはここです。

  ★動作確認
     
    入力に1kHzの半波を加えてみました。
    上の黄色が入力波形、下の水色が出力波形です。
     
    入力に10kHzの半波を加えてみました。
     
    如何ですか?
    これで簡易オシロを作成するのも宜しいのでは...!?



【PIC16F876】

 ■簡易オシロ(グラフィック液晶表示)
  ★概要
    秋月電子通商で購入した「LCDグラフィック・ディスプレイモジュール)バックライト付 」を利用した簡易オシロ
    を作成しました。
     ■SUNLIKE社グラフィックLEDモジュールです。
     ■122x32ドット
     ■漢字パターンを送れば、漢字・記号・図形を自由に表示できます。
     ■5V単一電源
     ■H8マイコン・PICマイコンなどに直結できます。
     ■制御ICはEPSON S1D1520準拠
     ■液晶サイズ:60.5(W)x18.5(H)
     ■接続端子:20ピン(2x10)

  ★動作原理
    PICのA/D変換機能でアナログデータを取り込みそれを単純に液晶に表示させるだけのものです。
    但し、PICのA/Dの分解能は10ビットなので5ビット分右にシフトして5ビット(32)にします。
    このモジュールは、液晶駆動クロック(2kHz〜3kHz)を外部から供給する必要があります。
    今回はPICのPWM機能を使って供給しました。なので回路図としてはとてもシンプルです。

  ★回路図
     

  ★ソースリスト
    ソースリストはここです。

  ★動作確認
    100Hzの正弦波(半波)を入力してみました。
     
     



【PIC18F1320】

 ■8チャンネルデータロガー(MCP3208)
  ★概要
    秋月電子通商で購入した、12ビット精度の8chのADコンバータ [MCP3208]を使用してみました。
    現時点(2007年6月)で、400円で購入できます。
    下図は、機能ブロック図です。このICの制御は3線式なのでとてもシンプルな構成です。
     
    【特徴】
      ・12 ビットの分解能
      ・DNL 最大± 1 LSB
      ・INL 最大± 1 LSB (MCP3204/3208-B)
      ・INL 最大± 2 LSB (MCP3204/3208-C)
      ・4 入力チャンネル(MCP3204) または8入力チャンネル(MCP3208)
      ・アナログ入力はシングルエンドあるいは疑似差動入力ペアとしてプログラム可能
      ・オンチップのサンプル& ホールド
      ・SPIR シリアル ・インターフェース( モード0,0および1,1)
      ・単一電源動作: 2.7 〜 5.5V
      ・100ksps max サンプリング速度(VDD = 5V 時)
      ・50ksps max サンプリング速度(VDD = 2.7V 時)
      ・低電力CMOS 技術
       : 待機電流500 nA typ ( 最高2μA)
       :動作電流400 μA max (5V 時)
      ・広い温度範囲: -40 〜 +85 ℃
      ・PDIP、SOIC およびTSSOP パッケージで利用可能
    【用途】
      ・センサー・インターフェース
      ・プロセス制御
      ・データ収集
      ・バッテリー駆動システム

    通信タイミングチャートです。
     

  ★動作原理
    特に難しい箇所はありません。
    PICとMCP3208を4本(CLK、Dout、Din、CS)で接続し、タイミングチャートに従って制御するだけです。
    そのAD変換したデータを文字列に変換してRS232CでPCへ送信します。

  ★回路図
    とてもシンプルな回路になりました。
     
    PICからのTX出力は、RS232Cレベル変換ユニットを経由して、パソコンへRS232C経由で出力します。

  ★ソースリスト
    ソースリストはここです。
    MCP3208の制御部分(Read部分)は関数化しました。

  ★動作確認
    いつものブレッドボードで確認しました。
    PICとMCP3208の間は、4本線なので、とてもすっきりしています。
     
     
    PCのハイパーターミナルでデータを受信し表示しました。
    1行に左からCH0、CH1、CH2.....CH7の順に表示しています。
     
    ◎高速なAD変換を要する場合は、高速AD変換ユニット(AD7820)を...(但し8ビット分解能)
    ◎PICの標準では10ビット分解能を...
    ◎分解能が更に必要であれば、今回のMCP3208の12ビットを...
    如何ですか? 夫々、用途に応じて使い分けをして頂ければ宜しいかと。



トップへ
戻る


電子工作etc