本帖最后由 wudianjun2001 于 2015-3-19 08:10 编辑
温度传感器通过AFEC来实现,也就是我们常说的ADC。本程序主要的功能是定时读取温度传感器通道的AD值,然后通过AD值计算出当前的温度,并在OLED屏上显示出来。 Atmel的AFEC功能很强大,可以选择多路AD,多种触发方式,休眠模式,可以差分输入采集,设置增益,设置采集分辨率,专用温度传感器寄存器等功能。SAM4E芯片中,ADC是由AFEC管理的。同时,AFEC可以使用一个多路复用器以选择需要转换的信号的通道,也可以通过平均多次ADC转换的结果以提高转换精确度。 通过RTC的秒中断来计时,定时启动AD转换,AD转换完成后产生中断并置位标志位,在主函数中判断到标志位后进行温度的计算,并显示。
AFEC的内部结构框图。AFEC还分为AFEC0和AFEC1两部分,其中AFEC0有16路输入通道,第16路为内部温度传感器。AFEC1有8个通道,都接到外部的IO口。
寄存器列表,具体功能请看数据书
AFEC电气特性,该AFEC有效的时钟范围为1—20 MHz,最大采样频率是1 MHz。同时也需记下启动、跟踪、设置等时间,这在使用AFEC时会用到。另外,传送时间在芯片手册中没有详细说明,只说明将TRANSFER字段设置为1。
下面就来看看程序的操作,AFEC初始化,两种方式都测试了,第一种是寄存器直接操作,第二种是函数操作方式,都OK。使用RTC事件启动AD转换。
AD转换完成中断处理,读取AD值,并置采集完成标志位
主函数,判断到采集完成标志后处理,计算出温度值并在OLED屏上显示出来
显示效果图,第三行显示采集到的AD值,第四行显示当前的温度,没有做小数部分的处理,也没有多次采集求平均值。
|