1 ADC簡(jiǎn)介
模擬數(shù)字轉(zhuǎn)換器即A/D轉(zhuǎn)換器,或簡(jiǎn)稱ADC,通常是指一個(gè)將模擬信號(hào)轉(zhuǎn)變?yōu)?a target="_blank">數(shù)字信號(hào)的電子元件。
通常的模數(shù)轉(zhuǎn)換器是將一個(gè)輸入電壓信號(hào)轉(zhuǎn)換為一個(gè)輸出的數(shù)字信號(hào)。由于數(shù)字信號(hào)本身不具有實(shí)際意義,僅僅表示一個(gè)相對(duì)大小。故任何一個(gè)模數(shù)轉(zhuǎn)換器都需要一個(gè)參考模擬量作為轉(zhuǎn)換的標(biāo)準(zhǔn),比較常見的參考標(biāo)準(zhǔn)為最大的可轉(zhuǎn)換信號(hào)大小。而輸出的數(shù)字量則表示輸入信號(hào)相對(duì)于參考信號(hào)的大小。
2 測(cè)評(píng)硬件
NuMaker-M2354 開發(fā)板的板載資源很豐富,IO接口都已引出,而且板載自帶燒錄器。本次測(cè)評(píng),我測(cè)試了ADC0 CH6的ADC功能。
3 快速上手
按照官方文檔進(jìn)行操作,我們就能順利的將官方提供的測(cè)試程序跑起來;
4 工程裁剪
官方提供的代碼將所有的功能都開啟了,而本次我需要測(cè)試的僅僅是ADC,所以我們還需要對(duì)工程進(jìn)行裁剪:
step1:
使用ENV,進(jìn)入./rt-thread/bsp/nuvoton/numaker-m2354 目錄
step2:
執(zhí)行以下代碼:
menuconfig
step3:
在 Hardware Drivers config -> On chip Peripheral Drivers下將無關(guān)項(xiàng)取消
1 ADC簡(jiǎn)介
模擬數(shù)字轉(zhuǎn)換器即A/D轉(zhuǎn)換器,或簡(jiǎn)稱ADC,通常是指一個(gè)將模擬信號(hào)轉(zhuǎn)變?yōu)閿?shù)字信號(hào)的電子元件。通常的模數(shù)轉(zhuǎn)換器是將一個(gè)輸入電壓信號(hào)轉(zhuǎn)換為一個(gè)輸出的數(shù)字信號(hào)。由于數(shù)字信號(hào)本身不具有實(shí)際意義,僅僅表示一個(gè)相對(duì)大小。故任何一個(gè)模數(shù)轉(zhuǎn)換器都需要一個(gè)參考模擬量作為轉(zhuǎn)換的標(biāo)準(zhǔn),比較常見的參考標(biāo)準(zhǔn)為最大的可轉(zhuǎn)換信號(hào)大小。而輸出的數(shù)字量則表示輸入信號(hào)相對(duì)于參考信號(hào)的大小。
2 測(cè)評(píng)硬件
NuMaker-M2354 開發(fā)板的板載資源很豐富,IO接口都已引出,而且板載自帶燒錄器。本次測(cè)評(píng),我測(cè)試了ADC0 CH6的ADC功能。
3 快速上手
RT-Thread已經(jīng)很貼心的將新唐 NuMaker-M2354這塊開發(fā)板加入RT-Thread官方的文檔中心:新唐NuMaker-M2354
按照官方文檔進(jìn)行操作,我們就能順利的將官方提供的測(cè)試程序跑起來;
4 工程裁剪
官方提供的代碼將所有的功能都開啟了,而本次我需要測(cè)試的僅僅是ADC,所以我們還需要對(duì)工程進(jìn)行裁剪:
step1:
使用ENV,進(jìn)入./rt-thread/bsp/nuvoton/numaker-m2354 目錄
step2:
執(zhí)行以下代碼:
menuconfig
step3:
在 Hardware Drivers config -> On chip Peripheral Drivers下將無關(guān)項(xiàng)取消
step4
然后執(zhí)行以下代碼進(jìn)行構(gòu)建工程,因?yàn)楸救耸褂玫氖?a href="http://srfitnesspt.com/tags/keil/" target="_blank">keil5進(jìn)行開發(fā):
scans --target=mdk5 -s
5 代碼開發(fā)
打開工程文件,執(zhí)行編譯
沒有報(bào)錯(cuò),然后我們創(chuàng)建一個(gè)adc_test.c文件,編寫以下代碼:
#include
#include
static int adc_test(int argc,char *argv[])
{
rt_adc_device_t adc_device;
rt_uint32_t adc_value, voltage;
rt_err_t result = RT_EOK;
//!<查找設(shè)備
adc_device = (rt_adc_device_t)rt_device_find("eadc0");
if(adc_device == RT_NULL)
{
rt_kprintf("adc_test can't find eadc0!n");
return RT_ERROR;
}
//!<使能設(shè)備
result = rt_adc_enable(adc_device, atoi(argv[1]));
//!<讀取ADC值
adc_value = rt_adc_read(adc_device, atoi(argv[1]));
//!<打印ADC值
rt_kprintf("the adc_value is :%d n", adc_value);
//!<對(duì)ADC值進(jìn)行轉(zhuǎn)換
voltage = adc_value * 300 / ( 1 << 12 );
//!<打印轉(zhuǎn)換后的ADC值
rt_kprintf("the voltage is :%d.%02d n", voltage / 100, voltage % 100);
//!<釋放設(shè)備
result = rt_adc_disable(adc_device, atoi(argv[1]));
return result;
}
//!<注冊(cè)到 msh 中
MSH_CMD_EXPORT(adc_test,adc test);
編譯后,燒錄到板塊上,使用串口工具
輸入adc_test 1:
msh >adc_test 1
the adc_value is :1
the voltage is :0.00
msh >
查看開發(fā)板的引腳圖:
可以看到A5~A0對(duì)應(yīng)的是ADC0_CH6~ADC0_CH11,我們使用杜邦線,將A5接到GND:
由于時(shí)間有限,只進(jìn)行了簡(jiǎn)單測(cè)試,后續(xù)有時(shí)間再進(jìn)行深入的測(cè)試。官方已經(jīng)將ADC設(shè)備驅(qū)動(dòng)寫好,真正的拿來即用,降低了開發(fā)難度和開發(fā)成本。
-
ADC驅(qū)動(dòng)器
+關(guān)注
關(guān)注
0文章
35瀏覽量
13919 -
燒錄器
+關(guān)注
關(guān)注
3文章
175瀏覽量
26143 -
GND
+關(guān)注
關(guān)注
2文章
527瀏覽量
38601 -
模擬數(shù)字轉(zhuǎn)換器
+關(guān)注
關(guān)注
1文章
74瀏覽量
12449 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1251瀏覽量
39734
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論