Nexus7(その10)
Aruduinoの高速転送について。
画像は無理にしても音声帯域ぐらいはなんとかしたい。
高速化の手段の案。
1)Arudino UNO R3にする。
https://twitter.com/seewn/statuses/177488910165872640
UARTにて921600bpsで動作可能・・・化けたりもしないし~素晴らしい
とある。
UNOはFTDIではなく...
USBシリアルの石がATMEGA8U2からATMEGA16U2に変更になりました。
となっている。マスターはATMEGA328P。
違うかもしれないが、FTDIは別のClock周波数(48MHzとか)で動いているのに対して、シリアル変換のATMEGA16U2もマスターと同じクロック周波数(16MHz)なのでうまく行くのかもしれない。以下の回路図をみた感じ。
http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf
だとすれば、案外921600bpsは出るのかも。
最短距離で美しいような気がする。
但し、例のAndroidのFTDriverは動作しない模様。
http://iwatanlab.blogspot.jp/2011/11/androidusbarduino.html
となると同じATMEGA16U2を採用しているAruduino Megaも同じだろう。
ソースを読むとCDCの記述もあるので、そちらに見せると動くかもしれないが不明。
2)シリアルを921600bpsにする
単純にやるとクロック誤差の問題になる。つまりArduinoは16MHzなので正確なボーレイトがでず高速になるほどシビアになる。
なので「ArduinoのClockを14.7456MHzにする」とやってしまうとBootから書き換えになり大変になる。そこで、水晶をソケットにしておいて、「書き込みは16M」にして、「動作時は14.7456MHz」に差し替える。
タイミング関係が全て遅くなるが、ボーレイト設定レジスタを初期化後に再設定すれば案外...。
3)FT232H SPI転送
前に書いたようにFT232HというのがあってUSBのハイスピード対応。
SPIなどでも接続できるのでそれでやる。ただ実効速度などは不明だが、このChipに高速で書き込みできればいいのだが...。
それとまだFT232Hの価格が高かったりする。
4)シリアルを同期転送にする
TxD,RxD以外にCLKが必要になるが、これは高速になる。AVRではそういうのもある。ただFTDI(のFT232H以外)はサポートしていない模様。そもそもUSBシリアル変換器では同期転送がないのが一般的なような。であればAVRやPICでCDCを組んで、それを同期式にすればできるとは思うが道のりが大変そう。
素直に考えると
・Arudino UNO R3にする(PCで921600bpsを確認)
・FTDriverを改造して対応版を作成する
で921600bpsで通信すれば100KHzなので50KHz程度のFreeRunが可能。何か入れても転送で25KHzぐらいはいけるのかもしれない。
ADに関しては今のArudinoは10bit保証にしているが、8bit保証なら周波数をあげれば1ch=13-25usぐらいにはなりそう。2chで20KHzほど。
ただ、Arudinoのライブラリは使えないので自前で記述する必要がある。
本当かどうかわからないが...。
保険でRAMも買っておけば...。
http://www.switch-science.com/products/detail.php?product_id=1072
興味はあるが、オシロを作っても使わないような...。
アンプも作らないと実用には遠いかも。
・Arudino UNO R3は921600bpsで動くか?
・Arudino UNO R3をAndroidにつなげてみる
・ADを含めて素のArudino UNO R3でどこまでいけるのか?
...興味があるにはある。
まあ転送が早くてRAMもあれば何か使えるような気がするが...。
デジタルは早いので8chのロジアナとか...。
・シリアルRAMはどの程度の周波数で動くのか?
も興味がある。
遅い感じもあるし、8KでいいのならArudino Megaって手もある。
コメントはありません