ワンセグ野郎ではUSBハブを選びましょう

UOT-100, LOG-J100/200 は USB ハブを選ぶというのは知っていましたが、ホントなんですねぇ。私も同じ罠にハマってしまいました。 

アンテナ線を接続したLOG-J100を5つ作ったところで、試しに5つ同時受信させてみたんですが、どうもうまく受信できませんでした。

いろいろ試行錯誤してみたら、ちょっとずつ問題が分かってきました。

  • PandaBoardではなくPCで5局同時受信してみる
    →PCでもダメ
  • USBハブにLOG-J100を1つ挿して受信する
    →受信成功
  • USBハブにLOG-J100を2つ挿して2局同時受信
    →受信成功
  • USBハブにLOG-J100を3つ挿して3局同時受信
    →受信失敗
  • USBハブにLOG-J100を3つ挿して2局同時受信
    →受信失敗

どうも同時受信数よりも、LOG−J100の挿している数が影響しているようです。

今まで使っていたのはバッファローコクヨのBSHW10AWHです。在庫処分だったらしく、10ポート&セルフパワーで送料込みで1500円くらいという破格だったので飛びついてしまったわけです。

実績のあるハブを探してみたところ、ぱぱネットさんの所では ELECOM U2H-Z7SSV でたまにロスるけど、ある程度安定動作しているとのこと。これは約3000円くらい。

また、海外のDealExremeですがこのハブでも動作しているようです。こちらは電源付きで$13.6とかなり安いです。

同じものを買っては面白くないので、使えそうな別のハブで試してみました。 

それは、バッファローコクヨのBSH7A02WHです。

BUFFALO BSH7A02WH
BUFFALO BSH7A02WH 

USBハブを調べていてわかったんですが、Single TT と Multi TTの2種類があるんですね。USB2.0のハブは USB1.1 規格のデバイスを繋げたときに USB2.0 規格へレート変換を行うのですが、そのレート変換器がハブに 1 つか、ポートごとに 1 つかの違いだそうです。

で、この BSH7A02WH は日本で唯一(?) Multi TTであることを謳っているUSB ハブのようで、このハブならきっとパケロスもしないだろうという期待のもと、購入してみました。

その結果・・・ 

5ch受信成功!
5ch受信成功!

PCでですが、問題なく5ch同時受信できるようになりました。1つだけコネクタ外れてますが、なぜかコネクタを外さないと受信できなくて・・・。
素人考えでは、アンテナ線を接触させているだけなので、隣のアンテナから電波が放射されていてそれを受信してるんじゃないかと思います。

よくわからないですが、アンテナ線付きチューナーをあと2つ作って PandaBoard でも試してみたいと思います。

アンテナ線の分配

PandaBoard でワンセグが受信できたので複数Ch同時受信を試してみたんですが、色々と問題があってうまくいきませんでした。

うまくいかなかった原因は大きく3つありました。

  1. チューナーの認識の問題
    7つのチューナーが繋げった状態のハブをPandaBoardに繋げると1つも認識しない。
    先にハブをPandaBoardに接続してから1つずつ差していけば認識する。
  2. ハブ経由での受信の問題
    ドライバの SEND_WAIT パラメータをいじると動いたり動かなかったり
  3. アンテナ線分配の問題
    ワニグチクリップでの分配では受信できなかった。

1と2はドライバをいじって試行錯誤すればなんとかなりそうですが、3はもう少しちゃんと対策しないと受信テストすらできないので、ここから着手することにしました。

ということで、昨日秋葉原に買出しに行っていろいろ買ってきました。

8分配器とFコネクタ 
8分配器とFコネクタ

上の写真は8分配器とFコネクタです。どちらも千石電商で¥600と¥80でした。 

ハードも高周波もズブの素人なのでよくわからないのですが、LOG-J100は受信感度が悪いので、真面目に分配してあげると改善するかなぁと。あと、8分配ってかなりのタコ足なので少しでも損失を減らせればという思惑もあります。

 後は1.5C 75Ωの同軸ケーブル(千石電商 ¥80/1m)、4Φ, 7Φの熱収縮チューブ (千石電商 各¥60(/1m?)) などを買ってきました。

LOG-J100 ではアンテナ端子がないので、ロッドアンテナに熱収縮チューブでアンテナ線を固定する方法で試してみました。 

LOG-J100のロッドアンテナに熱収縮チューブで接続
LOG-J100のロッドアンテナに熱収縮チューブで接続 

まぁ、なんというか、わざわざ8分配器で分配する意味も、75Ωの同軸ケーブルで伝送する意味も全て吹き飛ばしてしまいそうな接続方法です。

本当は分解してアンテナ端子にハンダ付けするのがいいんでしょうけど、失敗したらオークションで売るかもしれない(セコい・・^^;)ので、分解せずに試せる方法にしてみました。

受信させてみたところ、一応、ちゃんと接続できているようです。 

これを7つ作るんですが、作るのに結構時間がかかるのでまだ作成中です。完成したらまた報告します。

PandaBoardでワンセグ野郎

台風の影響で早く帰宅したので、いよいよ試したかったことをやってみました。

それは・・・

これだ!

PandaBoardでワンセグ野郎!!
PandaBoard でワンセグ野郎!!

Atom で行けるなら、Cortex-A9 1GHz Dual でもなんとかなるんじゃないかと。

PandaBoard は安くて高性能だったの勢いで買ってしまったんですが、使い道がなくて・・・。

で、早速 PandaBoard で試してみました。

クロスコンパイルは面倒なので PandaBoard でセルフコンパイルしました。Ubuntu だと Linux PC と同じように apt でツールチェーンやライブラリをインストールできるのでセルフコンパイルもラクラクです。

コンパイルの手順ですが、昨日の手順では一部間違えていたので、エントリの最後に書き直しました。

 

ビルドしたドライバを insmod して、dvbstream (前回と同じ手順でビルド) を使うと・・・ちゃんと TS が受信できました!!

懸念していた CPU パワーですが、dvbstream の出力を /dev/null に捨てるような以下のコマンドで負荷を測ってみると・・・

$ sudo ./dvbstream-0.5/dvbstream -c 0 -f `expr 21 \* 6000 + 395143` 8192 -o > /dev/null &
$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0      0 847340  10104  36456    0    0     2     0   45   12  0  0 100  0
 1  0      0 847324  10104  36456    0    0     0     0  458  588  0  1 99  0
 0  0      0 847324  10104  36456    0    0     0     0  432  571  0  0 100  0
 0  0      0 847324  10104  36456    0    0     0     0  425  571  0  0 100  0
 0  0      0 847324  10104  36456    0    0     0     0  426  568  0  0 100  0
 0  0      0 847324  10104  36456    0    0     0     0  432  570  0  0 100  0
 0  0      0 847324  10104  36456    0    0     0     0  429  567  0  0 100  0
 0  0      0 847324  10104  36456    0    0     0     0  424  573  0  0 100  0
 0  0      0 847324  10104  36456    0    0     0     0  425  568  0  0 100  0

ほとんど無負荷状態?なのかな?

top コマンドでみると、dvbstream が 1% 程度使用しているようなので、合ってそうな雰囲気。

これに ts.pl ではなく、ぱぱネットさんの dumpeit を使えば、デコード&ファイル保存は CPU パワー的には何とかなりそう。

残りの懸念は、HDD。PandaBoard には SATA がないので USB で HDD に書くしかない・・・遅そうだなぁ。

ぱぱネットさんのブログにはHDD がボトルネックかもといった話もあったからなぁ・・・。

 

UOT-100(LOG-J100)用ドライバのビルド手順

昨日のブログの手順は PandaBoard で再度試したら結構間違っている部分があったり、PandaBoard では時間がかかりすぎる部分があったので、再度 LOG-J100 用のドライバの作り方を書いておきます。

PandaBoard でも、Ubuntu 11.04 (画面不要の Headless版) をインストール後、以下の手順でビルドできます。

まず、ツールチェーンと kernel source をインストール

$ sudo apt-get install build-essential linux-source-`unamr -r`

前回は apt-get build-dep linux-image-`uname -r` を実行しましたが、ダウンロードに時間がかかりますし、上記で十分です。

作業ディレクトリを作成

$ mkdir -p ~/project/oneseg
$ cd ~/project/oneseg

ダウンロードディレクトリを作成し、そこに UOT-100 用ドライバと LOG-J200 用ドライバのソースをダウンロードします。

$ mkdir file
$ cd file
$ wget http://linux.papa.to/image/logj200_linux_20090126.tar.gz
$ wget http://jaist.dl.sourceforge.jp/uot100/29431/uot100-0.1.tar.gz
$ cd ..

ダウンロードしたドライバソースと kernel を展開

$ mkdir logj200
$ tar xf file/logj200_linux_20090126.tar.gz -C logj200
$ tar xf file/uot100-0.1.tar.gz
$ tar xf /usr/src/linux-source-2.6.38.tar.bz2

UOT-100 のドライバに LOG-J200 のパッチを当てます。

$ cd uot100-0.1/dvb-usb
$ patch -p0 < ../../logj200/uot100-logj200.0.3.patch
$ cd ..

dvb-usb/uot100.c の先頭付近にある #define ENABLE_LOGJ200 をコメントアウトします。

$ vi dvb-usb/uot100.c
...hack!hack!...

カーネルソースから必要なヘッダを uot100-0.1/include にコピーしてきます。

$ mkdir include
$ cp ../linux-source-2.6.38/drivers/media/dvb/{dvb-core,dvb-usb,frontends}/*.h include/

Makefile をつくります。

$ echo 'EXTRA_CFLAGS += -I$(src)/../include -I$(src)/../frontends' > dvb-usb/Makefile
$ echo 'obj-m := uot100.o' >> dvb-usb/Makefile
$ echo 'EXTRA_CFLAGS += -I$(src)/../include -I$(src)/../frontends' > frontends/Makefile
$ echo 'obj-m := mtv211.o' >> frontends/Makefile

ビルドします。

$ make -C /lib/modules/`uname -r`/build M=`pwd`/dvb-usb modules
$ make -C /lib/modules/`uname -r`/build M=`pwd`/frontends modules

これでビルド完了です。

使うときは

$ sudo modprobe dvb-usb
$ sudo insmod dvb-usb/uot100.ko
$ sudo insmod frontends/mtv211.ko

です。あとは dvbstream で受信できます。