哈工大电信院暑假实习报告.docx

上传人:b****8 文档编号:28790824 上传时间:2023-07-19 格式:DOCX 页数:38 大小:1.43MB
下载 相关 举报
哈工大电信院暑假实习报告.docx_第1页
第1页 / 共38页
哈工大电信院暑假实习报告.docx_第2页
第2页 / 共38页
哈工大电信院暑假实习报告.docx_第3页
第3页 / 共38页
哈工大电信院暑假实习报告.docx_第4页
第4页 / 共38页
哈工大电信院暑假实习报告.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

哈工大电信院暑假实习报告.docx

《哈工大电信院暑假实习报告.docx》由会员分享,可在线阅读,更多相关《哈工大电信院暑假实习报告.docx(38页珍藏版)》请在冰豆网上搜索。

哈工大电信院暑假实习报告.docx

哈工大电信院暑假实习报告

实习报告

题目心电采集

专业

学  号

学生 

指导教师 

实习时间2016年7月

 

注:

本报告仅供参考

一.项目背景和意义

实习是一种实践,是理论联系实际,应用和巩固所学专业知识的一项重要环节,是培养我们能力和技能的一个重要手段。

在今年的7月中旬,我们来到了东软实训中心进行为期半个月的实习。

随着工业4.0的到来,大数据已经成为了各融资公司开拓的市场,健康也是用户所最为关心的问题,我们的心电采项目就是基于这一点的实习项目。

通过采集到的受测者的心电以及数据的分析和处理,分析一个人的健康状态,不但有相当的市场前景,也为用户了解自己的身体健康提供方便。

二.项目目的

生产实习是把理论与实际相结合,通过对理论知识的理解,领悟从而运用到生活实际,巩固所学有关嵌入式基础理论知识和基本技能,提高对涉及知识的认识,积累经验。

同时生产实习也是大学生以学生身份到工作者身份的一种重要过渡阶段。

在此期间,学生能够初次体会到实际生产中的种种技能与经验。

完成一项项目,能体现出独立思考能力。

Android生产实习对于目前应用现状进行了分析与比较,进而研究分析了Android平台的系统结构和组件模型,在基础上,基于Android平台设计和开发,实现对Android变成的理解与应用,特别是在对于软件的应用生产很深的理解。

这次实习旨在培养我们综合运用所学的软件工程专业基础理论、基本技能专业知识分析问题和解决问题的能力,培养我们的专业素质、应用科学的思维方法和计算技巧,使我们了解科学研究工作的一般程序和方法,撰写科技论文的能力;培养我们直接参与科研活动、科研文献和资料的调研,对研究工作以及相关的研究结果分析、综合的能力;重点培养我们积极的创新精神、严肃认真的科学态度和严谨求实的工作作风,增强我们的综合素质以及对毕业后工作岗位的适应能力;有利于扩大我们的知识面,并掌握一些软件工程技术的发展前沿。

这是我们在学习专业课程之后走向工作岗位之前的不可缺少的实践环节。

它对于培养我们的动手能力有很大的意义。

三.项目内容

我所在的班学习的是Android手机软件的开发技术,以及嵌入式开发应用我们的任务是完成一个测量心率的软件,通过传感器采集受测者的心跳,通过AD采样和定时中断,以及蓝牙,最终完成把采集到得心电数据和图像传送到软件上,并绘制出相应的心电图。

其中经历了很多困难,但是我们最后顺利的完成了软件,并通过了答辩。

四.同组分工

小组共有四个成员,分为四个模块。

1.心电采集程序的编写,以及单片机的相应配置。

2安卓开发的JAVA程序编写。

3.蓝牙通信的程序编写,相应的配置,底层文件的改写。

4PPT的制作,以及答辩。

五.项目实现过程

配置定时器,使之按照规定时间,进入中断程序,本项目利用定时器2.。

#include"nrf.h"

#include

#include"timer.h"

voidtimer_init(void)

{

NRF_TIMER2->PRESCALER=0x05;

NRF_TIMER2->MODE=TIMER_MODE_MODE_Timer<

NRF_TIMER2->CC[2]=0x0A;

NRF_TIMER2->INTENSET=TIMER_INTENCLR_COMPARE2_Enabled<

NVIC_EnableIRQ(TIMER2_IRQn);

}

voidtimer_start(void)

{

NRF_TIMER2->TASKS_START=1;

}

//voidtimer_stop(void)

//{

//NRF_TIMER2->TASKS_STOP=0;

//}

以及编写相应的头文件

#ifndef_TIMER_H

#define_TIMER_H

externvoidtimer_init(void);

externvoidtimer_start(void);

externvoidtimer_stop(void);

#endif

利用ADC进行采样,把采集到得心电数据存储到相应的数组之中。

具体包括ADC的配置,以及相应的采集算法的编写。

#include"nrf.h"

#include

#include"adc.h"

uint8_tadc_result;

voidadc_init(void)

{

NRF_ADC->INTENSET=(ADC_INTENSET_END_Enabled<

NRF_ADC->CONFIG=(ADC_CONFIG_PSEL_AnalogInput0<

(ADC_CONFIG_RES_8bit<

(ADC_CONFIG_INPSEL_AnalogInputOneThirdPrescaling<

(ADC_CONFIG_REFSEL_VBG<

(ADC_CONFIG_EXTREFSEL_None<

NRF_ADC->EVENTS_END=0;

NRF_ADC->ENABLE=(ADC_ENABLE_ENABLE_Enabled<

//NVIC_EnableIRQ(ADC_IRQn);

}

voidadc_start(void)

{

NRF_ADC->EVENTS_END=0;

NRF_ADC->TASKS_START=1;

}

//voidADC_IRQHandle(void)

//{

//if(NRF_ADC->EVENTS_END!

=0)

//{

//NRF_ADC->EVENTS_END=0;

//adc_result=NRF_ADC->RESULT;

//NRF_ADC->TASKS_STOP=1;

//}

//}

以及编写相应的头文件

#ifndefADC_H_

#defineADC_H_

//uint8_tadc_result=0;

voidadc_init(void);

voidadc_start(void);

#endif

利用PPI,使得中断程序的嵌套更加简洁,程序更加简洁清晰。

#include"nrf.h"

#include

#include"ppi.h"

voidppi_init(void)

{

NRF_PPI->CHEN=PPI_CHEN_CH0_Enabled<

NRF_PPI->CHG[0]=PPI_CHG_CH0_Included<

NRF_PPI->CHENSET=PPI_CHENSET_CH0_Set<

NRF_PPI->TASKS_CHG[0].EN=1;

NRF_PPI->CH[0].EEP=NRF_TIMER2->EVENTS_COMPARE[2];

NRF_PPI->CH[0].TEP=NRF_ADC->TASKS_START;

//NRF_PPI->CHENSET=1;

//NRF_PPI->CHG[0]=1;

}

以及相应的头文件的编写。

#ifndefPPI_H_

#definePPI_H_

//uint8_tadc_result=0;

externvoidppi_init(void);

#endif

为了把采集到的心电数据进行发送,要利用蓝牙,并且通过相应的配置使得相应的数据可以利用软件画出图像。

相应的蓝牙程序如下。

/*Copyright(c)2012NordicSemiconductor.AllRightsReserved.

*

*TheinformationcontainedhereinispropertyofNordicSemiconductorASA.

*TermsandconditionsofusagearedescribedindetailinNORDIC

*SEMICONDUCTORSTANDARDSOFTWARELICENSEAGREEMENT.

*

*Licenseesaregrantedfree,non-transferableuseoftheinformation.NO

*WARRANTYofANYKINDisprovided.ThisheadingmustNOTberemovedfrom

*thefile.

/*Attention!

*TomaintaincompliancewithNordicSemiconductorASA’sBluetoothprofile

*qualificationlistings,thissectionofsourcecodemustnotbemodified.

#include"ble_hrs.h"

#include

#include"nordic_common.h"

#include"ble_l2cap.h"

#include"ble_srv_common.h"

#include"app_util.h"

#defineOPCODE_LENGTH1/**

#defineHANDLE_LENGTH2/**

#defineMAX_HRM_LEN(BLE_L2CAP_MTU_DEF-OPCODE_LENGTH-HANDLE_LENGTH)/**

#defineINITIAL_VALUE_HRM0/**

//HeartRateMeasurementflagbits

#defineHRM_FLAG_MASK_HR_VALUE_16BIT(0x01<<0)/**

#defineHRM_FLAG_MASK_SENSOR_CONTACT_DETECTED(0x01<<1)/**

#defineHRM_FLAG_MASK_SENSOR_CONTACT_SUPPORTED(0x01<<2)/**

#defineHRM_FLAG_MASK_EXPENDED_ENERGY_INCLUDED(0x01<<3)/**

#defineHRM_FLAG_MASK_RR_INTERVAL_INCLUDED(0x01<<4)/**

/**@briefFunctionforhandlingtheConnectevent.

*@param[in]p_hrsHeartRateServicestructure.

*@param[in]p_ble_evtEventreceivedfromtheBLEstack.

staticvoidon_connect(ble_hrs_t*p_hrs,ble_evt_t*p_ble_evt)

{

p_hrs->conn_handle=p_ble_evt->evt.gap_evt.conn_handle;

}

/**@briefFunctionforhandlingtheDisconnectevent.

*

*@param[in]p_hrsHeartRateServicestructure.

*@param[in]p_ble_evtEventreceivedfromtheBLEstack.

staticvoidon_disconnect(ble_hrs_t*p_hrs,ble_evt_t*p_ble_evt)

{

UNUSED_PARAMETER(p_ble_evt);

p_hrs->conn_handle=BLE_CONN_HANDLE_INVALID;

}

/**@briefFunctionforhandlingwriteeventstotheHeartRateMeasurementcharacteristic.

*@param[in]p_hrsHeartRateServicestructure.

*@param[in]p_evt_writeWriteeventreceivedfromtheBLEstack.

*/

staticvoidon_hrm_cccd_write(ble_hrs_t*p_hrs,ble_gatts_evt_write_t*p_evt_write)

{

if(p_evt_write->len==2)

{

//CCCDwritten,updatenotificationstate

if(p_hrs->evt_handler!

=NULL)

{

ble_hrs_evt_tevt;

if(ble_srv_is_notification_enabled(p_evt_write->data))

{

evt.evt_type=BLE_HRS_EVT_NOTIFICATION_ENABLED;

}

else

{

evt.evt_type=BLE_HRS_EVT_NOTIFICATION_DISABLED;

}

p_hrs->evt_handler(p_hrs,&evt);

}

}

}

/**@briefFunctionforhandlingtheWriteevent.

*

*@param[in]p_hrsHeartRateServicestructure.

*@param[in]p_ble_evtEventreceivedfromtheBLEstack.

*/

staticvoidon_write(ble_hrs_t*p_hrs,ble_evt_t*p_ble_evt)

{

ble_gatts_evt_write_t*p_evt_write=&p_ble_evt->evt.gatts_evt.params.write;

if(p_evt_write->handle==p_hrs->hrm_handles.cccd_handle)

{

on_hrm_cccd_write(p_hrs,p_evt_write);

}

}

voidble_hrs_on_ble_evt(ble_hrs_t*p_hrs,ble_evt_t*p_ble_evt)

{

switch(p_ble_evt->header.evt_id)

{

caseBLE_GAP_EVT_CONNECTED:

on_connect(p_hrs,p_ble_evt);

break;

caseBLE_GAP_EVT_DISCONNECTED:

on_disconnect(p_hrs,p_ble_evt);

break;

caseBLE_GATTS_EVT_WRITE:

on_write(p_hrs,p_ble_evt);

break;

default:

//Noimplementationneeded.

break;

}

}

/**@briefFunctionforencodingaHeartRateMeasurement.

*

*@param[in]p_hrsHeartRateServicestructure.

*@param[in]heart_rateMeasurementtobeencoded.

*@param[out]p_encoded_bufferBufferwheretheencodeddatawillbewritten.

*

*@returnSizeofencodeddata.

*/

staticuint8_thrm_encode(ble_hrs_t*p_hrs,uint16_theart_rate,uint8_t*p_encoded_buffer)

{

uint8_tflags=0;

uint8_tlen=1;

inti;

//Setsensorcontactrelatedflags

if(p_hrs->is_sensor_contact_supported)

{

flags|=HRM_FLAG_MASK_SENSOR_CONTACT_SUPPORTED;

}

if(p_hrs->is_sensor_contact_detected)

{

flags|=HRM_FLAG_MASK_SENSOR_CONTACT_DETECTED;

}

//Encodeheartratemeasurement

if(heart_rate>0xff)

{

flags|=HRM_FLAG_MASK_HR_VALUE_16BIT;

len+=uint16_encode(heart_rate,&p_encoded_buffer[len]);

}

else

{

p_encoded_buffer[len++]=(uint8_t)heart_rate;

}

//Encoderr_intervalvalues

if(p_hrs->rr_interval_count>0)

{

flags|=HRM_FLAG_MASK_RR_INTERVAL_INCLUDED;

}

for(i=0;irr_interval_count;i++)

{

if(len+sizeof(uint16_t)>MAX_HRM_LEN)

{

//Notallstoredrr_intervalvaluescanfitintotheencodedhrm,

//movetheremainingvaluestothestartofthebuffer.

memmove(&p_hrs->rr_interval[0],

&p_hrs->rr_interval[i],

(p_hrs->rr_interval_count-i)*sizeof(uint16_t));

break;

}

len+=uint16_encode(p_hrs->rr_interval[i],&p_encoded_buffer[len]);

}

p_hrs->rr_interval_count-=i;

//Addflags

p_encoded_buffer[0]=flags;

returnlen;

}

 

/**@briefFunctionforaddingtheHeartRateMeasurementcharacteristic.

*

*@param[in]p_hrsHeartRateServicestructure.

*@param[in]p_hrs_initInformationneededtoinitializetheservice.

*

*@returnNRF_SUCCESSonsuccess,otherwiseanerrorcode.

*/

staticuint32_theart_rate_measurement_char_add(ble_hrs_t*p_hrs,

constble_hrs_init_t*p_hrs_init)

{

ble_gatts_char_md_tchar_md;

ble_gatts_attr_md_tcccd_md;

ble_gatts_attr_tattr_char_value;

ble_uuid_tble_uuid;

ble_gatts_attr_md_tattr_md;

uint8_tencoded_initial_hrm[MAX_HRM_LEN];

memset(&cccd_md,0,sizeof(cccd_md));

BLE_GAP_CONN_SEC_MODE_SET_OPEN(&cccd_md.read_perm);

cccd_md.write_perm=p_hrs_init->hrs_hrm_attr_md.cccd_write_perm;

cccd_md.vloc=BLE_GATTS_VLOC_STACK;

memset(&char_md,0,sizeof(char_md));

char_md.char_props.notify=1;

char_md.p_char_user_desc=NULL;

char_md.p_char_pf=NULL;

char_md.p_user_desc_md=NULL;

char_md.p_cccd_md=&cccd_md;

char_md.p_sccd_md=NULL;

BLE_UUID_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1