信息工程学院实验报告
实验项目名称:实验四声音传感器实验实验时间:
班级:姓名:学号:
一、实验目的
1. 学习CC2530 单片机GPIO 的使用。
2. 学习声音传感器的使用
二、实验原理
1. CC2530 节点与三轴加速度传感器的硬件接口
(1). 声音传感器模块(MIC)引脚
GND:外接GND
DO:数字量输出接口(0 和1)
+5V:外接5V 电源
(2). 传感器模块与
2. GPIO
(1). 简介
CC2530单片机具有21个数字输入/输出引脚,可以配置为通用数字I/O或外设I/O信号,配置为连接到ADC、定时器或USART外设。
这些I/O口的用途可以通过一系列寄存器配置,由用户软件加以实现。
I/O端口具备如下特性:
●21个数字I/O引脚
●可以配置为通用I/O或外部设备I/O
●输入口具备上拉或下拉能力
●具有外部中断能力。
这21个I/O引脚都可以用作于外部中断源输入口。
因此如果需要外部设备可以产生中断。
外部中断功能也可以从睡眠模式唤醒设备。
(2). 寄存器简介
本次实验中主要涉及到GPIO的寄存器如下:
3. MIC 声音传感器
(1). 概述
声音传感器的作用相当于一个话筒(麦克风)。
它用来接收声波,显示声音的振动图象。
但不能对噪声的强度进行测量。
该传感器内置一个对声音敏感的电容式驻极体话筒。
声波使话筒内的驻极体薄膜振动,导致电容的变化,而产生与之对应变化的微小电压。
这一电压随后被转化成0-5V 的电压,经过比较器转换数字信号后,被数据采集器接受,并传送给计算机。
传感器特点:
●具有信号输出指示。
●输出有效信号为低电平。
●当有声音时输出低电平,信号灯亮。
应用范围:
●可以用于声控灯,配合光敏传感器做声光报警,以及声音控制,声音检测的场合。
(2). 使用方法
本实验利用CC2530 的GPIO 读取声音传感器模块的检测结果输出端,当检测到一定的声音时,此输出端为低电平;未检测到一定的声音时,此输出端为高电平。
因此在实际应用中可以根据这种情况判断是否有声音在传感器附近产生。
4.程序流程
三、实验内容与步骤
1. 将CC2430 仿真器的一端JTAG 接口与一个CC2530 模块相连,并打开CC2530 节点的电源,再将CC2430 仿真器的另一端用USB 接口与PC 计算机相连。
2. 用MiniUSB 线将CC2530 节点与计算机的USB 口连接起来后,打开串口调试器软件,设置波特率57600,校验位None,数据位8,停止位1,然后点击打开串口按钮,如下图所示:
说明:串口号可以在设备管理器看到,具体方法如下图所示:
3. 用IAR Embedded Workbench for 8051 8.10 打开配套传感器实中的“SerialPort.Edition\18.IRDMS\Main.eww”工程文件。
4. 点击IAR 功能菜单上的绿色下载按钮,进入程序下载页面,如下图所示:
5. 程序下载完成后,点击IAR 开发环境中的运行程序按钮运行程序,如下图所示:
此外,也可以通过点击其它按钮实现对当前程序的调试(单步、断点、暂停、步入等功能)。
6. 扩展实验
为了能够更加直观地观察到传感器工作的状况,在实验过程中可以利用光盘中配套的上位机软件CurveDisplay 来观察传感器的数据曲线。
操作步骤
(1). 将仿真器的一端JTAG 接口与一个CC2530 模块相连,并打开CC2530 节点的电源,再将仿真器的另一端用USB 接口与PC 计算机相连。
(2). 用MiniUSB 线将CC2530 节点与计算机的USB 口连接起来后,打开配套传感器实验中的“CurveDisplay\Curve3Display.exe”上位机软件,选择正确的串口号后,再设置波特率57600,校验位None,数据位8,停止位1,最后点击打开连接按钮,如下所示:
(3). 用IAR Embedded Workbench for 8051 8.10 打开配套传感器实验中的“Curve.Edition\10.ADXL345\Main.eww”工程文件,然后通过IAR 将程序下载到CC2530 模块中。
程序下载完成后,点击IAR 开发环境中的运行程序按钮运行程序。
四、实验结果及分析:
1. 程序正常运行后,每采集一次传感器检测结果,串口信息更新一次,如下图所示:
如下图所示:
2. 在实验过程中,对着传感器说话或者吹气,当有声音产生时,传感器模块上的红色LED 被点亮,当无振动产生时,红色LED 熄灭。
3. 扩展实验现象
(1).程序正常运行后,在CurveDisplay 软件中可以观察到传感器的数据曲线,如下图所示:
(2). 在实验过程中,用手移动或旋转CC2530 节点,可以在Curve3Display 软件上的传感器数据曲线也发生相应的变化,如下图所示:
五、实验总结:
通过这次实验,我熟悉了对CC2530 单片机ADC 模块的使用,并学会了的了声音传感器的使用。
在实验过程中,通过自己去熟悉程序代码并对其按键功能进行扩展,实现按键控制传感器的采样,让我又学到了很多内容。
六、源程序清单(加上必要的注释)
核心代码
1. 初始化声音传感器
void InitSound(void) //初始化声音传感器
{
//引脚(P1_6,通用IO,输入)
P1SEL &= ~0x40;
P1DIR &= ~0x40;
}
2. 主函数
void main(void)
{
//初始化时钟
InitClock();
//初始化IO
InitGPIO();
//初始化串口USART0
InitUART();
//初始化声音传感器
InitSound();
//关闭GPIO_RLED 和GPIO_GLED
GPIO_RLED = 0;
GPIO_GLED = 0;
//发送串口初始化成功消息
UART_SendStr("\nUSART0 Init Successfully!\n");
while(1)
{
//红灯:点亮-->检测到人体,熄灭-->未检测到人体
if(ckFlag == 1)
{
//点亮GPIO_RLED
GPIO_RLED = 1;
//发送消息提示未检测到声音
UART_SendStr("Sound: Detected\n");
}
else
{
//关闭GPIO_RLED
GPIO_RLED = 0;
//发送消息提示未检测到声音
UART_SendStr("Sound: None\n");
}
//绿灯:点亮-->开始检测,熄灭-->停止检测if(SOUND_DETECT == 0)
{
//关闭GPIO_GLED
GPIO_GLED = 0;
}
else
{
//点亮GPIO_GLED
GPIO_GLED = 1;
ckFlag = 0;
}
//延时200ms
DelayXms(200);
}
}
3). 中断处理函数
//P1 外部中断服务函数
#pragma vector = P1INT_VECTOR
__interrupt void P1_ISR(void)
{
IRCON2 &= ~0x08; //清除P1 中断标志if(P1IFG & 0x40)
{
ckFlag = 1;
P1IFG &= ~0x40; //清除P1.6 中断标志}
}。