1.0 ADC簡介
ADC(Analog-to-Digital Converter) 指模數(shù)轉(zhuǎn)換器。是指將連續(xù)變化的模擬信號轉(zhuǎn)換為離散的數(shù)字信號的器件。真實世界的模擬信號,例如溫度、壓力、聲音或者圖像等,需要轉(zhuǎn)換成更容易儲存、處理和發(fā)射的數(shù)字形式。模數(shù)轉(zhuǎn)換器可以實現(xiàn)這個功能,在各種不同的產(chǎn)品中都可以找到它的身影。與之相對應(yīng)的 DAC(Digital-to-Analog Converter),它是 ADC 模數(shù)轉(zhuǎn)換的逆向過程。ADC 最早用于對無線信號向數(shù)字信號轉(zhuǎn)換。如電視信號,長短播電臺發(fā)射接收等。
1.1 I/O 設(shè)備模型框架
如下圖所示模數(shù)轉(zhuǎn)換一般要經(jīng)過采樣、保持和量化、編碼這幾個步驟。在實際電路中,有些過程是合并進行的,如采樣和保持,量化和編碼在轉(zhuǎn)換過程中是同時實現(xiàn)的。

1.2 訪問 ADC 設(shè)備
應(yīng)用程序通過 RT-Thread 提供的 ADC 設(shè)備管理接口來訪問 ADC 硬件,相關(guān)接口如下所示:
| 函數(shù) | 描述 |
|---|---|
| rt_device_find() | 根據(jù) ADC 設(shè)備名稱查找設(shè)備獲取設(shè)備句柄 |
| rt_adc_enable() | 使能 ADC 設(shè)備 |
| rt_adc_read() | 讀取 ADC 設(shè)備數(shù)據(jù) |
| rt_adc_disable() | 關(guān)閉 ADC 設(shè)備 |
2. RT-theard配置
2.1 硬件需求
實現(xiàn)功能:
板載Arduino拓展口六處模擬信號讀取。
1、RA6M4開發(fā)板

2、USB下載線,ch340串口和附帶2根母母線,rx---p613;tx---p614

實驗中J13六處模擬信號需要焊接插針,方便調(diào)試
2.2 軟件配置
Renesas RA6M4開發(fā)板環(huán)境配置參照:【基于 RT-Thread Studio的CPK-RA6M4 開發(fā)板環(huán)境搭建】
1、新建項目RA6M4-ADC工程

2、在RT-theard Setting 硬件下開啟ADC,使能ADC0

3、打開RA Smart Congigurator,在Stacks中New Stack添加r_adc

4、在Property的Module的Channel中勾選Channel0~5
5、確認端口一一對應(yīng)P000~P005

6、然后Generate Project Content 同步更新剛剛配置的文件

圖形化配置已經(jīng)完成,接下來配置相關(guān)代碼
3. 代碼分析
在src文件下新建test_adc.c和test_adc.h文件,其他不變。

test_adc.c
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-07-11 Asus the first version
*/
#include
#include
#define ADC_NAME "adc0" /* ADC 設(shè) 備 名 稱 */
#define ADC_CHANNEL 6 /* ADC 通 道個數(shù) */
#define REFER_VOLTAGE 330 /* 參 考 電 壓 3.3V,數(shù) 據(jù) 精 度 乘 以100保 留2位 小 數(shù)
*/
#define CONVERT_BITS (1 << 12) /* 轉(zhuǎn) 換 位 數(shù) 為12位 */
static int adc_sample(int argc, char *argv[])
{
rt_adc_device_t adc_dev;
rt_uint32_t value, vol;
rt_err_t ret = RT_EOK;
/* 查 找 設(shè) 備 */
adc_dev = (rt_adc_device_t)rt_device_find(ADC_NAME);
if (adc_dev == RT_NULL)
{
rt_kprintf("adc sample run failed! can't find %s device!
", ADC_NAME);
return RT_ERROR;
}
for (int var = 0; var < ADC_CHANNEL; ++var) {
/* 使 能 設(shè) 備 */
ret = rt_adc_enable(adc_dev, var);
/* 讀 取 采 樣 值 */
value = rt_adc_read(adc_dev, var);
rt_kprintf("the value is :%d
", value);
/* 轉(zhuǎn) 換 為 對 應(yīng) 電 壓 值 */
vol = value * REFER_VOLTAGE / CONVERT_BITS;
rt_kprintf("the voltage is :%d.%02d
", vol / 100, vol % 100);
/* 關(guān) 閉 通 道 */
ret = rt_adc_disable(adc_dev, var);
}
return ret;
}
/* 導(dǎo) 出 到 msh 命 令 列 表 中 */
MSH_CMD_EXPORT(adc_sample, adc voltage convert sample);
test_adc.h
/*
* Copyright (c) 2006-2021, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2022-07-11 Asus the first version
*/
#ifndef TEST_ADC_H_
#define TEST_ADC_H_
static int adc_sample(int argc, char *argv[]);
#endif /* TEST_ADC_H_ */
保存完是灰色,沒有保存是藍色。
adc_sample導(dǎo) 出 到 msh 命 令 列 表 中,采樣1次
4. 下載驗證
1、編譯重構(gòu)

編譯成功
2、下載程序

下載成功
3、CMD串口調(diào)試

然后板載復(fù)位,輸入:adc_sample
效果如下

這樣我們就可以天馬行空啦!
審核編輯:湯梓紅
-
adc
+關(guān)注
關(guān)注
100文章
7511瀏覽量
555994 -
Renesas
+關(guān)注
關(guān)注
0文章
1775瀏覽量
24883 -
開發(fā)板
+關(guān)注
關(guān)注
26文章
6291瀏覽量
118141 -
Arduino
+關(guān)注
關(guān)注
190文章
6526瀏覽量
196940 -
RA6M4
+關(guān)注
關(guān)注
0文章
52瀏覽量
1019
發(fā)布評論請先 登錄
【開發(fā)板評測】Renesas RA6M4開發(fā)板之ESP8266_AT
【Renesas RA6M4開發(fā)板之I2C(模擬)驅(qū)動ssd1306 OLED屏幕】
【RA-Eco-RA6M4開發(fā)板評測】——8.獲取RA6M4開發(fā)板芯片內(nèi)部溫度傳感器值
【RA-Eco-RA6M4開發(fā)板評測】開發(fā)環(huán)境搭建
如何對Renesas RA6M4開發(fā)板的FLASH模塊進行測評呢
Renesas RA6M4開發(fā)板之Arduino六路ADC采樣分析
Renesas CPK-RA6M4開發(fā)板之SDIO模塊評測
Renesas RA6M4開發(fā)板之USB-H評測活動
【開發(fā)板評測】Renesas RA6M4開發(fā)板之FLASH
【開發(fā)板評測】Renesas RA6M4開發(fā)板之CAN
【開發(fā)板評測】Renesas RA6M4開發(fā)板之SDIO(SDHI)
基于RT-Thread Studio的CPK-RA6M4開發(fā)板環(huán)境搭建
【Renesas RA6M4開發(fā)板之Arduino六路ADC采樣】
評論