README.md 2.0 KB

Y-configuration of resistors

V_in - V_out = I_in * R_in
V_ref - V_out = I_ref * R_ref
V_out = (I_in + I_ref) * R_gnd

I_in = (V_in - V_out) / R_in
I_ref = (V_ref - V_out) / R_ref
V_out / R_gnd = I_in + I_ref =
    = (V_in - V_out) / R_in + (V_ref - V_out) / R_ref
(V_in - V_out) / R_in = V_out / R_gnd - (V_ref - V_out) / R_ref
V_in - V_out = (V_out / R_gnd - (V_ref - V_out) / R_ref) * R_in
V_in = (V_out / R_gnd - (V_ref - V_out) / R_ref) * R_in + V_out =
     = V_out * (1 + R_in / R_gnd + R_in / R_ref) - V_ref * R_in / R_ref

for V_out=0:

V_in = -V_ref * R_in / R_ref

for V_out=Vref:

V_in = V_ref * R_in / R_gnd + V_ref

alternatives:

rgco: Multichannel Arduino Oscilloscope

The 16MHz Arduino clock is too fast for the ADC to operate properly, therefore it needs to be prescaled. Prescale factors of 1 (no prescale) to 128 can be selected. By default, the Arduino IDE sets the prescale to 128, resulting in an ADC-clock period of 128/16MHz=8 microseconds, and thus a sampling period of 13*8=104 microseconds. Many tests have shown reducing the prescale to 16 results in only a slight loss of precision, while even faster clocks result in garbage.

The Arduino ADC can be operated in single acquisition or free running mode. The standard analogRead() function does a single acquisition and returns the value when the ADC is ready. […], it is also possible to use a loop and poll for the ADIF flag which indicates that the ADC reading is complete, […]

pcscope (source)

By default, the ADC configuration of the Arduino gives samples every 116µs. So here the ADC is configured with additional lines of code to get samples faster than 85µs by setting the prescaler to 16. With this, you get ADC conversion every 20µs, […]