4.9.3.2. Analog Inputs
There are six analog inputs can be sourced through the Arduino header J6. These analog signals are first divided and filtered by operational amplifier MCP6242 and related components. This circuit scales the maximum allowable analog input to 5 V which meets standard Arduino UNO* R3.
The MAX® 10 device (U3) features one ADC block with one dedicated analog input and 8 dual function pins. Six of the nine analog input pins are used for the Arduino analog input interface. The other three are used for current sense.
| Arduino Connector | ADC Channel | MAX® 10 ADC Name | MAX® 10 Pin |
|---|---|---|---|
| ARDUINO_ANA0 (J6.1) | ADC1 Channel5 | ADC1IN5 | U3.C1 |
| ARDUINO_ANA1 (J6.2) | ADC1 Channel0 (Dedicated Channel) | ANAIN1 | U3.D2 |
| ARDUINO_ANA2 (J6.3) | ADC1 Channel1 | ADC1IN1 | U3.D1 |
| ARDUINO_ANA3 (J6.4) | ADC1 Channel8 | ADC1IN8 | U3.E1 |
| ARDUINO_ANA4 (J6.5) | ADC1 Channel7 | ADC1IN7 | U3.F1 |
| ARDUINO_ANA5 (J6.6) | ADC1 Channel4 | ADC1IN4 | U3.E4 |
Cyclone® 10 LP FPGA device communicates with the ADC block in the MAX® 10 device on the board through the ADC I2C interface, which supports both 100 KHz and 400 KHz I2C clock frequency. The ADC output value is 12-bit data and I2C data is 8-bit. Hence two register addresses are used to store 12-bit ADC output data. These registers are all read only. The ADC I2C slave address of ADC block is 0x5E.
| Arduino Connector | Register Address |
|---|---|
| ARDUINO_ANA0 (J6.1) | 0x31, 0x30 |
| ARDUINO_ANA1 (J6.2) | 0x27, 0x26 |
| ARDUINO_ANA2 (J6.3) | 0x29, 0x28 |
| ARDUINO_ANA3 (J6.4) | 0x37, 0x36 |
| ARDUINO_ANA4 (J6.5) | 0x35, 0x34 |
| ARDUINO_ANA5 (J6.6) | 0x2F, 0x2E |
Use the formula to covert ADC output value to voltage:
Voltage = (ADC_Output_Value/4096) * VREF * R_Divider
ADC_Output_Value is the value in Decimal read from ADC I2C bus as described above.
VREF is the MAX® 10 ADC reference voltage. Use 3.3 V when using MAX® 10 internal reference source.
R_Divider 2 is a resistors divider value along with operational amplifier MCP6242 in order to allow tolerance up to 5 V analog input. By default, it is 2.
- Read value of 0x30 register address is 0xB9 and read value of 0x31 register address is 0x3, then the ADC output value is 0x3B9, or in decimal, 953. Hence,
ADC_Output_Value=953
- The MAX® 10 internal reference voltage is used so
VREF = 3.3 V
- Divider resistor values are R217 = 316 ohm and R216 = 316 ohm, so
R_Divider = R217/R216 + 1 = 2
- Calculated the analog signal voltage on ARDUINO_ANA0 (J6.1) is
Voltage @ ARDUINO_ANA0 = (953/4096) * 3.3 * 2 = 1.54 V