« 2013年1月 | トップページ | 2013年3月 »

2013.02.26

新しい物件を探す

昨年の11月に「3か月以内に今のテナントを出ます」って不動産屋にFAXしてたので、本当は今月中に出なければならなかったのです。

しかし、探してもいい物件が見つからなかったし、忙しくてあまり深く探す余裕もなかったし、さらに今のビルはすでに30%くらいが空き部屋になっているので、不動産屋も出てほしくなさそうでした。「やっぱり出るのやめま~すbleah」って言ったら快く退去をキャンセルしてくれました。

でもやはり、JR東北縦貫線工事が町全体に暗い影を落としていて、建物自体も風水的によくない上に築40年を迎えるので、いよいよ出ることにしました。部屋の中に風水グッズをいくら置いても、家具の配置をいくら工夫しても、もう限界です。

先週の土曜日から、新しい事務所の物件探しをはじめました。

すぐに見つかりました。

見つけた物件はこんな感じです。

Bukken


JR秋葉原・地下鉄岩本町駅から400mくらい離れているので、徒歩5分と少し遠い(!?)のですが、南側が神田川なのでとても日当たりは良いです。春には桜の花びらが川を流れてくるそうです。神田川が意外と広いので驚きました。
※今のオフィスは岩本町徒歩2分なので少し遠く感じる。慣れと怠けは恐ろしい。

2004年築なので9年目、まだピカピカです。部屋の入口は指紋認証です。前に入居していたテナントさんは会社を大きくして出て行かれたとのことで、条件もそろっています。このビルの他のテナントさんもみな堅気の商売をされているようです。

文句なしの条件ですが、風水的にはどうなのか、これから考えてみます。

| | コメント (2)

2013.02.20

RX-DIPのJTAG機能を試す

DIP20ピンサイズのRXマイコンボード「RX-DIP」にはJTAG用の端子が備わっています。

Rxdip_pinout

これらの端子を使うと、E1エミュレータをつないでデバッグしたり、MITOUJTAGをつないで端子の状態をモニタすることができるはずです。

ただ、貴重なI/Oをデバッグ専用にしてしまうのは勿体ないので、JTAGとSPIポートを切り替えられるようにしました。

JTAGモードにするには、裏面のしかるべき場所からジャンパ線を出してVCCにつなぎます。

Rxdipjtagpoint

赤丸の部分(BSの線が延びている先)をVCCにつなぐとバウンダリスキャンが可能になり、緑色の部分(EMの線が延びている先)をVCCにつなぐとエミュレータが使用可能になるようになっています。

そしてE1エミュレータをつないでみますと・・・

Rxdipe1_2

ちゃんとHEW上でデバッグができました。

Rxdiphew

つぎに、BSCANPをイネーブルにして、MITOUJTAGをつないでみます。

すると、BGAの端子が可視化できました。

Rxdipbscan

基板上ので隠れてしまっていてどこにもつながっていない端子も、バウンダリスキャンでなら見ることができます。例えば、PD7~PD0やPB7~PB0のI/Oにデバッグしたい変数の値を出力しておいて、それをロジアナモードで見ることでリアルタイムに観察するという使い方もできるでしょう。

Rxdiplogana

超小型のRXマイコン基板に可能性を感じた方は、メールなりブログのコメントなどをいただければ嬉しいです。

今のところ一般向けの販売予定はありませんが、これで何か面白いものを作ってみたいという方には格安でお譲りしようかと考えています。

| | コメント (5)

RX-DIPでフラクタル描画

DIP20ピンサイズのRXマイコンボード「RX-DIP」で、マルツさんのOLEDにフラクタルを描画してみました。

Rxdipfractal

SPI通信で接続します。

SPIのCLK、CS、MOSIと、リセット、VCCONの5本の線を接続するだけでOKです。あとOLED基板は3.3Vと5Vの電源が必要ですが、5VはOLED用の高電圧を使うために使うので、実際には3.3Vくらいからでも動くようです。

RXマイコンはFPU内蔵だし96MHzで動作するので、とても速いです。

PI○とかA○RとかCorte○-M○にはこの速度は出せないと思います。

是非、動画でもご覧ください。

| | コメント (0)

2013.02.18

風水師に鑑定をしてもらった

先週末、風水師の人に来てもらって、特電のオフィスを鑑定してもらいました。

というのも、このエクセル神田というビルから引っ越すかどうかを決めかねていたからなのですが、ようやく決心がつきました。

引っ越します。

weep

1~2年ほど前から、神田の街がどんどん寂れてきました。おいしい店が消え、会社はどんどん移転し、空き地は放置され、新しい企業は全然来ません。

特電の所在する神田東松下町だけではなく、JRの線路の付近から、東側全体がそうなっています。(おそらく首都高は何かの防波堤になっている)

Kanda_destroyed

この街がどんどん廃墟化していく原因は、間違いなくJRの東北縦貫線の工事でしょう。大きな工事というのは、周囲に悪い気を相当ばらまくそうです。

新幹線の線路の高さがだいたいビルの4階くらい。そして、緑色の建設機械がビルの8階くらい。クレーンの先はおそらく16階くらいの高さがあります。

Jr_kouji

写真に撮ると縦が収まりきれませんが、実際にものすごい圧迫感です。巨大な建設機械が南から北へと少しずつ動くのに合わせて、街が徐々に廃墟になっていきます。これだけの規模の工事を数年つづけたら、街は簡単に破壊されてしまうでしょう。

現に、この界隈で1階で営業している会社はほとんどありません。みんなシャッターです。ほとんどのビルには「テナント募集」が貼ってあって、すさまじいスラム感です。

特電も、この街から引っ越すことにします。

rvcardashdashdash

で、鑑定してもらった結果ですが、風水というのは建物のまず外側を見てから、内側を見るということでした。

部屋の中は現状でもなかなか良いそうです。掃除をしたり物を捨てるだけでも相当な開運効果はあるようで、昨年末から必死に物を捨ててきたことが功を奏したようです。

今よりさらに運を良くするには、

・JR東北縦貫工事からの影響を防ぐために、トラ技の詰まった本棚を移動させて工事の方向に壁をつくる
・植物の配置を変える
・私の座る位置を変える
・山に見立てた家具の配置を作り、河の代わりになる空気洗浄機を置く

といったアドバイスをしてくれました。ただ、建物の外が悪いのを無理やり中で頑張って持ちあげているような感じなので、どうしても限界があるそうです。やっぱり引っ越しをしなければなりません。

その方の著書は、巒頭(らんとう)の説明からはじまって、陰陽五行や三元九運など、風水師の元ネタを惜しげもなく書いてくれています。巷の風水本には「西に黄色を置きましょう」とか「今年のラッキーな方位は」みたいな結果しか書いていないのに対して、20年ごとに変化する計算方法をすべて書いてくれているので、他の風水師から狙われるのではと心配になってしまうほどでした。

本を読めば、今年の運勢はどうなるかを自分で計算することもできます。私もやりかたを理解できました。でもやっぱり本には書けないこともあるそうで、人に聞くのが一番です。

Gogyou

怪しげな風水グッズを買う必要はなく、鉄アレイとか、水槽とか、金庫とか、そういう身近なもので改善ができることを教えてくれました。台湾や香港では数百円で立派な風水グッズが売っているそうなので、逆に日本で数千円以上するような風水グッズは怪しいそうです。

とにかく、今のオフィスのパワーを高めて、早く出られるようにしなければなりません。

| | コメント (0)

2013.02.14

DIP20ピンサイズのRXマイコン基板が動いた!

本日、実装屋さんからDIP20ピンサイズのRXマイコン基板「RX-DIP」が3枚あがってきました。

Rxdip_20130214

さっそく、ピンヘッダを取り付けて実験開始です。

Rxdip_20130214_2 Rxdip_20130214_3

万能基板上にのせて、USBコネクタとスイッチを取り付ければUSB経由で書き込みができます。

Rxdip_prog

書き込みプログラムは、ルネサスのFDTなどの純正プログラムツールのほか、特電のRXPROGも使えます。

Rxdip_prog2

USBなのでとても速く、2秒くらいでできます。

プログラムの作成にはRXduinoが使えるので、USB仮想COMポートも使えます。簡易モニタを入れてメモリダンプをしてみます。

Rxdip_monitor

RX621ですが、ネットワーク機能がないという以外はRX62Nと同じです。

そして、簡単なプログラムを組んで、LEDチカチカをしてみました。

いかがでしょう。紫色のこの極小・高性能マイコン基板。

これから内蔵ADコンバータやDAコンバータ、SDカードのアクセス、LCDへの描画、JTAGなどを試してみようと思います。

| | コメント (0)

EZ-USB FX3のCyAPIをBorland C++ Builderで開発する

EZ-USB FX3のパソコン側のコントロールソフトはCyAPI.dllを使って制御するのが一般的ですがこのCyAPI.dllは、どうやら古いBorland C++ Builder 2006では使えないようなのです。depwalkerで見ると、何もエクスポートしている関数がありません。これが噂の.NETのクラスライブラリというものなのかもしれません。

Cyusb_dep

Visual Studio 2010では開発できても、使い慣れたBorland C++ Builder 2006で開発できないのは不便です。そこで、CyAPI.dllを普通のWindowsのネイティブDLLにラッパするためのDLLをVisual Studio 2010で作ることにしました。

Visual Studio 2010で普通にDLLを作るのですが、プロジェクトにCyAPI.h、CyApi.lib、cyioctl.h、CyUSB30_def.h、setupapi.lib、usb100.h、usb200.h、UsbdStatus.hを追加しておきます。これらのファイルはEZ-USB FX3 SDKの中にあります。setupapi.libだけはWindows DDKの中から持ってきます。

プロジェクトはこんな感じ。CyAPI.hとcyioctl.hをインクルードして、CyApi.libとsetupapi.libを追加すればビルドは通ります。

Cyusb_dll

ヘッダファイルには次の関数を定義しておきます。

extern "C" {
TXUSBFX3_API bool  TKUSBFX3Open(int num,unsigned short *vid,unsigned short *pid,char *DeviceName,int MaxDevnameLength);
TXUSBFX3_API void  TKUSBFX3Close(void);
TXUSBFX3_API int   TKUSBFX3DeviceCount(void);
TXUSBFX3_API bool  TKUSBFX3WriteToRAM(const char *ImageFileName,char *ErrorReason, int ErrorReasonLength);
TXUSBFX3_API bool  TKUSBFX3WriteToSPIROM(const char *ImageFileName,char *ErrorReason, int ErrorReasonLength);
TXUSBFX3_API int   TKUSBFX3BulkOut(int ep,unsigned char *data,int length);
TXUSBFX3_API int   TKUSBFX3BulkIn(int ep,unsigned char *data,int length);
}

これで普通にプロジェクトが出来て関数がEXPORTできますが、VCで開発したDLLをBCCで使うには、BCCでimplibをしなければなりません。VCのプロジェクトのプロパティで、ビルド後イベントに、

"C:\Program Files\Borland\CBuilder6\Bin\implib.exe" -a "$(OutDir)$(TargetName).lib" "$(OutDir)$(TargetName).dll"

と書いておけば、自動的にBorlandC++用のlibに変換されるので便利です。

Fx3_bcc_3

こうして、CyAPIをBorland C++ Builderで使うことができるようになりました。

Fx3_bcc_dev

デバイスのOpen、Close、BulkIn、BulkOutはもちろん、EZ-USB FX3の内蔵RAMへのファームウェアダウンロードや、SPI ROMへのファームウェア書き込みにも対応しました。

速度は今のところ110MByte/secくらいです。前回の高速化実験ではデータバス16bit接続の場合でも130MB/secくらいはでていましたので、それよりは遅めです。

マネージドなDLLを呼び出しているところで少しオーバーヘッドが生じてしまったのかもしれません。

| | コメント (2)

2013.02.13

特電FX3ボードの設計データを更新しました

特電FX3ボードの設計データを更新しました。

設計データは、こちらのページからダウンロードできます。

今回の更新点は、

  • SlaveFIFOのサンプルプログラムのVID・PIDを修正した
  • x86版とx64版の両方のデバイスドライバを用意し、署名を施した。FX3がデフォルトで変化する変則的なPID(1480:0000や04B4:00F0~04B4:00F3)も網羅した。Cypressのデバイスドライバで認識されない場合もこれでOK!happy01
  • GPIOのサンプルプログラムが正しくビルドできるようにした。また、I/O高速化のサンプル記述をコメント欄に盛り込んだ。
  • UARTのサンプルプログラムが正しくビルドできるようにした。
  • I2Cのサンプルプログラムが正しくビルドできるようになり、読み書きともに正常に動作するようにした。

です。

FX3ボードの主たるサンプルプログラムであるSlaveFIFOに関しては大きな変更はされていませんが、Eclipse上でビルド環境の整理や、周辺I/O機能の使い方を更新しました。

| | コメント (0)

2013.02.12

EZ-USB FX3のI2C ROMにアクセス

今日は、EZ-USB FX3のI2C ROMの読み書き実験を行いました。

半年くらい前に実験したときにはI2Cで接続したROMにWriteはできるけれども、Readはできないという謎の現象に悩まされてきました。

EZ-USB FX3のSDKを最近出たV1.2にアップデートしたところ、この問題が解決されていることが確認できました。

Fx3i2c

I2Cに512バイトの乱数をWriteしてReadして照合するというものですが、わかりやすいように、その経過をUART経由で出力するようにしました。

特電のEZ-USB FX3評価ボードでは、UARTを使うにはSPI-UART切り替えジャンパをUART側に切り替えます。パソコンとはRS232Cのストレートケーブルで接続します。

ソフトウェア的には、CyU3PDebugPrintという関数を使うと、printfデバッグのようなものが使えるようになります。

しかし、CyU3PDebugPrintを使うと謎のデータ列がくっついてきます。そのため、TeraTermにデータを出力すると、■■と表示されたりします。この■の部分はFF FFになっていたり、ゴミデータが出たりします。CyU3PDebugPrintは、ゴミがついてきます。

Fx3i2c2

CyU3PDebugPrintはなかなかデバッグに使えそうです。

◆追記

APIマニュアルを読んだところ、CyU3PDebugPrintにゴミデータがつくのは、preample dataというらしいです。然るべき方法でデコードすれば便利だと書かれていました。

この動作は、CyU3PDebugPreamble(CyFalse);で無効にできます。preampleの追加を無効にしたら、TeraTermでこのように綺麗に表示されるようになりました。

Fx3i2c3

このCyU3PDebugPrintは%c,%d,%u,%xと%sが使えるので、相当便利です。

| | コメント (0)

2013.02.11

EZ-USB FX3のGPIOを高速化する

EZ-USB FX3のデータバスや様々な端子はGPIOとして使えるわけなのですが、このGPIOの実力はどの程度でしょうか?

Gpio_test

FX3のGPIOにはSimpleモードとComplexモードというのがあるようで、単純なGPIOとして使うにはSimpleモードにします。

まずCyU3PGpioSetSimpleConfig()関数を使ってそのモードを設定します。

CyU3PGpioSimpleConfig_t gpioConfig;
gpioConfig.outValue = CyFalse;
gpioConfig.driveLowEn = CyTrue;
gpioConfig.driveHighEn = CyTrue;
gpioConfig.inputEn = CyFalse;
gpioConfig.intrMode = CY_U3P_GPIO_NO_INTR;
CyU3PGpioSetSimpleConfig(ポート番号, &gpioConfig);

こんな感じで、そのポートのドライバの有効無効や、入力の有効無効、割り込みの有無などを設定します。ポート番号は0~56です。

そうしたら、

CyU3PGpioSimpleSetValue (ポート番号, CyTrue);

CyU3PGpioSimpleSetValue (ポート番号, CyFalse);

で1→0が出力されます。

ただ、この方法だと遅いのです。GPIOのシンプルなポート出力用APIにはCyU3PGpioSetValue()とCyU3PGpioSimpleSetValue()という関数がありますが、どちらも遅い

実際にやってみた波形をご覧ください。これはCyU3PGpioSimpleSetValue()をwhile文のループでぐるぐる回したときの波形です。

Gpio_simple

なんと、CyU3PGpioSimpleSetValue()の中で1.3μ秒も費やしているのです。だから、このAPIを使ってカチカチやると、340kHzくらいまでしか出ません。CyU3PGpioSetValue()なんて使った日には240kHzまでしか出ませんでした。

遅い、とにかく遅すぎる。angry

そういうわけで、このAPIの中身を解析したのが、前回の記事http://nahitafu.cocolog-nifty.com/nahitafu/2012/03/ez-usb-fx3gpio-.htmlでした。

前回の記事ではAPIの中身を逆アセンブルして晒していたわけですが、[0xe0001100 + 4*GPIO番号]番地が、GPIOのポートのアドレスだろうと推測していました。

では、直接、0xe00011000番地に出力したい値を書き込んでやりましょう。最初に考えたのがこんなプログラム。これをGpioOutputThread_Entry()の中に書いてやります。

unsigned long *d = (unsigned long *)0xe0001100;
while(1){
  *d = 0x1;
  *d = 0x0;
}

しかし、これはダメでした。ポートから何も出てきません。最下位ビットが出力値なのでしょうが、上のほうのビットもいろいろ使われているようなのです。そこで、1ビットずつつぶさに機能を調べました。

その結果、わかってきたのは、

  • bit0 outValue;
  • bit4 driveLowEn;
  • bit5 driveHighEn
  • bit6 速度が下がる?
  • bit7 速度が下がる?
  • bit28 常に0にすること
  • bit31 常に1にすること

という関係です。

*d = 0x800000f1;
*d = 0x800000f0;

にしてループを回すと、

Gpio_direct

やった!3.2MHz出た。API経由で叩いていたときの10倍の速度です。

面白いのはbit4とbit5。どうやらFX3の出力ドライバは、上側と下側で別々にイネーブルできるようです。だから、これを片方だけ0にすると、

Gpio_upper_2

こんないびつな波形が出るようになります。

謎なのはbit6とbit7。これを0にするとさらに速くなります。だいたい180nsで1周期なので5MHz超の速度が出ます。ちょっと立下りが「ぶれ」ていますが、約10nsの「ぶれ」がありました。この10nsの「ぶれ」はおそらくシステムクロック416MHzの4分の1ではないかと思います。

Gpio_fastest

やっていいのか悪いのかはわかりませんが、結論を言うと、

  • 直接I/Oをたたくには、0xe0001100 + ポート番号*4番地にアクセスする。
  • Hを出力したいときには0x800000f1を書く。Lを出力したいときには0x800000f0を書く。

ということでした。ポートを直叩きすることでGPIOを高速化することができました。
これで、オンチップのUSB3.0-JTAGが作れるぞっ!

| | コメント (0)

2013.02.07

RX-DIPの基板が出来上がった!

今日、DIP20ピンサイズのRXマイコンボード「RX-DIP」の基板が届きました。

Rxdip_pcb1

こんな感じで、DIP20ピンの形状です。最初は試作なので12面付けで作ってみました。

Rxdip_pcb2

ぎりぎりだけど、ちゃんと連結ソケットの間に入ることも確かめられました。

Rxdip_pcb3

紫色のレジストに金フラッシュ。なんて高貴な色でしょう。

冠位十二階では最上級の色です。
いや、ヤ○ザっぽい色といわれるかもしれませんね。

そんなRX-DIPですが、早速実装を開始します。来週早々には動かしてみることができると思います。

| | コメント (0)

2013.02.02

Spartan-6にA/Dコンバータを接続

特電Spartan-6ボードが計測・制御用に使いやすくなるようにA/D・D/A拡張ボードを計画しています。

いろいろと手ごろなA/Dコンバータを調べていて、目に飛び込んできたのが、AnalogDevices社のPulSARシリーズ。さっそく、AD7689という8chの16bit品を使ってみました。

このADコンバータは、こんな構造をしています。

Ad7689_sch

逐次比較とか二重積分とかΔΣとかではなく、こんな感じでスイッチドキャパシタが並んでいる構造です。そして、これらのコンデンサをカチカチしながら比較することでA/D変換をするというものです。うーん、なんともAnalogDevices社らしきA/D変換器。

ですが、この構造がドハマリでした。A/Dコンバータの前にはOPアンプを置くのがふつうですが、この変換用コンデンサ(トータルで27pFくらいあるらしい)に充電するときに、アナログ入力端子から比較的大きな電流が流れ込みます。その電流を流すためにOPアンプが頑張るわけですが、20年くらい前からある(秋葉原で買えるような定番の)古いタイプのOPアンプだと十分な勢いで流し込めないばかりか、発振してしまうのです。

このA/Dコンバータに正しい電圧を与えるには、ADA4841とかAD8608とか、比較的最近のOPアンプをつかわなければならないのです。

また、電源の変動にもとても敏感なようです。

実際に試作ボードを作ってみて変換した結果がこのとおり。アナログ電源には7805を使っています。アナログ入力は半固定抵抗をつないで指でぐりぐり回しています。

FPGAがとりこんだA/D変換値は、FPGAの未使用ピンに出して、MITOUJTAGを使ってバウンダリスキャンで観察しています。MITOUJTAGを使えば、端子の状態が波形として見えるので、波形表示アプリをつくらなくてもFPGAの端子に出すだけでグラフとしてみることができるのは便利です。

Reg7805_1

で、全体の16bitの波形をアナログ的に表したのが上の緑色の波形。下の激しく変動しているのは下位4bitだけを表示しています。

半固定抵抗を固定させて、下位4bitの動きだけみてみると、何も指を触れなければ±3くらいの範囲で揺れていることがわかります。

Reg7805_2

つまり、12bitは確実にクリアできていて、13bitくらいの精度といえます。16bitのA/D変換では1LSBが62μVです。変換値の変動は0.5mV以内ということです。

ただ、AD7689のデータシートをみると±2くらいには収まるはずなので、もっと精度は出るはずです。

Ad7682_7689_hist


そこで、本当にそんな精度が出るのかと思い、AD7689の純正評価ボードを購入していろいろ実験してみました。下の写真は評価ボードとSpartan-6ボードをつないだところの写真です。SPI接続で4本の線でつないでいます。

Ad7689spartan6_2

この評価ボードは、電源6Vを入力して、ボード上のSW電源で6V→5Vに落とし、さらにアイソレートスイッチング電源が乗っていて、絶縁されたディジタル電源とアナログ電源を供給するようになっています。さらに、ディジタルのラインもアイソレートされています。

なるほど。このようにして、電源の変動やノイズからアナログ系を守るわけですね。
コイルやコンデンサだけのフィルタでは不十分だということがわかりました。

この評価ボード、デジタル信号もアイソレートされているのですが、そこが曲者でした。25MHzまでの信号は通ることになっているのですが、実際には25MHzは通りませんでした。それに、AD7689は内部リファレンスを使うようにすると、バグっているような動作をすることがあります。

いろいろな紆余曲折を経て、だんだんきれいな波形が取れるようになってきました。半固定抵抗を止めると、下位4bitの変動は4以内に収まるので、14bitくらいの精度は得られていると思われます。全体的にドリフトしているのは半固定抵抗の発熱によるものです。

Ad7689_kiku6v_sw

やはり、どのような電源を使うかが非常に効いてきます。評価ボード上で2段階のSW電源を入れているのに、大元の電源の品質に相当影響されます。

結局のところ、ベストな波形はつぎのとおり。変動は±2くらいの範囲に収まっています。

Ad7689_best

ようやく16bitのA/Dコンバータらしくなってきました。

この1週間、実験をしていてわかったことをまとめると、

 ・13bitの精度までは簡単にいく。そこから先が大変。
 ・プリアンプには推奨された最新のOPアンプを使うこと
 ・A/Dコンバータのリファレンス電圧は外部VREF ICを使うこと
 ・電源電圧の変動には非常に敏感。絶縁SW電源で分離すること

そのほか、AD7689の評価ボードの部品をつけたりはずしたり取り換えたりして、いろいろなコツをつかみました。というわけで、特電オリジナルなA/D変換ボードを作ろうと思います。

電源が非常に重要なので、絶縁SW電源で分離したあと、コイルやコンデンサを経て、さらにローノイズのリニア電源を通そうかなと思います。

| | コメント (5)

« 2013年1月 | トップページ | 2013年3月 »