It is not possible to sample two signals at the exact same time with an
Arduino Uno. The Arduino has only one ADC, so you have to sample one
signal, switch channels, sample the other, switch channels again, etc.
If this is acceptable for your project, then yes, it is perfectly
feasible with an Arduino Uno. But you will have to dig into the
datasheet and program the ATmega328P low-level.
Regarding the sampling rate, you want the ADC to take 9600 samples
per second (4.8 kS/s × 2 channels). This means one sample
every 104 µs. You are lucky: in the default Arduino configuration,
the ADC conversions take exactly 104 µs. frarugi87 and Jot suggest
you reconfigure the ADC for faster sampling. This is useless: the
default sampling speed is already optimal for you application. Leave it
You also require a fixed sampling rate. This is not possible to do
with software. Configuring the ADC in auto trigger mode is the only
way to get a really steady rate. The ADC can be triggered by a timer,
but in your particular case, it is just simpler to have it trigger
itself. This is called free running mode and it gives a sampling rate
of exactly one sample every 104 µs. Perfect for your application.
Jot also suggests disabling interrupts. Do not do that! Interrupts are
harmless because the ADC manages its own timing. And they are actually
useful: I would use the ADC interrupt to retrieve the conversion result,
send it through the serial port and switch channels in the multiplexer.
If you are happy with 8-bit resolution, I recommend you enable the left
adjust result mode. This way you can retrieve the 8-bit result from the
ADCH register and you won't need to do bit shifts.
I guess that the transmission rate would be too slow to do this in
real time. I will have to store this somewhere in the Arduino board so
it can be transmitted afterwards.
Both options are possible. If you send the data in binary, you will need
a baud rate of at least 9600 bytes/s × 10 bits/byte
= 96 kb/s. You can opt for 115.2 kb/s, which is standard
and widely supported. If you want to store the data, then you will need
9600 bytes/s × 0.1 s = 960 bytes, or about half
the Arduino RAM. This is fine, as the program can be quite simple, so it
won't need more than half the available RAM.
Just to give you some inspiration, I suggest you take a look at this
mine. It configures the ADC in free-running mode at 9.6 kS/s and
retrieves the result using the ADC interrupt. I would use the same ADC
configuration for your project, only with left-adjust and with channel
switching performed by the interrupt handler.
Edit: I just wrote a “dual channel oscilloscope” program along the
lines of this answer: dual-scope.c. It's written in plain C, but it
can also be compiled as a regular .ino file. I only tested it with
constant voltage inputs though.
The program ended up being tiny: it uses about 1% of the flash, 1.4% of
the RAM and 3.4% of the CPU power on an Arduino Uno. Meaning you could
add stuff to it if you feel so inclined.