I am pretty new to Microcontrollers. So I have little idea of their potentials.
I want to make an oscilloscope using a microcontroller which will capture data through ADC and transmit it through usb to the Computer for processing and displaying.
I want to discuss this project. The resources I have are as follows:
1) The ADC of my dsPIC MCU is capable of providing 1.1 Msps, where each sample is of 10-bit resolution. It has the ability to do simultaneous sampling for upto 4 channels at a time.
2) MCU has USB support and DMA channels for transferring data from ADC to directly USB as well.
My questions are:
1) What is the fastest sampling rate I can acheive using these specs?
2) Is this project feasible? Will it be fast enough to compete against a standard Oscilloscope?
3) How can I optimize for the MCU to give best possible performance?
4) How would you make this project? (your approach)
5) I will be using JavaFx for making the Computer application capable of showing the results of this oscilloscope. Is this the right approach?
I've done a good bit of work using dsPIC family MCUs. I'll attempt to answer your questions in order.
1) What is the fastest sampling rate I can acheive using these specs?
Your sampling rate is just as you said, 1.1 Msps (Mega-samples-per-second), assuming you only want to read from one channel. If you want to read from more than one channel, your maximum sampling rate per channel will decrease.
2) Is this project feasible? Will it be fast enough to compete against a standard Oscilloscope?
This is definitely a feasible project given that you have a basic understanding of microcontroller programming and basic circuit principles. Your oscilloscope should be comparable to any other oscilloscope offering a 1.1 Msps sample rate minus some functionality such as support for 10x probes (unless you build the circuitry for that functionality). Most of the advanced features of this project will be built into your Java program rather than the microcontroller itself.
3) How can I optimize for the MCU to give best possible performance?
To get the fastest performance out of your MCU as possible, run the clock as fast as the specs support, and try to find ways to achieve the same result in your program with the least amount of instructions. This could mean avoiding data formatting on the MCU side in favor of allowing the client program to do these calculations.
4) How would you make this project? (your approach)
ADC operations on these MCUs isn't particularly complex. The built-in modules make the project very manageable. The most programmatically difficult part of this project (in my opinion) is going to be transferring and receiving data over USB. I would tackle this part of the project first (that is making USB work on the PIC and being able to receive and process that data realtime from within Java). If you are using a PIC24 or dsPIC33 family or similar 16-bit MCU with the Microchip compiler I recommend using a C library such as this one: http://www.reesemicro.com/Home/pic24-software-library-collection
5) I will be using JavaFx for making the Computer application capable of showing the results of this oscilloscope. Is this the right approach?
I have never used JavaFx so I am not sure of its capabilities, but I am sure that some Java user interface library is capable of this. Perhaps someone more knowledgeable on JavaFx could answer this part of the question?