So-net無料ブログ作成
検索選択

MSP430G2231によるeZ Probe [電子工作]

ロジックプローブがほしかったのですが、sanwaのLG-1000はすでに生産終了で入手不可でした。そんなとき、見つけたのが、msp430によるeZProbe。http://www.simpleavr.com/です。
ソースのライセンス
giftware, as is, no warranty, restricted to hobby use
you cannot use this software for commercial gains w/o my permission

if u are building software releasing it based on this,
u should retain this message in your source and cite it's origin
otherwise just take whatever code snipplets you need
とあります。

もともとのeZProbeのページはmsp430f2012、通称クラゲを使って、さらにもともとのeZ430を改造してロジックプローブにしています。追加のf2012を買った上でeZ430を改造してしまうとなると、かなりのコストがかかります。参考までに、digikeyでは(2011年9月当時)f2012が340円ほどとeZ430が2040円で、合計2380円です。

でもLaunchPadという安い600円ほどのものが出て、そこにDIP品2個、msp430g2231とg2211が付いて、書き込みボードが付属してます。開発環境(ツール)はgccのほか、IARのKickStartなら無料です。
f2012とg2231は非常によく似た石です(まぁ、その違いのためにちょっと悩まされたわけですが)。なら、g2231を使ってeZProbeをつくろう、と思い立ったわけです。

まず、開発環境ですが、IARのEWBはよくできていますので、私はそれを使っています。KickStartなら無料ですし、g2231で使う分には十分です。なれた人なら、gccを使うのもよいでしょう。

さて、eZProbeのプログラムをダウンロードしてコンパイルします。IARで、CPUの設定等を行なってコンパイル! エラー。そうですよね、石が違うんだから、includeファイルが違いますよね。コンパイル!
まだエラーがでますね。includeを増やして、コンパイル!
で、残るは、BCR1とDCOの設定値。これがf2012とg2231との差で、廉価版のg2231は、1MHzの値しか持っていません。で、12MHzの設定は... UserManualを見ると... REFx=14,MODx=0,DCOx=3あたりみたいです。おっとXT2OFFもね。まぁ、発振周波数にかなり幅がありますが、今のところは放っておきましょう。必要なら後で、パルス出力モードを使って測定して、周波数を追い込んでください。

ここまでの状態で、LanunchPadではLEDが光ってます。右下のP1.6/A6がプローブピン、P1.7がモード切り替えスイッチです。P1.7を手で触ると、LEDの光り方が代わり、モードが変わっているのがわかります。

LaunchPadをそのまま使ってeZProbe(というより、LaunchPadProbe、略してLPProbeですね)とするなら、せっかくならLaunchPadにあるスイッチを使うようにそれらのポートを入れ替えてコンパイルしましょう。ダウンロードして実行すると、今度は、スイッチでモードLEDが切り替わりました。

probe2.jpg私は、小さな蛇の目を買ってきて配置しました。LEDも光りすぎないように集合抵抗を入れて(プログラムで間欠点灯しているので抵抗なしでもOKだと気がついたのは組んだあとでした)、じゃぁ、テスト! あれ、光りませんね。

LaunchPadで動くのだから、プログラムはされています。何がおかしいのでしょう... LaunchPadの回路図を調べてみますと、RST#/NMI/SBWTDIOがプルアップされています。あ、オープンじゃダメみたいですね。蛇の目上ではデバッグしませんから、これをVcc直結にしてしまいましょう。テスト!

LEDが光り出し、スイッチポートを手で触れるとモードが変わります。が、どうもProbeができていないのか、表示が変わりません。はて? A6ポートを壊しましたかね?

も一度LaunchPadに戻してデバッガでみると、スイッチポートのon→offのリリース待ちでループしています。へ?

Webのページをみると、eZ430でケースに入れて作ると、そのピンは外部プルアップされているので内蔵プル抵抗を付ける必要すらない、とありました。なるほど。eZ430ではないのでプルアップが必要ですね。
確か、msp430はプル抵抗を設定できたはずですので、それでプルアップしてしまいましょう。えーと、どうやるんだっけ? UserManualをみると、INポートに設定して、REGをenableにして、OUTポートに1を書けば、プルアップになりますね。ダウンロードして実行!

動きますね。Probeでmsp430の足を触るといい感じです。妙なタイミングの信号も見えます。あと、手で触るとノイズのようなものも。
ソースのパッチは後ろに。なお、動作は保証しませんので、At your own riskで。

さて、じゃぁ、あとは、A6を保護するための回路を追加しなければなりませんね。msp430は、Vccが3.6Vmaxで、A6はVccが最大。逆電圧も防がないといけません。印加は5Vがありうるものとして、最大15Vくらいを考えましょうか。

A6-protect.png
まず、順方向の保護。Probeから制限抵抗RmをつないでA6へ。A6からVccへ保護ダイオード(ショットキーバリア品)。逆方向防止のためにGNDからA6へも保護ダイオード(ショットキーバリア品)。ダイオードの電圧分だけオーバーしますが、まぁないよりはるかにマシです。
 

さて、あとは規格を考えるわけですが、Vcc=3.3Vとして、プローブへの印加5Vが普通だとすると、Rmは電流が(5-3.3)/Rm=1.7/Rmで、電力は(5-3.3)^2/Rm=2.89/Rmです。1/4Wタイプだと12オームです。

で、これが、15Vとなると、電力が11.7^2/Rmになり、548オームとなります。となると、560オームですな。
このとき流れる電流が11.7/560=20.9mAなので、保護ダイオードには21mAが耐えられるもの... 普通ので大丈夫ですね。

保護抵抗はどうでしょうか? Vcc=0として流れる電流は(15-0.3)/560=26.3mA。これだと、387mWで抵抗がもちませんが、まぁそれはそれとして、ダイオードを流れる電流としては、かなり少ないので50〜100mA品なら大丈夫でしょう。
手に入りやすそうな保護ダイオードとして、1SS319を使うことにしました。1チップで2個のダイオードが入ってますし、なんとかDIPの蛇の目パターンに乗りますし。
電源は、単4型2本でスイッチ付きがありましたので、それを買いました。

probe1.jpgで、主にロジックプローブとして使いますので、モード切り替えスイッチは省略しました。モードを切り替えるときには、GNDのクリップでmsp430の足を触ればよいでしょう。

さて、実際にプローブをあてようとしてみると... ??? なぜターゲットに触る前に点滅する???

プローブの線を普通の線にしたのが間違いです。誘導でA6が電圧を拾っているようです。入力インピーダンスが高すぎですねぇ。ま、ともかく、これはシールド線を使えば良くなります。

シールド線に変えたら線のほうでは誘導を拾わなくなったのですが、まだプローブ(ICクリップ)の先のほうでは拾ってしまいます。なんという繊細さでしょう。使うのが難しそうです。クリップを引っ掛けては手を離し...みたいに。


ところで、このLED、どう見るのでしょう? というか使い方は?
Webページからすると、

  • スイッチを長押し(1.5秒)することによって、測定・発信器の3つのモードを切り替えられる。
    モードLEDはLED0 (P1.0):
        消灯:プローブモード
        点灯:パルス出力モード
        点滅:PWMパルス出力モード

  • プローブ時のレベル表示(LED0 (P1.0)が消灯)
    赤LED1 (P1.1)点灯:High
    緑LED7 (P2.7)点灯:Low
    2つとも消灯:Floating
    2つとも点滅:100Hzを越えるパルス

    黄LED2 (P1.2):
        点灯:100Hz〜
        点滅:10kHz〜
    黄LED3 (P1.3):
        点灯:500Hz〜
        点滅:50kHz〜
    黄LED4 (P1.4):
        点灯:1Hz〜
        点滅:100kHz〜
    黄LED5 (P1.5):
        点灯:5kHz〜
        点滅:500kHz〜

    なお、単一パルスの場合は、赤と緑が点灯のまま、最大8回まで黄色LEDが光る(らしいです)。

  • パルス出力モード(LED0 (P1.0)が点灯)
    このモードのとき、スイッチを短く押すことによって、9段階の出力周波数を変えられる。
    黄色LEDの表示で周波数が分かる。
    100Hz, 500Hz, 1kHz, 5kHz, 10kHz, 50kHz, 100kHz, 500kHz, 1MHz

  • PWMパルス出力モード(LED0 (P1.0)が点滅)
    このモードのとき、スイッチを短く押すことによって、9段階のPWMパルス出力を変えられる。
    黄色LEDの表示でPWMパルス出力が分かる。
    0%, 12.5%, 25%, 37.5%, 50%, 62.5%, 75%, 87.5%, 100%

この下はG2231とLaunchPadで動作させるためのパッチ (なお、動作は保証しませんので、At your own riskで):
  • USE_MSP430G2231をdefineすると、G2231用になります。
  • USE_LAUNCH_PADをdefineすると、LaunchPad用に、P1.3とP1.7を入れ替えます。つまり、S2がモード切り替えスイッチとなり、代わりにP1.7に黄色LEDを接続します。
--- ../ezprobe.c    2011-09-02 03:11:36.000000000 +0900
+++ ezprobe.c.g2231    2011-09-05 03:34:44.000000000 +0900
@@ -69,23 +69,49 @@
   december 2010
   built with msp430-gcc
 ******************************************************************************/
+#define USE_MSP430G2231    1    // if use g2231, not f2012
+//#define USE_LAUNCH_PAD    1    // if use LaunchPad, swap P1.3 <-> P1.7 for button.
 
+#ifdef USE_MSP430G2231
+# include <msp430g2231.h>
+  typedef unsigned char uint8_t;
+  typedef unsigned short uint16_t;
+# ifdef __cplusplus
+#  define __READ    /* not supported */
+# else
+#  define __READ    const
+# endif
+// G2231 dosnt have CALxxx12MHZ values in InfoFlash, have only 1MHZ values.
+# define CALBC1_12MHZ    0x8E
+# define CALDCO_12MHZ    0x60
+
+#else //-USE_MSP430G2231
 #include "signal.h"
 #include <msp430x20x2.h>
 
+#endif //-USE_MSP430G2231
+
+
 #define MODE_PROBE    0
 #define MODE_SIGGEN    1
 #define MODE_PWM    2
 #define MODE_PWMHI    3
 
 #define ADC_CH        INCH_6
+#ifdef USE_LAUNCH_PAD
+#define P_BUTTON    (1<<3)
+#else //-USE_LAUNCH_PAD
 #define P_BUTTON    (1<<7)
+#endif //-USE_LAUNCH_PAD
 #define P_PROBE        (1<<6)
 #define P_LO         (1<<7)
 #define P_HI          (1<<1)
 #define P_IND         (1<<0)
+#ifdef USE_LAUNCH_PAD
+#define P_RANGE        (((0x0f<<2)&~0x08)|0x80)
+#else //-USE_LAUNCH_PAD
 #define P_RANGE        (0x0f<<2)
-
+#endif //-USE_LAUNCH_PAD
 #define P_LEDS    (P_HI|P_RANGE|P_IND)
 
 #define S_LOGIC        (1<<0)
@@ -207,6 +233,14 @@
     P2SEL = 0x00;
     P1DIR = P_LEDS;
     P2DIR = P_LO;
+#ifdef USE_MSP430G2231
+    // G2231 must be pull-up of P1.7 to USB D+ (for button)
+    // but launchPad has external-pullup.
+#ifndef USE_LAUNCH_PAD    //-USE_LAUNCH_PAD
+    P1REN=P_BUTTON;        // pull enable
+    P1OUT|=P_BUTTON;    // pull-up
+#endif //-USE_LAUNCH_PAD
+#endif //USE_MSP430G2231
     //________________ we need wdt to control led brightness
     IE1 |= WDTIE;                    // enable wdt interrupt
     _BIS_SR(GIE);                    // enable interrupt
@@ -310,7 +344,12 @@
     __bic_SR_register_on_exit(CPUOFF);    // Clear CPUOFF bit from 0(SR)
 }
 
-static uint8_t bar[] = { 0x00, 0x04, 0x0c, 0x1c, 0x3c, 0x04, 0x0c, 0x1c, 0x3c, };
+#ifdef USE_LAUNCH_PAD
+static const uint8_t bar[] = { 0x00, 0x04, 0x84, 0x94, 0xb4, 0x04, 0x84, 0x94, 0xb4, };
+#else //-USE_LAUNCH_PAD
+static const uint8_t bar[] = { 0x00, 0x04, 0x0c, 0x1c, 0x3c, 0x04, 0x0c, 0x1c, 0x3c, };
+#endif //-USE_LAUNCH_PAD
+
 //______________________________________________________________________
 #ifdef MSP430
 interrupt(WDT_VECTOR) WDT_ISR(void) {

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。