国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【IMX6ULL驅(qū)動開發(fā)學習】22.IMX6ULL開發(fā)板讀取ADC(以MQ-135為例)

這篇具有很好參考價值的文章主要介紹了【IMX6ULL驅(qū)動開發(fā)學習】22.IMX6ULL開發(fā)板讀取ADC(以MQ-135為例)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

IMX6ULL一共有兩個ADC,每個ADC都有八個通道,但他們共用一個ADC控制器

【IMX6ULL驅(qū)動開發(fā)學習】22.IMX6ULL開發(fā)板讀取ADC(以MQ-135為例),IMX6ULL,驅(qū)動開發(fā),IMX6ULL,ADC,Linux驅(qū)動,mq135

1.設(shè)備樹

在imx6ull.dtsi文件中已經(jīng)幫我們定義好了adc1的節(jié)點部分信息

adc1: adc@02198000 {
	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,在自己的設(shè)備樹(.dts)中引用adc1并指定 pinctrl子系統(tǒng),也就是指定引腳

首先在根節(jié)點下定義 pinctrl

/* chenshao ADC1_CH1 GPIO1_IO01 */
pinctrl_adc1: adc1grp {
	fsl,pins = <
		MX6UL_PAD_GPIO1_IO01__GPIO1_IO01   0xb0 
	>;
};

接著regulators 節(jié)點下設(shè)置ADC的參考電壓,設(shè)置為5V(因為MQ135輸出最大模擬電壓是5V)

/* chenshao ADC vref 5.0V */
reg_vref_adc: regulator@2 {
	compatible = "regulator-fixed";
	regulator-name = "VREF_5V";
	regulator-min-microvolt = <0>;
	regulator-max-microvolt = <5000000>;
};

最后在根節(jié)點之外引用adc1節(jié)點,并指定引腳可參考電壓節(jié)點

/* 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總線下的設(shè)備目錄
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
name

3.查看ADC通道1原始值(由于IMX6ULL ADC為12位,所以最小值為0,最大值為40952^12),分別對應(yīng)0V,3.3V或5V)
cat in_voltage1_raw 
721


4.查看電壓規(guī)模
cat in_voltage_scale 
1.220703125

5.計算實際電壓
in_voltage1_raw  * in_voltage_scale 即可,注意單位是毫伏

3.應(yīng)用程序獲取ADC和電壓

讀取 /sys/bus/iio/devices/iio:device0/in_voltage1_raw 文件得到ADC原始值
讀取 /sys/bus/iio/devices/iio:device0/in_voltage_scale 文件得到電源規(guī)模值
兩者相乘,再除以1000即可得到電壓值(單位V)

PS:
讀取文件前使用 rewind函數(shù) 將光標移到最開頭,
可以使用 fscanf 讀取文件
利用 atoi 和 atof 庫函數(shù)轉(zhuǎn)換類型

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <unistd.h>


const 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;
}

測試成功文章來源地址http://www.zghlxwxcb.cn/news/detail-663971.html

# ./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

到了這里,關(guān)于【IMX6ULL驅(qū)動開發(fā)學習】22.IMX6ULL開發(fā)板讀取ADC(以MQ-135為例)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【IMX6ULL驅(qū)動開發(fā)學習】03.設(shè)置IMX6ULL開發(fā)板與虛擬機在同一網(wǎng)段(設(shè)置開發(fā)板靜態(tài)IP)

    【IMX6ULL驅(qū)動開發(fā)學習】03.設(shè)置IMX6ULL開發(fā)板與虛擬機在同一網(wǎng)段(設(shè)置開發(fā)板靜態(tài)IP)

    為什么要設(shè)置IMX6ULL與虛擬機通信? 因為要把在虛擬機下編譯的文件傳到IMX6ULL開發(fā)板上運行 設(shè)置好同一網(wǎng)段,可以互ping后,可以參考這篇博客,實現(xiàn)開發(fā)板與虛擬機的文件互傳 IMX6ULL開發(fā)板與虛擬機互傳文件 一、設(shè)置windows有線網(wǎng)卡 二、配置虛擬機雙網(wǎng)卡(原本有一個NAT網(wǎng)卡

    2024年02月07日
    瀏覽(50)
  • 【IMX6ULL驅(qū)動開發(fā)學習】19.mmap內(nèi)存映射

    【IMX6ULL驅(qū)動開發(fā)學習】19.mmap內(nèi)存映射

    mmap將一個文件或者其它對象映射進內(nèi)存 ,使得應(yīng)用層可以直接讀取到驅(qū)動層的數(shù)據(jù),無需通過copy_to_user函數(shù) 可以用于像LCD這樣的外設(shè), 需要讀寫大量數(shù)據(jù)的 一、應(yīng)用層 mmap用法: 用open系統(tǒng)調(diào)用打開文件, 并返回描述符fd. 用mmap建立內(nèi)存映射, 并返回映射首地址指針start. 對映

    2024年02月16日
    瀏覽(21)
  • 【IMX6ULL驅(qū)動開發(fā)學習】11.Linux之SPI驅(qū)動

    【IMX6ULL驅(qū)動開發(fā)學習】11.Linux之SPI驅(qū)動

    參考:驅(qū)動程序開發(fā):SPI設(shè)備驅(qū)動_spi驅(qū)動_鄧家文007的博客-CSDN博客 目錄 一、SPI驅(qū)動簡介 1.1 SPI架構(gòu)概述 1.2 SPI適配器(控制器)數(shù)據(jù)結(jié)構(gòu) 1.2 SPI設(shè)備數(shù)據(jù)結(jié)構(gòu) 1.3 SIP設(shè)備驅(qū)動 1.4 接口函數(shù) ?二、SPI驅(qū)動模板 SPI驅(qū)動框架和I2C驅(qū)動框架是十分相似的,不同的是因為SPI是通過片選引

    2024年02月11日
    瀏覽(32)
  • 【IMX6ULL驅(qū)動開發(fā)學習】12.Linux驅(qū)動之設(shè)備樹

    【IMX6ULL驅(qū)動開發(fā)學習】12.Linux驅(qū)動之設(shè)備樹

    承接上一篇博客 【IMX6ULL驅(qū)動開發(fā)學習】11.驅(qū)動設(shè)計之面向?qū)ο骭分層思想(學習設(shè)備樹過渡部分) 代碼獲?。?https://gitee.com/chenshao777/imx6-ull_-drivers 我后面將三個層合并了(實際上只有前兩層),合并成一個dev_drv.c了,暫時沒有加GPIO操作,只是個框架 合并前的代碼在 11.butt

    2024年02月13日
    瀏覽(48)
  • iMX6ULL驅(qū)動開發(fā) | 讓imx6ull開發(fā)板支持usb接口FC游戲手柄

    iMX6ULL驅(qū)動開發(fā) | 讓imx6ull開發(fā)板支持usb接口FC游戲手柄

    手邊有一閑置的linux開發(fā)板iMX6ULL一直在吃灰,不用來搞點事情,總覺得對不住它。業(yè)余打發(fā)時間就玩起來吧,總比刷某音強。從某多多上買來一個usb接口的游戲手柄,讓開發(fā)板支持以下它,后續(xù)就可以接著在上面玩童年經(jīng)典游戲啦。 ?我使用的是正點原子的I.MX6U-ALPHA 開發(fā)板,

    2024年02月14日
    瀏覽(39)
  • 【IMX6ULL驅(qū)動開發(fā)學習】12.Linux SPI驅(qū)動實戰(zhàn):DAC驅(qū)動設(shè)計流程

    【IMX6ULL驅(qū)動開發(fā)學習】12.Linux SPI驅(qū)動實戰(zhàn):DAC驅(qū)動設(shè)計流程

    基礎(chǔ)回顧:?【IMX6ULL驅(qū)動開發(fā)學習】10.Linux I2C驅(qū)動實戰(zhàn):AT24C02驅(qū)動設(shè)計流程_阿龍還在寫代碼的博客-CSDN博客 【IMX6ULL驅(qū)動開發(fā)學習】11.Linux之SPI驅(qū)動_阿龍還在寫代碼的博客-CSDN博客 查看芯片手冊,有兩種DAC數(shù)據(jù)格式,12位和16位,這里選用16位數(shù)據(jù)(2字節(jié))編寫驅(qū)動。 ?重點在

    2024年02月11日
    瀏覽(28)
  • 【IMX6ULL驅(qū)動開發(fā)學習】11.驅(qū)動設(shè)計之面向?qū)ο骭分層思想(學習設(shè)備樹過渡部分)

    【IMX6ULL驅(qū)動開發(fā)學習】11.驅(qū)動設(shè)計之面向?qū)ο骭分層思想(學習設(shè)備樹過渡部分)

    一個 可移植性好 的驅(qū)動程序,應(yīng)該有三個部分組成 1、驅(qū)動框架程序(xxx_drv.c) — 對接應(yīng)用層的 open read write 函數(shù),不做GPIO具體操作 2、硬件操作程序(xxx_chip_gpio.c)— 執(zhí)行具體的GPIO操作,初始化、讀寫 3、硬件資源定義程序(xxx_board.c,這在之后就過渡成了設(shè)備樹)— 為

    2024年02月11日
    瀏覽(25)
  • 【IMX6ULL驅(qū)動開發(fā)學習】14.Linux驅(qū)動開發(fā) - GPIO中斷(設(shè)備樹 + GPIO子系統(tǒng))

    【IMX6ULL驅(qū)動開發(fā)學習】14.Linux驅(qū)動開發(fā) - GPIO中斷(設(shè)備樹 + GPIO子系統(tǒng))

    代碼自取 【14.key_tree_pinctrl_gpios_interrupt】: https://gitee.com/chenshao777/imx6-ull_-drivers 主要接口函數(shù): 1. of_gpio_count (獲得GPIO的數(shù)量) 2. kzalloc (向內(nèi)核申請空間) 3. of_get_gpio (獲取GPIO子系統(tǒng)標號) 4. gpio_to_irq (根據(jù)GPIO子系統(tǒng)標號得到軟件中斷號) 5. request_irq (根據(jù)軟件中斷號

    2024年02月12日
    瀏覽(35)
  • 【IMX6ULL驅(qū)動開發(fā)學習】10.設(shè)置uboot使用網(wǎng)絡(luò)加載zImage和dtb

    【IMX6ULL驅(qū)動開發(fā)學習】10.設(shè)置uboot使用網(wǎng)絡(luò)加載zImage和dtb

    首先根據(jù)這篇博客,保證自己的開發(fā)板與Ubuntu主機處于同一個網(wǎng)段,并且可以ping通 【IMX6ULL驅(qū)動開發(fā)學習】03.設(shè)置IMX6ULL開發(fā)板與虛擬機在同一網(wǎng)段 1. 在uboot中設(shè)置網(wǎng)絡(luò) 首先啟動自己的板子進入Linux系統(tǒng),使用 ifconfig 命令或者 ifconfig -a 命令查看自己網(wǎng)卡的地址 我的網(wǎng)卡地址是

    2024年02月11日
    瀏覽(27)
  • 【IMX6ULL驅(qū)動開發(fā)學習】01.編寫第一個hello驅(qū)動+自動創(chuàng)建設(shè)備節(jié)點(不涉及硬件操作)

    【IMX6ULL驅(qū)動開發(fā)學習】01.編寫第一個hello驅(qū)動+自動創(chuàng)建設(shè)備節(jié)點(不涉及硬件操作)

    目錄 一、驅(qū)動程序編寫流程 二、代碼編寫 2.1 驅(qū)動程序hello_drv.c 2.2 測試程序 2.3 編寫驅(qū)動程序的Makefile 三、上機實驗 3.1?NFS 掛載 3.2 測試示例 構(gòu)造file_operations結(jié)構(gòu)體 在里面填充open/read/write/ioctl成員 注冊file_operations結(jié)構(gòu)體?int major = register_chrdev(0, \\\"name\\\", fops); 入口函數(shù):調(diào)用

    2024年02月13日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包