Hatena::ブログ(Diary)

花夢電科雑多log (他へ移転しました)

2008年11月14日

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

f:id:sugan:20081115030818j:image

LOWに下がりきってないけど、

これはプルダウン抵抗が付いているため。

電荷が抜けきってない、と思われる。

ってか、出力ポートの定義をきちんと設定して無いじゃん・・orz





●考察

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


標本化定理で考えると、

  8.4(kHz) / 2 = 4.2(kHz)

周波数までしかA/D変換でサンプリングできない。

標本化定理はあくまでsin波の話だから、一般データを計測しようと思ったら

さらに 1/2 で 2.1kHz が最大計測可能周波数って所。

電話音声をぎりぎり変換できる程度・・・。ちょと残念。