AMD E-350 + LinuxMint導入

GA-GC230を組み込んだ後、電源コネクタ抜き差しで復活したAtomマシンですが、さすがに古い12GBのHDDは遅いので3.5インチのHDDを組み込んでみました。電源投入して30分くらいは快調に動くのですが、しばらく経つとフリーズしてしまいます。で、ふとACアダプタを触ると、結構熱くなっていて、電源容量がオーバーしているのだと思われました。元の2.5インチ12GBのHDDに戻してもACアダプタはかなり暖まっています。

そういえばこのケースは初期のMiniITXマザーボード(VIAのEden搭載)を載せていたもので、当時は今日のように普通のCPUをMini-ITXに載せるなんて考えられませんでしたので電源容量が十分とは言えません。(実際、ACアダプタの出力自体が60Wしかない)

そこで、Atom230の遅さにも閉口していたところなので、「省電力PCはこう作る!省電力PC作例集(AMD CPU編)」のFusion E-350編にでてくるAMDのE-350のマザーを買ってきました。AMDのCPUはAm486DX4-100Duron 600MHz以来となります。

今回購入したマザーはMSIのE350IA-E45で1万円程度だったと思います。これにDDR3-1333のメモリ4GB×2枚が3500円くらいで、合計13500円程度です。これに手持ちの2.5inch SATA 120GB を組み合わせて組み込みました。

OSはいつものようにUbuntu10.04LTS・・・と思ったのですが、オンボードVGAのRadeon HD6310 がうまく動きませんでしたので、LinuxMint11.04にしました。(Ubuntu11.04のUnityにはどうしても馴染めないので・・・)

で、最初はFANの速度全開でかなりうるさく、失敗したかに思いました。しかし、BIOSで温度に応じてFANの速度を変える設定で目標温度65℃、その温度以下では12.5%駆動としたところ、12.5%のFAN駆動にもかかわらず、ほとんど温度も上がることもなく、安定して静かな状態になりました。また、ACアダプタの発熱もずっと小さくなりました。パフォーマンスについても全画面で動画再生などをしない限り問題は感じないレベルで、(12GBのHDDで比較しても)Atom230に比べて極めて快適になりました。これであれば、通常のWebアクセスやYouTubeの動画鑑賞にも十分使っていける感じです。

MSP430F2013のADコンバータを試す

Lチカデバッグ環境ができたところで、次に内蔵ペリフェラルを試します。

MSP430LaunchPadには、MSP430G2231が搭載されています。しかし、今回試すのはMSP430G2311ではなく、秋月で300円で売っているMSP430F2013です。なぜこのチップを選ぶかというと、他のワンチップマイコンでは10bitとか12bitがせいぜいなのですが、このチップは他のワンチップマイコンでは類を見ない16bitのシグマデルタ方式のA/Dコンバータを内蔵しています。さらに、入力は差動入力になっていて、1~32倍のプログラマブルゲインアンプ(PGA)を持っています。ですので、センサをつないだときの分解能が大幅にアップするはずです。

しかし、普通のワンチップマイコンでは10~12bitの分解能のA/Dコンバータしか搭載していないのは、CPUというデジタル回路がノイズ源になるため、高分解能のA/Dコンバータを搭載しても実力としてそれだけの分解能が得られないというところにあります。したがって、MSP430F2013のA/Dコンバータを使いこなすためには、CPUを初めとしたデジタル回路の影響を抑えることを考えなければなりません。

そういう視点で、MSP430F20xxのコードサンプル(msp430x20x3_sd16A_02.c)を眺めてみると、WDTとLPMを使ってデジタル系の動作をなるべく抑えた状態でA/D変換を行っています。

まず、WDTは32msのインターバルタイマとして使っていて、A/D変換の設定後にWDTを起動したら、LPM0に状態遷移してCPUの動作を停止させてしまいます。そして、停止中にその割り込み処理ルーチンの中でA/D変換のスタートをかけています。そうすることにより、チップ内のざわざわとした動作がA/D変換に与える影響や、A/D入力インタフェースのレベルが落ち着く前にA/D変換してしまうのを抑制しているようです。その結果として、(LaunchPad基板では)チップ内蔵温度センサやオフセット電圧の測定ではPGAのゲイン=1の状態で測定値のばらつきが1~2LSB程度に抑えることができています。(実験では、他の動作を行いながらA/D変換をさせると最大で8LSB程度暴れていました)

外部回路をつけるとその作りなどに影響されるので結果がまた変わってきますが、今度はセンサをつないでみたいと思いますが、面倒なのは外部入力インタフェースのインピーダンスがかなり低い(1kΩ程度)ようなので、バッファをつけてやらなければならないのが面倒くさいです。

 

Lチカ通信でMSP430デバッグ

MSP430の開発環境が整ったところで、デバッグ手法を考えているのですが、今回使うMSP430F2013は、ROMの容量が2KBと小さく大した手法は使えませんので、ChaNさん提案のLチカ通信にすることにしました。

今回作ったターゲットのPCとの接続部分は秋月のAE-UM232R(FT232RL USBシリアル変換モジュール)を使いました。

ターゲットとの結合部分はChaNさんの回路そのままですが、PCのRS-232Cとは論理が異なるので、インバータ(7S04)は削除しています。

センサには、秋月で150円で売っているPiNフォトダイオードS2506-02を使いました。

ターゲットボードとは以下のような感じで結合します。

この状態で、安定して38400bpsでの通信が可能です。115.2kbpsもセンサの距離を調整すれば通信できるのですが、ややシビアです。オシロで波形をみると波形の立ち上がりが鈍っているので、抵抗値をもう少し小さくすれば安定するような気がします。(面倒なのでそのままにしていますが)

また、緑のLEDが隣にありますが、PiNフォトダイオードの感度特性が波長の長い方に偏っているせいか、あまり影響は受けないようです。

Ubuntu11.10でMSP430開発環境を構築

昨日のブログに書いたのですが、Ubuntu11.10(Oneiric)ではMSP430の開発環境がサポートされていそうな雰囲気だったので、ちょっと確認してみました。

Ubuntu11.10(Oneiric)は現時点ではβ2です。ダウンロードしてきて、HDDにインストールしてみました。

まず、UIがUnityに変わっているので面食らいます。これに関しては11.04(natty)が対象ですが、こちらのサイトで(インストールの方法と)インストール直後の扱いについて確認できます。Unityで一番面食らうのが、アプリケーションの起動方法と起動した後、ツールバー(メニュー)がないことでした。アプリケーションの起動は「Dashホーム」でアプリケーションの名称を入力する(!)ことで、候補が表示されます。いったん起動した後は、「ランチャーに常に表示」を設定することで、左側のランチャーから起動できるようです。ツールバーについては、各ウインドウの上についているのではなく、アクティブになっているウインドウのツールバーが画面全体の一番上の部分に表示されています。これで最近のワイド画面液晶でも少しでも広く縦のエリアを確保しよう、ということなのでしょう。

で、こちらの検索結果からたどっていくと、universeパッケージになっているようなので、/etc/apt/source.listの中で、universeが指定されている行を見たのですが、特にコメントアウトされているところはありませんでした。すなわち、apt-get でパッケージを指定すればインストールされそうなものなのですが、実際にはインストールできません。

しかし、各ページにはdebianのパッケージ(.debファイル)がありましたので、依存関係を考えて、

  1. msp430mcu
  2. binutils-msp430
  3. mspdebug
  4. gcc-msp430
  5. msp430-libc
  6. gdb-msp430

の順で、インストールしたところ、すべてインストール自体はできました。

まず、mspdebugはroot権限では動作しました。/etc/udev/rules.d の下にスクリプトを置いて、ユーザー権限でアクセスしようとしても、パーミッションで怒られますので、何か追加の設定が必要なのでしょう。

それ以外はサンプルプログラムのコンパイル、動作確認も昨日と同様にうまくいきました。mspdebugがroot権限を要求するところだけが違いですね。

MSP430 LaunchPadの開発環境構築

たまたまWebサーフィンしていたら、MSP430のLinux開発環境について記載されているページがあったので、追試を兼ねて環境構築してみることにしました。

内容物はこれ。エミュレータ機能付きのターゲットボード(MSP430G2231付き)と、予備?のMSP430G2231、32.768kHzのクリスタル、いかにもブレッドボードにつないでください、という感じのヘッダソケット、シールです。

で、今回の情報元はここです。詳しくは直接情報元を参照してもらうとして、Ubuntu10.04LTSで追試した際の手順だけ記載します。赤字で書いた部分がオリジナルとの差分です。おそらく、オリジナルの環境では texinfo がインストールされていたのでしょう。

1) subversionのインストール
・・・・すでに入ってました。

2) texinfoのインストール

$ sudo apt-get install makeinfo

で texinfo をインストールします。そうしないと途中で「makeinfoがない」と怒られて終了します。

3) 作業用ディレクトリを作る

$ cd ~
$ mkdir mspwork
$ cd mspwork

4) ソースの入手

$ svn co https://mspgcc4.svn.sourceforge.net/svnroot/mspgcc4 mspgcc4

5) コンパイル

$ sudo ./buildgcc.sh

を実行すると、構築するツールのバージョンやディレクトリをいくつか聞いてきます。Insightはwgetでダウンロードするところで 404 Not Found で引っかかるので、InsightとGDBは構築しないことにして、それ以外は今回はすべてデフォルトにしました。
最後に、「今構築するか?」と聞いてくるので、そこだけ「今構築する」に変更しました。そうすると、勝手に binutils や gcc のソースなどをダウンロードして構築してくれます。

6) パスの修正

パスに「/opt/msp430-gcc-4.4.3/bin」を追加します。具体的には、.bashrc の最後の行に、

PATH=$PATH:/opt/msp430-gcc-4.4.3/bin

を追加します。

7) mspdebugを書き込みツールとしてインストール

ソースコードを mspdebug の sourceforge のページからダウンロードしてきて、コンパイルする。(ubuntuはパッケージがあるようなことが書いてあるが、実際にはない *後述)

$ tar xvfz mspdebug-0.17.tar.gz
$ cd mspdebug-0.17
$ make WITHOUT_READLINE=1
$ sudo make install

8) LanuchPadのパーミッション変更

ルート権限で以下の内容のファイルを /etc/udev/rules.d/z99_msp430launchpad.rules として作成します。

ATTRS{idVendor}=="0451", ATTRS{idProduct}=="f432", MODE="0666", GROUP="plugdev"

その後、

$ sudo /etc/init.d/udev reload

として設定を有効にします。

9) LaunchPadの動作確認

LaunchPadを接続して動作確認します。開封直後の状態で接続すると、2つのLEDが交互に点滅します。

この状態で「mspdebug –usb-list」でデバイス一覧が表示されるのを確認しました。(マニュアルはこっちを参照)

$ mspdebug --usb-list
Devices on bus 005:
    005:001 1d6b:0001
Devices on bus 004:
    004:001 1d6b:0001
Devices on bus 003:
    003:001 1d6b:0001
Devices on bus 002:
    002:002 0451:f432 eZ430-RF2500 [serial: E3FF4225A511471A]
    002:001 1d6b:0001
Devices on bus 001:
    001:002 13fd:1040
    001:001 1d6b:0002

となるので、eZ430-RF2500として認識していることがわかります。

そこで、「$ mspdebug rf2500」とするとLEDの点滅が止まり、以下の表示がされてコマンド入力待ちになります。

$ mspdebug rf2500
MSPDebug version 0.17 - debugging tool for MSP430 MCUs
Copyright (C) 2009-2011 Daniel Beer <dlbeer@gmail.com>
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Trying to open interface 1 on 002
Initializing FET...
FET protocol version is 30001000
Configured for Spy-Bi-Wire
Set Vcc: 3000 mV
Device ID: 0xf201
Device: MSP430G2231
Code memory starts at 0xf800
Number of breakpoints: 1
fet: FET returned NAK
fet: warning: message 0x30 failed

Available commands:
    =         delbreak  gdb       load      opt       reset     simio
    alias     dis       help      locka     prog      run       step
    break     erase     hexout    md        read      set       sym
    cgraph    exit      isearch   mw        regs      setbreak  

Available options:
    color           gdb_loop        iradix
    fet_block_size  gdbc_xfer_size  quiet           

Type "help <topic>" for more information.
Press Ctrl+D to quit.

(mspdebug)

この状態で「run」コマンドを実行すると再びLEDの点滅が始まり、CTRL+C でブレークをかけることができました。

また、「hexout 0xf800 0x800 original.hex」で元々書き込まれていたプログラムを読み出して HEX ファイルに格納できました。続けて「erase」でflashの消去、「prog original.hex」で再プログラミング、「run」で点滅を再現させることができました。

10) コンパイルと実行の確認

参考にさせていただいたこちらのページのまんまで完全に動作しました。

 

ということで、最低限の環境構築ができました。できれば gdb と Insight も動かしたいところですが、とりあえずはここまでということで。

あと、launchpad.net(こっちは Canonicalが管理している方です)のこちらのページこちらのページを見ると、どうもubuntuの11.04(natty)や11.10(oneiric)ではMSP430開発環境がパッケージでサポートされているっぽい感じです。時間があれば確認してみたいと思います。

いろいろ整理(4)V-USBのeasylogger

V-USBというソフトウェアだけでUSBを実現してしまおうという大胆なプロジェクトを追試したものです。V-USBの凄いのは、ATTINYのわずかなROM容量で、しかも内蔵RCオシレータでUSB(LowSpeed)の通信を実現してしまうところです。

その中のeasyloggerを実際に作ってみたものがこれです。

わずかこれだけの部品でPCからはキーボードに見える。タクトスイッチがスタート/ストップになっていて、1秒周期で2ピンの電圧をキー入力してリターンを押す動作を繰り返してくれるので、適当なテキストエディタやExcelを開いておくと勝手にログファイルが生成されるというものです。

写真では適当なCDSをつけてあるので、明るさに応じた値が出力されることになります。

ちなみに半田面はエポキシ接着剤を盛って固めてあります。しかし、経年変化で色が変わってしまっています。

当時に比べると、V-USBの製作例がずいぶん増えています。今度じっくり見てみたいと思います。

 

 

いろいろ整理(3)たぶんusbaspだと思う

もう忘れてしまいました。たぶんusbaspの一種だと思います。最近のものはUSBの信号レベルをツェナーダイオードでコントロールしているケースが多いようですが、こいつはずいぶん古いのでまじめに3.3Vのレギュレータを搭載しています。

Linuxで動くのかどうかわかりませんが、機会があったら試してみたいと思います。

いろいろ整理(2)MINI-EZUSB+AVR ISPライター

AVRを使い始めた初期の頃に使っていたMINI-EZUSBAVR ISPライターの組み合わせです。Cygwin環境でavr-gccを使っていた頃には大変重宝しました。考えてみれば、AVRに嵌ったのもこいつからだったりします。USBでターゲットに対して電源供給ができるので非常に便利だったことを覚えています。

ただ、いつの頃からかメインの環境がWindowsからUbuntuに移ってからはほとんど使うことがなくなってしまいました。また、現在では秋月でAVRISP mkIIが入手できますので、ターゲットに対する電源供給を除くと、この組み合わせのメリットはほとんどなくなっています。

 

いろいろ整理(1)AVR-MOD-AT162

片付けをしていたらいろいろ出てきたので、メモを兼ねてブログに書いておきたいと思います。

今回は1回目で、出物はマイクロファンさんのAVRーMODーAT162です。このボードはUSBコントローラを内蔵したAT90USB162を搭載していてブートローダも書き込まれた状態なので、FLIPという書き込みツールを使うことで書き込み治具(ハードウェア)なしでプログラムのダウンロードが可能です。このFLIPはVer3からLinuxにも対応しているようですので、できれば復活させて使いたいところです。

 

PCの組み換え

やっと雑用をこなすCore2Quadマシン(Core2Quad Q6600 + Intel DG33BU)の作業環境をCore-i3マシンに移したので、ちょっとCore2Quadマシンをいじり倒してみました。

このマシンで困っていたのは、

  • 電源投入からBIOS画面表示が異常に長い場合がある
  • シャットダウンがうまく行く場合でも、画面が真っ暗になってから電源断まで2分くらいかかる

といったことでした。

で、元々クリーンインストールをしようと思っていたのですが、別のHDDにWindowsXP ServicePack3をクリーンインストールしてみましたが現象が変わりません。

最初はAHCIをイネーブルにしてAHCIモードでインストールしようとしたのですが、シャットダウン時に電源が切れなくなりました。それどころか、Ubuntuでも同じ症状が出ることがわかりました。つまり、原因はソフトウェアではないわけです。

マザーボード(DG33BU)について調べてみると、「USB2.0ドライバをインストールすると電源が切れなくなる場合がある。その場合はSATAのモードをLegacyに変更してくれ。」というようなことが書いてありますorz。事実上、「AHCI使えません」って言ってるようなものですが・・・。

しかし、SATAをLegacyに変更しても直りません。CMOSをクリアしても、BIOSをUpdateしても、Memtestをかけても現象は変わりません。もう、原因はCPUかマザーボード(か電源)しかありません。が、雰囲気的にはマザーボードがおかしいようにしか思えません。(ググってみても、DG33BUはあまりいい話はでてこない)

多少時間が経ったとはいえ、Core2Quad Q6600 は十分な戦力ですので、捨ててしまうには惜しいです。かといって、いまからLGA775のマザーボードを調達するのもなんだか馬鹿馬鹿しいですし。

そこでもう1台のオンライントレード用のCore2Duo E7400+GIGABYTE GA-G31M-ES2LマシンとCPUを交換してみることにしました。こちらもG31マザーではあるものの、メモリスロットが2本しかなく4GBしか搭載できませんが、それでもCore2Quad Q6600の性能は捨てがたいので組み替えてみました。

このE7400マシンは200Wの電源しか積んでいないので、とてもCore2Quad Q6600の95~105WのTDPには耐えられそうもありません。よって、マザーボードの方をスワップする作業になってしまいました。

変更後のCore2Quad Q6600マシン

変更後のCore2Duo E7400マシン

  • CPU Core2Duo E7400(2.8GHz×2、VT無効、65W)
  • マザー Intel DG33BU
  • メモリ DDR2-800 2GB×4枚
  • VGA Radeon HD4350
  • 電源 200W SFX

ビデオカードも一緒に移せればよかったのですが、残念ながら片方はLowProfileのスロットなので、移植できませんでした。

で、動作確認をしながら一晩かかって組み替え作業をやった結果、BIOS表示が遅かったり、電源断が遅い/できない現象はやはりマザーボードについて回りました。

その作業の中でわかったのですが、後者の200WSFX電源のケースは、電源FANが軸受けの劣化からか異音がでていたり、ケースFANが回らなかったりしていました。まあ、10年くらい使っているので仕方ないですが。もし手持ちで80mm角のファンがあれば交換してしまうところですが、後からだとFAN2個交換も面倒(しかも片方は電源ユニット内)ですし、このケースは縦置きできないくらい幅が大きいデスクトップケースで邪魔ですし、マザーボードも微妙な状態なので、それぞれのマシンの役割を考えながら、処分を含めて対処を考えたいと思います。処分はそれはそれで面倒なのですが、ただ、安い小型のケース+下位のPentiumGシリーズに置き換えてしまった方が、メンテナンスが楽で速いマシンになりかねないので・・・。