MAX11300PMB1をexStickにつなぐ

製品紹介

GWいかがおすごしですか?

さて、今日はGW中の簡単な工作としてMAX11300PMB1をexStickにつないでみます。20本のADC/DACを備えたIOポートをNetworkで制御できるようになりますよ。

MAX11300PMB1とは

MAX11300PMB1はMAXIMから発売されているMAX11300の評価ボードです。MAX11300は20ポートのデジタル/アナログプログラマブルI/OのICで、設定によってADCやDAC、TTLレベルの信号生成と多彩なI/Oポートとして利用できます。

評価ボードの詳細は こちら を、ICの詳細は こちら を参照してください。

評価ボードの物理的なI/FはPMODなのでDigilentのFPGAボードやexStickに簡単に接続できます。ただし、I/Oポートを有効にするためにはSPIによる初期設定が必要なので、若干使い始めは面倒かもしれません。

MAX11300用のコンフィグレーション

SPIなので、もちろんHDLで記述できますが、特段、速度が必要というわけでもないのでJavaで書いてSynthesijerで合成してしまうことにします。

読み書きのインターフェースクラスは、こんな感じ。MAX11300Iface.java

たとえば、レジスタから値を読み出すために、次のようなメソッドを定義しています。このメソッドでは、一つ目のループで、SPIのCLKをぱたぱたしながらアドレスを出力し、二つ目のループでデータを取りこみます。

        public int read(int addr){
                int v = 0;
                int a = (addr << 1) + 1; // LSB should be '1' to read
                sclk.flag = true;
                sclk.flag = true;
                sclk.flag = false;
                sclk.flag = false;
                cs.flag = true;
                for(int i = 0; i < 8; i++){ // addr + R/W B
                        sclk.flag = false;
                        dout.flag = (a & 0x80) == 0x80;
                        sclk.flag = true;
                        a = a << 1;
                }
                sclk.flag = false;
                for(int i = 0; i < 16; i++){
                        sclk.flag = true;
                        v = v << 1;
                        v = (din.flag) == true ? v + 1 : v;
                        sclk.flag = false;
                }
                sclk.flag = false;
                cs.flag = false;
                return v;
        }

MAX11300を叩いてみる

用意したI/Fクラスを使ってMAX11300を叩いてみます。たとえばポート19をDACモードに設定し、のこぎり波を作るには、

  • ポート19の設定レジスタ(0x33)に0x5100を指定(+10V~0VのDACモードに設定)
  • ポート19のデータレジスタ(0x73)にカウンタ値をセット

すればよいでしょう。

Javaで書くとこんな感じ。 MAX11300Test.java

                obj.write(0x33, 0x5100); // port 19
                while(true){
                        for(int i = 0; i < 0x1000; i++){
                                obj.write(0x73, i);
                                for(int j = 0; j < 100; j++){;}
                        }
                }

ちなみに、データシートではデバイスIDの値が0x0024と書いてありましたが、実際に読めた値は0x0424でした。

UDPコアとつなげばネットワーク対応汎用I/Oのできあがり

exStick付属のIPコアを使えば、簡単にネットワークから制御可能なI/Oができあがります。MAX11300はあまり高速に値を制御することはできませんが、10V幅でデータを制御できるようになると、アプリケーションの範囲も広がりそうですね。

コメント

タイトルとURLをコピーしました