DS1845/DS1855ディジタルポテンショメータ用のプッシュボタンインタフェースを作成する

要約

このアプリケーションノートは、DS1845/DS1855不揮発性ディジタルポテンショメータ用の簡単なインタフェースを作成するためのマイクロコントローラの使用方法を説明しています。プッシュボタンを押すことによってI²Cコマンドに変換され、ポテンショメータのワイパーを増減させます。

はじめに

このアプリケーションノートは、Microchip®のPIC12F509マイクロコントローラを使用して、DS1845またはDS1855不揮発性ディジタルポテンショメータにプッシュボタンインタフェースを実装する方法を説明します。

ハードウェアの構成

図1の回路図は、プッシュボタンをマイクロコントローラとインタフェースする方法を示しています。また、I2Cのインタフェースが実装される方法も示しています。

図のスイッチのうちの3つはモーメンタリプッシュボタンタイプで、増加(UP)、減少(DWN)および中点のポテンショメータ値(MID)を設定するのに使用されます。スイッチを押すと、これらのスイッチは、マイクロコントローラの多目的I/O (GP0、GP1、およびGP3)の3つにローの値を与えます。これらのI/Oは内蔵(オプション)のプルアップ抵抗を持っており、低電流SLEEPモードがイネーブルされるとスリープ解除を生成することができますので、これらのI/Oが意図的に選ばれています。もう一つの入力スイッチは、GP2に割り当てられているDPDTのトグルスイッチです。このスイッチは、プログラミング用にPOT0またはPOT1を選択するために使用することができます。

SDA、SCL、およびLEDの各出力信号は、GP5、GP4、およびGP0に割り当てられます。SDAおよびSCLは4.7kΩのプルアップ抵抗を持っており、直接ディジタルポテンショメータの通信端子に接続します。LEDおよびMIDのモーメンタリスイッチは、リソースとして両方ともGP0端子を使用します。ほとんどの期間GP0端子は入力として動作し、MIDのプッシュボタンによって生じるLOWに対してポーリングします。ただし、他のモーメンタリプッシュボタンの1つまたは両方が押された場合、PIC®がLOWを出力してLEDが駆動されます。このようにして、LEDはMIDボタンが押されると必ず駆動され、もう1つのプッシュボタンスイッチが押されると必ずPICによって駆動されます。R1、R2、およびR3はオプションのプルアップ抵抗で、PIC12F509を使用するときには取り付ける必要はありません。

図2にDS1845/DS1855に特定した評価用の接続を示します。アドレス端子の選択、共有VCC (VDD)の分離、およびSDAとSCLのアイソレーション用にジャンパが設けられています。

図1. PIC12F509のインタフェース回路

図1. PIC12F509のインタフェース回路

図2. PICコントローラに接続されたDS1845/DS1855ディジタルポテンショメータ

図2. PICコントローラに接続されたDS1845/DS1855ディジタルポテンショメータ

ファームウェア

このプロジェクト向けのファームウェアは、MPLAB IDE (バージョン7.31)でコンパイルされるアセンブリ言語で記述されています。このツールは、現在マイクロチップから無償で入手可能です。プログラム全体は、プログラム空間(フラッシュ)にある512未満の命令とデータ空間(RAM)にある14のロケーションで構成されます。

命令は、初期化、読出し、UP、DWN、およびMIDの5つのブロックに分かれています。ファームウェアは単純なループを実行し、入力端子を継続してポーリングします。プログラム固有の遅延と論理フローによって、スイッチのデバウンス機能はソフトウェアに自動的に組み込まれています。

初期化ブロックは、PICのパワーアップ時またはウェイクアップ後(SLEEPがイネーブルの場合)に1度だけ実行されます。初期化ブロックの命令が実行された後、動作レジスタ、フラグ、および変数は既知の状態にロードされます。これらの命令が実行されると、残りのブロックが無限ループを連続的に生成し、I2Cインタフェースを通じてスイッチのポーリング、新しいポテンショメータ値の読出しまたは書込みを行います。

ポテンショメータ値のI2CのREADは、RD_FLAGが設定されているときにのみ行われます。このフラグは初期化中に一度設定され、その後はプッシュボタンがポテンショメータレジスタを呼び出して新しい値が書き込まれるたびに設定されます。ポテンショメータ値の変更時および起動時にのみI2CのREADを実行することによって、UP、DWN、またはMIDボタンが押されていないときに余分な通信バーストがバス上で発生することはありません。たとえば、ポテンショメータがすでに電源微調整パラメータの制御で使用されている場合、プッシュボタンコントローラが接続されて、インサーキットプログラミングを実行します。現在のポテンショメータ値は、ポテンショメータ値のI2CのWRITEが実行される前に読み出されます。I2CのWRITEが完了するとRD_FLAGが再び設定され、新しいポテンショメータ値の最終のI2CのREADが1つ生成されます。

UP、DWN、およびMIDの各ブロックは、読出しブロックの後で順次実行されます。これらの各ブロック内でそれぞれの端子のLOW状態がポーリングされます。HIGH状態が検出された場合、プログラムはそのブロックを直ちに終了し、いかなるI2C通信も行われません。LOWが検出された場合、論理ブロック図に記載されているとおりにプログラムが進行します。

ソースコード(.txtファイル)は、マキシムのFTPサイトからダウンロードすることができます。

機能の説明

このプロジェクトのファームウェアとハードウェアは、DS1845/DS1855のポテンショメータ値をプログラミングするときにいくつかの異なる動作を実行することが可能です。スイッチおよびLEDの各機能を以下に示します。

POT0/1 (トグルスイッチの選択) このスイッチは、次のループ繰返しでどのポテンショメータ(必要な場合)を制御するのかを選択します。このスイッチをPOT0またはPOT1に選択して生じる状態変化によってI2Cの読出しが行われますが、LEDには影響しません。
MID、UP、またはDWNボタンを軽く押す(< 400ms) これらのスイッチの1つを軽く押すことによって、選ばれたポテンショメータはインクリメントされるか(UP)、デクリメントされるか(DWN)、あるいは中点位置(MID)が直ちにロードされます。I2Cの書込みが行われている間LEDは一時的に点灯し、I2Cの読出しが次のループ繰返しで行われます
UPまたはDWNボタンを長く押す(> 400ms) UPまたはDWNボタンを長く押すことによって、選択したポテンショメータは高速インクリメントまたは高速デクリメントモードに入ります。この時点で、ボタンが解放されるかまたは最大/最小の位置に到達するまで、ポテンショメータ値は変化し続けます。LEDはI2Cの書込みが実行されるときに点灯し、ボタンが解放されるまで点灯したままになります。ボタンを解放した後、次のループの繰返しでI2Cの読出しが行われます。
UPを長く押した後、DWNボタンを軽く押す UPボタンを長く押すことによって、選択したポテンショメータはインクリメントを開始します。次にUPボタンを押したままにしてDWNボタンを軽く押すと、選択したポテンショメータに最大位置が直ちにロードされます。LEDはスイッチが解放されるまで点灯します。ボタンを解放した後、次のループの繰り返しでI2Cの読出しが行われます。
DWNを長く押した後、UPボタンを軽く押す DWNボタンを長く押すことによって、選択したポテンショメータはデクリメントを開始します。次にDWNボタンを押したままにしてUPボタンを軽く押すと、選択したポテンショメータに0x00の最小位置が直ちにロードされます。LEDはスイッチが解放されるまで点灯します。ボタンを解放した後、次のループの繰返しでI2Cの読出しが行われます。
LEDが3回点滅する パワーアップ時にPICが初期化されるとき、またはウォッチドッグタイマによってシステムがリセットされるとき(イネーブルの場合)に、LEDは必ず3回点滅します。
LEDが連続して高速に点滅する I2Cのエラーが生じると、必ずLEDが高速に点滅します。エラーが修復されるとLEDは正常機能に戻ります。デバイスアドレスが正しいこと、またI2Cバスが接続されていることを確認して問題を解決してください。

結論

このアプリケーションノートは、DS1845/DS1855不揮発性ディジタルポテンショメータ用の簡単でコストを削減できるコントローラを使用して構築する方法について説明しています。プッシュボタン入力はI2Cのコマンドに変換され、ホストコンピュータを必要とせずにインクリメント、デクリメント、または中点位置の設定が行われます。