Top > FLIR_Lepton > Arduino

広告

ArduinoFLIR Leptonのデータを読み込む

そもそもの事の起こりは、FLIR Leptonモジュールのピン配置がArduinoに合わせてあるし、今はなくなっているがサンプルプログラムもあったからArduinoでできるのだろうと思ったことにある。

データシートによると1/27秒(約37msec)の間に9840バイト(164バイトx60行)のデータを読み込む必要がある。

UNOやNanoに使われているATMEGA328Pだと変数に使えるメモリが2kBしかないので、Leptonのデータをまるまる展開できない。

また、SPIの周波数も最高でCPUのクロックの1/2までなので、8MHzまでしか出ない。
8MHzだと1バイトを読むのに1usec必要で、9840バイト読むのは10msecあれば良いので大丈夫なように思えるが、実際には1バイト読むのに3usecほど掛かり、9840バイト読むには約30msec掛かる。

大丈夫じゃんと思うかもしれないが、これはあくまでもLeptonデータを読むだけ。
外に出力しようとするともっと時間が掛かるため、1/27秒を超えてしまう。

例えば、115200bpsでシリアル通信したとすると、単純には一秒間に14400バイトしか送れないので、Leptonデータ(9840バイト)を送るには約0.7秒掛かってしまう。1/27秒には全然到達しない。

一度すべてのデータを取ってから送ることができれば1/27秒でデータを読でから送ることができるが、上で書いたようにメモリが2kBしか無いからこれは不可能だ。

じゃあ分割して取ってから送るとどうかとなる。例えば一行分の164バイトを読み取ってから送るとすると、

  • 164バイトを読み込むのに約0.5msec掛かる
  • 164バイトを115200bpsの2倍の230400bps(Arduinoで設定可能)で送っても約6msec掛かる
  • 60行読むと390msecとなり1/27秒より10倍も時間がかかってしまう。

通信速度をさらに2倍の460800bpsにしてもまだ5倍の開きがあり、Arduinoでこの速度は正確に送れない。
そもそもLeptonデータを読み込むのに30msec掛かっているのだから、データを送信する時間は7msecより短くしなくちゃなららいからほぼ不可能だろう。

メモリを増設してまずそれに書き込めばいいのではと思ってやってみたが、そもそもメモリに書き込む時もSPIなのでLeptonからデータ読み込む時と同じ時間が掛かる!!

そしてよくよくFLIR Leptonモジュールのページを見てみると、

Note2: The UNO Arduino is not fast enough (unless coding in assembly) to capture an image. 

なんてこっそり書いてある!
それなら「Arduinoでも使える」なんて書かないで欲しい。まあ速くてメモリの大きいCPUを持つArudino Dueなら出来るのだろうけど。
実際にArudino Dueでやっている人もいる。

というわけでよくよく考えてみればできないことをやってはまってしまった話でした。


広告

リロード   差分   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Tue, 15 Dec 2015 02:03:47 JST (3503d)