嵌入式系统综合实验一

上传人:hs****ma 文档编号:513727161 上传时间:2023-08-18 格式:DOCX 页数:13 大小:240.10KB
返回 下载 相关 举报
嵌入式系统综合实验一_第1页
第1页 / 共13页
嵌入式系统综合实验一_第2页
第2页 / 共13页
嵌入式系统综合实验一_第3页
第3页 / 共13页
嵌入式系统综合实验一_第4页
第4页 / 共13页
嵌入式系统综合实验一_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《嵌入式系统综合实验一》由会员分享,可在线阅读,更多相关《嵌入式系统综合实验一(13页珍藏版)》请在金锄头文库上搜索。

1、力峥实验报告P.1专业:测控技术与仪器姓名: 学号:日期:地点:31301038502018.4.28创客空间课程名称:实验名称:一、实验目的和要求(必填) 三、主要仪器设备(必填) 五、实验数据记录和处理 七、讨论、心得原理:温湿度传感器DHT11:1.引脚图嵌入式系统设计指导老师: 成绩:综合实验一 dht11和人体感应传感器 实验类型:验证型 同组学生姓名:孙凡原 二、实验内容和原理(必填) 四、操作方法和实验步骤 六、实验结果与分析(必填)一、实验目的和要求1. 掌握字符设备驱动程序的基本结构和开发方法2. 掌握用户空间调用设备驱动的方法3. 掌握用户和内核的交互 二、实验内容和原理1

2、. 编写温湿度传感器DHT11驱动,传输打印温湿度信息2. 编写人体感应传感器驱动,控制LED灯亮灭pin1VDD供电 3-5.5VDC2ATA3NC胡,眼空4GND僦,桐恭实际使用传感器没有NC引脚2.数据采集a. 数据总时序用户主机发送一次开始信号后,DHT11从低功耗模式转换到高速模式,待主机开始信号结束后,DHT11发 送响应信号,送出40bit的数据,开触发一次信采集。舛弓 =从加数据时序图b. 主机发送起始信号连接DHT11的DATA引脚的I/O 口输出低电平,且低电平保持时间不能小于18ms,然后等待DHT11作 出应答信号。主叽发送起始信号装c. 检测从机应答信号订 DHT11

3、的DATA引脚检测到外部信号有低电平时, 等待外部信号低电平结束, 延迟后DHT11的DATA引脚处于输出状态,输出80微秒的低电平作为应答信号,紧接着输出80微秒的高电平通知外设 独准备接收数据。d. 接收数据(1)数据判定规则位数据“0”的格式为:50微秒的低电平和26-28微秒的高电平,位数据T”的格式为:50微秒的低电平 加70微秒的高电平。接收数据时可以先等待低电平过去,即等待数据线拉高,再延时60us,因为60us大于28us且小于70us, 再检测此时数据线是否为高,如果为高,则数据判定为1,否则为0。位数打“0”格式位数据T格式(2)数据格式一次传送40位数据,高位先出8bit

4、湿度整数数据+ 8bit湿度小数数据+8bit温度整数数据+ 8bit温度小数数据+8bit校验位。(3)数据校正判断“8bit湿度整数数据+ 8bit湿度小数数据+8bit温度整数数据+ 8bit温度小数数据”的结果是否等于 8bit校验位。如果等于则数据接收正确,否则应该放弃这一次的数据,重新接收。人体感应传感器HCSR-501:1、全自动感应:人进入其感应范围则输出高电平,人离开感应范围则自动延时关闭高电平,输出低电平2、光敏控制(可选择,出厂时未设)可设置光敏控制,白天或光线强时不感应。3、温度补偿(可选择,出厂时未设):在夏天当环境温度升高至3032C,探测距离稍变短,温度补偿可 作

5、一定的性能补偿。4、两种触发方式:(可跳线选择)a、不可重复触发方式:即感应输出高电平后,延时时间段一结束,输出将自动从高电平变成低电平;b、可重复触发方式:即感应输出高电平后,在延时时间段内,如果有人体在其感应范围活动,其输出将 一直保持高电平,直到人离开后才延时将高电平变为低电平(感应模块检测到人体的每一次活动后会自动 顺延一个延时时间段,并且以最后一次活动的时间为延时时间的起始点)。5、具有感应封锁时间(默认设置:2.5S封锁时间):感应模块在每一次感应输出后(高电平变成低电平), 可以紧跟着设置一个封锁时间段,在此时间段内感应器不接受任何感应信号。此功能可以实现“感应输出 时间”和“封

6、锁时间”两者的间隔工作,可应用于间隔探测产品;同时此功能可有效抑制负载切换过程中 产生的各种干扰。(此时间可设置在零点几秒一几十秒钟)。6、工作电压范围宽:默认工作电压DC4.5V-20V。7、微功耗:静态电流50微安,特别适合干电池供电的自动控制产品。8、输出高电平信号:可方便与各类电路实现对接。三、主要仪器设备树莓派、PC机、温湿度传感器、人体感应传感器 四、操作方法和实验步骤1. 根据说明书编写传感器驱动2. 编写可执行程序 五、实验数据记录和处理1.传感器驱动demo.cDRIVER_NAME Demo#include#include#include#include#include#i

7、nclude#include#include#include#include#define#definestaticstaticstaticstructstructdemo_devno; /设备号 class *demo_class; cdev demo_dev;staticgpio_config(int int int int int intstructbutton_num;/人体传感器输出端 out_num;/温湿度传感器数据端 led_num;/人体红外传感器连接的led led1_num;/温湿度传感器连接的led humidity;/湿度值 temperature;/温度值DEVIC

8、ENAME Demo)config;static int i=0;static int flag = 0;/open函数,应用程序调用open系统调用时会调用本函数static int demo_open(struct inode *inode,struct file *filp)printk(KERN_INFODemo openn);return 0;/release函数,应用程序调用close系统调用时会调用本函数static int demo_release(struct inode *inode, struct file *filp)if(flag)gpio_free(config.b

9、utton_num);gpio_free(config.led_num);flag = 0;printk(KERN_INFODemo releasen);return 0;/ioctl控制函数,应用程序调用ioctl系统调用时会调用本函数static long demo_ioctl(struct file *filp,unsigned int cmd,unsigned long arg)int err = 0;int buff40;int humi=0;int temper=0;switch(cmd)case 0:/0表示命令号,一般都用宏定义来控制if(copy_from_user(&con

10、fig,(void *)arg,sizeof(struct gpio_config) /从用户程序中获取配置数据printk(KERN_ERR%s %d : copy_from userfailed !n”,_func_,_LINE_);return -EFAULT;printk(KERN_INFO%s %d: Get button 即io num: %d and led 即io num: %dn,_func_,_LINE_,config.button_num,config.led_num);err = gpio_request_one(config.button_num,GPIOF_IN,L

11、ight Button);if(err)printk(KERN_ERR%s %d:Request button gpiofailedn”,_func_,_LINE_);return -EFAULT;err = gpio_request_one(config.led_num,GPIOF_OUT_INIT_LOW,LED light);if(err)printk(KERN_ERR%s %d:Request led gpiofailedn”,_func_,_LINE_);gpio_free(config.button_num);return -EFAULT;err = gpio_request_on

12、e(config.out_num,GPIOF_IN,Light Button); if(err)printk(KERN_ERR%s %d:Request button gpiofailedn”,_func_,_LINE_);gpio_free(config.button_num);gpio_free(config.led_num);return -EFAULT;err = gpio_request_one(config.led1_num,GPIOF_OUT_INIT_LOW,LED light);if(err)printk(KERN_ERR%s %d:Request led gpiofaile

13、dn”,_func_,_LINE_);gpio_free(config.out_num);gpio_free(config.button_num);gpio_free(config.led_num);flag = 1;break;case 1:gpio_direction_output(config.led_num,0);/设置 led 输出 gpio_direction_input(config. button_num); /设置人体传感器输入 gpio_set_value(config.led_num,0);/关 ledif(gpio_get_value(config.button_num

14、)=0)/人体感应输入低电平,led 灭 gpio_set_value(config.led_num,0);else if(gpio_get_value(config.button_num)=1)/人体感应输入高电平,led 亮gpio_set_value(config.led_num,1);gpio_direction_output(config.led1_num,0);/设置 led1 输出(实际并未使用)gpio_direction_output(config.out_num,1);/设置温湿度传感器数据端的引脚为输出gpio_set_value(config.led1_num,0);gpio_set_value(config.out_num,0);/根据 dht11 的数据传输规则进行操作 mdelay(20);gpi

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号