本次评测计划是测试的USART、I2C、SPI、ADC、TIM等相关外调例程,驱动LCD显示屏、DS1302日期模块、JQ8400音乐模块和争取在此基础上完成一个带有触摸和敲击功能的音乐报警门铃。经过一个月时间的测评,实际完成的情况如下: 一、相关外设及驱动的评测情况 首先评测的是定时器(链接https://bbs.21ic.com/icview-2966980-1-1.html),通过设定毫秒计时来完成主循环中定时处理事项。不得不再次称赞,在MCC中设置定时器实在是太方便了,只要直接在范围内输入定时的时间就行,相比STM32CubeMX来说,省略了繁杂的计算步骤,避免了出错的可能性。 然后测试了驱动LCD(链接https://bbs.21ic.com/icview-2968534-1-1.html),这是移植过来的代码,测试过程比较顺利,仅仅是通过逻辑分析仪查看时序,适当地调整了延时。 当准备测试I2C和SPI时,竟然在MCC中没有找到设置的入口(链接https://bbs.21ic.com/icview-2980140-1-1.html),开始只好使用模拟I2C,但在代码调试时却无法有效地控制SDA引脚的IO方向而一筹莫展。后来在坛友帖子的提示下才知道这两项设置都在MSSP中,MCC对这方面安排确实有点不统一,在有些芯片中I2C的设置在TWI中,而这个芯片却不同,不清楚有什么规律可循。在MCC中开通了I2C和SPI外设之后,调试I2C又成了难题,因为没有找到范例,只好仔细查看I2C文件中的各个函数,凭借自己的理解来写相关的代码,调试了几天都没有成功,发帖求助也没有得到回应。 相比之下ADC的测试算是比较顺利的(链接https://bbs.21ic.com/icview-2982384-1-1.html),参照PIC16F18446和一个范例设置好ADC后,同样是分析了相关文件的各个函数,按自己的理解写了转换的代码,很快就测试通过了。不过仍有一个疑问,就是每次转换后加停止转换命令就不行(见下面最后一行),注释之后才能正常转换。 ADCC_StartConversion(0); //启动ADC_0通道转换 while(1 == ADCC_IsConversionDone()); adc_val = ADCC_GetConversionResult(); //获得转换结果 // adc_val =ADCC_GetSingleConversion(0);//获得单次转换结果
// ADCC_StopConversion(); //停止转换
由于查找资料、分析代码花费了不少时间,中途又同时评测了AVR_IoT,所以UART串口通讯及蓝牙的测试没有展开,I2C驱动日历模块和EEPROM的测试也因没有成功。不过驱动SD8608音乐芯片倒是成功了,这是一个普遍用于迎宾报警器上的音乐芯片,通过5个引脚组合,可以选择发出报警声、“欢迎光临”的语音或选定的32首音乐之一,下面是从淘宝截图的芯片外貌。
为了方便测试,同样也将音乐芯片焊在扩展卡上,最初是将小喇叭直接固定在扩展卡上的,但喇叭没有共鸣腔,音质大受影响,最后只好通过插座外接喇叭,同时添加了驻极体话筒来作声音检测。
下面是已经准备的一些扩展卡,包括测试I2C功能的有DS1307排座和AT24C02芯片座的扩展卡,准备测试串口的具有插蓝牙模块排座的扩展卡。
二、计划实验的音乐报警门铃 这是参照PIC16F18446核心板的一个检测敲击门声的范例,原来准备在范例的基础上进行完善,但读懂源码太花时间了。发声部分测试过了,但声音太单调,无法接受,只好改用SD6808音乐芯片。原来准备用DS1307模块作日期时间源和模块上自带的24C32作报警数据存储,因I2C尚未调通而暂未实验,不过这部分代码在其他项目中已经测试过,只要调试好I2C通讯就行。蓝牙部分与串口通讯的测试尚未开始。本次实验就是检测敲击声音大小,从而选择不同的声音作门铃,实验的装置如下图。
敲击压电陶瓷外壳,ADC转换得到数值,程序根据这个数值大小来播放相应的声音。经测试,在没有敲击的情况下,这个数值大约会在10左右;轻轻敲击时,这个数值大约在200以内。在主循环中检测的代码如下: ADCC_StartConversion(0); //启动ADC_0通道转换 while(1 == ADCC_IsConversionDone()); adc_val = ADCC_GetConversionResult(); //获得转换结果 // adc_val =ADCC_GetSingleConversion(0);//获得单次转换结果 // ADCC_StopConversion(); if(adc_val > 10){ LCD_write_value(60,4,4,0,1,adc_val); if(adc_val > 200) SND_alarmX4(); else if(adc_val > 20) SND_dingDong(2); } 本次评测暂告一段落,下一步准备继续调试I2C,以便测试日历和存储模块,之后再调试串口通讯及蓝牙模块,以便与手机或电脑建立起联系。
这是本次实验的项目压缩包:
Mytest.X.rar
(1.96 MB)
这是录制的实验视频:
VID_20200530_094316.rar
(9.65 MB)
|