空を見上げて
トップページ » ソフト » スマートフォン » Nexus7(その4)

Nexus7(その4)

せっかくなので何か自作してみることにした。
ArduinoではArduinoScopeなるオシロもどきがある。
http://code.google.com/p/arduinoscope/
Processingでも書かれているのでADBやADKでも動くらしい。

以下にAndroidでやっている人がいた。
http://nznavyblue.blog.fc2.com/blog-date-20120429.html
「arduino + android(processing) でオシロスコープつくろう」
ADKってのは凄い。ちゃんととれているみたい。
ここがどうもわかっていない。まだ取りこぼししてしまう。

同じことをしてもしょうがないのでUSB直接でやってみた。
・USBの制御部分
https://github.com/ksksue/FTDriver
・Androidの描画部分
高速なのでSerfaceViewを使う参考サイト
http://bbs.flatworld.jp/node/1456
重ねあわせ(目盛りと波形)の参考サイト
http://labs.appshelf.info/2011/06/02/268/
動作としては、
・USBからバッファに取り込み
・そのバッファを描画する
ことになる。
データはArduinoから115200bpsでADしたものを転送する。
転送速度が問題なので8bitのバイナリにした。
それでも2chあるのでSyncByteを入れて1パケットは3Byteになる。
Serial.flush();
delayMicroseconds(100);
を入れないと通信ミスが発生しやすいようだ。
Arudino側は以下のようになっている。
// Pin
int analogPin0 = 0;
int analogPin1 = 1;

void setup() {
//AD
analogReference(DEFAULT);
//Serial
Serial.begin(115200);
}

void loop() {
int val;
byte bt;
//Send Sync
Serial.write(0xFF);
//Send Ch1
val = analogRead(analogPin0);
bt = (byte)(val >> 2);
if (bt == 0xFF) bt = 0xFE;
Serial.write(bt);
//Send Ch2
val = analogRead(analogPin1);
bt = (byte)(val >> 2);
if (bt == 0xFF) bt = 0xFE;
Serial.write(bt);
//Frame gap
Serial.flush();
delayMicroseconds(100);
}
わざわざ10bitを8bitにしているので、ArudinoではなくWinAVRで組めばもう少し高速になると思われる。
ただネックになっているのは通信速度で、115200bpsだと10KByte/s程度。4byte(Gap1Byte相当)で1パケットなので2.5KHz程度。
これで横1000dot=1000pointとすると描画に0.5秒程度かかる。
1chにするとSyncByteが要らなくなり、倍速になりGapも無視すればさらに倍速になる。
テキスト送信もあるが、これはソフトは簡単になるが転送速度は半減以下になる。
なんとなく、お勧めとは言えない。

オシロなので転送速度は実用範囲であればよく、例えばAD+メモリ(2Kほど)で格納しておいてシリアル転送すれば、対応周波数はあげられる。
但しAD+メモリにすると連続転送ができずフレームの概念が必要になる。
 例えば00 00 00となるとフレームの終了にするなど。(必ず0xFFが3Byteに1つあるので区別できる)
 フレームサイズはAndroidで決まるので描画以降のものは捨て、次のフレームから再描画させることになる。ただ、捨てるものが多い場合は、描画間隔が長くなり間が抜けた表示になるように思う。

 また転送だけに関して言えば、FTDIでもパラレルのFTDI245を使えば700KHzぐらいは出るらしい。同じ作者のここ。
http://d.hatena.ne.jp/ksksue/searchdiary?word=%2A%5BFTDI%5D
 なので多分方向としては
1.2.5KHzまでなら
 FTDIのシリアルでやる
2.48KHzまでなら
 AndroidがUSB-Audioをサポートしてとれるようになるのを待つ
3.350KHzまでなら
 CPUをH8なりARMなりADが高速でパラレルIOをつなげるものにしてFTDI245で転送する。
4.それ以上
 フレームの概念をもたせRAMに入れてゆっくり(?)転送する。
ではないかと。

by   at 09:00
コメント

コメントはありません

コメントを書く




保存しますか?


(書式を変更するような一部のHTMLタグを使うことができます)


Please enter the security code you see here