Arduino Oscilloscope ?

Hello guys !
I've must build my own pc based oscilloscope and since I have an arduino board I want to build an PC based osciloscope for / with arduino or other AVR . Can somebody advice me in this way ?

Somebody who build such a thing and it is satisified with it ?

I know here it is an AVR / arduino board but they are welcome any ideea. Even PIC based one's .

Thank you in advance for your colaboration.

Best regards.

Here is one that has been on the forums. A simple google search will yeild allot of options and ideas for using the arduino as an O-scope. There is even a shield for this.
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1233536778

What I would like to do (if I had the time and didn't have my UGV project) would be to use the Arduino (or something similar) to act as a "go between" with my G1 (Android) phone - where the Arduino processes the signals, then outputs via USB to the phone - either over the audio connection (via a VCO done in software/hardware on the Arduino end), or USB (trickier, since you would have to make a custom "Arduino"-based interface with a chipset for USB mastering, since Android phones are slave USB devices as well). The phone would serve as a GUI and display of the waveforms.

Right now, on the Android Marketplace, there is an absolutely wide open arena in the "electronics applications" market - there are maybe 5 or 6 apps worth anything there; one is an oscilloscope that uses the microphone input (so AC audio-frequency signals only; no way to use it for DC signals like square-wave digital signals); it also is lacking in many useful features according to reviews (and you have to pay for it to find this out, $1.99 or something). There are also tons of other possible applications in the electronics arena that would be perfect for Android-based phones like the G1.

I know that with such an interface, based on an Arduino (or similar platform - the 644 like used in the Fuzebox, would make another great interface), and connected to an Android phone; you wouldn't get the fastest scope on the planet (you would be lucky to get 40 kHz), but you could make something useful and quick to use for the occasional bench or field probing.

I found some schematics:

http://tomeko.net/projects/armscope/doxygen/index.html

Thank you very much for everything.

void setup()
{
Serial.begin(4800);
}
byte a;
byte b;
byte c;
byte d;

void pack(byte ch1,byte ch2,byte ch3,byte ch4)
{
Serial.print('x');
Serial.print(ch1);
Serial.print(ch2);
Serial.print(ch3);
Serial.print(ch4);
Serial.print('\n');
}

void loop()
{
a=random(0,255);
b=random(0,255);
c=random(0,255);
d=random(0,255);

pack(a,b,c,d);

}

import sys
import serial
import numpy as np
import gtk
import matplotlib
matplotlib.use('GTKAgg')
import matplotlib.pyplot as plt

ser=serial.Serial('/dev/ttyUSB0',1200,timeout=1)
n=500
pitch_raw = range(0,n)
pitch_kalman=range(0,n)
roll_raw=range(0,n)
roll_kalman=range(0,n)
dummy='dummy'

fig=plt.figure()
ax1=fig.add_subplot(211)
ax2=fig.add_subplot(212)

def update(array,val):
for i in range (0,n-1):
array*=array[i+1]*

  • array[n-1]=val-90*
    frequency = n
    x=np.arange(1,n+1,1)
    #x=np.arange(1,n+1,1)
    *plt.subplot(211) *
    # ax=fig.add_subplot(211)
    plt.ylabel(' PITCH ')
    line1, =ax1.plot(x,pitch_raw,lw=1,color='red')
    line2, =ax1.plot(x,pitch_kalman,lw=2,color='blue')
    plt.axis([0,frequency,-90,90])

# ax=fig.add_subplot(212)
plt.subplot(212)
plt.ylabel(' ROLL ')
line3,=ax2.plot(x,roll_raw,lw=1,color='red')
line4,=ax2.plot(x,roll_kalman,lw=2,color='blue')
plt.axis([0,frequency,-90,90])
def animate():

  • #for i in range(0,1000):*
    *# while 1 : *

  • temp=0*

  • temp=ser.readline()*

  • temp=temp+dummy*

  • if temp[0] == 'x':*

  • if temp[5] == '\n':*

  • update (pitch_raw ,ord(temp[1]))*

  • update(pitch_kalman,ord(temp[2]))*

  • update(roll_raw,ord(temp[3]))*

  • update(roll_kalman,ord(temp[4]))*

  • else:*

  • print "MISSED"*

  • #plt.subplot(211)*

  • line1.set_ydata(pitch_raw)*

  • line2.set_ydata(pitch_kalman)*

  • #plt.subplot(212)*

  • line3.set_ydata(roll_raw)*

  • line4.set_ydata(roll_kalman)*

  • fig.canvas.draw_idle()*

  • return True*

import gobject
#gobject.idle_add(animate)
gobject.timeout_add(50,animate)
plt.show()
ser.close()

the above code was made 4 my uni project.arduino sends 4 channels of data to python . python unpacks the data and plots it in real time.
i have a quad rotor in the making. this was to test its signals and filtering algorithms.
Hope it helps