【Allwinner ClassA20类库分析】6.LRADC类的使用

本节讲述LRADC类的使用方法,请先在https://github.com/tjCFeng/ClassA20下载ClassA20类库。

先来说一下A20的ADC。A20的ADC共有两种,一种是LRADC,另一种是TPController。


LARADC,是一种低分辨率的模数转换器,按照用途A20常把它当作按键检测的通道,可以检测长按、短按、按下、抬起等动作,最高电压可以支持到2V,有些低了。

TPController一般用来检测触摸屏的控制,根据电压的变化获取坐标。玩过单片机+显示屏的应该都很熟悉,这个功能被集成到A20中了。TPController最大可以支持到5V。

这次主要试验一下LRADC,对于TPController就不多说了。


手册中关于LRADC的介绍


LRADC很简单,简单到所有的寄存器参数都使用默认值,只要控制一下启动就可以了,甚至比IO口都要简单。当然,它也有许多功能,为了简单起见先不考虑。

下面来看看LRADC单元中的类:


和前面介绍的一样,还是分为两个类。


TLRADCGROUP的使用方法跟前一节完全相同,直接来看TLRADC吧。LRADC是输入端口,它有中断,可以识别出KeyDown、KeyUp之类的事件。但是前面也提到过,由于暂时没有实现中断的响应,所以现在这个类还不能当作按键检测用,先用它来完成基本的功能吧,检测电压。


检测电压不需要太高的检测频率,可以很简单地使用循环读取数据的方式,看看下面的例子:

继续上一节的神器,这次用到的是光敏二极管,根据电压的变化计算出亮度的百分比。


硬件的连接。LRADC所在的引脚没有被香蕉派直接引出为插针,它是在CON1上,可以用排线引出,我加了格转接板就可以使用了。


CON1中的第13脚和第15脚对应LRADC0和LRADC1


界面的设计,在上面放置了两个Label用于显示ADC的值和计算后的百分比,又放置了一个Timer用于定时循环控制,定时间隔为500毫秒,并且启动时是不打开,由按钮控制,还有两个按钮控制LRADC的启动和停止。用Timer的好处是可以方便地控制启动和停止,并且在等待间隔时不影响程序和系统的运行,同时需要编写的代码是最少的


代码部分,为每一个组件编写代码:


光敏电阻可以根据外界光线的变化来改变自身的电阻,程序中计算百分比的值是测试过程中记录的最大值和最小值范围来确定的,这个值要根据自己的实际情况来取得。


一定要注意到代码中单例的使用,LRADC和其他的类不同,启动和停止的控制都是在单例中,提醒开发者知道启动和停止是同时控制两个通道的。


运行效果:


由于LRADC最大电压只能到2V,所以这个效果不是很好,如果使用其他芯片支持更大范围的电压检测则会有更好的效果。


请在[https://github.com/tjCFeng/ClassA20](https://github.com/tjCFeng/ClassA20)下载ClassA20类库。