arduinoのA/D変換速度遅いなあ

●動機

今、Processing使って簡素なメディアアートもどきを作ってる。
メディアアートと言うからには珍妙な入力デバイスが必要なので
arduinoのA/D変換機能で入力デバイスを作ろうと思ってる。
そこで、A/D変換に要する時間が気になった。
変換にかかる時間が短ければ、精度の高い入力デバイスが作れるかも。


●目的

arduinoの1回あたりのA/D変換にかかる時間の計測


●対象

arduino Diecimila 準互換の Boarduino
ATmega168タイプだよ

●方法

int ad;    //A/D出力値を格納するだけ

void setup()
{
}


void loop()
{
  digitalWrite(9, HIGH);  //デジタル9pinをHIGHに
  ad = analogRead(2);    //アナログ2pinから読み込み
  digitalWrite(9, LOW);
  ad = analogRead(2);
}

のスケッチを書き込み。
全力でA/D変換して、変換ごとにデジタル9pinをON/OFFさせる。

このデジタル9pinをオシロで計測。
A/D変換に要する時間と周波数を求める。



●結果

変換にかかる時間:119μsec
最短繰り返し周波数:8.40kHz

LOWに下がりきってないけど、
これはプルダウン抵抗が付いているため。
電荷が抜けきってない、と思われる。
ってか、出力ポートの定義をきちんと設定して無いじゃん・・orz




●考察

もっと速く変換する方法あるのかもしれないけど、知らん。まあいいや。


標本化定理で考えると、
  8.4(kHz) / 2 = 4.2(kHz)
の周波数までしかA/D変換でサンプリングできない。
標本化定理はあくまでsin波の話だから、一般データを計測しようと思ったら
さらに 1/2 で 2.1kHz が最大計測可能周波数って所。
電話音声をぎりぎり変換できる程度・・・。ちょと残念。