通过这两天的试玩,发现还有几个功能没有注意到,这里补上:
1.播放MP3的时候,也就是在Playback Mode,触摸上键,可以选择shuffle随机播放功能~
屏幕上会有S标识。
2.系统还有一个深度休眠,更省电的状态,在任何活动模式,按住上键2秒钟,即可深度休眠,唤醒的话,也是按住上键2秒钟。(在这个休眠模式下,系统以很低的频率来检测按键触摸)
看一下系统的硬件设计:
去网上下载了ACTBP的Designe file,打开一看,我不淡定了,竟然是利尔达画的……
真的假的?……
需要说明的是,TI提供了此PACK板的原理图和PCB源文件,整个工程是用Altium Designer画的,所以你可以直接拿去做板子,TI好像经常干这种事情,比如XDS100仿真器~
PCB如下图所示: 从PCB上很明显可以看出分上下两个部分~
上面就是系统的核心——C5000 MP3系统~
首先,系统选用主控的是TI专为低功耗应用而设计的TMS320C5000定点数字信号处理器 (DSP) 产品系列。
虽然是低功耗,但是性能上丝毫不差,20ns/10ns的指令周期;50MHz/100MHz的时钟频率;每周期执行1,2条指令;双乘法器 [高达每秒 2 亿次乘加运算 (MMACS)]……
外设也很丰富:
4个DMA 控制器,各具4个通道( 16 个通道)
3个32-位通用定时器,其中一个可被选为看门狗
两个eMMC/SD接口
一个UART
一个SPI
一个I2C
4个I2S
集成2.0高速USB
异步接口的LCD桥接器
10-位4输入逐次逼近 (SAR) ADC
如下图:
下面是我整理出来的DSP部分系统框图:
说明:IIC总线上挂了4个从设备,TS3A225E是TI推出的音频开关器件,能自动检测到音频耳机是否带有模拟麦克风,并检测出相应的插针配置;TLV320AIC3204是TI推出的采用Power TuneTM 技术的超低功耗立体声音频编解码器;INA219是TI的零漂移,双向电流/电源监视器;还有就是OLED。
C5000从SD卡启动(这个SD卡非常重要,大家千万不要把SD卡里面自带的东西删掉,尤其是某个bin文件,删掉之后这块pack板就不能用了……我试过把原卡里的东西拷到自己的卡里,试了一下,结果不能用,不知道是什么原因,所以,大家都懂的……),DSP通过串口跟430通信;JTAG口虽然引出来了,但是没焊,不知道能不能用,官方说是不能通过JTAG调试,所以不敢试……;SPI的Flash没焊。
触摸板
触摸板用的是电容型,什么是电容式触摸呢:
如图,PCB顶层上有一个圆形的金属板,周围和底层都是地,那么这个金属板和这些地之间会存在非常小的分布电容——C1,C2。人体相当于一个大面积的导体,当我们用手指靠近这个金属板的时候,人体和金属板之间构成分布电容C3,人体和地之间也构成分布电容C4。总的效果是增加了金属板对地的分布电容量,总的电容量是C1+C2+C3||C4。人体所带来的电容增量往往是固有分布电容的数倍,所以我们只要探测到电容量的增加,即可认为是有效按键。 之前说过了,ACTBP的触摸板中间的4个Wheel触摸块之间的间隙跟Capacitive Touch BoosterPack相比变小了。
这应该是参考的推荐设计,TI推荐的触摸板设计间隙如下图所示:
可使用标准实体填充的圆形或方形按键板。可在按键板上钻孔以便提供背光,这不会影响电容性能。按键板周围通常是接地区域。可以使用网状和实体填充。与接地区域的间隙通常为按键板尺寸的1/20。
如果使用10mm 的按键板,则适合使用0.5mm 的间隙。
我在PCB中量了一下,果然是,中间开孔提供背光,触摸板直径10mm,与周围地的间隙0.5mm~
基于430实现电容式触摸按键有很多种方法,TI主要推荐3种,RC、RO和Pin oscillator
具体可以参考TI官网,这里就不展开讲了,以后可以专门开一个帖讲这个~
这里用的是第三种方法Pin oscillator,专门适用于带有Cap touch IO功能的G2XX系列430。它可以自动地把外部电容的变化转变为内部频率的变化,通过计数的方式实现触摸按键的检测,这种方法最大的好处是不需要任何外部组件。 LED的设计很有意思,用5个IO口控制8个LED。
因为LED是对触摸的反馈,只有一个botton和一个wheel,所以不会出现需要8个LED同时亮的情况~
软件对此的处理也非常简洁
#define MASK45 (BIT3+BIT5+BIT6+BIT7)
#define MASK80 BIT4
#define MASK100 (BIT3+BIT4+BIT6+BIT7)
#define MASK135 BIT5
#define MASK225 (BIT3+BIT4+BIT5+BIT7)
#define MASK260 BIT6
#define MASK280 (BIT3+BIT4+BIT5+BIT6)
#define MASK315 BIT7
const unsigned char startSequence[8] =
{
MASK315,
MASK280,
MASK260,
MASK225,
MASK135,
MASK100,
MASK80,
MASK45
};
8个状态
如果要转一圈的话,用一个for循环就实现了~
|