This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] ADC081C021:如何设定 DAC 的高电平、低电平、警报、读取 DAC 结果

Guru**** 2382480 points
Other Parts Discussed in Thread: ADC081C021, AM3357
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/895121/adc081c021-how-to-program-the-high-low-alert-of-the-dac-read-the-dac-result

器件型号:ADC081C021
主题中讨论的其他器件: AM3357

员工、

我对 Linux 开发环境非常陌生、有一些问题希望您能帮我解决。

我的 Linux env 使用 TI AM3357和 Linux 内核4.14.96 (Linaro)、并使用 ADC081C021进行电池监控。  

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

KernelConfig 具有以下功能:

CONFIG_IIO=y
CONFIG_IIO_buffer=y

CONFIG_IIO_KFIFO_BUF=y
CONFIG_IIO_Trigged_buffer=y
未设置# CONFIG_IIO_CONFIGFS
CONFIG_IIO_TRIGG=y

#模数转换器

CONFIG_TI_ADC081C=y

////////////////////////////////////////////////////////////////////////////////////////////

设备树有的

- TPS:TPS@2D{
- reg =<0x2D>;
+ tampbatt:adc081c@54{
+ compatible ="ti、adc081c";
+ reg =<0x54>;
};
};

-tscadc{
+&GPIO2{
+ pinctrl-names ="default";
+ pinctrl-0 =<&GPIO2_PINs>;
状态="确定";
- TSC{
- TI、电线=<4>;
- TI、x 板电阻=<200>;
- ti、坐标读数=<5>;
- TI、wire-config =<0x00 0x11 0x22 0x33>;
- TI、充电延迟=<0x400>;
-};
-
ADC{
- TI、ADC-CHANNELS =<4 5 6 7>;
-};
}; 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

我看到 /sys/bus/iio/devices 下列出的 IIO:device0

当我更改为 IIO:device0时、它更改为 /sys/devices/platform/ocp/44e0b000.i2c/i2c-0/0-0054/iio:device0

问: 这条路径意味着什么? 我想0-0054来自 tampbatt:devicetree 中的 adc081c@54、但不知道其他器件是什么

我想下面的 ADC 是注释掉的(我是不是正确的?) 器件。 因此、它默认为一个通道、因为我仅看到 IN_VOLTGE_RAW。 
- ADC{ - TI、ADC 通道=<4 5 6 7>; -};

问:如果我需要更多通道,我只需将-更改为+即可启用通道4、5、6、7。 否则、它默认为仅一个通道、对吧?

当我执行 ls -al 命令时、我看到以下内容:

/sys/devices/platform/ocp/44e0b000.i2c/i2c-0/0-0054/iio:device0 # ls
缓冲器 IN_VOLTGE_SCALE_ELEMENTS 扫描元素
CURRENT_TIMESTAMP_CLOCK 名称子系统
DEV_node 触发
IN_VOLTGE_RAW 功率 uevent

问:为什么我在 IN_VOLTAGE_RAW 中看到 IN_VOLTAGE0_RAW。  电压不会附加0 (零)。 这是正常的吗?

当我执行# cat in_volte_raw 时、返回0。  

我的应用代码、用于读取 DAC、如下所示。 结果为零、因为我尚未安装电池。

int output_fd;
char adcName[]="/sys/bus/iio/devices/iio:device0/in_volte_ray";
output_fd = open (adcName、O_RDWR);
if (output_fd < 0){
log (LL_INFO、"打开 ADC 失败\n");
int * exit;
pthread_exit (exit);
}
while (1)
{
/*读取 ADC 电压*/
int readResult =读取(output_fd、有效载荷、BUF_size);
log( LL_info,"ADC 输出为%s readResult =%d \n",PAYLOAD, readResult);
usleep(40000);
}

Close (output_fd); 

问:上面的代码是否是用户空间代码读取 DAC 转换值的正确方式? 如果我想使用 高/低和警报限值对 ADC081C021进行编程、我该怎么做。 我可以参考一个示例吗?

我已通读这些链接 http://software-dl.ti.com/processor-sdk-linux/esd/docs/latest/linux/Foundational_Components/Kernel/Kernel_Drivers/ADC.html 

但请勿查看如何 在用户空间代码(我的 C 代码)中使用高/低和警报限制对 ADC081C021进行编程。

非常感谢您的任何帮助。

-Tom

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tom、

    遗憾的是、您的问题与 Linux 软件更相关、因此我建议您向 Linux 社区寻求帮助。 我们不开发或支持 Linux 软件开发,即使它与我们的设备一起使用。

    此器件是 I2C 器件、因此您只控制两条线路。

    对于您将来的调试、我建议使用示波器探测数字通信、以仔细检查数字线路是否在执行您期望的操作。

    此致

    Cynthia

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢 Cynthia 的答复。 我将根据您的建议在其他资源中寻求帮助。