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に入れてゆっくり(?)転送する。
ではないかと。
コメントはありません