跳到主要内容

八、 ADC模拟旋钮/光敏电压采集

8.1 实验简介

ShineBlink C2M拥有4个ADC采集输入口。在ShineBlink C2 DevKit开发板上,A0接入模拟输入旋钮,A1接入光敏感应传感器,而A2及A3均引出至外部扩展接口,注意:C2M的ADC四个通道每个通道的最高采集电压为2.6V,且要求输入的电压最大值不能超过3.3V。

8.2 硬件设计

模拟旋钮电压采集其工作原理为电阻分压的方式,通过A0端口采集可变电阻的电压。

analogIn

光敏感应的原理为当光照越强,LS06的电阻越小,实际上仍然是电阻分压的原理。

LightSense

8.3 软件设计

--配置A0-A3这四个通道同时开始工作,当每个通道采集满50个点时缓存满,每个点的采集时间间隔为10ms
LIB_ADConfig(50,10000)
--设置0.96寸oled模块占用SCL1和SDA1引脚
LIB_0_96_OledConfig("IIC1")
AD0=0.0
AD1=0.0
--开始大循环
while(GC(1) == true)
do
A0_full_flag, A0_tab = LIB_ADCheckBufFull("A0")
--每当A0通道的缓存满以后,计算缓存内的50个元素的平均值,并换算成电压值print输出
if A0_full_flag == 1 then
SUM = 0
for i = 1, #A0_tab do --此处#A0_tab的值是50,表示A0_tab表内的元素个数
SUM = SUM + A0_tab[i]
end
AVER = SUM / #A0_tab
AD0=AVER*3.6/4096.0
--将A0通道的AD值转换成实际电压显示出来,注意这里是保留小数点后一位
LIB_0_96_OledPuts("1","1",string.format("AD0:%.1f", AD0))
end
A1_full_flag, A1_tab = LIB_ADCheckBufFull("A1")
if A1_full_flag == 1 then
SUM = 0
for i = 1, #A1_tab do --此处#A1_tab的值是50,表示A0_tab表内的元素个数
SUM = SUM + A1_tab[i]
end
AVER = SUM / #A1_tab
AD1=AVER*3.6/4096.0
--将A1通道的AD值转换成实际电压显示出来,注意这里是保留小数点后一位
LIB_0_96_OledPuts("2","1",string.format("AD1:%.1f", AD1))
end
end

8.4 实验现象

当旋转模拟按键按钮时,AD0变化数值。当改变光照强度时,AD1变化数值。

AD_LightSense