当前位置: 首页 > news >正文

优秀购物网站建设外包网络推广公司

优秀购物网站建设,外包网络推广公司,怀化seo快速排名,wordpress php学习IMX6ULL一共有两个ADC#xff0c;每个ADC都有八个通道#xff0c;但他们共用一个ADC控制器 1.设备树 在imx6ull.dtsi文件中已经帮我们定义好了adc1的节点部分信息 adc1: adc02198000 {compatible fsl,imx6ul-adc, fsl,vf610-adc;reg 0x0219…IMX6ULL一共有两个ADC每个ADC都有八个通道但他们共用一个ADC控制器 1.设备树 在imx6ull.dtsi文件中已经帮我们定义好了adc1的节点部分信息 adc1: adc02198000 {compatible fsl,imx6ul-adc, fsl,vf610-adc;reg 0x02198000 0x4000;interrupts GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH;clocks clks IMX6UL_CLK_ADC1;num-channels 2;clock-names adc;status disabled; };注意 num-channels 2;这个表示指定使用ADC1的两个通道即通道1和通道2 如果你要使用多个ADC通道修改这个值即可 配置ADC引脚的 pinctrl在自己的设备树.dts中引用adc1并指定 pinctrl子系统也就是指定引脚 首先在根节点下定义 pinctrl /* chenshao ADC1_CH1 GPIO1_IO01 */ pinctrl_adc1: adc1grp {fsl,pins MX6UL_PAD_GPIO1_IO01__GPIO1_IO01 0xb0 ; };接着在 regulators 节点下设置ADC的参考电压设置为5V因为MQ135输出最大模拟电压是5V /* chenshao ADC vref 5.0V */ reg_vref_adc: regulator2 {compatible regulator-fixed;regulator-name VREF_5V;regulator-min-microvolt 5000000;regulator-max-microvolt 5000000; };最后在根节点之外引用adc1节点并指定引脚可参考电压节点 /* chenshao ADC1 */ adc1 {pinctrl-names default;pinctrl-0 pinctrl_adc1;num-channels 2; /* 2个通道gpio1_io0占用一个 */vref-supply reg_vref_adc;status okay; };2.直接查看ADC值 1.进入iio总线下的设备目录 cd /sys/bus/iio/devices/iio:device0/2.ls查看 ------------------------ dev of_node in_voltage0_raw power in_voltage1_raw sampling_frequency_available in_voltage_sampling_frequency subsystem in_voltage_scale uevent name3.查看ADC通道1原始值由于IMX6ULL ADC为12位所以最小值为0最大值为40952^12分别对应0V3.3V或5V cat in_voltage1_raw 7214.查看电压规模 cat in_voltage_scale 1.2207031255.计算实际电压 in_voltage1_raw * in_voltage_scale 即可注意单位是毫伏 3.应用程序获取ADC和电压 读取 /sys/bus/iio/devices/iio:device0/in_voltage1_raw 文件得到ADC原始值 读取 /sys/bus/iio/devices/iio:device0/in_voltage_scale 文件得到电源规模值 两者相乘再除以1000即可得到电压值单位V PS 读取文件前使用 rewind函数 将光标移到最开头 可以使用 fscanf 读取文件 利用 atoi 和 atof 库函数转换类型 #include stdio.h #include stdlib.h #include string.h#include unistd.hconst char *voltage1_raw /sys/bus/iio/devices/iio:device0/in_voltage1_raw; const char *voltage_scale /sys/bus/iio/devices/iio:device0/in_voltage_scale;int main(int argc, char *argv[]) {FILE *raw_fd, *scale_fd;int len1, len2, res;char data[20];int raw;double scale;while(1){/* 1.打开文件 */raw_fd fopen(voltage1_raw, r);if(raw_fd NULL){printf(open raw_fd failed!\n);return -1;}scale_fd fopen(voltage_scale, r);if(scale_fd NULL){printf(open scale_fd failed!\n);return -2;}/* 2.读取文件 */rewind(raw_fd); // 将光标移回文件开头res fscanf(raw_fd, %s, data);raw atoi(data);memset(data, 0, sizeof(data));rewind(scale_fd); // 将光标移回文件开头res fscanf(scale_fd, %s, data);scale atof(data);printf(ADC原始值%d电压值%.3fV\r\n, raw, raw * scale / 1000.f);fclose(raw_fd);fclose(scale_fd);sleep(2);}return 0; }测试成功 # ./adcApp ADC原始值390电压值0.476V ADC原始值399电压值0.487V ADC原始值413电压值0.504V ADC原始值416电压值0.508V ADC原始值410电压值0.500V ADC原始值407电压值0.497V
http://www.w-s-a.com/news/325/

相关文章:

  • 商城网站设计费用网络公司怎样推广网站
  • 视频公司的网站设计工图网
  • 免费快速网站十八个免费的舆情网站