Memorandumの小部屋
本ページは金銭授受を伴う行為を含むAuctionや商用Web
Pageからの無断リンク・無断参照を禁じます。
無断リンク・無断参照が判明した時点で然るべき処置をとらさせて頂きます。
ロータリィーエンコーダを回すのは面倒だ!!
(ロータリィーエンコーダー信号発生器の製作)
DDSキット と PIC DDSコントロールキット を製作しました。 |
+
|
+
AKI-PICプログラマーキットを製作したものの、まだ一度もワンチップマイコンPIC16F84を使ったことがありません。 |
| |
ワンチップマイコンPIC16F84を使って、アップ・ダウンスイッチでロータリィーエンコーダーの信号を発生させてやろう。 |
というわけで、
ロータリィーエンコーダー信号発生器の製作
さて、どのようなものを作るかコンセプトを考えます。 でも、初めてのPIC16ファミリーのワンチップマイコンです。 アーキテクチャもこのアセンブラも初めての経験となります。 さて、どうなることやら。
【アーキテクチャ検討】
項 目 | 目 標 | 対 応 | ||
製 作 容易化 |
ここは田舎です。 田舎にとっての特殊部品の使用は御法度。 部品点数も低減。 |
発振はCR発振とします。当然、水晶振動子やセラロックを使いません。 今回の用途では周波数の安定性は要求されないのでCR発振で十分ですね。 入力信号用プルアップ抵抗は無駄。 入力はポートBにしてプルアップをイネーブルに設定します。 よって、出力はポートAを割り当てます。 |
||
入力 | 新たに追加するアップ・ダウンスイッチとキットに付属のロータリィーエンコーダ(ALPS EC16B)のどちらも入力ディバイスとして利用したい。 | 入力信号はポートチェンジ割込機能付きのRB4〜RB7に割り当てましょう。 (ただし、ポートチェンジ割込機能は未使用。) RB4 : RE1の入力 RB6 : アップスイッチの入力 |
||
入力 | アップ・ダウンスイッチを押している期間、カウントアップ・ダウンするためのロータリィーエンコーダ信号を発生させたい。 | アップ・ダウンスイッチはモーメンタリィタイプ(スイッチを押している間のみ接点が閉じるタイプ)とします。外観を問わなければタクトスイッチで十分ですね。 | ||
操作性 | アップ・ダウンスイッチを押してカウントアップ・ダウンするカウント間隔は、最初はゆっくり徐々に速くカウントさせたい。 | 最終的に11段階切替えにしました。 | ||
操作性 | カウント用クロックの周波数を切り替えたい。 | RB0・RB1・RB2の入力を読み込んで、オプションレジスタのプリスケーラ分周比設定ビットを設定できるようにしましょう。
|
||
操作性 | カウント間隔の最大間隔と最小間隔の間隔比を切り替えたい。 | RB3の入力を読み込んで、下記の2つのうちの一方を選択できるようにします。 Low : 20:1 |
||
出力 | ロータリィーエンコーダと同じ信号を出力させなければいけませんね。 | 出力はRA0、RA1に割付。 RA0 : RE1相当出力 ロータリィーエンコーダのクリック安定点では接点開となっています。よって、電源投入時の出力信号はHighレベルとします。 |
||
出力 | ものはついでにUPパルス・DOWNパルスを出力させておこう。 | この出力はRA2、RA3に割付けます。 RA2 : UP相当出力 今のところ使い道が有るわけではありませんが、ロータリィーエンコーダ信号・アップ・ダウンスイッチから方向毎に分離されたパルス信号(UP/DOWN信号)を得ることができます。 ロータリィーエンコーダのクリック安定点間で2パスルを発生します。また、電源投入時はLowレベルとします。 |
||
出力 | ちょっと自信がないので、プログラムが動作している事を目視で確認したい。 | 出力のLow/Highレベルを周期的に変化してプログラムが正常に動作することを確認できるようにします。 この出力にLEDを付けて点滅させることでプログラムの動作確認が可能となります。 ソフトタイマにより出力RA4の出力トランジスタを周期的にオンオフします。(RA4はオープンドレイン出力なのでシンク側のみの出力。電圧出力するにはプルアップ抵抗が必要。) |
【ハード開発】
今回製作したロータリィーエンコーダ信号発生器の回路図を下図に記載します。
図1 ロータリィーエンコーダ信号発生器の回路図
実際に作った回路(?)のうち、IC1の部分の画像を下記に示します。 この画像の左側はTV3 TVチューナディジタルチューニングキット用、右側はPIC DDSコントロールキット用に製作しています。 基板は基板の端切れを使用しています。 ICソケットは20Pin用しかありませんでした。余りのピンには発振用抵抗R1を差して、変更できるようにしています。
図2 製 作 例
結局、最終的に使用した部品リストを表2に記載します。
部品番号 | 品 名 | 形 式 | 数 | 備 考 |
IC1 | ワンチップマイコン | PIC16F84−10/P | 1 | |
− | 基板 | ユニバーサル基板の切れっ端 | 1 | ICソケットより一回り大きい程度にカットされたもの |
− | ICソケット | 18Pin もしくは 20Pin用 | 1 | |
SW1・SW2 | スイッチ | モーメンタリィータイプ | 2 | お好みのもの |
R1 | 抵抗 | 3.3kΩ (1/8W) | 1 | 【調整】を参照 |
R2 | 抵抗 | 47kΩ (1/8W) | 1 | 1k〜47kΩ適当に。 |
C1 | セラミックコンデンサ | 20pF(もしくは22pF) | 1 | 【調整】を参照 |
C2 | コンデンサ | 0.1μFくらいなら何でもよい。 | 1 | バイパス用 |
SW3 | Dip SW | 4極用 | 1 | 設定を変更しなければ配線で処理。SWは不要。 |
【ソフト開発】
残念ながら、このとおり製作しただけでは動きません。 PIC16F84はワンチップマイコンですからソフトが必要です。
というものの、準備するものはわずかひとつで済みます。 ソフトを開発する開発環境から書き込み器まで秋月電子通商の「AKI-PICプログラマーキット」ひとつで全てが揃います。
今回初めてトライしたPIC16ファミリーのアセンブラは「AKI-PICプログラマーキット」付属のアセンブラを使用します。 このアセンブラは拡張インストラクションをサポートしていますが、せっかくのRISCライクな命令体系なのにわざわざ複雑にすることはないと思い、拡張インストラクションの使用は止めました。(本当は、一度にたくさん覚えることが出来ないだけとの話もあります。)
で、もって、作成したプログラムをアセンブルして生成したインテルHEXフォーマットデータを下記からダウンロードできるようにしておきます。 クリックすればファイルをダウンロードできます。LHAで圧縮していますので解凍してお使い下さい。このデータを「AKI-PICプログラマーキット」付属の書き込みソフトに読み込み、PIC16F84に書き込んで下さい。
また、「AKI-PICプログラマーキット」などの書き込み器をお持ちでない方のために書き込みサービスを行います。文末をこ参照下さい。
ROT003E.LZH(Copyright (c) 1998 by Itou Atsushi)をダウンロードする。
注 意
ROT003E.LZHを解凍して生成されたROT003E.HEXは個人の使用目的に限りコピーフリー及び改変自由とします。 著作権はホームページ文末に記載の本 Web運営者が所有しております。
【調整】
カウントアップ/ダウンの間隔は適用するキットや使い心地がよくなるように調整しなければなりません。調整する方法はいくつかあります。
回路図のSW3のディップSWの設定で切り替える方法。
表1に記載のように、RB0〜RB2でTMR0用プリスケーラ分周比を設定できます。 また、RB3で間隔比を変更できます。
これらのスイッチの設定を変えて、感覚的に使いやすい設定を探して下さい。
ちなみに、私の設定は、使用部品は表2のままで、RB0〜RB3の設定が下記のようになるように配線しています。
表3 設定例 キット名称 RB3 RB2 RB1 RB0 間隔比 PS2 PS1 PS0 PIC DDSコントロールキット Open Open Open Open TV3 TVチューナディジタルチューニングキット GND
接続GND
接続GND
接続GND
接続
クロック周波数を変更する方法。
クロック周波数を変更する方法として抵抗R1やコンデンサC1の定数を変更する方法があります。
データシートンに記載のようにC1は無くても動作しますが、安定性を増すために20pF以上を接続しておいた方がよさそうです。
R1の抵抗値を3.3kΩ以上の抵抗値の抵抗に変更します。抵抗値に反比例して動作クロック周波数が遅くなります。 製作例では20PinのICソケットを使用していますが、ICソケットの一番左側の列にR1を差込み、必要に応じて動作クロック周波数を変更できるようにしています。
実際の調整過程においては、下記のようなチェック基板を使用して調整しました。
出力のRA0〜RA4とRB0に端子レベルモニタ用のLED用バッファICとLEDを追加し、HighレベルでLEDが点灯するようにしています。
8PinのICソケットは発振回路部品実装用の部品差込用として使用しています。ここに抵抗・コンデンサ・水晶振動子・セラミック振動子などを差して動作クロックを簡単に変更できるようにしています。写真は、抵抗3.3kΩのみでCR発振としている場合です。
図3 PIC16F84動作チェック用基板
【その他】
現行の発振方法の設定はCR発振となっていますが、どうしてもCR発振では性に合わない、クロック周波数は安定であるべきだとおっしゃる方は、「AKI-PICプログラマーキット」付属の書き込みソフトで設定を変更できますので、ご自由に変更して下さい。(コンフィグレーションワードの内容についての改変は自由に行えます。)
PIC16F84を理解するのにトランジスタ技術1995年12月号の特集「新しいコンセプトのRISCマイコン−PIC16C84 ワンチップ・マイコンで行こう!」が大変役に立ちました。
また、命令セットなどのデータ関係はAKI
PIC プラチナキットに付属しています日本語のデータシートが役に立ちました。
ソフト作成、デバッグの過程においての独り言。
subwfのoperationを(w)−(f)→(dest)と勘違いし、36時間後にPIC16F84シュミレータを使ってバグを見つけたのは私です。
どうしてsublwのoperationがk−(w)→(w)なんだ。decwが無いのだから(w)−1→(w)が簡単にできない。
【プログラム書き込みサービス】
本ページで紹介しましたPICマイコンの書き込みサービスを行っています。 詳細はプログラム書き込みサービスのページを参照願います。
End of This Page.