I.MX6UL internal ADC
From ArmadeusWiki
Introduction
This description uses Linux kernel >= 4.8.
i.MX6UL (processor of OPOS6UL has an integrated 12 bits 16 channels Analog to Digital Converter.
Only channels 0-6 may be used to generic conversions and channels 2, 3, 4, 5 are used for the touchscreen on OPOS6ULDev.
- Channel 1 is available on J21 pin 40 of OPOS6ULDev (AIN1/YNLR: muxed with touchscreen)
- Channel 2 is available on J21 pin 38 of OPOS6ULDev (AIN2/YPLL: muxed with touchscreen)
- Channel 3 is available on J21 pin 39 of OPOS6ULDev (AIN3/XNUR: muxed with touchscreen)
- Channel 4 is available on J21 pin 37 of OPOS6ULDev (AIN4/XPUL: muxed with touchscreen)
Driver
Driver is by default included if you choose an OPOS6UL as target.
Otherwise, you can select it that way:
[ ] $ make linux-menuconfig
Device Drivers ---> ... <*> Industrial I/O support ---> ... Analog to digital converters ... <*> Freescale vf610 ADC driver
Then compile the distribution :
[ ] $ make linux && make
Use it
Read channels value
# cd /sys/bus/iio/devices/iio:device0 # ls buffer in_voltage11_raw in_voltage2_raw name dev in_voltage12_raw in_voltage3_raw power in_temp8_raw in_voltage13_raw in_voltage4_raw scan_elements in_temp9_raw in_voltage14_raw in_voltage5_raw subsystem in_voltage0_raw in_voltage15_raw in_voltage6_raw trigger in_voltage10_raw in_voltage1_raw in_voltage7_raw uevent
To read ADC value just «cat» the corresponding input file:
# cat in_voltage0_raw for channel 0 4095
All values are not converted (ie. directly show the register content). To have the mV value, you must doi: value_mV = read_value * 1850/4095