2013年04月07日

FPGAボードDE0とKYANITEを使ってHDMIモニターに画像を表示して遊んでみた

4月になり、ここ関西エリアの気候もどんどん暖かく、過ごしやすくなって来ました。今はまさに、桜満開といった感じですが、今週末は雨風きつくて、多少散ってしまうかもしれませんね。

さて、先日、NT京都という、ニコニコ技術部展示会イベントが京都市は西院にあります、春日幼稚園・春日神社境内で開催されてまして、今回僕は初めて見学させていただきました。
(去年もほぼ同じ時期にあったんですよね。都合が付かなくて参加できなかったのですが)

きっと、普通の神社なので会場としてはそれほど広くないんでしょーと勝手に予想してたのですがそれは間違いで、かなり広い面積に幅広い展示物が並んでまして、Make: meeting(Makers faire)っぽい感じ
もしました。すごく楽しかったです。



さて、このイベントではクリエイターの方々の作品も買うことが出来るようで、僕は長船氏(@s_osafune)作のDE0及びDE0-nanoボード用の拡張基板 KYANITE(カイヤナイト、でいいんですよね)を買ってみました。イベントでは、完成品もありましたが、自分で作ってみたいと思ってキット品を購入しました。

DE0及びDE0-nanoは、ALTERAのCycloneIII(-nanoはCycloneIV) FPGAと周辺回路を搭載したリーズナブルな(1万円前後?)ボードです。台湾Terasic社の製品です。(写真はDE0の端子側)
IMG_20130407_125837.jpg

僕はDE0は購入したのが1年4ヶ月くらい前で、作ったのはDE0ラジコンだけです。
http://projectc3.seesaa.net/article/248752693.html
この記事が2012年1月27日で、それくらいの時期からずーーーーっと戸棚に入ったままになってました。(反省。。。)
(今年は積み基板削減を目指しています!。笑)
※僕はFPGAでは上記ラジコンを作ったことがある程度ですので、記事中に間違ったことがあれば是非ご指摘下さいマセ。



さてさて、KYANITEは、DE0ボードに、HDMI出力、アナログ音声出力、USBホストポート、マイクロSDカードスロット、LANを提供してくれるボードです。
KYANITEボード自体は受動部品で構成され、制御は全てFPGA側に作りこむということのようで、HDMIやDVI出力の無い、本DE0(-nano)ハードに長船氏の手によりHDMI出力回路をFPGA上に作りこまれ、デモプロジェクトとして公開されています。
凄いですね〜!!

鈴木氏(@kskue)のブログで、DE0-nanoとKYANITEとの組み合わせで動作させる記事を書かれています。
[FPGA][DE0] DE0/DE0-nano拡張基板で.bmpファイルをHDMI出力 http://d.hatena.ne.jp/ksksue/20130403/1364984675

さて、KYANITE基板に部品を実装してみました。

IMG_20130406_205822resized.jpg
部品のほとんどは1608(ミリ表記)のチップ部品なので、チップ部品慣れしてない方は予めいらない基板で練習してからやると良いでしょう。

こんな感じで完成しました。LANポートはWIZnetのもの(別売)を搭載させるのですが、手持ちが無いので今は実装していません。
IMG_20130407_122704resized.jpgIMG_20130407_122757resized.jpg

デモプロジェクト関連は長船氏が公開されています。URLは鈴木氏のブログ記事にも記載ありますが、引用すると、以下です。
DE0用デモプロジェクト https://t.co/uz4mRicSzm
DE0-nano用デモプロジェクト https://t.co/JcZD4q8mBc

まずはQuartusIIにプロジェクトを読み込みます。僕は、QuartusII 32bit Version 12.1 Build 243 01/31/2013 SJ Web Editionを使用しました。そしたら、Fitter (Place & Route)で「Internal Error: Sub-system: VPR20KMAIN」なんてのを吐くので、Google先生に お伺いして、以下のALTERAのサポートページにあるような、quartus.iniをプロジェクトのトップディレクトリに置いたら回避出来ました。
http://www.altera.co.jp/support/kdb/solutions/rd12222009_898.html

NiosII側ではSDカードにbmpファイルを置いて展開させたいと思います。サンプルのbmp_testは、RGB555のベタのイメージをSDカードの/de0/test_vga.binに用意し、それを展開するようになってるようです。
一方、DE0-nanoのデモプロジェクトにはBMP形式をオープンしてビットマップに貼り付けるloadbmp関数というのがあったので、そのまま貰ってきて利用し、DE0側のbmp_test側で使用するようにしました。
以下はbmp_testのmain関数内のファイルをメモリーに読み出す箇所で、★部のようにしました。
#if 0
		if((fp = fopen("mmcfs:/de0/test_vga.bin","rb"))!= NULL) {
			fread(pFrameBuffer, 1, 1024*480*2, fp);
			fclose(fp);

			alt_dcache_flush(pFrameBuffer, 1024*480*2);
		} else {
			printf("[!] File not found.\n");
		}
#else // ★★以下が追加部分
		loadbmp("mmcfs:/de0/sample.bmp",pFrameBuffer);
#endif
SDカードは、本デモプロジェクトではKYANITE側ではなく、DE0側のフルサイズのSDカードスロットを使用します。

春なのに非常に秋らしい写真を表示してみました。笑 IMG_20130407_104549resized.jpg

ビットマップを表示する以外にも、本デモプロジェクトには、長船氏によるプリミティブな描画ライブラリ関数がたっぷり入っていて(nd_egl.h参照)、綺麗なGUIをFPGAからいろいろ描画することも出来そうです。
また是非試してみたいです。


というわけでこのKYANITEボードを使えば楽しくDE0と共に遊べそうです。Androidとも繋いでみたりしたいな。。と思いますが、また次回・・・


一年前に鈴木氏に教えてもらった本の紹介です。
QuartusIIでNiosIIを使用したプロジェクトをいじるのには、以下の本「FPGA ボードで学ぶ組込みシステム開発入門」が役立つと思います。
もしQuartusII初めて使うなら是非見てみてはいかがでしょうか!
FPGA ボードで学ぶ組込みシステム開発入門 〜Altera編〜
小林 優
技術評論社
売り上げランキング: 39,623

WIZ820io
WIZ820io
posted with amazlet at 13.04.07
スイッチサイエンス
売り上げランキング: 101,278

Terasic USB Blaster(1-TB1) ALTERA USB Blaster互換品
HuMANDATA LTD.
売り上げランキング: 41,593
タグ:DE0 FPGA KYANITE
posted by いしいっち at 13:33| Comment(0) | TrackBack(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2013年03月24日

Raspberry PiのI2Cを利用して簡易電流・電圧計を作る

Raspberry Pi Model B Revision 2.0 (512MB)本体のみ
kalron
売り上げランキング: 3,803


Raspberry Piを利用して、いろいろつくりたいと思ってるんですが、なかなか手を付けられずにおります。^^;

I2C接続のLCDと電圧・電流測定モジュールを買って積み基板にしていたもので、それをRaspberry Piから叩いて電流・電圧測定ができるちょっとしたテスターっぽいものを作ってみることにしました。

こんな感じで繋ぎました。

13640542883170.jpg
13640893838590.jpg
LCDは、1.5mmピッチで、2.54mmピッチにはそのままささらないのと、外付けのコンデンサを3つ必要としていたため、秋月の小基板(http://akizukidenshi.com/catalog/g/gP-02516/)を中継基板にすることにしました。
13640894087831.jpg
13640894331072.jpg
電圧・電流測定モジュールは、Strawberry-linuxの以下のものを使用しました。
http://strawberry-linux.com/catalog/items?code=12031

LCDも同様、Strawberry-linuxの以下のものを使用しました。
http://strawberry-linux.com/catalog/items?code=27031

Raspbian wheezyはそのままではi2cのデバドラ(ローダブルモジュール)が登録されません。以下のサイトの通りに設定すれば使えます。
http://d.hatena.ne.jp/NeoCat/20120926/1348684357

で繋いで作ったようすはこちら:


13640548219151.jpg

i2cへのお試しでのアクセスは、i2c-toolsを使用するとかなり簡単便利です。Raspbian "wheezy"では、「sudo apt-get install i2c-tools」だけでセットアップ出来ます。
試しにデバイスをI2Cに接続の後、i2cdetectというコマンドで接続状況を確認してみましょう。
# i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n] 
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e -- 
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --
上記結果は、I2C-1のスレーブアドレス3Ehと40hにデバイスが見えている事をあらわしています。
スレーブアドレスは同一I2Cバス上のデバイスの中で重複することがないようにしてください(デバイス上にスレーブアドレスを変更する為のジャンパーなどがあったりするので、そういったものを使用して変更します。固定で変更出来ない場合もありますが)


I2C LCDへの書き込みは、/dev/i2c-1をopenし、そのfdにwriteするだけで制御出来ます。 コードのlcd_のプレフィックスの関数を御覧ください。

電流・電圧測定モジュールのデータの読み込みは、ina_getValue関数を御覧ください。やりとりは、ioctl I2C_RDWRを使用します。コードの該当部は以下。既にデバイスがopenされた状態で使用します。フルのソースコードはgithubにアップしています(後述)。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <unistd.h>

#define I2C_SLAVEADDR_INA 0x40

static int ina_getValue(int fd,int addr,int* val)
{
  struct i2c_rdwr_ioctl_data data;
  struct i2c_msg msg[2];
  int result;
  unsigned char buff[2] = { 0 };
  unsigned char buff2[2] = { 0 };

  memset((void*)&data,0,sizeof(struct i2c_rdwr_ioctl_data));
  memset((void*)msg,0,sizeof(msg));

  buff[0] = addr;

  msg[0].addr = I2C_SLAVEADDR_INA;
  msg[0].flags = 0;
  msg[0].len = 1;
  msg[0].buf = buff;

  msg[1].addr = msg[0].addr;
  msg[1].flags = I2C_M_RD;
  msg[1].len = 2;
  msg[1].buf = buff2;

  data.msgs = msg;
  data.nmsgs = 2;

  result = ioctl(fd,I2C_RDWR,&data);

  *val = buff2[0]<<8 | buff2[1];

  return(0);
}

ソースは以下にアップしました!です。
https://github.com/yishii/raspberrypi_i2c_simple_v_i_meter/

Raspberry Piユーザーガイド
Eben Upton Gareth Halfacree
インプレスジャパン
売り上げランキング: 4,169
posted by いしいっち at 01:26| Comment(0) | TrackBack(0) | 電子工作 | このブログの読者になる | 更新情報をチェックする

2013年03月06日

シンガポールでデータ通信用にSIMを買って使ってみた

先日シンガポールに行ってまいりました。今までも行ったことはありましたが、現地でSIMカードを購入したのは今回が初めてで、メモを残しておこうと思います。

用意したのは、SIMロックフリーのAndroidケータイ電話 Samsung Nexus Sと、イーモバイルのポケットWi-Fi GP02です。ドコモの最近のスマホは購入後SIMロック解除できるらしいので、そういうのでも出来るのかも?(わかりませんけど)

さて、買ったSIMカードはSingTel(シンガポール・テレコム)のプリペイドSIMカードです。シンガポールのチャンギ空港内に換金所(銀行)がいくつかあり、そこでSIMを取り扱っているところがあります(SingTelと書かれています)。
3日間データ通信し放題でS$15(1200円くらい?)というプラン(3 Days Unlimited Data Pack)がありましたので、それを使うことにします。
http://info.singtel.com/personal/phones-plans/mobile/prepaid/mobile-data

S$28のカードを買いましたが、データ通信したいだけならS$20のとかでOKでしょう(多分)。

手持ちのNexus Sに挿入した様子。

IMG_20130223_125530resized.jpg

さて、SIMを挿入したら、データ通信のプランを有効にします。ここでは、727050番にSMSでメッセージ「3」を送信します。

singtel_step1.png

すぐに返事のSMSが届きますので、ここでは、Subscribe to Data bundle for Notebook/Tabletのを選択する為、「2」を返信します。

singtel_step2.png

今度は、プランを選択するメッセージが送られてきます。3日分のデータ通信使い放題の3 days Unlimited Data Planを選択しますので、「4」と返信します。

singtel_step3.png

確認のメッセージが出ますので、問題なければ「1」を返信します。

singtel_step4.png

選択した結果と、有効期限などの情報が届いて手続き終了です。

singtel_step5.png

次は、データ通信を行うためのAPNの設定です。SIMカードを買った時の説明書通り設定します。一応スクリーンショットを貼りますね。

singtel_ss_1.png

singtel_ss_2.png

アクティベーション作業は終了しました。
これで晴れてデータ通信ができるようになりました!Nexus Sはテザリング機能がついているので、ノートPC等でも普通にデータ通信が出来ました。

さて、たまたま日本から持ってきたイーモバイルのポケットWi-FiはSIMロックフリーということで、ここにアクティベーションされたSIMを入れてみます。

IMG_20130223_222110resized.jpg

こちらはAPNが自動で設定された為か、特になにもする事なくデータ通信を開始できました。下り2Mbpsくらい出てて、あまり日本で通信しているのと違和感なく使えました!

シンガポールでデータ通信される場合、よかったらどーぞ。
手順は2013年2月末のものになります。

EMOBILE Pocket WiFi GP02
EMOBILE Pocket WiFi GP02
posted with amazlet at 13.03.05
イーモバイル
売り上げランキング: 27,869


posted by いしいっち at 00:07| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。