当前位置: 首页 > news >正文

正规网站建设商家网站后台需要多少

正规网站建设商家,网站后台需要多少,外贸网站平台有哪些,适合乡镇开的十五种店目录 概述 1 探究platform tree下的i2c 1.1 platform tree下的i2c驱动 1.2 查看i2c总线下的设备 1.3 使用命令读写设备寄存器 2 认识HS3003 2.1 HS3003特性 2.2 HS3003寄存器 2.2.1 温湿度数据寄存器 2.2.2 参数寄存器 2.2.3 一个参数配置Demo 2.3 温湿度值转换 2.…目录 概述 1 探究platform tree下的i2c 1.1 platform tree下的i2c驱动 1.2 查看i2c总线下的设备 1.3 使用命令读写设备寄存器 2 认识HS3003 2.1 HS3003特性 2.2 HS3003寄存器 2.2.1 温湿度数据寄存器 2.2.2 参数寄存器 2.2.3 一个参数配置Demo 2.3 温湿度值转换 2.4 HS3003应用电路 2.4.1 PIN引脚定义 2.4.2 sensor 应用电路 3 驱动程序实现 4 测试程序实现 5 编译和验证 6 波形分析 概述 本文主要介绍platform tree架构下i2c驱动的使用方法并介绍如何使用i2c-tools来探测总线上的设备信息。然后详细介绍HS3003的芯片的使用方法并使用i2c驱动接口实现该芯片的驱动程序然后再板卡上测试验证该程序并通过逻辑分析仪查看这个读写过程的波形。 1 探究platform tree下的i2c 1.1 platform tree下的i2c驱动 启动板卡查询/dev/下驱动情况 使用命令 ls /dev/ -l 执行命名后可列出该目录下所有的驱动信息找出i2c驱动如下 由上图可得板卡driver下由两个i2c接口分别为i2c-0和i2c-1 1.2 查看i2c总线下的设备 i2c总线上可以挂载多个device其要求在同一条总线上每个设备的地址必须唯一性。如果两个设备的地址一样会出现时序混乱。 下面通过命令来探测一下i2c总线下的设备情况 1 查看i2c-0下设备情况 使用命令 i2cdetect -a 0 执行该命令后列出设备地址信息 该总线下有两个设备其地址分别为0x1a和0x1e 2 查看i2c-1下设备情况 使用命令 i2cdetect -a 1 执行该命令后列出设备地址信息 该总线下有三个设备其地址分别为0x400x44,和0x44 1.3 使用命令读写设备寄存器 使用 i2c-tools 工具包提供了一些非常方便的工具来对系统的 I2C 总线进行调试。下面以HS3003为例使用i2c-tools工具来操作其内部的寄存器。 1查看设备地址0x44下所有的寄存器信息  i2cdump -f -y 1 0x442 读取寄存器的值 i2cget -f -y 1 0x44 0x06 3写寄存器的值 i2cset -f -y 1 0x44 0xA0 0x10 0x40 2 认识HS3003 2.1 HS3003特性 HS3003是瑞萨公司出品的一款高精度温湿度传感器下面看看其主要参数 2.2 HS3003寄存器 HS3003采用标准的I2C通信方式对其寄存器的操作必须遵循标准的I2C时序。现在分析如何操作其寄存器读取数据。 2.2.1 温湿度数据寄存器 温湿度数据寄存器的数据位定义如下其主要由四个字节组成一个32bit数据 bit-0 和 bit-1为Mask其主要用来标记当前数据是否有效mask 0 数据有效 温度数据(低16 bit ) bit-2 ~ bit ~ 15 湿度数据( 高16 bit) bit-8 ~ bit 13  采样温湿度数据间隔时间根据配置的ADC精度来选取精度要求越高采样所需要的时间就越长。那么读取数据时需要等待的时间就越长。 2.2.2 参数寄存器 精度参数如下 参数寄存器列表 如何配置参数呢芯片手册给了四个步骤 2.2.3 一个参数配置Demo 下面给一个各一个配置参数的范例配置humidity 的采集精度为12bit, 那么参数设定如下 bit-10:  0 bit-11: 1 typedef struct {unsigned short res1 : 10;unsigned short tempdata : 2;unsigned short res2 : 4; } stru_para_bit;typedef struct{union{unsigned short data;stru_para_bit para_bit;}; }stru_para;int hs300x_init(void) {int ret;unsigned char buff[4];stru_para para;// step-1 write data from 0x06buff[0] 0x06;buff[1] 0;buff[2] 0;ret write(fd, buff, 3);if( ret 0 ){printf(read temper cmd to hs3003 register failure.\n);return -1;}// step -2: read reg - 0x81buff[0] 0x81;ret write(fd, buff, 1);if( ret 0 ){printf(read cmd to hs3003 register failure. \r\n);return -1;}ret read(fd, buff, 2);if( ret 0 ){printf(write cmd to hs3003 register failure.\n);return -1;}printf( read reg: 0x81 - data0 %02x data1 %02x \r\n,buff[0],buff[1]);//step -3: write data from 0x46para.data buff[0]8 | buff[1];para.para_bit.tempdata 1; buff[0] 0x46;buff[1] (unsigned char)para.data;buff[2] (unsigned char)(para.data8);ret write(fd, buff, 3);if( ret 0 ){printf(write cmd to hs3003 register failure. \r\n);return -1;}printf(write reg: 0x46 - data0 %02x data1 %02x \r\n,buff[0],buff[1]);return 0; } 2.3 温湿度值转换 datasheet中给的转换公式如下 下面看看在程序中如何实现温湿度值转换的 首先定义一个数据结构 typedef struct {unsigned int mask : 2;unsigned int tempdata : 14;unsigned int humidydata : 14;unsigned int res : 2; } Datafetch_bit;typedef struct{union{unsigned int data;Datafetch_bit fetch_bit;};float tempval;float humival; }hs300x_data; 从温湿度的数据寄存器中读取出来有四个分别为8bit的数据 将该数据拼成一个32bit的数据在赋值给data, 上述数据结构会自动解析该数据。通过mask位判断数据是否有效。 phs300x_data-data ((buff[0] 24U) |(buff[1] 16U) |(buff[2] 8U)|(buff[3]));if( phs300x_data-fetch_bit.mask HS300X_DATA_VALID){// get temperature value val phs300x_data-fetch_bit.tempdata;phs300x_data-tempval (double)val/(double)(HS300X_DATA_FACTOR) * 165.0 - 40;printf( - TM(C): %.2f \r\n, phs300x_data-tempval);// get humidity value val phs300x_data-fetch_bit.humidydata;phs300x_data-humival (double)val/(double)(HS300X_DATA_FACTOR) * 100.0;printf( - HM(\%): %.2f \r\n, phs300x_data-humival);} 2.4 HS3003应用电路 2.4.1 PIN引脚定义 传感器封装 pin引脚 2.4.2 sensor 应用电路 下面是传感器模块的实际应用电路 3 驱动程序实现 编写驱动程序代码 /*************************************************************** Copyright 2024-2029. All rights reserved. 文件名 : drv_hs3003.c 作者 : tangmingfei2013126.com 版本 : V1.0 描述 : hs3003驱动程序 其他 : 无 日志 : 初版V1.0 2024/02/01***************************************************************/ #include sys/types.h #include sys/stat.h #include linux/types.h #include linux/i2c-dev.h #include linux/i2c.h #include sys/ioctl.h #include unistd.h #include stdio.h #include string.h #include fcntl.h #include stdlib.h #include linux/fs.h #include errno.h #include assert.h #include string.h #include time.h/* hs3003 i2c address */ #define HS300X_ADDR (0x44U)#define HS300X_DATA_VALID (0x00U) #define HS300X_DATA_STALE (0x01U) #define HS300X_STATUS_MASK (0xC0000000U) #define HS300X_STATUS_POS (30U)#define HS300X_DATA_MASK (0x3FFFFFFCU) #define HS300X_HUMI_DATA_MASK (0x3FFF0000U) #define HS300X_HUMI_DATA_POS (16U) #define HS300X_TEMP_DATA_MASK (0x0000FFFCU) #define HS300X_TEMP_DATA_POS (2U)#define HS300X_REG_R_TRG 0X06 #define HS300X_REG_W_TRG 0X46/* calculation formula, 2^14 - 1 */ #define HS300X_DATA_FACTOR (16383U)#define DEV_FILE /dev/i2c-1typedef struct {unsigned int mask : 2;unsigned int tempdata : 14;unsigned int humidydata : 14;unsigned int res : 2; } Datafetch_bit;typedef struct{union{unsigned int data;Datafetch_bit fetch_bit;};float tempval;float humival; }hs300x_data;typedef struct {unsigned short res1 : 10;unsigned short tempdata : 2;unsigned short res2 : 4; } stru_para_bit;typedef struct{union{unsigned short data;stru_para_bit para_bit;}; }stru_para;static int fd -1;static int hs300x_drv_init(void) {fd open(DEV_FILE, O_RDWR);if( fd 0 ){close( fd );printf(%s %s i2c device open failure: %s\n, __FILE__, __FUNCTION__, strerror(errno));return -1;}ioctl(fd, I2C_TENBIT, 0);ioctl(fd, I2C_SLAVE, HS300X_ADDR);printf(init hs3003!\r\n);return fd; }int hs300x_init(void) {int ret;unsigned char buff[4];stru_para para;hs300x_drv_init();// step-1 write data from 0x06buff[0] 0x06;buff[1] 0;buff[2] 0;ret write(fd, buff, 3);if( ret 0 ){printf(read temper cmd to hs3003 register failure.\n);return -1;}// step -2: read reg - 0x81buff[0] 0x81;ret write(fd, buff, 1);if( ret 0 ){printf(read cmd to hs3003 register failure. \r\n);return -1;}ret read(fd, buff, 2);if( ret 0 ){printf(write cmd to hs3003 register failure.\n);return -1;}printf( read reg: 0x81 - data0 %02x data1 %02x \r\n,buff[0],buff[1]);//step -3: write data from 0x46para.data buff[0]8 | buff[1];para.para_bit.tempdata 1; buff[0] 0x46;buff[1] (unsigned char)para.data;buff[2] (unsigned char)(para.data8);ret write(fd, buff, 3);if( ret 0 ){printf(write cmd to hs3003 register failure. \r\n);return -1;}printf(write reg: 0x46 - data0 %02x data1 %02x \r\n,buff[0],buff[1]);return 0; }int hs300x_read_value(hs300x_data *phs300x_data) {int ret;unsigned char buff[4];unsigned int val;stru_para para;// write data to 0xa0para.data 0;buff[0] 0xa0;buff[1] (unsigned char)para.data;buff[2] (unsigned char)(para.data8);ret write(fd, buff, 3);if( ret 0 ){printf(write cmd to hs3003 register failure.\n);return -1;}sleep(1);ret read(fd, buff, 4);if( ret 0 ){printf(get the hs3003 value failure.\n);return -1;}printf( - data0 %02x data1 %02x data3 %02x data4 %02x \r\n,buff[0],buff[1],buff[2],buff[3]);phs300x_data-data ((buff[0] 24U) |(buff[1] 16U) |(buff[2] 8U)|(buff[3]));if( phs300x_data-fetch_bit.mask HS300X_DATA_VALID){// get temperature value val phs300x_data-fetch_bit.tempdata;phs300x_data-tempval (double)val/(double)(HS300X_DATA_FACTOR) * 165.0 - 40;printf( - TM(C): %.2f \r\n, phs300x_data-tempval);// get humidity value val phs300x_data-fetch_bit.humidydata;phs300x_data-humival (double)val/(double)(HS300X_DATA_FACTOR) * 100.0;printf( - HM(\%): %.2f \r\n, phs300x_data-humival);}return 0; } 4 测试程序实现 编写测试程序来验证该驱动程序 int main(void) {hs300x_data stru_hs300x;int count_run 10000;int set;set hs300x_init();if( set 0){printf(initial hs3003 failure.\r\n);return -1;}while( count_run 0){set hs300x_read_value( stru_hs300x );if(set ! -1){//printf( \r\n lux: %d , temper);}else{printf(read isl19035 failure. \r\n);}count_run--;sleep(1);}return 0; } 5 编译和验证 编写Makefile 编译测试代码并将其copy到共享目录下方便在板卡中运行该App CFLAGS -Wall -O2 CC/home/ctools/gcc-linaro-4.9.4-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc STRIP/home/ctools/gcc-linaro-4.9.4-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-stripdev_13_hs3003: dev_13_hs3003.o$(CC) $(CFLAGS) -o dev_13_hs3003 dev_13_hs3003.o$(STRIP) -s dev_13_hs3003clean:rm -f dev_13_hs3003 dev_13_hs3003.o 编译代码 运行App, 测试程序能正确地读取温度和湿度值。 6 波形分析 1触发数据转换命令 2读数据波形 3 逻辑分析仪解析到的数据列表
http://www.yingshimen.cn/news/48217/

相关文章:

  • 天津网站建设开发维护怎么注册网址
  • 做外贸一般去什么网站找客户网站备案期间停止解析
  • 页面有哪几个网站可以做360网站图标怎么做
  • 建一个网站怎么赚钱创建网站宝典
  • 网站后台更新的内容出不来众v创业营网站开发
  • 静态网站开发嘉兴市城市建设门户网站
  • 仙游县建设局网站网站空间制作
  • asp.net做网站后台wordpress迁移到vps
  • 网站开发面板北京丰台做网站
  • 苏州培训网站建设浪漫花语百科网网页制作素材
  • 手机淘宝客网站怎么做的微信网站建设 知乎
  • 在青岛建网站深圳易捷网站建设
  • 网站体验调查问卷怎么做wordpress如何安装百度地图
  • 手机淘宝网页版登陆入口免费关键词优化工具
  • 长沙理财网站建设网站建设排名软件
  • 微信网站设计欣赏seo教程pdf
  • 网站安全证书怎么申请做网络写手最好进那个网站
  • 网站建设放在什么科目莱芜网站建设电话
  • 网站标题改动优秀的品牌策划案例
  • 湖南智能网站建设推荐网站不显示index.html
  • jsp网站空间自己做公众号和小说网站推广
  • 购物网站开发设计思路网站后台页面进不去
  • 树莓派wordpress frp昆明做网站优化公司
  • 如果在工商局网站上做股权质押服务周到的响应式网站
  • 做商城网站哪个好wordpress log文件大小
  • 南京网站建设苏icp备腾讯企点怎么改名字
  • 精品课程网站开发云南省建设厅网站发文
  • 网站设计师认证培训网络营销是啥意思
  • 制作购物网站教程legenda wordpress
  • 用商标做网站名字wordpress添加统计代码