o
※このページはあくまで個人的な趣味によって書かれており、著者は全ての内容について、いかなる責任も負いません。
●重要なお知らせ●
1.Windows10の対応
2.アセンブラ言語について
3.ADM3202のコンデンサの接続について
私は、数年前まで、ある金融系会社やら研究所とやらでSEをしていた。
秋月電子のPICプログラマーキットにバージョンアップキットを装着したイメージ
上記、「PICプログラマーキット」用の「USBシリアル変換ケーブル」
バージョンアップキットには、「Serial EEP ROM (24、93シリーズ)」ライターもついている
AKI−PICマイコンモジュールキットのイメージ
PICKIT2とPICKIT3の写真(PICKIT3になって、ケースのデザインがスケルトンに変更された)
PICKIT2、PICKIT3のコネクタピンレイアウト図(マイクロチップ社さんのマニュアルより抜粋)
PICKIT2とPICKIT3ではデバイスへの電源供給方法が異なります。
PICKIT2の写真(こんなアダプタを作っておくと便利だ)
PICKIT2は、付属の書き込みツールを使うより、MPLABから使用したほうが操作が簡単だ ※注)画面はMPLAB v8.10
PICKIT2は、オンラインのデバッグも簡単だ(画面は、MPLABから24FJ64GA002をデバッグする例) ※注)画面はMPLAB v8.10
PICKIT2やPICKIT3で、いきなりこんなメッセージが出た場合、付属のUSBケーブルが壊れている可能性があります。
JLINKのイメージ
第一章 8ビットPIC(PIC10F/12F/16F/18F)を使ってみる
6ピンPIC PIC10F200/PIC10F322を使ってみる
●電子じゃんけん(10F200/10F322)
10F200を使った簡単なサンプルだ。
基板の写真(表/裏)
回路図 (DIP版の場合)
サンプル@ プログラムソース(MPLAB用/10F200/MPASM アセンブラプログラム)
サンプルA プログラムソース(MPLAB用/10F322/MPASM アセンブラプログラム)
サンプルB プログラムソース(MPLAB用/10F200/HI-TECH(Version9.70) C言語プログラム)
サンプルC プログラムソース(MPLAB用/10F200/HI-TECH(Version9.83) C言語プログラム)
サンプルD プログラムソース(MPLAB用/10F322/HI-TECH(Version9.83) C言語プログラム)
●実験ボード タイプ1(10F322)
10F322を使った簡単な実験ボードを作ってみた。
基板の写真(表/裏)/回路図
(1)NCO機能を使ってみる(その1) (10F322)
10F322に内蔵されているNCO機能を使って、100KHzと1KHzを出力するサンプルを作ってみた。
写真/回路図
オシロスコープの出力イメージ(100KHzのサンプル)
サンプル@ プログラムソース 1KHz(MPLAB用/10F322/MPASM アセンブラプログラム)
サンプルA プログラムソース 100KHz(MPLAB用/10F322/MPASM アセンブラプログラム)
サンプルB プログラムソース 100KHz(MPLAB用/10F322/HI-TECH(Version9.83) C言語プログラム)
(2)NCO機能を使ってみる(その2) (10F322)
水晶発振器とNCO機能を使って、精度の高いオシレータを作ってみた。
アダプタ基板/アダプタ基板を10F322の実験ボードに取り付けたイメージ/回路図
オシロスコープ、周波数カウンタで測定した出力イメージ(100KHzのサンプル)
サンプル@ プログラムソース 100KHz(MPLAB用/10F322/MPASM アセンブラプログラム)
サンプルA プログラムソース 50KHz(MPLAB用/10F322/MPASM アセンブラプログラム)
サンプルB プログラムソース 100KHz(MPLAB用/10F322/HI-TECH(Version9.83) C言語プログラム)
(3)CLC機能を使ってみる (10F322)
CLC機能を使って、簡単なサンプルを作ってみた。
アダプタ基板/アダプタ基板を10F322の実験ボードに取り付けたイメージ/回路図
サンプル@のロジックイメージ(概略)とオシロスコープによる出力イメージ
サンプルBのロジックイメージ(概略)とオシロスコープによる出力イメージ
CLC Designerを使った場合の、CLCの設計イメージ
サンプル@ プログラムソース(MPLAB用/10F322/MPASM アセンブラプログラム)
サンプルA プログラムソース(MPLAB用/10F322/HI-TECH PICC(Version9.83) C言語プログラム)
サンプルB プログラムソース(MPLAB用/10F322/MPASM アセンブラプログラム)
サンプルC プログラムソース(MPLAB用/10F322/HI-TECH PICC(Version9.83) C言語プログラム)
(4)オルゴールをAMラジオに飛ばしてみる (10F322)
CLC機能を使って、メロディー(ドレミファ〜)をAMラジオの1MHzに飛ばしてみました。
写真/アダプタ基板/回路図
CLCの設定イメージ
サンプル@ プログラムソース(MPLAB用/10F322/HI-TECH PICC(Version9.83) C言語プログラム)
サンプルA プログラムソース(MPLAB用/10F322/MPASM アセンブラプログラム)
8ピンPIC PIC12F683/PIC12F1822/PIC12F1501 を使ってみる
●ドット表示式 2桁電子サイコロ(12F683,12C509A)
初めて作ったおもちゃだが、気に入っている。
ダイナミック方式を使った2桁電子サイコロの動作原理
基板の写真(表/裏)
回路図
サンプル@ プログラムソース(MPLAB 12C509A/12F683用 MPASMアセンブラプログラム)
サンプルA プログラムソース(MPLAB 12F683用 HI-TECH PLCC C言語プログラム)
サンプルB プログラムソース(MPLAB 12F1822用 HI-TECH PLCC C言語プログラム)
●4入力 => PC出力 電圧測定器(12F683)
12F683には、4チャンネルの10ビットD/A Converterが内蔵されている。
写真
回路図(電源部を除く)
ポートの設定(Windows/XP ハイパーターミナルの場合)
プログラムソース(MPLAB用 アセンブラプログラム)
●2入力2出力 PCリレードライブ(12F683)
RS232Cシリアルリレードライブだ。
写真
回路図(電源部を除く)
ポートの設定(Windows/XP ハイパーターミナルの場合)
プログラムソース(MPLAB用 アセンブラプログラム)
●EEP-ROM(AT24C256/I2C方式)、及びPIC内部のData-EEP-ROM 読み書きサンプル(12F683)
PIC12F683内部のData EEP-ROM、及びAT24C256に5バイトのデータを書き込み、
読み込む簡単なサンプルだ。
EEPの種類により、アドレスの設定が微妙に異なっている(メーカーマニュアルより抜粋)
写真
回路図
ポートの設定(Windows/XP ハイパーターミナルの場合)
プログラムソース(MPLAB用 アセンブラプログラム)
●EEP-ROM(AT93C86/Microwire方式)読み書きサンプル(12F683)
AT93C86に5バイトのデータを書き込み、読み込む簡単なサンプルだ。
写真
ハイパーターミナルの実行イメージ
回路図
ポートの設定(Windows/XP ハイパーターミナルの場合)
プログラムソース(MPLAB用 アセンブラプログラム)
●パソコンキーボード(PS/2 106日本語キーボード)のPIC接続用アダプタ(12F683)
PICにパソコン用のキーボードを接続するアダプタだ。
写真・回路図・PS/2 キーボードコネクタの接続図
18F8720/18F452マザーボードにつなぐ場合
ポートの設定(Windows/XP ハイパーターミナルの場合)
プログラムソース(MPLAB用 アセンブラプログラム)
●ワイヤレス式・パソコンキーボード(PS/2 106日本語キーボード)のPIC接続用アダプタ(12F683)
テレビやビデオのリモコンで使われている、赤外線LEDと受信モジュールが秋月電子で200円程度で購入
写真
送信側の回路図
受信側の回路図
送信側プログラムソース(MPLAB用 アセンブラプログラム)
受信側プログラムソース(MPLAB用 アセンブラプログラム)
●PWM方式 12V小型直流モータードライブ(12F683)
PICで12V小型直流モータを動かしてみた。
写真・回路図・PWM方式
プログラムソース(MPLAB用 アセンブラプログラム)
●ACパルス発振器(12F683)
実験的な意味で、上記「PWM方式 12V小型直流モータードライブ」で作った基盤をそのまま使って、ACパルス発振器の
回路図
プログラムソース(MPLAB用 アセンブラプログラム)
●3V1A スイッチングレギュレタ(12F683)
チョッパー型スイッチングレギュレタを作ってみた。
写真
回路図
プログラムソース(MPLAB用 アセンブラプログラム)
●0〜99999Hz 周波数カウンタ(12F683)
12F683のTIMER1-MODULEを使って、5桁の周波数カウンタを作ってみた。
写真
回路図
ポートの設定(Windows/XP ハイパーターミナルの場合)
プログラムソース(MPLAB用 アセンブラプログラム)
基盤の隅が余るので、アンプを追加してみた。
写真
回路図
プログラムソース(MPLAB用 アセンブラプログラム)
●風速計(12F683)
ダイソーで購入したガーデニング用の風車に、フォトトランジスタを2つ取り付けて、風速計にしてみた。
写真
仕組み
実行イメージ(ハイパーターミナル)
回路図
ポートの設定(Windows/XP ハイパーターミナルの場合)
プログラムソース(MPLAB用 アセンブラプログラム)
●睡眠器(12F683)
睡眠効果が本当にあるのかどうかは疑問だが、昔、睡眠器として購入したものをPICで再現してみた。
写真
回路図
プログラムソース(12F683バージョン MPLAB用 アセンブラプログラム)
プログラムソース(12F629バージョン MPLAB用 アセンブラプログラム)
●モールス信号発生器(12F683)
電源を入れると、「A−Z」、「0−9」のモールス信号を出力する。
写真
プログラムソースサンプル@(12F683 SDCC用 C言語プログラム)
プログラムソースサンプルA(12F683 HI-TECH PICC(Version9.83) C言語プログラム)
プログラムソースサンプルB(12F1822 HI-TECH PICC(Version9.83) C言語プログラム)
●PWM方式 DC12V用 調光器(12F683)
カーアクセサリー用に作った調光器だ。
写真
プログラムソースサンプル(MPLAB用 アセンブラプログラム)
プログラムソースサンプル(12F683 SDCC用 C言語プログラム)
●入力;DC5V 出力;正負3.4V チャージポンプ方式 昇圧型レギュレタ(12F683)
オペアンプの電源用に作った昇圧型レギュレタだ。
写真
プログラムソースサンプル(12F683 MPLAB用 アセンブラプログラム)
プログラムソースサンプル(12C509A MPLAB用 アセンブラプログラム)
●トライアック方式 AC100V 50Hz用 調光器(12F683)
トライアックを使って、白熱電球用の調光器を作ってみた。
写真
プログラムソースサンプル(12F683 50Hz用 MPLAB用 アセンブラプログラム)
●赤外線リモコン解析器(12F683)
赤外線リモコンの解析器を作ってみた。
写真
ハイパーターミナルのイメージ
コードの簡単な解析イメージ(例) ※注)コードはメーカにより異なる
ポートの設定(Windows/XP ハイパーターミナルの場合)
プログラムソースサンプル(12F683 MPLAB用 アセンブラプログラム)
●自転車用ヘッドライト(12F683)
ライトの点滅で、モールス信号のメッセージを送るヘッドライトだ。
写真@
写真A 乾電池では1時間位しかもたないので、6V小型バッテリーと、5V低損失レギュレタを追加してみた
プログラムソースサンプル(12F683 SDCC用 C言語プログラム)
●100円オルゴール(12F509/12F629/12F683)
12F509を使ったオルゴールだ。
写真
プログラムソース サンプル@(12F509用 MPLAB/MPASM アセンブラプログラム)
プログラムソース サンプル@(12F629用 MPLAB/MPASM アセンブラプログラム)
プログラムソース サンプル@(12F683用 MPLAB/MPASM アセンブラプログラム)
●模型用サーボモータサンプル(12F683/12F509)
模型用サーボモータを動かす簡単なサンプルだ。
写真/回路図/サーボモータの制御方法
プログラムソース サンプル@(PIC12F683用 MPLAB/MPASM アセンブラプログラム)
プログラムソース サンプルA(PIC12F683用 SDCC C言語プログラム)
プログラムソース サンプルA(PIC12F683用 XC8 C言語プログラム)
プログラムソース サンプルB(PIC12F509用 MPLAB/MPASM アセンブラプログラム)
●シリアル入力・サーボモータ(12F683)
外部からシリアル通信で角度(-60°〜+60°)を入力し、サーボモータを動かす簡単なサンプルだ。
写真/回路図/使い方
プログラムソース サンプル@(PIC12F683用 MPLAB/MPASM アセンブラプログラム)
●シリアル入力・サーボモータA(12F683)
外部からシリアル通信で角度(-60°〜+60°)を与えて、サーボモータを動かすサンプルだ。
写真/回路図/使い方/通信設定
プログラムソース サンプル@ クライアント側(PIC12F683用 MPLAB/MPASM アセンブラプログラム)
プログラムソース サンプル@ マザーボード側(PIC16F88用 MPLAB/MPASM アセンブラプログラム)
●Sin波発生器(12F683)
12F683に内蔵されているVOLTAGE REFERENCEは、これをDAコンバータとして出力するような使い方はできないが、
写真/回路図/測定結果
プログラムソース サンプル@ (PIC12F683用 MPLAB/MPASM アセンブラプログラム)
プログラムソース サンプルA (PIC12F683用 SDCC C言語プログラム)
プログラムソース サンプルB (PIC12F683用 HI-TECH PICC(Version9.83) C言語プログラム)
●実験ボード・タイプ4A(PIC12F1822)
PIC12F1822を使った簡単な実験ボードを作ってみた。
写真/回路図
写真/回路図
プログラムソース サンプル@ (PIC12F1822用 Timer1) MPLAB/MPASM アセンブラバージョン
プログラムソース サンプル@ (PIC12F1822用 Timer1) HI-TECH PICC(Version9.83) C言語バージョン
プログラムソース サンプル@ (PIC12F1822用 Timer1) XC8 C言語バージョン
プログラムソース サンプルA (PIC12F1822用 Timer1割り込み) MPLAB/MPASM アセンブラバージョン
プログラムソース サンプルA (PIC12F1822用 Timer1割り込み) HI-TECH PICC(Version9.83) C言語バージョン
写真/ハイパーターミナルのイメージ/回路図
プログラムソース サンプル@ (12F1822用 16MHz MPLAB/MPASM アセンブラプログラム)
プログラムソース サンプルA (12F1822用 32MHz MPLAB/MPASM アセンブラプログラム)
プログラムソース サンプルB (12F1822用 16MHz HI_TECH PICC C言語プログラム)
写真/回路図
ハイパーターミナルのイメージ(5V、0Vを入力した場合)
プログラムソース サンプル@ (PIC12F1822用 MPLAB/MPASM アセンブラプログラム)
プログラムソース サンプルA (PIC12F1822用 MPLAB/MPASM アセンブラプログラム)
写真/ハイパーターミナルのイメージ/回路図
プログラムソース サンプル@ (PIC12F1822用 MPLAB/MPASM アセンブラプログラム)
写真/回路図
オシロスコープと、周波数カウンタによる出力のイメージ
プログラムソース サンプル (PIC12F1822用 MPLAB/MPASM アセンブラプログラム)
写真/回路図 (サンプル@)
デジタルオシロスコープによるサンプル@の出力のイメージ
この機能とブリッジ回路を組み合わせる事で、ACのパルスを簡単に制御できます
プログラムソース サンプル@ (PIC12F1822用 MPLAB/MPASM アセンブラプログラム)
写真/回路図 (サンプルA、サンプルB)
デジタルオシロスコープによる出力のイメージ サンプルA
デジタルオシロスコープによる出力のイメージ(擬似SIN波) サンプルB
プログラムソース サンプルA (PIC12F1822用 MPLAB/MPASM アセンブラプログラム)
プログラムソース サンプルB (PIC12F1822用 MPLAB/MPASM アセンブラプログラム)
プログラムソース サンプルB (PIC12F1822用 HI-TECH PICC(Version9.83) C言語プログラム)
写真/回路図
デジタルオシロスコープによる出力のイメージ
プログラムソース サンプル@ (PIC12F1822用 MPLAB/MPASM アセンブラプログラム)
写真/回路図
出力周波数の測定イメージ
プログラムソース サンプル@ (PIC12F1822用 MPLAB/MPASM 32MHz出力 アセンブラプログラム)
プログラムソース サンプルA (PIC12F1822用 MPLAB/MPASM 16MHz出力 アセンブラプログラム)
プログラムソース サンプルB (PIC12F1822用 MPLAB/MPASM 250KHz出力 アセンブラプログラム)
●地震ランプ(12F683/12F1822)
暗闇で揺れを感じると、10秒程度点灯するランプを作ってみた。
写真/回路図
プログラムソース サンプル@ (PIC12F683用 MPLAB/MPASM アセンブラプログラム)
プログラムソース サンプルA (PIC12F1822用 MPLAB/MPASM アセンブラプログラム)
プログラムソース サンプルB (PIC12F1822用 MPLAB/MPASM アセンブラプログラム)
●PS/2マウスのPIC接続アダプタ(12F1822)
パソコンのPS/2マウスをPICに接続するアダプタを作ってみた。
写真/回路図
ハイパーターミナルのイメージ サンプル@
ハイパーターミナルのイメージ サンプルA
プログラムソース サンプル@ (PIC12F1822用 MPLAB/MPASM アセンブラプログラム)
プログラムソース サンプルA (PIC12F1822用 MPLAB/MPASM アセンブラプログラム)
●昇圧型スイッチングレギュレタ[入力:DC5V、出力:DC12V・0.1A](12F1822)
チョッパー型の昇圧スイッチングレギュレタを作ってみた。
写真/回路図
デジタルオシロスコープによる出力波形(負荷が100mAの時のAC波形)
プログラムソース サンプル@ (PIC12F1822用 MPLAB/MPASM アセンブラプログラム)
●電子ブレーカ[DC5V・0.5A] (12F1822)
DC5V用の電子ブレーカを作ってみた。
写真/回路図
ケースに入れたイメージ
プログラムソース サンプル@ (PIC12F1822用 MPLAB/MPASM アセンブラプログラム)
●バッテリーチェッカー@(12Vバッテリー用) (12F1822)
簡単な12Vバッテリーチェッカーを作ってみた。
写真/回路図
LEDの点灯イメージ
プログラムソース サンプル@ (PIC12F1822用 MPLAB/MPASM アセンブラプログラム)
●バッテリーチェッカーA(6V/12Vバッテリー用) (12F1822)
6V/12Vバッテリー兼用のチェッカーです。
写真/回路図
LEDの点灯イメージ
透明アクリル付きプラスチックケースに入れたイメージ
プログラムソース サンプル@ (PIC12F1822用 MPLAB/MPASM アセンブラプログラム)
●レーザーポインター(その1) (12F1822)
PICでACP回路を作って、赤色レーザーダイオード(DL−3247)を使ってみました。
写真/回路図
光学系の加工イメージ
点灯イメージ(発射したレーザーを、撮影のため、斜めに傾けて設置した板に照射)
プログラムソース サンプル@ (PIC12F1822用 MPLAB/MPASM アセンブラプログラム)
●CPLD実験ボード(その1) (12F1822、XC9536XL-10VQG44C)
秋月電子で110円で購入できるCPLDとPIC12F1822を使った、簡単な実験ボードを作ってみました。
●LANでパソコンとつないでみる(その1) (12F1822、XPORT)
XPORTを使って、LANでPICをパソコンにつなぐ事例です。
●昇圧型スイッチングレギュレタ(その1) (入力:DC5V,出力:DC8〜32V[50mA]) (12F1822)
昇圧型のスイッチングレギュレタを作ってみました。
写真
回路図
出力イメージ(出力が12Vの時のAC波形)
使用している電源器に充分な余裕がないために起動しない場合、
この程度の小型の放熱器では、触れないくらい熱くなります
市販の5V60アンペアのACアダプタの例(TDK)
プログラムソース サンプル@ (PIC12F1822用 HI-TECH PICC(Version9.83) C言語プログラム)
●DDコンバータ(その1) (12F1822)
ノイズフィルターをトランスにしたDDコンバータで、秋月電子で購入した一石式のDDコンバータキットをPIC12F1822に
写真
回路図
コイルの加工イメージ(例)
出力負荷と出力電圧(実測値)
出力イメージ(SW1をaにした時のAC波形)
プログラムソース サンプル@ (PIC12F1822用 HI-TECH PICC(Version9.83) C言語プログラム)
●DDコンバータ(その2) (入力:DC5V,出力:DC2〜12V[30mA]) (12F1822)
上記の「DDコンバータ(その1)」の出力を、PICに内蔵されているFVRを使って定電圧化したものです。
写真
回路図
出力イメージ(10Vを出力した時のAC波形)
プログラムソース サンプル@ (PIC12F1822用 HI-TECH PICC(Version9.83) C言語プログラム)
●DDコンバータ(その3) (入力:DC5V,出力:DC2〜12V[30mA]) (12F1822)
上記の「DDコンバータ(その2)」に、過電流保護回路を追加したものです。
写真
回路図
プログラムソース サンプル@ (PIC12F1822用 HI-TECH PICC(Version9.83) C言語プログラム)
●乱数の発生(その1) (PIC12F1822/4049BP)
ゲームで使うために、乱数を発生させてみました。
写真
回路図
ハイパーターミナルのイメージ
プログラムソース サンプル@ (PIC12F1822用 HI-TECH PICC(Version9.83) C言語プログラム)
●乱数の発生(その2) (PIC12F1822/4049BP/7400N)
上記、「乱数の発生(その1)」発振器を、
「レトロのページ」
でも紹介した遅延型の発振器に置き換えたものです。
4049BPの場合の、写真と回路図
7400Nの場合の、写真と回路図
ハイパーターミナルのイメージ(7400Nの場合) サンプル@
ハイパーターミナルのイメージ(7400Nの場合) サンプルA
ハイパーターミナルのイメージ(7400Nの場合) サンプルB
ハイパーターミナルのイメージ(7400Nの場合) サンプルC
プログラムソース サンプル@ (PIC12F1822用 HI-TECH PICC(Version9.83) C言語プログラム)
プログラムソース サンプルA (PIC12F1822用 HI-TECH PICC(Version9.83) C言語プログラム)
プログラムソース サンプルB (PIC12F1822用 HI-TECH PICC(Version9.83) C言語プログラム)
プログラムソース サンプルC (PIC12F1822用 HI-TECH PICC(Version9.83) C言語プログラム)
●モールス信号・ヒアリング練習器 (PIC12F1822/7400N)
上記の「乱数の発生(その2)/7400N」を使って、A−Z,0−9のモールス信号をランダムに発生し、
写真
回路図
ハイパーターミナルのイメージ
プログラムソース サンプル@ (PIC12F1822用 HI-TECH PICC(Version9.83) C言語プログラム)
●デジタルシリコンマイクを使ってみる(その1) 簡易バージョン (PIC12F1822/SPM0405HD4H)
秋月電子で購入したデジタルシリコンマイクロホン(SPM0405HD4H)を使ってみました。
写真
デジタルシリコンマイクロホン(SPM0405HD4H)のイメージと回路図
プログラムソース サンプル@ (PIC12F1822用 HI-TECH PICC(Version9.83) C言語プログラム)
●ノコギリ波(100KHz)の発生 (PIC12F1822)
PICを使って、100KHz程度のノコギリ波を発生させてみました。
MICROCHIP社の開発環境は、Windows10に対応しています。
Cコンパイラも無償で使えます。
MICROCHIP社の場合、古いCコンパイラもダウンロードできるのですが、Cコンパイラの最新は、XC8,XC16,XC32です。
これから開発をする人は、XC8,XC16,XC32で開発したほうがいいと思います。
なお、下記で紹介している秋月電子の「AKI-PIC プログラマーキット」は、Windows10では動作しないかも知れない
ので注意が必要です。
(秋月電子が、Windows10での動作を保証していません。)
秋月電子のこのライターの動作を保証するわけではありませんし、Windows10の問題なのか調べているわけでもありませんが、
私のWindows10(64ビット)パソコンの場合は、「AKI-PIC プログラマーV4 V6.76.1」 ※R04.06.01時点で最新 は、
某社のUSB−シリアル変換器を使って接続した場合は、書き込みも動作も問題ありませんでしたが、オンボードのCOM1ポートでは
書き込み中にエラーがでました。
また、PICKITは、最新のMPLABX ※R04.06.01時点 では、PICKIT3以降でないと使えません。
これからPICを使う人は、マイクロチップ社のPICKIT3、またはPICKIT4を使ったほうがいいと思います。
最新のMPLABXでは、アセンブラのコンパイラーが、MPASMからPIC−AS(XC8−AS)に変更されています。 ※R04.06.01現在
PIC−AS(XC8−AS)はマイクロチップ社のフリーの純正アセンブラで、MPLABXをインストールすると、自動でインストールされますが、
このHPの中でも、MPASMアセンブラで作られているプログラムは、最新のアセンブラであるPIC−AS(XC8−AS)の記述に修正しないと
コンパイルができません。
※PIC−ASは、インクルードやコンフィグ、ラベルの記述がXC8の記述に近くなっている他、ORGや数値の記述方法が変更されています。
このHPでも、新規のアセンブラの開発は、PIC−AS(XC8−AS)を使用するようにしています。
PIC−AS(XC8−AS)
PIC12F1822の場合の変更例(MPASM ====> PIC−AS)
他にもシステムレジスタ等の宣言の一部や、MACRO定義の記述方法等も変更されているようです。
XC8の書き方を参考にするといいと思います。
MPLABX(V6.10)※2023年08月時点の最新 で確認すると、PIC−ASはXC8をインストールしたフォルダにインストールされていました。
XC8をデフォルトフォルダにインストールしなかった場合、これはPIC−ASに限った事ではありませんが、MPLABXのメニューバー[Tools]==>
[options]==>[Embedded]==>[Toolchain(add)]と選択し、コンパイラーやアセンブラのインストール先をMPLABXに認識させる必要があります。
このHPのADM3202を使った回路図では、ADM3202の2ピンにつながっている0.1μFのコンデンサをGndにつないで
実験していますが(図a)、ADM3202のデータシートでは、このコンデンサはVccにつなぐようになっています(図b)。
実験では、このようなつなぎ方でもICのチャージポンプは正常に動作していますが、データシートでは(図b)のように記述され
ているので、データシートの通りに(図b)のようにしたほうがいいと思います。
会社をリストラされ、やむなく某システム会社を起こした私は、暇を持て余していたが、
最近、眠っていた昔の血が騒ぎ出し、リックに半袖シャツ、短パンという姿で秋葉原に出かけては、壊れた機械を買いあさる変人である。
実は昔、趣味でZ80を使った妙な機械を作っていて、車やバイクをドレスアップしては、沿道の美女の注目を集めながら(ウソ)、
山道を豪快に飛ばしていた。
PICを使うようになったのは最近の事だが、これが面白くて、最近はPICで遊ぶ毎日である。
Z80のイメージ
秋月電子の「ROMライター」と、EP−ROM(27シリーズ)のイメージ
んで、どうするか?
数十年も経って目覚めた私は、すっかり時代遅れの人間になっていた。
使い慣れた27シリーズ用のROMライターや、開発ソフトは古すぎて、Windows XPパソコンでは動作しない。
雑誌の広告を見ると、Z80系ボードは今でも市販されているから、時間とお金をかければ動かせるのだろうが、
いまさら、そんな気はない。
そこで、Z80の代わりに使ってみたものの一つがPICだったのだが、これが思ったよりも使いやすかったという事である。
PICのイメージ
PICというと、12C509や16F84を一般的な知識としては知っていたが、メモリーが少ない制御デバイスというイメージしか持っていなかった。
だが、最近は、メモリーを128Kバイトも積んだ18F8720なんていうのが出ているし、他にも、18F452、16F88、12F683なんていう、新しいPICもある。
これは使えそうではないか。
ただ、PICでデータを扱う事には難しさを感じたが、最近は2線式や3線式のSerial EEP ROM(24,
93
シリーズ等)が安く出回っているので、これを使えば工夫できそうだし、
なにより、PICは初心者でもわかりやすい。
これは、遊びすぎて頭がボケてしまった私には、ありがたい事である。
用意した開発環境@
業務でPICを使うような本格的な人は別だが、
初めてPICを使う人には、秋葉原の秋月電子さんが出しているキットがお勧めだ。 ※注1)
このキットは、Serial EEP ROM(24、93シリーズ)を読み書きするアプリケーションも付いているので、
重宝している。
このキットを使った場合、パソコン以外でかかる費用は、合計でも一万円程度である。
・Windows
XPが動くパソコン(RS232C端子付き)
※別途、USB=>RS232C変換モジュラーケーブル(秋月電子)を購入すれば、USB端子のみあればよい。
・AKI-PIC
プログラマーキット Ver3.5(秋月電子)
・PICプログラマー Ver4バージョンアップ対応モジュールキット(秋月電子)
※私が主に使っている18F8720, 18F452, 16F88, 12F683はバージョンアップしないと使えない
・上記の最新版プログラム
※秋月電子さんのホームページより無料でダウンロードできる
・MPLABの最新バージョン
※マイクロチップ社さんのホームページより無料でダウンロードできる。
(ファイルサイズが30Mバイト程度ある。)
・デバイスのマニュアル
※マイクロチップ社さんのホームページより無料でダウンロードできる。ただし、ここで紹介する
デバイスの場合、日本語はほとんどない。
※注1)この文章を書いた時点での事です。
今なら、AKI-PIC プログラマーキットより、マイクロチップ社のPICKIT3やPICKIT4のほうがいいと思います。
但し、PICKIT3やPICKIT4は、現時点ではワンタイム品種(型番がPIC**C***で、このHPで扱っているPICでは、
PIC12C509等が該当)には対応していません。
ワンタイム品のPICも使う場合は、この類のライターは必要になります。
注)このライターは、Windows10パソコンでは動作しないかも知れないので注意が必要です。
(秋月電子が、Windows10での動作を保証していません。)
私の購入したバージョンでは、写真のAネジ(左右2本)がプログラマーキット基板上のDサブコネクタの
ネジにぶつかるので、基板との接続用に、キットにはDサブストレートケーブルが付属しています。
付属ケーブルの長さが邪魔になる場合、写真のような簡単なアダプタを作ってもいいと思います。
※シールがAKIPIC18になっていますが、デモプログラム書き込み済みのPIC16F84です。
PIC18シリーズではありません。
秋月電子では、PICとRS232ドライバーやOSC、三端子レギュレタを一枚の基板上に
まとめたモジュールも販売していて、「PICプログラマーキット」では、このモジュールに
そのまま書き込みができる(PICKIT2,3でも書き込みできますが)ようになっています。
なお、このマイコンモジュールを使った事例は、このHPが大きくなりすぎた都合で
ジャンクではありませんが、「(別室)ジャンクボードを活用しよう」
のページで
取り上げています。
用意した開発環境A
フリーのCコンパイラーも使用してみた。アセンブラで作成するだけなら、Cコンパイラーは不要です。
・HI−TECH PICC
PIC10Fシリーズ、12Fシリーズ、16Fシリーズで使用できるCコンパイラーです。
Lite Editionが無償で使用できます。
もともとは、HI−TECH社のCコンパイラーですが、現在は、マイクロチップ社のフリーのCコンパイラー
として、デフォルトでは、MPLABをインストールすると、同時にインストールされます。
古いバージョンでは、一部のPICにしか対応していませんでしたが、現在の最新バージョンでは、
無償バージョンでも、ほとんどのPICに対応しています。
HI−TECH PICCに限った問題ではありませんし、まれにアセンブラのプログラムでもある事ですが、
使用するコンパイラーのバージョンによっては、インクルードファイルの記述が異なる事があるため、
コンフィグワードの記述を修正しないと、プログラムのコンパイルが通らない場合があります。
・SDCC:Small Device C Compiler
※詳細は、
「(別室)Cygwinのページ」
を参照。
・MPLAB C32
マイクロチップ社純正の32ビットマイコン用のCコンパイラーで、Lite Editionが無償で使用できます。
有償のEditionとの違いは、オプティマイズレベルの違い等なので、趣味で使用するレベルの開発なら
問題ありません。
「第三章 32ビットPICを使ってみる」で使用する。
・MPLAB C30
マイクロチップ社純正の16ビットマイコン用のCコンパイラーで、Lite Editionが無償で使用できます。
有償のEditionとの違いは、オプティマイズレベルの違い等なので、趣味で使用するレベルの開発なら
問題ありません。
「第二章 16ビットPICを使ってみる」で使用する。
・MPLAB C18
マイクロチップ社純正の18シリーズ用のCコンパイラーで、Lite Editionが無償で使用できます。
有償のEditionとの違いは、オプティマイズレベルの違い等なので、趣味で使用するレベルの開発なら
問題ありません。
「第一章 USB PICを使ってみる」の開発では必須となるCコンパイラーです。
C18に限った事ではありませんが、
MPLABから使用する場合、プロジェクト毎に「Project」=>「Build options」=>「Project」で、各ライブラリのPathを指定しないとビルドできません。
フォルダの右ボタンを押すと、最初にデフォルトのフォルダが設定される(通常はデフォルトでよい)ので、操作は簡単です
※写真は、MPLAB IDE v8.53の例
C言語コンパイラーのオプティマイズレベルと、コードサイズの関係 ※マイクロチップ社のHPより抜粋
デバイスの性能をフルに活かす業務で使うようなプログラムでなければ、無償バージョン(Lite)でもあまり問題はないと思います。
・USBフレームワーク
マイクロチップ社が提供しているUSBファームウエア。
USB PICを使う場合、ユーザーはこのソフトウエアを使う事で、USBの仕様の詳細を知らなくても、
簡単にUSBプログラムを開発する事が出来る。
目的に応じて、下記の5種類のサンプルが提供されている。
・CDCクラス
・HIDクラス
・BOOTクラス
・Genericクラス
・Storageクラス
開発には、上記の「MPLAB C18」が必須になる。
「第三章 USB PICを使ってみる」の開発では必須となります。
・XC8,XC16,XC32
R04.04.01現在、マイクロチップ社の最新のCコンパイラーで、無償で使用できます。
インクルードファイルの定義を、#include <xc.h>に変更すれば、過去のCプログラムは簡単な修正で使用できるようです。
用意した開発環境B
・PICKIT2、PICKIT3
マイクロチップ社の提供する低価格のPICマイコンライター。
最新のほとんどのPICマイコンにも対応していて、MPLABから直接ICSPで書き込みができるほか、
(開発でコネクタの抜き差しは不要です)オンラインでデバッグもできる。
今なら、AKI-PIC プログラマーキットより、こちらのライターがお勧めです。
例えば秋月電子では、PICKIT2は3500円、PICKIT3は4500円、(H22.8現在)で購入できます。
注)R04.04.01現在、PICKIT2は最新のMPLAB-Xに対応していません。PICKIT3かPICKIT4が必要です。
ピン1〜5までを使用するデバイスのピンレイアウト図の通りに接続する(6:LVPは通常は使用しません)
例えば、MPLAB V8.53(H22.8現在の最新)で、PICKIT3から回路に電源を供給するような場合、
「Programer」=>「Settings」で、「Power target circuit from PICkit3」をチェックしないとデバイスに電源が供給されず、
デバイスを認識できません。 ※PICKIT2を使っている場合は、外部から供給されている電源電圧を自動で検地し、
電源をPICKIT2から自動で供給するので、電源をライターから供給するなら、PICKIT2のほうが使いやすいかも知れ
ません。PICKIT3は、回路に合った電源を外部から供給するような使い方のほうが使いやすいようです。
※注)このアダプタで基盤上のPICに直接プログラムを書き込む場合は、基板の回路に工夫が必要です。
※PICKIT2はUSB仕様なので、簡単な回路の実験なら電源は不要だ(PICKIT2からデバイスに応じた電圧が自動で供給される)
※MPLABのバージョンによっては、オペレーションや動作が異なる場合があります。
※MPLABのバージョンによっては、オペレーションや動作が異なる場合があります。
「USB(A−miniB)」ケーブルは、ダイソーで100円で購入できるので、消耗品としてスペアを何本か用意しておくといいかも知れません。
付属の赤いケーブルは、コードを丸めて片付けたりすると、特に壊れやすいようです。
・J−LINK
PICは、J−LINKで書き込むこともできます(他に「j-link microchip adapter」があると便利です)。
現時点(R04.4.1現在)では、PIC32MX、PIC32MZ(MIPS系のMPU)のみ対応しています。
J−LINKは、PIC以外の多くのMPUにも対応した書き込み器で、私は主にARM系のマイコンの開発で使用していますが、
いろいろなツールが用意されていて多機能です。
「j-link microchip adapter」は、コネクタの変換をしているだけですが、意外に高いので(5000円以上はする)、回路図も入手できるので、
自分で作ってしまったほうがいいと思います。
自分で作った場合、費用は200円位で30分もあれば作れると思います。
私は、PICの書き込みにJ−LINKは使用しませんが、J−LINKを使用してARMマイコンに書き込む事例は、
「(別室)ARMマイコンで遊ぼう」で紹介しています。
このCPUは、SOT版は形状が6ピンの米粒大と超小型(DIP版は8ピンだが、うち2ピンは未使用)で、価格も安いので、
簡単な回路の置き換えに最適だ。 秋月電子のライターの書き込みにも対応している。
サンプルは、プッシュSWを押すと派手にLEDが点灯し、乱数でグー・チョキー・パーのいずれかのLEDで表示が止まるものだ。
このCPUは、他のPICに比べて機能が絞られているので、初めてPICを使う人でも簡単に扱えるCPUだと思うが、
GP2を汎用ポートとして使う場合は、OPTIONレジスタと、OSCCALレジスタのFOSC4ビットの設定が必要(詳細はプログラム
ソースを参照)なので注意が必要だ。また、VPP機能のあるGP3ピンは入力専用端子だ。 ・・・・サンプル@
サンプルAは、サンプル@を10F322に置き換えたものだ。
10F322は、CPUの構造が10F200とはかなり異なっているので、置き換えには注意が必要だ。
サンプルB〜Dは、サンプル@をHIーTECH C言語に置き換えたものだ。
このCPUは、NCOやCLC等、特徴のあるモジュールを内蔵しているCPUだ。
この機能を使うと、任意の周波数のパルスを簡単なプログラムで出力する事ができるので、オシレータとして使うには最適だ。
s10f322-0001.asm
サンプル@は、12.80000MHzの水晶発振器を2^7分周しているもので、精度の高い100KHzを出力し、サンプルAは、
2^8分周して、精度の高い50KHzを出力する。
12.80000MHzの水晶発振器を使ったのは、手持ちの部品の都合からですが(秋月電子の50Hzタイムベースキットで
使っていた部品です)、NCOで精度の高い周波数を出力をするには、水晶の周波数は、出力する周波数に対して
1/(2^n)になるように選んでやる必要があります。
使用したオシレータはAC出力なので、出力に10KΩ*2がないと正常に動作しません(回路はオシレータの種類により異なります)。
動作させる時はPICKIT3は外してやる必要があります(外さないと中点がずれて、このオシレータの回路では動作しません)。
10KΩの抵抗、及び0.1μFのコンデンサは、基板銅箔面に取り付けているチップ部品です
s10f322-0001.asm
サンプル@は、SW1を押すと、NCO機能で発生させた1KHzを出力するもので、
ORとインバータを組み合わせたものです。
なお、マイクロチップ社では、CLC機能の設計を支援するGUIツール(CLC Designer)を無償で提供しており、
CLCのレジスタの設定は、このツールを使って記述する事もできます(アセンブラ・C言語に対応しています)。
サンプルAは、サンプル@をHI−TECHのC言語に置き換えたものです。
サンプルBは、SW1を押すと、PWM(1KHz、デューティ25%)とNCO(10KHz)を合成したパルスを出力する
ものです。
サンプルCは、サンプルBをHI−TECHのC言語に置き換えたものです。
このツールは、使い方が簡単で使いやすいです(このツールを使うと、CLC部分の設定が簡単になります)
s10f322-0031.asm
Fosc(1MHz)と、NCOで作ったメロディーを、CLCで合成しているものです。
この周波数は、他の放送局と重なりますし、電波法の問題もあるので、アンテナは1mHのインダクター(ソレノイドタイプ)で代用し、
出力はごく微小にしてあります(ラジオはギリギリまで近づけないと何も聞こえません。電波で飛ばすというより、ラジオを近づけて
モニタスピーカーの代わりに使っているイメージです)。
インダクターは、トロイダルコアタイプでは、おそらく出力が小さくなりすぎて使えません(テストはしていません)。
サンプルAは、サンプル@のアセンブラバージョンです。
クロックに内臓オシレータを使っているので、出力周波数の精度は、1000KHzピッタリなわけではありません。
高性能なデジタル周波数選局のラジオで1000KHzをデジタル設定した場合、受信できないかも知れません。
精度を高くするなら、オシレータは水晶を使う必要があります。
PIC12F683のピンレイアウト
PIC12F1822のピンレイアウト
PIC12F1501のピンレイアウト
PIC12F683/PIC12F1822/PIC12F1501の機能比較
LEDを光らせるだけなので、部品が少なく、作るのは簡単だ。
点灯イメージ
動作イメージ
・8ピンDIP型の12F683には、PORTが6ビット(出力として使えるのは5ビット)で、2桁のサイコロ(14個のLED)
を制御するので、ダイナミック方式にしている。これは、表示を高速で切り替える事で人間の目には
両方のサイコロが点燈しているように見せるもので、表示器ではお馴染みだ。
・2つの乱数は、ボタンを離している時と、押している時に、変数を高速でカウントする事で作っている。この状態でボタンを離すと6進アップ・ダウンカウンタによりサイコロが動き出す。
・ドライバーを省いているから、電源を3V以上にしたり、抵抗を小さくしてLEDを明るくしたりするとPICが壊れてしまう。
・実験なので、コメント行を変えれば12C509Aでも使えるが、12C509Aはワンタイム品である。
100,000回程度の書き換えが可能で値段もあまり変わらない12F683を使うべきだろう。
12C509Aは、12F683に比較していろいろと制約も多い。例えば、
@スタックの制約で、CALLが2段階までしか使えない(12F683は8段階まで可能)
A内部クロックを使用する場合、4MHzまでしか使えない(12F683は8MHzまで)
BRETURNコマンドがない(RETLWコマンドを使用する)
Cプログラムメモリーが1Kワードしかない(12F683は2Kワード。こんなに短いプログラムだと、関係ない話だが)
・・・・・その他
・RETLWのテーブル参照を使っているので、プログラムをいじると動かなくなる可能性がある。
(この方法は、PICで文字列を扱う場合によく使われるが、PCLがアドレスの下位8ビットしかアクセスしない制約がある為に、記述によってPCLが上位のアドレスをまたぐとトラブルが発生する。最初は原因がわかりにくいので、PICのバグだと思い込む人も多い。)
・(どうでもいい事だが)手書きフリーハンドのプリント基板だ。
なお、実験で同じ機能のものを、HI−TECH PLCC C言語でも作成した。(サンプルA、サンプルB)
s11a.c
s11b.c
このサンプルは、この機能を使って、4つの入力端子の電圧を測定し、パソコンに送信するサンプルだ。
パソコン側のアプリは作っていないので、データはWindows/XPのアクセサリについていた「ハイパー
ターミナル」で受けている。
ADM3202は、RS232Cレベルコンバーターで、信号電圧をRS232Cに変換しているだけだ。
基板にも回路図にもないが、実際には、入力側に測定する電圧に応じた分圧抵抗が必要だ (このサンプル
は、電源電圧を基準にしているので、5Vの時に1023と表示される)。
なお、入力−GNDは抵抗でプルダウンしておかないと、入力をオープンにした時にデタラメな値が表示されてしまう。
パソコンから、テレビや蛍光灯の電源をコントロールするために作ったものだ。
2つのリレーを制御するが、12F683のピンが余ったので、他に2つの入力端子をつけている。
パソコン側のアプリは作っていないので、コマンドは、Windows/XPの「ハイパー ターミナル」から入力する。
※この記事のパソコン側のアプリケーションが、
「ActiveBASICのページ」 にあります。
写真は、ハイパーターミナルでなく、ActiveBASICを使った場合のパソコン画面イメージ
Windows/XPの「ハイパーターミナル」を使用してテストした。
24シリーズのEEP-ROMは、種類により、アドレスの設定方法が異なる(アドレス設定ピンの数が違う)ので、
注意が必要だ。
アトメル社のAT93C86を8ビットモードで使用し、Windows/XPの「ハイパーターミナル」を使ってテストした。
この種のEEPは、電源立ち上げ時にはEWDS(Erace/Write Disable)モードになっている。
EEPからデータを読み込む時はいいのだが、書き込む時は、EWEN(Erace/Write Enable)コマンドでプログラムモード
を変更してやらないと書き込みは出来ないので注意が必要だ。
キーボードで押された文字(Make)の文字コード(A-Z,0-9)を、RS232Cシリアル通信で返す。
18F8720/18F452マザーボード用に作ったものだが、使い方が簡単なので、H8等、PICに限らず使用可能だ。
PICで使う場合、通常、ADM3202は使用せず、12F683のGP4/GP5を、直接マザーボードにつないで使う(クロスさせてつなぐ)
が、ここでは説明のため、ADM3202を使ってパソコンのハイパーターミナルにつないでみた。
プッシュスイッチを大量に購入して作っても良いのだが、パソコン用のキーボードは安いので、このほうが安上がりだ。
PS/2キーボード内部には専用のワンチップCPUが使われていて、パソコンとの間は、調歩同期式シリアル通信が
行なわれている。
この間のコードは文字コードではなく、キー番号に対応したコードなのだが、このコードはキーボードにより若干異なる
ために、106日本語キーボード以外(例えば英語キーボード等)を使うなら、文字コードが正しく一致しないため、
コード変換部分の簡単な修正が必要だ。
また、英数字及びEnter以外のキーの処理はしていないが、必要なら、コード変換部分に追記するだけだ。
できるので、これを使って、上記アダプタをワイヤレス式にしてみた。
数メートル程離れても確実な動作をするが、無調整で、おおざっぱなタイミング計算しかしていないためか、
文字化けがひどく、このプログラムは、お勧めできない。
マザーボードから制御してもよいのだが、鉄道模型のスピード調整用に作ったのでボリュームをつけている。
ボリュームの位置が中央で停止、左に回すほど後進でスピードが速くなり、右に回すほど前進でスピードが速く
なるようにしてある。
それだけの機能を電圧で制御するだけなら、単にトランジスタとVRだけでできてしまうのでPICなど不要だが、
ここではデューティーサイクルを変化させるPWM方式で制御してみた。
この方法は、止まりそうなくらいの低速でもモーターをスムーズに制御できるので、模型には最適だが、単に高速
回転させるだけのようなモーターに使うと、大きなノイズや雑音を発生させたり、寿命を短くする事がある。
この方式の場合、トランジスタの損失がほとんどないので、トランジスタは主に電流値を考えればよく、比較的小型
のトランジスタが使えるが、電圧を高くしたり、大きなモーターをつけたりするなら、トランジスタは大型のものに
変える必要がある。
また、鉄道模型に使うなら、電源供給側にレギュレタを入れるなど、過電流保護対策が必要だ。
プログラムを作ってみた。
VRを回すと、周波数が100Hz〜25KHz程度に変化し、波形の大きさは供給する電圧を変化させる事で変える事ができる。
但し、A/D ConverterがVRの設定値を読み込む時間が必要なので、この回路では、周波数をあまり高くできない。
また、実際に波形を見てみると、かなりノイズを発生していて波形も安定していないので、このままではお勧めはできない。
入力に8〜15V程度の電圧をかけると、3Vの電圧を出力する。
プログラム中の電圧パラメータを変える事で、出力電圧は変更する事ができる。
特殊な部品は使っていない。コイルは一般に市販されているものだ。
コイルにつながっているダイオードは、一般的なシリコンダイオードでは駄目で、ショットキーや、ファーストリカバリー
等のダイオードを使う必要がある。
出力の1000μFの平滑コンデンサは、容量をあまり変えると動かなくなる可能性がある。
12F683には、タイマーモジュールが3つあり、それぞれの機能も、16F84等に比較して、かなり充実している。
パソコン側のアプリケーションは用意していないので、測定結果はハイパーターミナルに出力する。
32.768KHzの水晶を分周して1Hzのタイマー割り込みを行なっているが、精度を要求されないカウンタ
の処理は、なるべく高速にするため、内部の8MHzOSCを使用している。
この水晶は、時計などでよく使われている一般的なもので、秋葉原の千石電子で、シチズン社製のもの
を100円程度で購入した。
入力用のアンプは作らなかったので、この周波数カウンタの入力電圧はTTLだ。
周波数が低いので、単電源汎用オペアンプ(LM358)を使っている。
それ以外は、上記と全く同じだ。
※この記事のパソコン側のアプリケーションが、
「ActiveBASICのページ」 にあります。
外光を常に受けるフォトトランジスタと、外光を受けたり風車で遮られたりするフォトトランジスタの
2つの電圧の差をカウントして、風車の回転数を検知する。
測定結果はシリアル通信でパソコンに連動する。
風車に2つのフォトトランジスタを取り付けるだけなので、木工工作は簡単だ。
なお、風車は太陽光の方向に向けるか、風車に電球等の光を当ててやる必要がある。
内容は、時間の経過に連れて、光と音の点燈間隔が広くなっていき最後は止まる、単なる間欠発信器だ。
それだけだと作るにはあまりにも単純なので、下記で紹介している「電子オルガン(16F88、16F819、16F84A、12F683)」
を一曲鳴らしてから、プログラムがスタートするようにしてある。
外部端子は拡張用に付けたもので、このサンプルでは使っていない。
青・黄・赤の豆球は、LEDと違って、暗闇では目が眩むほどまぶしいが、1個で0.3Aも消費するので、1Aが余裕で取れる3.3Vの電源が必要だ。
容量が小さな電源では、急な電圧降下でPICが誤動作してしまって正常に動作しない。
16F88で作った「モールス信号発生器@」を、12F683用のSDCCのサンプルを作って見るために、移植してみただけだ。
コンパイルは、sdcc -mpic14 -p12f683 [プログラム名] で行なう。 (サンプル@)
また、サンプル@と同じものをHI−TECHでも作成した。(サンプルA、B)
回路図
このような用途には、例えば、0Vから可変の電源器を作ってやると、回路は簡単なのだが、
車用のランプは大型のものが多くて、ドライバーに大型の放熱器が必要になるので、PICでPWM制御したほうが、
簡単で、小型化する事ができるようだ。
電圧可変型の調光器については、
「(別室)レトロのページ」
で紹介している。
入力にDC12V(8〜16V程度まで可能)をつないで、出力に、ランプやモーターを接続して使用する。
プログラムは、12F683に内蔵されているA/Dコンバーターと、CCPモジュールを組み合わせただけのものだ。
使用したMOS−FET(μPA2753GR)は、秋月電子で4個100円程度で購入できるチップ形状の安価なものだ。
なお、この回路は、無負荷だと正常に動作しない。
出力に何もつながない可能性があるなら、回路図にある2KΩ(値は特にこだわらない)は必須だ。
このMOS−FETは、形状は小さいが、カタログ上の最大値は8A(実際はそんなに流せないが)だ。
簡単なアセンブラのプログラムだが、実験で、C言語(SDCC)にも移植してみた。
回路図
DC5Vを入力すると、正負3.4Vの電圧を得る事ができる。
このような昇圧レギュレタは、コイルを使ったスイッチング方式が一般的だが、チャージポンプ方式のほうが、
ノイズが少なく、簡単で、効率が高く、動作が確実等、メリットが多いようだ。
また、この方式は、昇圧部分を重ねていく事で、電源電圧のn倍の出力を得るような使い方もできる。
ショットキーを使って周波数を上げてやれば、小型化することも可能だ。
※注1)コンデンサのチャージが完全に抜けていない状態で電源を再投入すると、PICが正常に起動しません。
回路図中にある+5Vの470Ωは、コンデンサのチャージを抜くために必要です。
※注2)MOS−FETでは、正常に動作しない可能性があります。
※注3)12C509Aバージョンは、私が在庫を大量に持っているので作っただけです。
回路図
ボタン@(ポート0)を押すと白熱電球が徐々に明るくなり、ボタンA(ポート1)を押すと徐々に暗くなり、ボタンB(ポート2)を
押すと一気に暗くなる。
トライアックは、PICとトランジスタで直接ドライブする事もできるのだが、大変危険であるし、フォトトライアックが
100円程度(秋月電子では、数個で100円程度)で買えるので、これを使ってACラインと絶縁した。
なを、調光器として使用する場合には、フォトトライアックは、非ゼロクロスタイプを選択する必要がある。
トライアックは、ほとんどのものが使用可能だと思うが、ここでは小型の12Aのものに、小型の放熱器を使用した。
普通の白熱電球は200W程度くらいまでしかないと思うので、12Aのトライアックでも、充分すぎるくらいだ。
回路図
古くて使わなくなったテレビやAV機器のリモコンを、PICで活用しようというものだ。
リモコンを赤外線受信モジュールに向けて、リモコンのボタンを押すと、送信されたリモコンのコードを解析して、
ハイパーターミナルに表示する。
本来は、マザーボードにつないでコードを送信し、マザーボードをリモコンで制御するために作ったものだ。
※このような使い方をする場合は、DATOUT関数中の、「CALL DEBNUM4」の行のコメントをはずす。
リモコンの仕様は各社バラバラであるし、変調方式も一様ではないので、全てに正確に対応しているわけではないが、
多くのリモコンは、PPM方式(Pulse Position Modulation)であるようなので、実験したテレビやAV機器のリモコンでは、
全て解析可能だった。
回路図
電源を入れると、A〜Z、0〜9の文字を、モールス信号で出力する。
ランプ点滅の応答速度は遅いので、この程度の点滅速度が限界のようだ。
ダイソーで購入した自転車用ヘッドライトにPICを組み込んだもので、
プログラムは、フリーのSDCCを使ったC言語の
プログラムだ。
※上記の「モールス信号発生器」のプログラムに、簡単な修正をしただけのものだ。
コンパイルは、sdcc -mpic14 -p12f683 [プログラム名] で行なう。
回路図
このマイコンは、スタックが2段しかなく、メモリーも少ないなど性能的には12F683に劣るが、
秋月電子では60円(12F683の半額もしない)で購入できるので、圧電ブザー(30円)、コンデンサ(10円)と合わせても、
簡単なオルゴールが100円で出来てしまう。
サンプル@は、懐かしい童謡を一曲入れてある。
12F629、12F683バージョンも作ってみたが、これは12F509バージョンをそのまま移植したものだ。
こちらのマイコンは、スタックが8段あるので、もう少しきれいなプログラムにもできるのだが。
注1)基板についているシリコンダイオードは、電源の逆接続防止用に入れているもので通常不要です
注2)マイコンの下にある未使用の3Pコネクタは、サーボモータをつなぐためのもので、この記事とは関係ありません
回路図
16F88用に作ったサンプルを12F683用に作り直したものだ。
使用したサーボモータは、GWS製のS03N/2BBMG/F(フタバ)で、秋月電子で1000円程度で購入できるものだ。
サンプル@は、12F683のCCPモジュールとTIMER1を組み合わせたもので、 -60°==> 中央 ==> +60°==> 中央 という動きを繰り返す。
サンプルAは、サンプル@をC言語(SDCC)、XC8で書き直したものだ。
SDCCのコンパイルは、sdcc -mpic14 -p12f683 [プログラム名] で行なう。
XC8バージョンは、SDCCバージョンとConfigワードの記述が違っているだけで、他は同じです。
サンプルBは、12F509バージョンだ。12F509にCCPモジュールは内蔵されていないので、プログラムによるループ方式だ。
説明のために、パソコンのハイパーターミナルにつないで角度を入力するプログラムにしてあるが、本当はマザーボードにつないで
マザーボードから複数のサーボモータを動かすような使い方を想定している。
サンプル@は、12F683のCCPモジュールとTIMERを組み合わせたものだ。
システムクロックを内部500KHzで動かしている(内部8MHzにもできるのだが、CCPモジュールのプログラムを簡略化するため
このような使い方をしている)ので、ハイパーターミナルの通信速度は1200BPS(他の通信パラメータは上記と同じ)にしてある。
なお、簡単なエラーハンドリングが入っているので、誤ったフォーマットではキー入力できない。
模型工作等で、マザーボードから複数のサーボモータを動かすような使い方を想定している。
(たくさんのサーボモータを動かすなら、I2Cにした方がいいと思う。)
※「(別室)インターフェースのページ」
を参照。
このようなサンプルの場合、データ形式はキャラクターよりバイナリー形式のほうがマザーボードの処理が簡単なので、
角度データ(-60°〜+60°)を、0〜120(Hex Decimal)の1バイトバイナリー形式で与えるようにしてある。
正常なデータ形式ならエコーバックし、誤りがあればFF(Hex)を返すので、簡単なエラーハンドリングも可能だ。
マザーボードは、簡単な通信プログラムがあれば何でも良いのだが、ここでは説明を簡単にするために、
16F88の実験ボードを使用した。
サンプル@は、16F88実験ボードから、−60°==>0°==>+60°==>0°とデータを送信してサーボモータを動かすもので、
マザーボードからはシリアル通信(1200BPS)で、0==>60==>120==>60==>0・・・のバイナリーコードを送信している。
プログラムは、16F88内臓のタイマーモジュールと、USARTモジュールを組み合わせたものだ。
例えば内臓のコンパレータと組み合わせると、簡単に4ビットのDAコンバータの機能を作る事が出来る。
サンプルは50HzのSin波を発生するようにしたものだ。
なるべく改造しやすいように波形のデータはプログラム中にベタで書いてある。波形を変える場合は、この部分を修正するだけだ。
使用したオペアンプは単なるボルテージフォロアなので、安価な汎用オペアンプを使用した。
サンプル@はアセンブラバージョン(MPLAB/MPASM)、サンプルAは、同じものをC言語(SDCC)で作ったものです。
SDCCのコンパイルは、sdcc -mpic14 -p12f683 [プログラム名] で行ないます。
サンプルBはHI−TECH PICCバージョンです。
周波数の精度は高くはないので、精度を高くするなら、タイマーの微調整が必要です。
12F1822は、「EUSART」や、「DAC」が内蔵され、クロックが最速32MHzとなり、他に「CAPACITIVE SENSING MODULE」、その他の
特徴ある機能が内蔵された、12F683の置き換えにも最適と思われるものだ。
(0)基本操作
LEDをつないで点滅させてみました。
サンプル@は、Timer1を使って、1秒毎にLEDを点滅させるものです
サンプルAは、Timer1割り込みを使って、1秒毎にLEDを点滅させるものです
(1)EUSARTを使ってみる
12F1822に内蔵されたEUSARTモジュールを使って、簡単なエコープログラムを作ってみた。
ハイパーターミナルにつないで使用する。
サンプル@は16MHz、サンプルAはPLLで32MHz動作させているが、実験では32MHzで動作させた場合、
スタート直後は数10[mS]以上のWaitを入れないと、EUSARTは安定して動作しない。
サンプルBは、サンプル@を「HI_TECHのPICC C言語」に置き換えただけのものだ。
このCコンパイラーは、マイクロチップ社のHPよりダウンロードできるが、バージョンによりCONFIGが異なる場合があるようなので、
修正が必要になる可能性がある。このサンプルで使用したバージョンは、9.70だ。
ハイパーターミナルの設定
(2)電圧計(0〜10.23V)にしてみる
12F1822に内蔵されたA/D Converterモジュールを使って、電圧計にしてみた。
結果はハイパーターミナルに出力する。
ハイパーターミナルの設定は、上記のエコーサンプルと同じにしてある。
A/D Converterの入力が数KΩと低いので、入力にレールTOレール型の安価なCMOS OPAMPを使ったボルテージフォロアを
使用したが、このOPAMPのOFFSETの精度は高くはないので、測定精度はあまり高くはない。
(例えば、入力をゼロにしても、表示は完全なゼロにはならない。)
精度を高くするなら、高精度オペアンプを使用する必要がある。
「TIMER1 MODULE」を使ったサンプルとして、上記プログラムのWAIT部分を、0.1[mS]のTIMER1モジュールに置き換えた
サンプルAも作成した。こちらは1[S]毎にデータを表示する。
(3)Data EEPROMを使ってみる
12F1822に内蔵されているData EEPROMを使って簡単なプログラムを作ってみた。
プログラムが起動すると、Data EEPROMの最初の5バイトが表示され、入力を求めてくるので、5バイトを入力すると、
Data EEPROMの最初の5バイトが入力したデータに更新され、更新された5バイトが表示される、
という動作を繰り返す。
Data EEPROMをアクセスするプログラムは、マニュアルに公開されているので、このサンプルは、マニュアルのプログラムを
使用しただけのものだ。
ハイパーターミナルの設定は、上記サンプル、「(1)EUSARTを使ってみる」と同じにしてある。
(4)PWM MODULEを使ってみる(1)
12F1822に内蔵されているPWM MODULEを使って、2.5秒周期で出力が明暗を繰り返す、簡単なプログラムを作ってみた。
サンプルでは、出力に周波数カウンタとオシロスコープを直接つないでいるが、通常は、トランジスタやMOS−FETをつないで、
LEDやランプの明るさを制御する。
あまり精緻に調整する必要がないので、Duty Cycleは256ステップの8ビット(0〜255)で制御している(下位2ビットはゼロを
代入している)が、必要なら1024ステップの10ビット(0〜1023)で制御する事も出来る。
この場合は、下位2ビットは、CCP1CON[5:4]に代入する。
(5)PWM MODULEを使ってみる(2)
12F1822に内蔵されているCCPモジュールは、12F683と比較して、Enhanced Modeが追加されている。
サンプル@は、Half−Bridge PWM機能を使って、P1A,P1BにPWM出力をするもので、ディレイの効果を見るため、
ディレイの有/無を2秒毎に繰り返している。
周波数は、上記のサンプルと同じ
図は12F1822のマニュアルより抜粋
サンプルAは、Bridge回路を実際に作って動かしてみたものです。
ディレイを入れて、2秒毎にデューティーサイクル25%、50%、75%を繰り返します。
但し、この回路では、サンプル@のプログラムを動かしてはいけません。
サンプル@のプログラムを動かすと、ディレイ無しの周期でパルスがクロスする時、4つのトランジスタが同時に動作して、
トランジスタが壊れます。
サンプルBは、50Hzの擬似SIN波を出力するもので、自動車用インバータへの応用を想定するものです。
それだけだと、サンプルAの簡単な修正のみになってしまうので、こちらは、C言語バージョンも作ってあります。
出力周波数は、必要ならInit_PWM関数の「PR2レジスタ」の値を増減するだけ(C言語バージョン)で微調整ができます。
※アセンブラバージョンの場合は、INITPWM関数中の「PR2レジスタ」に代入するH'9B'の値を増減する事で微調整できます。
もともと擬似SIN波ですし、電力会社の供給するAC100Vでも、例えば東京電力で50Hz、0.4パーセント程度の精度の
ものなのでオシレータに水晶を使う必要はないとは思いますが、
実際にカーインバータのような高電圧、高電流のようなものを作る場合は、一瞬でもPA1とPB1が同時に動作すると
FETやトランジスタが破壊され、車の走行中の事故につながる可能性があるため、エンジンノイズによるマイコンやFETの
誤作動の可能性や、電源投入時の回路動作等、充分な検証と対策が必要です。
市販されているカーインバータの出力波形については、
「(別室)カーアクセサリーのページ」のページ
に載せてあります。
※上記(サンプルB)のC言語バージョン
(6)D/A Converterを使ってみる
12F1822には、32ステップのD/A Converterが内蔵されている。
サンプルは、D/A Converterを使ってノコギリ状の波形を生成しているものだ。
注)PICKIT3をつないだまま動作させると、正常な波形にはなりません。
(7)Reference Clock Moduleを使ってみる
12F1822には、「Reference Clock Module」が追加され、OSCのクロックを分周・加工して出力できるようになった。
このマイコンの周波数精度は悪くはないので、プログラマブルな3.3V、5V兼用のオシレータとしても重宝しそうです。
サンプルは、この機能を使って、32MHzのベースクロックを、分周なし、1/2分周、1/128分周して、32MHz、16MHz、
250KHzを取り出したものだ。
分周回数は、CLKRCONレジスタの下位3ビットを操作する事で、0〜128まで指定ができる。
揺れの検知は、安価で簡単な「傾斜センサー(傾斜スイッチ)」を使用した。
明るさの検知には、LEDの微小な起電力を測定している。
LEDは、その構造が太陽電池と同じなので、光を当てれば起電力を発生するが、その電力は太陽電池とは比較にならない微小なものなので、
PICとの接続には、ダーリントン接続のトランジスタを使用した。
明るさ検知の回路は、測定を行う時のみ電源を供給するようにしてあるが、これは消費電力を減らすという意味では、お遊び程度のものだ。
「傾斜センサー」は、揺れを感じるとONになるものでも、OFFになるものでも、どちらを使っても問題はない。
サンプル@、サンプルAは、OSCをそれぞれ8MHz/16MHz動作させているもので、待機時の消費電流が数十mAもあるので、
実験レベルのものだ。
サンプルBは、消費電力を減らすため、OSCを31KHz動作させているもので、待機時の消費電流が数mAだった。
明るさの感度は、LEDの本数を変える事で調整できます。
インピダンスが充分高い状態でLEDに強い光をあてた時、LED1つあたりの起電力は1.2V程度です。
マウスからの情報をRS232シリアル通信で返す。
本来は、PICや他のマイコンのUARTに直接つないで使うような事を考えているものだが、
このサンプルでは説明を簡単にするため、パソコンのハイパーターミナルに接続し、マウスの移動方向と、ボタンの状態を
表示するようにしている。(サンプル@)
PS/2マウスは、マウスの移動やボタン操作といったイベントが発生すると、3バイトのストリーミングデータを送信する。
このデータのなかには、マウスの移動量等の有益な情報も含まれており、これらを使ったアプリケーションも考えられるので、
3バイトのストリーミングデータを出力するバージョン(サンプルA)も作成した。
但し、マウスのボールの回転は気まぐれで、精緻に動くものではないので、本格的なアプリケーションを作るなら、
なんらかのプログラムの工夫が必要だ。
ハイパーターミナルの設定
DC5Vを入力し、DC12V(0.1A程度)を出力する。
プログラムは、12F1822に内蔵されているComparator Moduleと、Fixed Voltage Reference(2.048Vに設定)を組み合わせたものだ。
使用したショットキーダイオード(40V5A)は、大電流の表面実装タイプのものが秋月電子で安く購入できたので使っただけだ。
但し、このダイオードは、ショットキーバリアーダイオードかファーストリカバリーダイオードを使う必要があります。
注)同じような機能は、専用のスイッチングレギュレタICを使って作ることが出来ますし、似たような機能のICは、例えば秋月電子では「LT1172」を、
300円程度 注)H23.9現在 で購入する事が出来ます。
付属の説明書では、5A型のLT1170を使った事例(入力:DC5V、出力:DC12V・1A)が紹介されていますが、1.25A型のLT1172を使った
場合は、出力がDC12V・0.2Aくらいの昇圧型レギュレタを作る事ができるようです。
この事例については、
「(別室)レトロのページ」
で紹介しています。
この回路に限った事ではありませんが、スイッチングレギュレタなのでスパイクノイズを発生します。
このサンプルでは、100mAの負荷の時、22KHz(プログラムのWAT関数で変更可能)でスパイクノイズは200mV程度のようです。
出力電流が0.5Aを越えると、出力を遮断し、2つのLEDが交互に点滅する。
回復するには、リセットボタン(SW1)を押すか、電源を入れ直せばよい。
このブレーカは、ヒューズや機械式ブレーカ同様、出力がショートした場合、瞬時には大電流が流れるので、機器の障害を完全に防げるものではありません。
また、確実に動作する保障もない(急激な電流の変動では、動作しない事もある)ので、ヒューズ等の保護も必要です。
1KΩと470Ωの間につながっている1Aのシリコンダイオードは、0.65Vの規準電圧として使っているので、ショットキーダイオードでは正常に動作しません。
フル充電(12.8V以上)で全てのLEDが点灯し、あとは電圧によってRA0〜RA2につながっているLEDが点灯するものです。
設定する電圧は、プログラム中のPI_VLT0〜PI_VLT3パラメータ値(0〜255)で変更できます。
※注)詳細は、下記の「LEDの点灯イメージ」を参照の事。
バッテリーチェッカーは数パーセント程度の精度が必要になるので、基準電圧に電源電圧を使っている場合は電源電圧の精度が問題に
なる事があるのですが、
このサンプルでは、基準電圧に12F1822に内蔵されたFVR(Fixed Voltage Reference)を使用しているので、測定精度が高く、
無調整で使用できるようになっています。
上記、「バッテリーチェッカー(12Vバッテリー用)」の2本の入力抵抗をショートするスイッチをつけて、6Vバッテリーでも使えるようにした
ものですが、他にも5Vレギュレタを低損失のものに変える等の変更もあるので、ハードウエアを作り直しています。
プログラムは、上記のものがそのまま使用できます。
LEDの点灯イメージは、上記と変更ありません。
2本の分圧抵抗をショートすると6Vバッテリー用になります
2本の分圧抵抗をショートすると、設定される電圧は1/2(6Vバッテリー用)になります
このケースは安価で、前面が透明アクリル板になっているのでケースの加工がほとんど必要なく、使いやすいケースです。
加工は、平行コードを引き出す穴を一個開けるだけです。
上記と同じものです。
レーザーダイオードは、抵抗一本でも点灯することは出来ますが、温度変化に敏感なため、ACP回路を使わないと、単なるLEDのような光り方に
なってしまって、レーザー本来の強力な光を発生する事ができません。
使用したレーザーダイオード(DL−3247)は、秋月電子で購入したもので、レーザー出力が5mWもあるものです。
レーザーポインターの国の規制値は1mW未満ですし、レーザーポインターにするには5mWは強力なので、目に当たれば失明の危険があります。
扱いには充分な注意が必要です。
サンプル@は、ACP回路で単にレーザーダイオードを点灯するだけのもので、PICのコンパレータ機能を使っているものです。
メーカーのACP回路をPICに置き換えただけのもので、これだけだと、PICを使う意味はあまりありません。
DL−3247専用に作ってあるので、調整箇所はありません。
なお、同じものをオペアンプで作ったバージョンを、
「(別室)レトロのページ」に載せています。
この回路はDL−3247専用です(PDのImを0.2mAにしてあります。)。
他のレーザーダイオードで使う場合は、最低でも、分圧抵抗(10KΩ、500Ω、2KΩ)と、PDに並列の1KΩの調整が必要です。
DL−3247以外をつなぐ場合は、この調整をしないと、LDの定格を越える電流が流れて、レーザーダイオードが壊れる可能性があります。
放熱のため、レーザーダイオードには内径4mmの金属スペーサーをかぶせています。
このレーザーダイオードは放熱が必要です(放熱しないと熱くなって、レーザーダイオードが壊れます)。
レンズは秋月電子の店頭で購入したφ14レンズで、レーザーダイオードと15mm程度離すと、ピンポイントの
レーザー光線が得られます。
ピンポイントの強力な光線を得るには、レーザーダイオードと凸レンズの焦点距離を、厚紙を挟む等の処置をして、
微妙に調整する必要があります。
写真の写りが悪いですが、実際の光線は赤色です。
※この記事は、
「CPLD/FPGA奮闘記」のページ
にあります。
写真
Javaアプレットでプログラムを作ることで、XPORTをWebサーバーにして、PICをWebブラウザーから簡単にコントロールできます。
※この記事は、
「(別室)インターフェースのページ」のページ
にあります。
DC5Vを入力し、5KΩのVRを動かす事で、DC8〜32Vの出力を得る事ができます。
出力電流の上限は、DC12Vの時150mA、DC24Vの時100mA、DC32Vの時50mA程度です。
昇圧が正常におこなわれて電圧が正常に出力されている時、LEDが点灯します。
プログラムは、12F1822に内蔵されているPWM,FVR,コンパレータモジュールを組み合わせたもので、スイッチング周波数
は100KHz付近にしてあります。
手持ちの部品に、適当なパワーMOSFETがなかったので、トランジスタでドライブしていますが、本当は、パワーMOSFETを
使ったほうが回路が簡単になり、損失も少なくなるのでいいと思います。
このサンプルの場合、トランジスタに数ワット程度の損失が発生するのでトランジスタには放熱器が必要で、実験で使用した小型
の放熱器程度では触れないくらい熱くなります(もっと大きな放熱器が必要です)。
このサンプルは、使用した部品の都合で、あまり大電流が流せるようにはしていません。
実験では、充分な余裕のある電源器(少なくとも5Vで5アンペア以上)で電源を供給しないと、出力の設定電圧を高くした時、
220μFの電解コンデンサをチャージするだけの力が得られず、立ち上がりませんでした。
(例えば秋月電子の5V2.3アンペアのACアダプタでは、瞬間的な電流オーバーでACアダプタの保護回路が作動してしまう)。
高い電圧を指定をして、電源を入れてもLEDが点灯しないような場合は、電源を入れたらVRをまわしていったん出力電圧を
下げて、LEDが点灯してからVRをまわして電圧を上げてやれば、2アンペア程度の小型のACアダプタでも、32V程度までの
出力ができるようです。
LEDが点灯していない時は正常に動作していないので、LEDが点灯していない状態のままにしないで下さい。
注1)PICKIT3をISPでつないだまま動作させると、50ボルト近い出力電圧が発生する事があります。
開発においては使用する部品の耐圧に注意が必要です。
注2)電源の5Vは、5アンペア程度の大きさがないと、立ち上がらないことがあります。
(出力電圧が30Vの場合、無負荷でも0.5アンペア程度、瞬間的には5アンペア程度の電流が流れる事があります)。
注3)このスイッチングレギュレタの周波数は100KHzで、可視聴帯の周波数を越えているため、発振音が聞こえる事はありません。
但し、出力電流を流し過ぎると、コンデンサが音を立てる事があります。
このような状態で使用を続けると、故障の原因につながるので、これ未満の電流で使用する必要があります。
実験では、出力電圧が12Vの場合で180mAを越えると、このような状態になりました。
100μHのインダクターは手持ちのものですが、できれば3アンペア以上は流せるものを使ったほうがいいと思います。
スイッチング電源なので、原理的にスパイクノイズをなくす事はできません
VRをまわしていったん電圧を下げてLEDが点灯してから、電圧を上げる操作をすれば
2A程度の小型のACアダプタでも使用できます
この実験では、ここまで大きなACアダプタを使う必要はありませんが、
この類の昇圧型スイッチングレギュレタは、電源投入時に数アンペア程度の電流が流れるものがあるので、
2,3アンペア程度の小型のACアダプタでは、一般的には起動しない事があります。
内蔵されているPWM(ハーフブリッジ)機能で、擬似SIN波(200KHz)に置き換えたものです。
出力は100mA程度得る事ができます(使用したMOS−FETが熱くならない範囲)。
高周波で使用するトランスは、入手性の問題で、趣味の工作ではコア材を購入して自作する事が多いように思いますが、
秋月電子のこのキットでは、ノイズフィルター用のコイルの一次側にセンタータップを取り付ける加工をして、トランスとして
使用するようになっていました。
この類のトランスは、巻き数が少ないものが多いので、巻き数を増減した電圧の変更が容易です。
このサンプルでは、2次側の巻き数を2倍にして、出力電圧を4倍(電圧のロスはあります)にしています。
トロイダルコアを使用したDDコンバータは、電圧の変動が大きいため、これを電源として活用するなら三端子レギュレタ等
による電圧の安定化が必要です。
PICのFVRを使ったプログラムで定電圧化してもいいかも知れません。(FVRを使った事例は、「DDコンバータ(その2)」
で紹介する予定です)。
実験では、発振周波数は100KHzにした方が出力電圧が高く取れるのですが、そうすると、負荷をつないだまま電源を入れ
た時にDDコンバータが起動しない等の問題が発生します。
この辺りは使用するコイルの特性によるので、発振周波数は調整が必要になる可能性があります。
但し、発振周波数をあまり低くすると大電流が流れて、MOS−FETやコイルを破壊する可能性があるので、調整する場合は
注意が必要です。
なお、P1A,P1BにDCが出力されると、MOS−FETやコイルが破壊されるので、ISPによる開発はしない方が無難です。
開発は、PICをソケットから抜き差ししておこなったほうがいいと思います。
基板下部には、改造のため「DDコンバータ(その2)用」のスペースを空けています
周波数が高いので、ダイオードは一般的な整流用のブリッジダイオードでは使用できません
ショットキーバリアダイオードや、ファーストリカバリーダイオード等を使う必要があります
1.ケースを開けて、中からコイルの本体を取り出します
2.コイルに次の加工を施します
@1次側に中間タップを付けます
A2次側に14回巻きのコイルを追加します
出力電圧は、負荷により大きく変動します
秋月電子のオリジナルのキットのイメージ ※回路図は秋月電子の説明書より抜粋
実験では10KΩのVRをまわす事で、2V〜12Vを出力する事ができます。
出力は、3Vで50mA,5Vで50mA,10Vで50mA,12Vで30mA(実際は11.5V)程度でした。
実際には、5Vで100mA以上取れましたが、この程度で使用しないとMOS−FETが熱くなって故障の原因になります。
MOS−FETが発熱しない範囲で使用する必要があります
VRを2V以下まで回転させると出力が不安定になりますが、SW1をbの位置にすると、1Vからの可変が可能です。
但し、その場合は、上限で設定できる電圧が低くなり、出力電流も小さくなります。
正常に動作しているとき、LEDが点灯します。
LEDが点灯していない時は動作が不安定になっているので、そのままの状態にしないで下さい。
PWMの発振周波数は200KHzにしてありますが、使用するコイルの特性によっては、発振周波数は調整が必要に
なる可能性があります。
また、発振周波数をあまり低くすると大電流が流れて、MOS−FETやコイルを破壊する可能性があるので、調整を
する場合は注意が必要です。
実験で使用したコイルの場合、20KHzより低く指定すると消費電流が多くなり、10KHzより低くするとMOS−FETが熱く
なりました。
なお、P1A,P1BにDCが出力されると、MOS−FETやコイルが破壊されるので、ISPによる開発はしない方が無難です。
開発は、PICをソケットから抜き差ししておこなったほうがいいと思います。
基板裏面についているMOSFET(2SK1172)は、次の「DDコンバータ(その3)」で使用を
予定しているもので、このサンプル(その2)では使用しないので、回路図では省略しています
出力電流が50mAを越えると、過電流保護回路が動作して出力を遮断し、LEDが高速点滅します。
解除するには、電源を入れ直してやります。
基板の空きスペースの都合で、最も簡単なシャント抵抗を使った保護回路にしてあるので、出力電流を限界まで
大きくすると、出力電圧は最大で0.6V程度下がります。
このような電圧降下が問題になる場合は、保護回路がない上記の「DDコンバータ(その2)」のほうがいいと思います。
過電流保護回路については、マイコン式DDコンバータの場合、シャント抵抗は必ずしも必要ではありませんし、
方式もいろいろあるのですが、この実験ボードには、これ以上の追加スペースがないので、
そういうサンプルについては、他の実験ボードで紹介していく予定です。
注意)この過電流保護回路は、出力電流が50mAを越えた時に動作する事を想定していて、一般的な保護回路のような
出力の急激な変動(ショート等)を想定しているわけではありません。
実験では、出力のショートでも確実に動作していましたが、急激な変動では、この保護回路は動作しない可能性もあります。
上記の「DDコンバータ(その2)」についていた2SK1172は、スペースを確保するために取り除いてあります
シャント抵抗(回路図中の12Ω1W)には、出力がショートした場合に瞬間的に最大10W程度の損失が発生します。
0.00000数秒程度なので問題無いと思いますが、本当はもう少し大型の抵抗を使ったほうがいいかも知れません。
電源を入れると、0〜9の乱数を発生します。
このようなものは、シミュレーションで使う場合は、乱数関数や計算で算出してもいいのですが、初期値が決まると
規則性が見えてしまうので、ゲームに使うとつまらないものになってしまいます。
サンプル@は、C−MOSインバータで300KHz程度のパルスを発生させて、このパルスが1の時、カウンタを
アップしているものです。
パルスをPICでカウントしているわけではないので、発振周波数を高くする事も可能で、そのほうが、よりランダム
な数値を作り出す事ができます。
C−MOSインバータで作った発信回路が想定以上に安定度が高く、周波数が大きく変動してくれないので、仮にCDS
を挿入し、周波数がぶれるようにしています。
実験では、CDSに直接一定の光りを当てると周波数の安定度が上がってしまうので、CDSは横向きに取り付けた
ほうがいいようです。
CDS以外にも、サーミスタ等、いろいろ使ってみるといいかも知れませんし、
発振回路は、C−MOSインバータで作るより、もっと不安定なものを使ったほうがいいと思います。
コンデンサ(0.1μF)、抵抗器(470Ω/10KΩ)は、チップを使っています
(チップ部品は、小型で、安価で、パターンの隙間にでも装着できるので、なかなか使いやすいです)
負荷が軽すぎるので、負荷に10KΩの抵抗を入れていますが、この用途では、回路はなるべく
不安定なほうがいいので、10KΩの抵抗は入れないほうがいいと思います
ハイパーターミナルの設定
実測すると、発振周波数は4049BPを使った場合で5MHz、7400Nを使った場合で31MHzです。
この発振器は、周波数の安定度がそれほど良くなく、しかも簡単なので、乱数発生にはいいかも知れません。
この発振器は波形の大きさが2.5Vに届かない事があるので、発振器の出力をPICに直接つないだりすると、
乱数が全く動かない可能性があります。
Ra0は、PICKIT3でも共通で使用しているので、このサンプルプログラムを動かす時は、PICKIT3は
はずしてやらないと、正常に動作しません。
また、プログラムを書き込む時は、Ra0につないでいる発振器をはずしてやらないと、PICKIT3でプログラム
を書き込む事ができません。
サンプル@は、単に乱数を発生させて表示しているもので、上記の「乱数の発生(その1)」と同じプログラムです。
サンプルAは、100個の乱数を発生させて表示し、それぞれの個数を集計して表示しているものです。
乱数の精度は、外部に接続したオシレータの周波数が高くなり、プログラムの計測時間が長くなるほど精度が
向上しますが、計測時間が長すぎると処理に時間がかかるので、妥当な範囲を調整するために作ったものです。
この値は、プログラム中の「PI_RAND_LOOP」で定義しているので、ばらつきが極端に偏よる場合は、数値を
大きくしてやる調整が必要になります(但し、その場合、処理時間は長くなります)。
サンプルBは、0〜999999999までの乱数を発生させているもので、結果はロング型変数「land_long」に
収納されます。
この値の任意の数値の余りを取る事で、任意の範囲の乱数を得る事もできます。
サンプルCは、8桁の自然数n(00000000〜99999999)を入力し、0〜nまでの乱数を発生させるものです
上記、「乱数の発生(その1)」と同じです
ハイパーターミナルに表示するものです。
なるべく簡単にするため、圧電スピーカを使う事で、トランジスタ等のドライブ回路は省略しています。
このマイクロフォンは、音声をPDM方式で出力してくれるもので、ほとんど何の処理もせずにマイコンに取り込み、出力し、
スピーカを鳴らす事ができます。
このマイクを使った場合、アナログマイクロフォンのようなマイクアンプやA/Dコンバータ、D/Aコンバータ等は不要です。
サンプル@は、PIC12F1822でデジタルシリコンマイクロホンに必要な1〜3.25MHz(3.3V)のクロックを生成し、
PDM方式の音声データをPIC12F1822に取り込み、何の加工もしないでそのまま出力し、あとは簡単なフィルターでデジタル
信号をアナログ音声信号に変換してスピーカを鳴らしているものです。
このマイクの稼動確認のために作ったサンプルです。
この回路が簡単な回路のせいなのかも知れませんが、実験では「シー」というノイズ音が大きく、マイクの感度が著しく悪く、
風の音にはよく反応しますが、人の声はマイクギリギリまで近づけて話さないと、ほとんど音声を拾えませんでした。
(オシロスコープでマイクの出力波形を直接見ても、人の声程度では、ほとんど波形が変化していない)
この辺りは、もう少し改善して「デジタルマイクを使ってみる(その2)」で紹介する予定です。
なお、出力のフィルターは、8Ωのスピーカ用に作ってあるので、それ以外のスピーカをつなぐ場合は、インダクターや
コンデンサの定数の変更が必要になります。
このデジタルシリコンマイクの電源電圧は、1.6〜3.6Vなので、注意が必要です。
一般的にマイクは微小なノイズの影響を大きく受けますので、電源は電池か、ノイズが充分少ないシリーズ型電源器を
使用したほうがいいと思います。
スイッチング方式のACアダプタや電源器を使うと、ノイズが大きすぎて、充分な性能を発揮できない可能性があります。
1.5Ω(2W)は、手持ちの都合で3Ω(1W)*2で代用しています
1μF16Vは、秋月電子で安価で購入できるチップ型積層セラミックコンデンサを使用しています
470μFをヘッダーピンで外付けしているのは、このアダプタを他の実験でも使用しているからです
(このアダプタは、パワーMOSFETの出力を、ヘッダーピンでそのまま取り出す事もできるように作ってあります)
使用したパワーMOSFETは、秋月電子で安価で購入したものです
上記回路の修正イメージ
実用的に使えるレベルまでは改善していませんが、
実験では、フィルターを人間の声の帯域に限定してしまってよければ、多少聞きやすくなります
(回路図の赤色部分の部品を、手持ちの部品の範囲で付け替えてみました)
実測すると、127KHzのノコギリ波を発生していました。
12F1822を使ったデジタルオーディオアンプのサンプリングに使うためのものですが
(デジタルアンプでは500KHz程度が一般的なようですが)、コンデンサや定電流ダイオードを変える事で、発振周波数は
自由に変更する事ができます。
但し、コンデンサの容量をある程度大きくする場合は、PICで直接コントロールできなくなるので、MOS−FET等のドライバー
を追加する必要があります。
数百KHz程度なら大丈夫だと思いますが、また、あまり周波数を高くすると、波形に荒さが目立ってくると思います。
このサンプルは、12F1822をPLLで32MHz高速動作させていますが、周波数をあまり高くすると、プログラムが追いつけ
ません。
高い周波数のノコギリ波が必要なら、安価(秋月電子で200円)で高性能なPIC32MXを使うといいと思います。
デジタルオーディオアンプについては、下記で紹介を予定しています。