« 2011年5月 | トップページ | 2011年7月 »

2011.06.30

RX拡張基板ができました

長年あたためていたInterface誌付録基板用RX拡張基板が、ついにできました。

Rxmega_1_2

(LEDとかコンデンサとか、若干未実装の部品がありますが、明日、乗せることにします。)

この上にInterface誌の付録基板を乗せるとこんな感じです。
Rxmega_2

全部のせてコネクタにケーブルをつないで、Arduinoシールドまでつなぐと、最終形態に変身です
Rxmega_3

こいつらが全部連携して動いたら、いったいどんなシステムになるのでしょうか!?

さて、これから各ペリフェラルを動作チェックします。
昔作った簡易モニタが動いたので、ちょっとは気が楽です。

Rxmega_4

ただ、SDRAMの構成が変わっているので、そのままではメモリテストが通りませんでしたので、またいろいろデータシートを読まなければなりません。今夜も徹夜かな。

デバッグの経過はtwitterでつぶやいていこうと思います。

| | コメント (0)

RX拡張ボードの基板が届いた

RX拡張ボードの基板が届きました。
Rxmega_1

これから実装します。

今回は最初の1枚の試作を、実装屋さんに出さなくても良いよう、BGAとかQFNのパッケージの部品を使わずに作りました。早ければ今日中に動作確認ができるでしょう。

| | コメント (0)

2011.06.29

特電SP6ボードで、AXI4のMicroBlazeを動かす

昨日はXILINXのセミナーに行って、MicroBlazeのことをいろいろ勉強してきたので、AXI4で組んだMicroBlazeを動かしてみました。

ターゲットは特電Spartan-6評価ボードです。
※名刺サイズでUSB-JTAG搭載のSpartan-6ボード

まずはシンプルな設計を試そうと思い、EDK13.1のAXI4で、UARTとGPIOだけを実装しました。

Sp6axi

しかし、うまく動きません。

いろいろな組み合わせを試しているうちに、ISE12.4 PLB・・○、ISE12.4 AXI4・・×、ISE13.1 PLB・・○、ISE13.1 AXI4・・×という結果がわかりました。つまり、AXI4のプロジェクトを作成したときに何かが間違っているのだろう・・と。

AXI4でプロジェクトを作ると、クロックがCLK_PとCLK_Nというのが作られます。どうやらAXI4のプロジェクトは、差動クロックを前提としているのでしょうか?
このCLK_Nには、外部クロック入力をFPGA内で反転させたものを与えてやると、エラーが出ます。MicroBlazeのデザインの中にIBUGDSが含まれているようで、このCLK_PとCLK_Nには外部からの信号をつないでやらないといけないのです。

ISE13.1でも、PLBで設計したときはMHSファイルが


PORT fpga_0_clk_1_sys_clk_pin = CLK_S, DIR = I, SIGIS = CLK, CLK_FREQ = 50000000

となりますが、AXI4で設計するとMHSファイルが

PORT CLK_P = CLK, DIR = I, DIFFERENTIAL_POLARITY = P, SIGIS = CLK, CLK_FREQ = 50000000
PORT CLK_N = CLK, DIR = I, DIFFERENTIAL_POLARITY = N, SIGIS = CLK, CLK_FREQ = 50000000

となっています。

これを無理やり手作業で修正して


PORT CLK = CLK, DIR = I, SIGIS = CLK, CLK_FREQ = 50000000

と変えても駄目なようで、インプリメントは通っても動かないようです。

まぁ、つまるところ外部から差動クロックを与えてやらねばいけないようです。シングルエンドクロックにするオプションはまだ見つかっていません。
そこで、基板の使っていないI/OポートからSSTL規格で差動クロックを出し、別のポートから受け取ってクロック入力としました。
Sp6mb

上の写真で2本の抵抗でジャンパしているところがクロックの出て入るところです。
バウンダリスキャンを使って、ちゃんとクロックが伝わっているかどうかを調べます。
(抵抗を差し込んだだけなので接触不良が心配ですので)

Clk_foward

これで、いままでの苦労がうそのように、MicroBlazeが動くようになりました。

Hellowworld_2

XILINXの人は、SP605とかML605、SP601で評価はされているのかもしれませんが、シングルエンドなクロックのシステムでも検証されているのでしょうか。

なお、私はMicroBlazeが埋め込まれたデザインの書き込みにはMITOUJTAGを使っていますが、やはりXILINXのツールチェーンに統合されていないので、MicroBlaze SDKで作ったELFを書き込むにはちょっと面倒だなと感じました。いずれ、MITOUJTAGからDATA2MEMを呼び出せるようにするか、MicroBlze用のJTAG ICEを作って、ELFファイルをJTAGダウンロードできるようにしたいと思います(←どちらかというと、こういうことのほうが興味あり)

■結論
EDK12.4、EDK13.1で、MicroBlazeのデザインをAXI4にするとクロックが差動入力になった。シングルエンドのクロックを使う方法はまだわからない。

| | コメント (4)

2011.06.27

MITOUJTAGにRX62N用JTAG ICEを追加するパッチをリリース!

MITOUJTAGに、RX62N用JTAG ICE機能を追加するパッチをリリースしました!

対応しているMITOUJTAGのバージョンは、MITOUJTAG Light、BASIC、Pro何でもOKです。下のリンクからパッチをダウンロードして、smartupdate.exe というのを起動してください。
※本パッチを適用するまえに、http://www.tokudenkairo.co.jp/jtag/sp.html にあるバージョンアップパッチを適用して、バージョンを2.21まで上げておいてください。

パッチのダウンロードはこちら

簡単に、お使いのMITOUJTAGがアップデートできます。

Mjice_1

前回のJTAG ICEからの更新点は、
① MITOUJTAG Lightにも対応した
② RX62N(QFT144,BGA176どちらも)のバウンダリスキャンができるようになった
③ ROMに認証コード(キーコード)が設定されていてもデバッグできるようになった
④ 現在のCPUの状態(RUN/HALT)が表示されるようになった
など、かなり使い勝手が良くなりました。

ここではInterface誌付録のRX62Nボードで使ってみることにします。
まず、普通にMITOUJTAGを起動し、自動認識を行うと、BGA176とQFP144を選択するダイアログが出ます。この2種類のRX62NはIDCODEが同じなので識別できません。ここでは手動でQFP144のものを選択します。(なお、EMLE信号をHレベルに上げている場合は、RX62N_ICEというのが出ます)
Mjice_2

バウンダリスキャン版のRX62Nが認識されていれば※、QFP144ピンのI/Oの状態が画面に可視化されます。

※ RX62Nの端子設定を、BSCANP=1、EMLE=0にしておく
Mjice_3

ですが、今回の目的はバウンダリスキャンではなく、ICEです。メニューの中から[ツール(T)→JTAG ICE(I)」を起動します。
Mjice_4

もしここで、ROMに認証コードというのが設定されていれば、次のようなダイアログが出て、認証コードを入力するよう促されます。
Mjice_5

認証コードというのは、RX62Nの内蔵ROMのセキュリティ機能で、要するに他人が勝手にICEを使ってプログラムをのぞき見ることができないようにする機能です。ROMのFFFFFFA0番地からの16バイトに書かれた値をJTAG ICEの起動時に指定しないと、RX62NのICE機能は有効にならないのです。
デフォルト(ROM消去状態)ではFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFなのですが、もしここに何らかの値を書いてしまうと、値が一致しないかぎりJTAG ICEを使うことはできません。
上のダイアログではそのコードを16進で指定します。
※ 認証コードが設定されていなければ、このダイアログは表示されません。
※ 認証コードはユーザーズマニュアル(R01UH0033JJ0100 Rev.1.00)の1760ページに記載されているオンチップデバッガID コードプロテクトのことです。

認証が通って、ICEが起動すると、このとおり。
Mjice_6

あとは、ステップ実行させたりメモリの中を見たり自由自在です。GDBサーバ内蔵なので、GDBからの接続も待ち受けられます。

それから、RX62Nの内蔵フラッシュROMへの書き込み機能も付けました。
Mjice_7

ELFファイルを、内蔵RAMにダウンロードするか、内蔵ROMにダウンロードするか、選択可能です。これでFDTを使わなくても画面操作だけで内蔵ROMへの書き込みができるようになりました。さよならFDT。

Interface誌の付録基板にMARYのOLEDボードをつないで文字と画像を表示してみました。
Rx62n_mary_oled

  ◆

このMITOUJTAGの拡張機能は、MITOUJTAG Lightでも使えます。

MITOUJTAG Lightは、下記のURLのオンラインショップからご購入いただけます。
https://shop.tokudenkairo.co.jp/shopping/detail.php?shpdi=MJLIGHT

MITOUJTAG Lightは、あと3日で販売終了です。どうかこの機会をお見逃しなく。

| | コメント (0)

2011.06.24

特電オンラインショップのリニューアルと、MITOUJTAG Light販売終了のお知らせ

今日は大きなお知らせが2つあります。
ひとつは特電オンラインショップをリニューアルしたこと、もうひとつはMITOUJTAG Light販売終了のお知らせです。

まず、特電オンラインショップをリニューアルしました!
Newshop_2

商品をカテゴリごとに分類できるようになったので目的の商品を探すのが楽になりました。これからじゃんじゃん新製品を開発していっても、カテゴリごとに分類できたり、同一の商品でオプションが異なる場合などの管理がわかりやすくなりました。また、クレジットカード決済にも対応しました。


それから、長い間、皆様からご愛顧いただいておりましたMITOUJTAG Lightですが、誠に勝手ながら今月末の6月30日をもちまして、販売終了とさせていただくことにしました。

Mjl_banner

6月末まではキャンペーン価格で、お得な値段で提供させていただきます。もちろん、6月以降もMITOUJTAG Lightの開発は続けていきますが、次のバージョンではCPUのデバッグ機能など大幅な機能アップを予定しています。そのため、MITOUJTAG Lightの価格を改定せざるを得ないと考えています。
6月末までは今の価格を維持しますが、その後のことはまだ何とも言えません。7月からは販売をいったん終了し、その後はもう販売再開しないかもしれませんし、価格改定となるかもしれません。
何卒ご理解いただければ幸いです

Brd_sp3a_13

なお、いまMITOUJTAG Light版(V2.16~V2.21)をお使いの方は、新バージョンへの移行は当面の間(少なくとも1年くらいは)は無償でできるようにする予定ですので、ご安心ください。できるだけ多くの方に新機能をお楽しみいただけるようにしたいです。

また、現行のMITOUJTAG Lightへのオプション(例えば、BLOGANAモードの追加や、BASIC版へのアップグレード)なども、用意していきたいと思います。

いったん終了させていただくMITOUJTAG Lightですが、今度お目にかかるときには一層パワーアップしていることでしょう。

ということで、いまMITOUJTAG Lightをお買い求めいただくと、今後1年間のバージョンアップは無償で適用できます。

オンラインショップは、下記のURLにあります。
https://shop.tokudenkairo.co.jp/shopping/detail.php?shpdi=MJLIGHT

どうか、この最後の機会をお見逃しなく。お早めにお求めください。

| | コメント (0)

2011.06.23

IF誌用RX62Nベースボードがいよいよ設計完了

しばらく手が付かなかったInterface誌用RX62N付録基板のベースボードですが、今週の水曜日の深夜あたりから猛烈に作業を再開して、いよいよ設計完了しました。
本日16:59:35に出図完了!と思いきや、その後ミスがみつかって保留にしました。
とりあえず、ゆっくり落ち着いて見直し、明日、再度出図することにします。

基板のできあがりイメージは、こんな感じです。
Np1041image

4層基板で設計ルールは0.127mmです。万能基板のランドも設けたのですが、このランドの間を縫うようにして、ArduinoシールドやMARYの拡張基板を乗せられるように配線を通すのがかなりの難関でした。

表面
Np1041top

裏面
Np1041bottom

結局のところ、基板上にはSDRAM、PHY、LANコネクタ、MMC/SDカード、RS232C、SPI ROM、オーディオ用OPアンプ、LINE IN/OUTコネクタ、78KマイコンによるUSB-JTAG、USBホストコネクタ、USBファンクションコネクタ、LED4個、スイッチ1個、ブザー1個、Arduinoシールド用コネクタ、MARY拡張基板用コネクタ×2、万能基板ランド、が乗りました。

基板上の部品は豪華なので、あとはソフト次第でLinuxや.NET MicroFrameworkが動くかなと思います。

明日(24日)にあらためて出図して、30日に出来上がり予定です。その後、手作業で1枚実装して7/1には動作テストを行いたいと思います。うまくいけば、7/11ごろには出荷できるかと思います。

この基板の単価は12,800円(実装済み)~とします。とりあえず27枚ほど製造し、在庫がなくなり次第、終了の予定です。

RX62Nを使った応用作品も着々と出来上がってきているのですが、肝心のCPUが流通再開するという話はまだ聞こえてきません。工場が復活してもなかなか品薄です。やはり、今は市中に何万個と出回っている付録基板を活用するより仕方がないのかと思います。

| | コメント (6)

2011.06.19

RX62Nの端子をBSCANで操作してSDRAM読み書き

RX62Nの端子をバウンダリスキャンで操作して、RX62Nに接続されたSDRAMの内容を読み書きすることに成功しました!

RX62Nには、バウンダリスキャンといって、JTAGを通じてI/O端子を操作する機能が備わっています。
この機能を使うと、CPUの動作を止めて、I/O端子を外部から自由に操作することができます。
MITOUJTAG Proを使うとI/O端子の操作方法をC++で簡単に記述することができます。
このようにしてI/O端子を遠隔操作し、CPUにつながっているSDRAMの読み書きができたということです。

そのときの作り出した波形はこんな感じです。
Ajfg_sdram
(赤い線は出力、緑の線は入力)

昨日から行った改良で、プログラムをMITOUJTAGから分離し、DLLをリンクするだけよいようにしました。
コンパイルと、実行は次のような感じでとても簡単です。
Ajfg_sdram2

これが出来て、何が嬉しいかっていうと、RX62Nのプログラムを組まなくても、RX62Nの端子を操作できて、周辺回路を動かせるということなのです。
しかも、RX62Nだけではなく、JTAGに対応しているCPUならば何でもOKなのです。

実際に作ったSDRAM操作プログラムを以下に掲載します。とても簡単でしょ?


// バウンダリスキャンでSDRAMの読み出し

#include "jtagscr.h" // JTAGスクリプト
#include "pindef.h" // ピン定義(ユーザ定義)

#define AJFG_CLI_API extern "C" __declspec(dllimport)
AJFG_CLI_API int AJFGInitialize(const char *pin_file);

unsigned long sd_cmd(int ba,int addr,int ras,int cas,int wen,int cs)
{
SD_A = addr; SD_BA = ba;
SD_RAS = ras; SD_CAS = cas; SD_WEN = wen; SD_CS = cs;
SD_CLK <= "0"; SD_CLK <= "1"; // クロックトグル
return SD_D;
}

int main(int argc,char *argv[])
{
if(AJFGInitialize("sample.pin") < 0) // ピン定義ファイルを指定
{
printf("MITOUJTAGサーバに接続できませんでした\n");
Sleep(1000);
return -1;
}

j_bypass();j_sample();j_extest();
SD_D = "Z"; SD_CKE <= "1"; // 初期設定
sd_cmd(0,0,1,1,1,1); // インアクティブ
sd_cmd(0,0x400,0,1,0,0); // プリチャージ
for(int i=0;i<10;i++) {
sd_cmd(0, 0,1,1,1,0); // NOP
}
sd_cmd(0,0x400,0,1,0,0); // プリチャージ
for(int i=0;i<10;i++) {
sd_cmd(0, 0,1,1,1,0); // NOP
}
// モードレジスタセット
sd_cmd(0, 0x23,0,0,0,0); // CL=2,Burst=8
for(int i=0;i<10;i++) {
sd_cmd(0, 0,1,1,1,0); // NOP
}
sd_cmd(0, 0,0,1,1,0); // ROWアドレスセット
sd_cmd(0, 0,1,1,1,0); // NOP
SD_D <= 0x12345678; sd_cmd(0,0,1,0,0,0); // ライト
SD_D <= 0x11111111; sd_cmd(0,0,1,1,1,0); // NOP
SD_D <= 0x22222222; sd_cmd(0,0,1,1,1,0); // NOP
SD_D <= 0x33333333; sd_cmd(0,0,1,1,1,0); // NOP
SD_D <= 0x13579bdf; sd_cmd(0,0,1,1,1,0); // NOP
SD_D <= 0xdeadbeef; sd_cmd(0,0,1,1,1,0); // NOP
SD_D <= 0x98765432; sd_cmd(0,0,1,1,1,0); // NOP
SD_D <= 0x31323123; sd_cmd(0,0,1,1,1,0); // NOP
SD_D <= 0x2345aaaa; sd_cmd(0,0x408,1,0,0,0); // ライト
SD_D <= 0x30303030; sd_cmd(0,0,1,1,1,0); // NOP
SD_D <= 0xffffffff; sd_cmd(0,0,1,1,1,0); // NOP
SD_D <= 0x00000000; sd_cmd(0,0,1,1,1,0); // NOP
SD_D <= 0x5a5a5a5a; sd_cmd(0,0,1,1,1,0); // NOP
SD_D <= 0xa5a5a5a5; sd_cmd(0,0,1,1,1,0); // NOP
SD_D <= 0x69966996; sd_cmd(0,0,1,1,1,0); // NOP
SD_D <= 0x96699669; sd_cmd(0,0,1,1,1,0); // NOP
SD_D <= "Z";
sd_cmd(0, 0,1,1,1,0); // NOP
sd_cmd(0, 0,1,1,1,0); // NOP
sd_cmd(0, 0,1,1,1,0); // NOP
sd_cmd(0, 0,1,1,1,0); // NOP

sd_cmd(0, 0,0,1,1,0); // ROWアドレスセット
sd_cmd(0, 0,1,1,1,0); // NOP
sd_cmd(0, 0,1,0,1,0); // リード
printf("%08x ",sd_cmd(0, 0,1,1,1,0)); // NOP
printf("%08x ",sd_cmd(0, 0,1,1,1,0)); // NOP
printf("%08x ",sd_cmd(0, 0,1,1,1,0)); // NOP
printf("%08x ",sd_cmd(0, 0,1,1,1,0)); // NOP
printf("%08x ",sd_cmd(0, 0,1,1,1,0)); // NOP
printf("%08x ",sd_cmd(0, 0,1,1,1,0)); // NOP
printf("%08x ",sd_cmd(0, 0,1,1,1,0)); // NOP
printf("%08x ",sd_cmd(0,0x408,1,0,1,0)); // リード・プリチャージ
printf("%08x ",sd_cmd(0, 0,1,1,1,0)); // NOP
printf("%08x ",sd_cmd(0, 0,1,1,1,0)); // NOP
printf("%08x ",sd_cmd(0, 0,1,1,1,0)); // NOP
printf("%08x ",sd_cmd(0, 0,1,1,1,0)); // NOP
printf("%08x ",sd_cmd(0, 0,1,1,1,0)); // NOP
printf("%08x ",sd_cmd(0, 0,1,1,1,0)); // NOP
printf("%08x ",sd_cmd(0, 0,1,1,1,0)); // NOP
printf("%08x ",sd_cmd(0, 0,1,1,1,0)); // NOP
printf("\n");
SD_CKE <= "0";
return 0;
}

| | コメント (0)

2011.06.18

MITOUJTAGのリモート操作機能を強化したい!

MITOUJTAG Proには、AJFG(Advanced JTAG Function Generator)という機能があって、これを使うと、MITOUJTAGの機能を遠隔操作することができます。

AJFGをもっと使いやすくしようと思い、次のような構造に改造しました。
Mjclsv

MITOUJTAGとターゲットボードがJTAGでつながっているのは従来どおりなのですが、MITOUJTAGがパイプを持つようにして、ユーザアプリに組み込んだDLLから操作できるようにしました。

なぜパイプなのかというと、結合を緩くするためです。ユーザアプリと直接DLLをロードする関係で強く結合していると(例えば単純なプラグインを作るような感じ)、どちらかが不正な処理をしてしまった場合に両方共倒れしてしまうからです。その点、パイプにしておけば、片方は無事で済みます。

この機能を使うために、AJFGコントロールパネルに「待ちうけ」というボタンを作りました。
Mjclsv2

このボタンを押すと、MITOUJTAGがサーバとして働き、クライアント(ユーザプログラム)からの接続を待ちます。
ユーザプログラムは、DLLを組み込んでさくっと作ります。例えば・・


// バウンダリスキャンでLEDチカチカ

#include "jtagscr.h" // JTAGスクリプト
#include "pindef.h" // ピン定義(ユーザ定義)

#define AJFG_CLI_API extern "C" __declspec(dllimport)

AJFG_CLI_API int AJFGInitialize(const char *pin_file);

int main(int argc,char *argv[])
{
if(AJFGInitialize("sample.pin") < 0) // ピン定義ファイルを指定
{
printf("MITOUJTAGサーバに接続できませんでした\n");
Sleep(1000);
return -1;
}

j_bypass(); // JTAGチェーンをBYPASSモードにする
j_sample(); // JTAGチェーンをSAMPLEモードにする
j_extest(); // JTAGチェーンをEXTESTモードにする

for(int i=0;i<100;i++) {
P84_BUZZ <= "H"; // 端子をバウンダリスキャンで操作
Sleep(10);
P84_BUZZ <= "L"; // 端子をバウンダリスキャンで操作
Sleep(10);
}
return 0;
}

これをコンパイルします。Borland C++なら、
bcc32 main.cpp AjfgClient.lib
とタイプすればコンパイルしてEXEファイルができます。

Visual C++なら、
cl main.cpp AjfgClient_vc.lib
でコンパイルできます。

このような感じで、(バウンダリスキャンを使って)LEDチカチカがとても簡単にできるようになりました。

ユーザプログラムは、最初にAJFGInitializeという関数を呼び出せば、C++言語で簡単にFPGAやCPUのピンが動かせるようになるのです。

実行時にDLLがあればよいので、VisualC++やVisualC#、BorlandC++、GCCなどで作った複雑なアプリケーションソフトの中にも簡単に組み込めます。

今までのAJFGはどうだったかというと、MITOUJTAGが主で、ユーザスクリプトが従の関係でした。ユーザスクリプトは常にMITOUJTAGの中からプラグインとして呼び出されなければなりませんでした。(ただ、パイプで接続しているので、ユーザスクリプトが不正な処理をしても本体は無傷です。)
Mjclsv3

だから、今まではちょっと使い勝手が悪かったと思います。でも、このしくみならば、ユーザアプリケーションを作るのはとても簡単だし、VisualStudioやEcripseなどの使い慣れた環境を使ってJTAGソフトを作ることができるようになります。

つまり、プラグインと本体との関係を逆にしたというわけです。

ゆくゆくはFPGAの書き込み機能も、この仕組みで遠隔でできるようにしたいと思います。
明日はもうちょっと複雑なプログラムを書いてみることにします。

| | コメント (0)

2011.06.13

特殊電子回路のサーバ移行中

本日、特殊電子回路のサーバを移行しています。
DNSの移行にともない、1日ほど、Webサイトのアクセスが不安定になるかもしれません。
また、移行後に、オンラインショップやユーザ登録、JTAGひろばなどの動作に支障が出る可能性があります。
お客様にはご迷惑をおかけしますが、何卒お許しください。

| | コメント (0)

2011.06.11

においセンサー

これ何でしょう?

Tgs2450_1

特電RX62Nボードに、秋月のにおいセンサー TGS2450 をつないでみました。
回路はデータシートの参考回路のままです。RX62Nにパルスを出力させ、においセンサーの出す出力をRX62N内蔵のADコンバータで取り込みました。

使うときは、こんなコンパクトな形になります。

Tgs2450_2

計測した値をprintfしてシリアルポートから出力しました。RX62NはFPU内蔵なので、少しくらいは割り算とか浮動小数点をやらせないといけませんね。newlibとgccでやっているので、printfで浮動小数点を出すなんて朝飯前です。
Sensoruart

これをパソコンにとりこんでExcelでグラフにしてみました。

エタノールはとてもよく反応しました。エタノールの瓶の蓋をセンサに近づけただけで、このとおり。
臭いを検出すると出力電圧が下がります。エタノールの場合は回復も早かったです。
Ethanol_cap

それに対して、アロマ(エッセンシャル)オイルのラベンダーを嗅がせた場合。
Lavendor

反応も鈍い上に回復も遅いのは分子が大きいからでしょうか?
まぁ、このセンサはざっと遊んだ感じでは、平常時の出力値はまったくあてになりません。
このセンサは硫化物の感度が高いとのことで、例として硫化水素とメチルメルカプタンが挙げられていました。しかし、家庭用ガスコンロのボンベのガスでは反応しなかったので、あの臭いはメチルメルカプタンではないのかもしれません。

人間の鼻には、ラベンダーのほうがずっと強烈に感じるのですが、このセンサはエタノールのほうが感度が高いようです。化学のことはよくわかりませんが、いろいろな理由があるんでしょうね。

| | コメント (2)

2011.06.10

EXPARTAN-6Tの説明ページを執筆中

Spartan-6LXTを使ったFPGA & PCI Express評価ボード「EXPARTAN-6Tの製品紹介ページに、詳しい説明がなかったので、執筆しています。

特電IPコアの使い方や、CoreGenの使い方やCoreGenの問題点などをはじめとして、アイパターンも掲載しています。これからDMAエンジンの説明や、簡単なチュートリアルを書いていこうと思います。

アイパターンは、PCI Expressコンプライアンステストで定められた標準の方法でとってきました。綺麗に出ていて、規格の範囲内でした。
Exp6teye

今月はEXPARTAN-6Tのお問い合わせがとても多いので、IPコアを少しバージョンアップしようと思います。

EXPARTAN-6Tの新しい紹介ページはこちらです
http://www.tokudenkairo.co.jp/exp6t/

| | コメント (0)

2011.06.08

RX62Nの内蔵AD変換器を動かしてみた

RX62Nには、2種類のAD変換器が内蔵されています。12bitのもの(S12AD)と、10bitのもの(AD0/AD1)です。

12bitのもの(S12AD)は、8チャネルのAD変換を1つのユニットで行います。1チャネルあたり1.0usで変換できます。

10bitのもの(ADa)は、4チャネルのAD変換器が2つ入っています。入力AN0~AN3がユニット0(AD0)へ、AN4~AN7がユニット1(AD1)につながっています。1チャネルあたり1.0usで変換できます。
※ だから、AN0とAN4は同時に変換できるかもしれませんが、AN0とAN1は同時には変換できません。(時間差が生じます)。 例えば、オーディオの入力Rと入力Lを同時にサンプリングしたいなら、AN0とAN1に入れてはいけません。AN0とAN4に入れるべきです。

また、S12ADと、AD0/AD1は排他制御です。同時には使えません。

さて、特電RX62Nボードで、AN0の端子に1kΩの半固定抵抗をつないで、3.3Vの電源を分圧してその電圧をAD変換で見てみました。
Rx62n_ad

半固定抵抗は適当な位置にあわせています。

10bitADの変換結果は、449~450の範囲内です。上出来です。
Rx62n_ad10bit

同じ回路構成で、12bitAD変換してみると、たまに外れた値が出ていますが、概ね1802~1805の範囲内です。
Rx62n_ad12bit
同じ回路構成ですが、10bitADと12bitADでは、少しオフセットが異なるようです。

なお、こんなプログラムを書いています。



// AN0 A-D Conversion Start
SYSTEM.MSTPCRA.LONG &= ~(1 << 23); // BIT23(AD0)のストップ状態解除
AD0.ADCR.BYTE = 0x0C; // ソフトウェアトリガ/PCLK/シングルモード
AD0.ADDPR.BIT.DPSEL = 0; // LSB詰め

setvbuf(stdout, 0, _IONBF, 0);
while(1) {
AD0.ADCSR.BYTE |= 0x20; // AN0 AD変換開始
while((AD0.ADCSR.BYTE & 0x20) == 1); // AD変換待ち
d = AD0.ADDRA; // AN0変換データ取得
printf("AD0 data=%d , %f[V] \n",d,d/1024.*3.3);
}




// S12AD A-D Conversion Start
SYSTEM.MSTPCRA.LONG &= ~(1 << 17); // BIT17(S12AD)のストップ状態解除
S12AD.ADANS.WORD = 0x01; // チャネル0を変換対象

while(1) {
AD0.ADCSR.BYTE |= 0x20; // AN0 AD変換開始
while((AD0.ADCSR.BYTE & 0x20) == 1); // AD変換待ち
d = AD0.ADDRA; // AN0変換データ取得
printf("AD0 data=%d , %f[V] \n",d,d/1024.*3.3);
}

これからいろんなセンサをつないでみたいと思います。

| | コメント (0)

RX62NのAD変換

RX62Nには、2種類のAD変換器が内蔵されています。

12bitのもの(S12AD)は、8チャネルのAD変換を1つのユニットで行います。1チャネルあたり1.0usで変換できます。

10bitのもの(ADa)は、4チャネルのAD変換器が2つ入っています。入力AN0~AN3がユニット0(AD0)へ、AN4~AN7がユニット1(AD1)につながっています。1チャネルあたり1.0usで変換できます。
※ だから、AN0とAN4は同時に変換できるかもしれませんが、AN0とAN1は同時には変換できません。(時間差が生じます)。 例えば、オーディオの入力Rと入力Lを同時にサンプリングしたいなら、AN0とAN1に入れてはいけません。AN0とAN4に入れるべきです。

また、S12ADと、AD0/AD1は排他制御です。同時には使えません。

さて、特電RX62Nボードで、AN0の端子に1kΩの半固定抵抗をつないで、3.3Vの電源を分圧してその電圧をAD変換で見てみました。
Rx62n_ad

半固定抵抗は適当な位置にあわせています。

10bitADの変換結果は、449~450の範囲内です。上出来です。
Rx62n_ad10bit

同じ回路構成で、12bitAD変換してみると、たまに外れた値が出ていますが、概ね1802~1805の範囲内です。
Rx62n_ad12bit
同じ回路構成ですが、10bitADと12bitADでは、少しオフセットが異なるようです。

なお、こんなプログラムを書いています。



// AN0 A-D Conversion Start
SYSTEM.MSTPCRA.LONG &= ~(1 << 23); // BIT23(AD0)のストップ状態解除
AD0.ADCR.BYTE = 0x0C; // ソフトウェアトリガ/PCLK/シングルモード
AD0.ADDPR.BIT.DPSEL = 0; // LSB詰め

setvbuf(stdout, 0, _IONBF, 0);
while(1) {
AD0.ADCSR.BYTE |= 0x20; // AN0 AD変換開始
while((AD0.ADCSR.BYTE & 0x20) == 1); // AD変換待ち
d = AD0.ADDRA; // AN0変換データ取得
printf("AD0 data=%d , %f[V] \n",d,d/1024.*3.3);
}




// S12AD A-D Conversion Start
SYSTEM.MSTPCRA.LONG &= ~(1 << 17); // BIT17(S12AD)のストップ状態解除
S12AD.ADANS.WORD = 0x01; // チャネル0を変換対象

while(1) {
AD0.ADCSR.BYTE |= 0x20; // AN0 AD変換開始
while((AD0.ADCSR.BYTE & 0x20) == 1); // AD変換待ち
d = AD0.ADDRA; // AN0変換データ取得
printf("AD0 data=%d , %f[V] \n",d,d/1024.*3.3);
}


これからいろんなセンサをつないでみたいと思います。

| | コメント (2)

2011.06.07

とってもショックなこと

今日はとてもショックなことがありました。
徹夜でコネクタとSDRAMまわりの配線を引いていたのですが、

Rx62n_wrong

3つのコネクタの1番ピンの位置が逆であることに気が付きました。

もう寝ます。

| | コメント (0)

Arduinoの外形寸法図

Arduinoの基板は、外形寸法図が公表されていないようだったので、うちのバイト君にEagleのファイルを開いて調べてもらって、Protelで書き直してもらいました。

Arduinoboard

上の図のグリッドは100mil間隔となっています。
どうやらArduinoはmil系で設計されているようです。左上のコネクタは40milずれているのが注意すべきポイントです。

この図が皆様の何かの参考になれば幸いです。

| | コメント (1)

2011.06.01

Interface誌のRX62N用拡張基板(4)

今夜も設計しています。

今日は主に付録基板のピンがどのようにマルチプレクスされていて、どのピンが自由に使えるピンか、などを調べていました。複雑すぎて疲れました。
Rx62n_pin_consider

すべては、MARYやArduinoの端子に、RX62Nのどの端子をつなげばいいかを考えるためです。
MARYには25個の信号端子があるので、全部つなぐと50個のI/Oが必要です。これはRX62Nの144ピンではちょっと足りません。

それから、MMC/SDカードはFRK-RX62N基板のある場所の裏側に入りそうです。これでかなりの面積が空きました。
Rxmega_plan7
Rxmega_plan8

紙に印刷して、ArduinoのシールドやMARYの拡張基板を乗っけてみるテストです。
ちょっとぶつかりますね。もう少しずらさなきゃ。
Rxmega_plan9

MARYのOLEDボードの実物を手に入れたので、裏面をみてビックリ。端子が8ピン×4個ではなく、4ピン×4個でした。どういう使い分けなのか、明日、調べてみます。

| | コメント (0)

« 2011年5月 | トップページ | 2011年7月 »