基于项目驱动的嵌入式综合开发
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实训报告
实训名称:基于项目驱动的嵌入式综合开发姓名:
院(系):
专业班级:
学号:
指导教师:
实习时间:
一、实训目的
(一)实习目的
本实训课程是针对嵌入式软件专业学生专门设计的,通过本课程设置的几个嵌入式综合项目的系统学习,可以使学生由浅入深的对嵌入式Linux系统进行全面学习,能够独立胜任嵌入式Linux应用开发、系统开发、驱动开发等多方面工作,并注重敬业团队精神培养。
1)增强学生的理论联系实际的能力
2)通过实训了解企业项目开发流程和学习新技术的方法
3)通过实训项目了解企业项目开发过程中文档的整理方法和问题的分析方法
4)通过实训项目加强学生对基础课程的运用能力,使其认识到基础知识的重要性5)通过实训争强学生对本专业和未来工作岗位的理解,端正心态,明确就业目标6)通过实训争强学生的编程技能,培养其良好的编码风格和编码习惯
(二)方法
本实训课程安排在学校实验室统一进行实训,学生上机独立完成规定实训项目。
(三)任务
要求每位同学独立完成实训题目的编程、调试、优化与测试,并交付使用。要求强化编程思维、编程能力和代码优化的能力,撰写《实训报告》(含:需求分析、总体设计、算法分析及设计中遇到的主要问题和解决方法,设计中尚存的不足与心得体会)。上交完成的所有源程序及相关文件。
三、实训报告
3.1 项目1名称
智能手环
3.1.1 实训内容
本次实训内容是制作智能手环,需要实现计步,测量温度,显示时间,电量,报警等功能。具体模块如下:
(1)LED模块:显示电量
(2)ADC模块:模数转换
(3)PWM模块:蜂鸣器报警
(4)KEY模块:按键控制
(5)RTC模块:实时时钟
(6)计步以及温度显示模块
(7)总体实现
3.1.2 实训过程及相关结果
首先需要搭建软硬件环境,安装Ubuntu系统,安装交叉编译工具链。然后需要下载调试硬件连接,安装串口驱动等。环境搭建完成之后需要实现相应的每一个功能,具体功能如下:
(1)LED模块:显示电量
此模块主要功能为点亮LED灯,以此来实现手环的点亮显示功能。
原理图如下:
在项目目录下分别创建led.c,led.h,main.c文件,根据芯片手册所分析的对应寄存器数据,在
相应的文件下进行对应寄存器的初始化与配置,点亮led灯,并实现灯单独的亮灭以及灯整体的亮灭以及闪烁功能。
代码中用到的主要函数有:
延时函数:extern void delay_ms(int ms)
初始化函数:extern void led_init(void)
灯开关函数:extern void led_onoff(unsigned int leds,unsigned int flags)
灯闪烁函数:extern void led_blink(int times)
(2)ADC模块:模数转换
此模块的主要功能是实现模数转换,并读取电压值,通过电压水平来控制蜂鸣器,从而实现报警功能。原理图如下:
主要功能函数有:
初始化函数:void adc_init(void)
读取电压值:int adc_read(void)
数值转化:int adc_level(void)
电量显示:void show(int level)
报警功能:if(level==0||level==4)
{ 打开蜂鸣器}
else
{设置蜂鸣器关闭状态}
(3)PWM模块:蜂鸣器报警
PWM为脉冲宽度调制,实现蜂鸣器报警功能,CPU通过控制寄存器,进而控制PWM来打开
和关闭蜂鸣器。原理图如下:
代码中用到的主要功能函数有:
PWM初始化:void pwm_init(void)
打开蜂鸣器:void pwm_open(void)
关闭蜂鸣器:void pwm_close(void)
蜂鸣器开启状态判断:int is_open(void)
(4)KEY模块:按键控制
此模块要实现的任务是KEY2按键控制蜂鸣器,KEY3按键控制信息打印(时间温度步数等)。首先在原理图在芯片手册找对应寄存器,创建key.c,key.h文件,根据寄存器的相关描述,对应文件里进行配置;
相关程序:
初始化:void key_init(void)
{GPX1CON}
int key_read(void)
{轮循检测,判断key2或key3按下}
主函数调用实现if判断:
if(key==2)
{蜂鸣器关闭}
if(key==3)
{ printf(“时间,温度,步数\n”,...}
(5)RTC模块:实时时钟
此模块的功能是用一个实时时钟来显示时间,原理图如下:
代码中的主要功能函数有:
初始化函数:rtc_init(void)
读取寄存器数值:int rtc_read(void){返回相关寄存器}
在按键判断条件为key3时打印时间:printf(“%x”,寄存器函数);
(6)计步以及温度显示模块
此模块是利用一个计步芯片MPU6050来实现步数的测量,mpu6050通过加速度的改变实现计步功能。通过传感器测量,计算x,y,z轴的加速度和的值改变的程度来判断是否发生移步;通过传感器测量温度值,在主函数调用中获取数值,在if(key==KEY3)条件下打印信息。
对于温度的测量,是利用DS18B20传感器来进行温度的实时监测。
主要功能函数有:
初始化:
void mpu6050_init(void){
MPU6050_Write_Register(char RegAddr,char Dat);}
计步函数:
unsigned long Step_Count(x,y,z){}
函数调用:
Step+=Step_Count(x,y,z);
printf(“%d\n”,Step);
(7)总体实现