光电-接触式液位传感器是一种输出模拟信号量的传感器,其应用电路如图1所示。
图1 应用电路
在检测过程中,该传感器的输出性能如图2所示。
图2 输出性能
我们可以PIC18F16Q41处理核心并利用其内部A/D转换器来采集模拟信号量,在为其配置一个串行数码管来显示检测值。。
为此对引脚的使用情况分配如下:
DIN---RC4
CLK---RC6
CS ---RC7
ANC2---RC2
其中DIN、CLK及CS为串行数码管的引脚,而RC2为模拟信号输入端,为此以MCC对引脚的配置如3所示。
图3 MCC引脚配置
对应的引脚命名见图4,为使A/D正常进行,其时钟设置见图5。
图4引脚命名
图5 时钟设置
在使用MCC生成框架代码后,实现数据采集与显示的主程序如下:
void main(void)
{
int v,d;
float s;
SYSTEM_Initialize();
DELAY_milliseconds(50);
Init_MAX7219();
DELAY_milliseconds(200);
Write_Max7219(0xff,0x00);
Write_Max7219(1,8);
Write_Max7219(2,7);
Write_Max7219(3,6);
Write_Max7219(4,5);
Write_Max7219(5,4);
Write_Max7219(6,3);
Write_Max7219(7,2);
Write_Max7219(8,1);
ADCC_Initialize();
ADCC_StartConversion(channel_ANC2);
while (1)
{
LED_SetHigh();
DELAY_milliseconds(1000);
LED_SetLow();
DELAY_milliseconds(1000);
v=ADCC_GetSingleConversion(channel_ANC2); // A/D为12位
Write_Max7219(1,v%10);
if(v>10) Write_Max7219(2,v%100/10);
else Write_Max7219(2,0x0f);
if(v>100) Write_Max7219(3,v%1000/100);
else Write_Max7219(3,0x0f);
if(v>1000) Write_Max7219(4,v/1000);
else Write_Max7219(4,0x0f);
s=v*3.3/409.5;
d=s;
Write_Max7219(5,0x0f);
Write_Max7219(6,d%10);
Write_Max7219(7,(d%100/10)|0x80);
Write_Max7219(8,0x0f);
}
}
经程序编译与下载,其运行效果如图6所示,其中左4位为电压值,右4位为检测值。
图4 双值显示
有了模拟量的采集与显示功能,将电位器模块该为光电-接触式液位传感器就能显示其输出结果了。
|