Intel® Cyclone® 10 LP FPGA Evaluation Kit User Guide

ID 683580
Date 12/19/2019
Document Table of Contents 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 Intel® 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.

Table 18.  Arduino Channel Connections
Arduino Connector ADC Channel MAX 10 ADC Name MAX10 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

Intel® Cyclone® 10 LP FPGA device communicates with the ADC block in the Intel® 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.

Table 19.  Register Addresses for Arduino Channels
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.

For example, if you want to measure analog input value on ARDUINO_ANA0 (J6.1).
  1. 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,
  2. MAX 10 internal reference voltage is used so
    VREF = 3.3 V
  3. Divider resistor values are R217 = 316 ohm and R216 = 316 ohm, so
    R_Divider = R217/R216 + 1 = 2
  4. Calculated the analog signal voltage on ARDUINO_ANA0 (J6.1) is
    Voltage @ ARDUINO_ANA0 = (953/4096) * 3.3 * 2 = 1.54 V
Figure 10. Arduino Analog Input Calculation Example
2 Different analog outputs on Arduino shield have different output impedance, these divider resistor values may need to be adjusted based on your application.