« GeoGebra5.0betaでは3次元グラフが描ける、、、ということは描くものはもうこれしかないだろう(おっぱい方程式) | トップページ | 今TBSで”世界の超S級危険生物コレクション”見てたら、手話で会話するゴリラ、ココが子猫を失ったときの映像が、、、悲しすぎる、、、 »

2013年4月 3日 (水)

Arduino UNOとExcelでオシロっぽい何かを作る(高速化編)

Arduino UNOとExcelでオシロっぽい何かを作る、というのをだいぶ前にやってみた。

P1010149

その時はA/Dコンバータの速度が遅くて、もう1kHzくらいで限界だった。例えば、ファンクションジェネレータ((Tenma 72-5016)を発掘)で正弦波を入れてみると、上から1kHz、5kHz、10kHzだが、もう5kHzではちゃんと拾ってない。。。

Lowspeedadc

実際のATmegaはもっと速いはず、、、と思って調べると、高速化の話が出てました。

http://arduino.cc/forum/index.php/topic,6549.0.html

なるほど、プリスケーラの値を変えればいいと。

const int analogInPin = A0;

unsigned long Time[256];
int Volt[256];
void setup() {

   Serial.begin(57600);

   #ifndef cbi
   #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
   #endif
   #ifndef sbi
   #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
   #endif

   cbi(ADCSRA,ADPS2) ;
   sbi(ADCSRA,ADPS1) ;
   cbi(ADCSRA,ADPS0) ;
}

void loop() {
   unsigned int i;
   
   Serial.println("A");

   for (i=0;i<256;i++) {
     Time[i]=micros();
     Volt[i] = analogRead(analogInPin);
    delayMicroseconds(2);
   }

  for (i=0;i<256;i++) {

     Serial.print(Time[i]);
     Serial.print(" ");
     Serial.println(Volt[i]);

   }

}

というようなプログラムをArduinoに入れて、Excelの方はEasyCommを使って、

(*EasyCommはお手軽にシリアル通信できるすぐれものソフトです。http://www.activecell.jp/download/

Option Explicit

Private Sub CommandButton1_Click()

    Dim s As String
    Dim i As Integer, j As Integer
    Dim temp As Variant
    Dim Time As Double, Volt As Double, Time0 As Double

    ec.COMn = 4
    ec.HandShaking = ec.HANDSHAKEs.No
    ec.Setting = "57600,n,8,1"
    ec.Delimiter = "CRLF"

    ec.InBufferClear
    s = ec.AsciiLine

    For j = 0 To 300

    Application.ScreenUpdating = False
    s = ec.AsciiLine
    If s = "A" Then

      s = ec.AsciiLine
      temp = Split(s, " ")
      Time0 = CDbl(temp(0)) / 1000000#
      Volt = 4.95 * (CDbl(temp(1)) / 1023#)
      Worksheets("Sheet1").Cells(2, 3) = 0#
      Worksheets("Sheet1").Cells(2, 4) = Volt

      For i = 1 To 255
        s = ec.AsciiLine
        temp = Split(s, " ")
        Time = CDbl(temp(0)) / 1000000#
        Volt = 4.95 * (CDbl(temp(1)) / 1023#)
        Worksheets("Sheet1").Cells(i + 2, 3) = Time - Time0
        Worksheets("Sheet1").Cells(i + 2, 4) = Volt
      Next i

      Application.ScreenUpdating = True

    End If

  Next j

  ec.COMn = 0
End Sub

のようなプログラムで見てみると、、、上から1kHz、10kHz、20kHzまでそれなりに見えてる。

Hispeedadc

こんな感じで実験してます。

P1010147

 




		

« GeoGebra5.0betaでは3次元グラフが描ける、、、ということは描くものはもうこれしかないだろう(おっぱい方程式) | トップページ | 今TBSで”世界の超S級危険生物コレクション”見てたら、手話で会話するゴリラ、ココが子猫を失ったときの映像が、、、悲しすぎる、、、 »

学問・資格」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Arduino UNOとExcelでオシロっぽい何かを作る(高速化編):

« GeoGebra5.0betaでは3次元グラフが描ける、、、ということは描くものはもうこれしかないだろう(おっぱい方程式) | トップページ | 今TBSで”世界の超S級危険生物コレクション”見てたら、手話で会話するゴリラ、ココが子猫を失ったときの映像が、、、悲しすぎる、、、 »

最近の記事

最近のコメント

2025年1月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
フォト
無料ブログはココログ