1.ADS1115中文资料:https://wenku.baidu.com/view/8bab101feef9aef8941ea76e58fafab069dc44e7.html?rec_flag=default&sxts=1557987780920

2.IIC协议程序

IIC协议是大多数传感的通信协议,每个嵌入式工程师都要有自己的IIC底层协议

IIC可细分为7个函数

1.开始

2.读取

3.发送

4.结束

5.主机检测从机应答

6. 主机应答

7. 主机不应答

  1. /*******************************************************************************
  2. *
  3. *
  4. * Protocol Part
  5. *
  6. *
  7. ****************************************************************************** */
  8.  
  9. /*******************************************************************************
  10. * Function Name : vIIC_Start_Signal
  11. * Description : Master Send Start Signal
  12. * Input : None
  13. * Output : None
  14. * Return : None
  15. ****************************************************************************** */
  16. void vIIC_Start_Signal(IIC_HandleTypedef * hIICx)
  17. {
  18.  
  19. IIC_SDA_1 (hIICx); //拉高数据线
  20. IIC_SCL_1 (hIICx); //拉高时钟线
  21. vIIC_Delay_2us ( ); //延时
  22. IIC_SDA_0 (hIICx); //拉低数据线
  23. vIIC_Delay_2us ( ); //延时
  24. IIC_SCL_0 (hIICx); //拉低时钟线
  25. vIIC_Delay_2us ( ); //延时
  26. }
  27.  
  28. /*******************************************************************************
  29. * Function Name : vIIC_SendByte
  30. * Description : Master Send a Byte to Slave
  31. * Input : Will Send Date
  32. * Output : None
  33. * Return : None
  34. ****************************************************************************** */
  35. void vIIC_SendByte(IIC_HandleTypedef * hIICx,uint8_t uSendByte)
  36. {
  37.  
  38. uint8_t i;
  39.  
  40. for (i=; i<; i++)
  41. {
  42. if(uSendByte & 0X80)
  43. IIC_SDA_1 (hIICx);
  44. else
  45. IIC_SDA_0 (hIICx);
  46. uSendByte <<= ;
  47. vIIC_Delay_1us ( );
  48. IIC_SCL_1 (hIICx);
  49. vIIC_Delay_2us ( );
  50. IIC_SCL_0 (hIICx);
  51. vIIC_Delay_1us ( );
  52.  
  53. }
  54.  
  55. }
  56.  
  57. /*******************************************************************************
  58. * Function Name : uIIC_RecvByte
  59. * Description : Master Reserive a Byte From Slave
  60. * Input : None
  61. * Output : None
  62. * Return : Date From Slave
  63. ****************************************************************************** */
  64. uint8_t uIIC_RecvByte(IIC_HandleTypedef * hIICx)
  65. {
  66. uint8_t i,uReceiveByte = ;
  67.  
  68. IIC_GPIO_MODE_Ipt (hIICx);
  69. IIC_SDA_1 (hIICx);
  70. for(i=;i<;i++)
  71. {
  72. uReceiveByte <<= ;
  73.  
  74. vIIC_Delay_1us ( );
  75. IIC_SCL_1 (hIICx);
  76. vIIC_Delay_1us ( );
  77.  
  78. if(IIC_SDA_R (hIICx))
  79. {
  80. uReceiveByte |=0x01;
  81. }
  82.  
  83. vIIC_Delay_1us ( );
  84. IIC_SCL_0 (hIICx);
  85. vIIC_Delay_1us ( );
  86. }
  87. IIC_GPIO_MODE_Opt (hIICx);
  88.  
  89. return uReceiveByte;
  90.  
  91. }
  92.  
  93. /*******************************************************************************
  94. * Function Name : vIIC_Ack
  95. * Description : Master Send Acknowledge Single
  96. * Input : None
  97. * Output : None
  98. * Return : None
  99. ****************************************************************************** */
  100. void vIIC_Ack(IIC_HandleTypedef * hIICx)
  101. {
  102.  
  103. IIC_SDA_0 (hIICx); //拉低数据位
  104. vIIC_Delay_1us ( ); //延时
  105. IIC_SCL_1 (hIICx); //拉高时钟位
  106. vIIC_Delay_2us ( ); //延时
  107. IIC_SCL_0 (hIICx); //拉低时钟位
  108. vIIC_Delay_1us ( ); //延时
  109.  
  110. }
  111.  
  112. /*******************************************************************************
  113. * Function Name : vProto_IIC_NAck
  114. * Description :
  115. * Input : None
  116. * Output : None
  117. * Return : None
  118. ****************************************************************************** */
  119. void vIIC_NAck(IIC_HandleTypedef * hIICx)
  120. {
  121.  
  122. IIC_SDA_1 (hIICx); //SDA拉高 不应答对方
  123. vIIC_Delay_1us ( );
  124. IIC_SCL_1 (hIICx);
  125. vIIC_Delay_2us ( );
  126. IIC_SCL_0 (hIICx);
  127. vIIC_Delay_1us ( );
  128.  
  129. }
  130.  
  131. /*******************************************************************************
  132. * Function Name : bIIC_ReadACK
  133. * Description : Master Reserive Slave Acknowledge Single
  134. * Input : None
  135. * Output : None
  136. * Return : None
  137. ****************************************************************************** */
  138. bool bIIC_ReadACK(IIC_HandleTypedef * hIICx) //返回为:=1有ACK,=0无ACK
  139. {
  140. IIC_GPIO_MODE_Ipt (hIICx);
  141. IIC_SDA_1 (hIICx); //拉高数据线
  142. vIIC_Delay_1us ( ); //延时
  143. IIC_SCL_1 (hIICx); //拉高时钟线
  144. vIIC_Delay_2us ( ); //延时
  145.  
  146. if(IIC_SDA_R(hIICx))
  147. {
  148. vIIC_Delay_1us( );
  149. IIC_SCL_0 (hIICx);
  150. vIIC_Delay_1us( );
  151. IIC_GPIO_MODE_Opt(hIICx);
  152. return FALSE; // 没有应答
  153. }
  154. else
  155. {
  156. vIIC_Delay_1us( );
  157. IIC_SCL_0 (hIICx);
  158. vIIC_Delay_1us( );
  159. IIC_GPIO_MODE_Opt(hIICx);
  160. return TRUE;
  161. }
  162.  
  163. }
  164.  
  165. /*******************************************************************************
  166. * Function Name : vIIC_Stop_Signal
  167. * Description : Master Send Stop Signal
  168. * Input : None
  169. * Output : None
  170. * Return : None
  171. ****************************************************************************** */
  172. void vIIC_Stop_Signal(IIC_HandleTypedef * hIICx)
  173. {
  174.  
  175. IIC_SDA_0 (hIICx); //拉低数据线
  176. vIIC_Delay_2us ( ); //延时
  177. IIC_SCL_1 (hIICx); //拉高时钟线
  178. vIIC_Delay_2us ( ); //延时
  179. IIC_SDA_1 (hIICx); //拉高数据线
  180. vIIC_Delay_2us ( ); //延时
  181.  
  182. }

3.寄存器操作

ADS1115的ADDR引脚接地,则寄存器地址为0x90

ADS1115的操作只有3步

1.向配置寄存器0x01写入配置,先写高8位,再写低8位

  1. void uSen_ADS1115_Confight(IIC_HandleTypedef * iicHandle)
  2. {
  3. vIIC_Start_Signal(iicHandle); //1. IIC_Start ; 起始信号
  4. vIIC_SendByte(iicHandle, Slave_Address); //2. IIC_Send Device Address(W); 发送设备地址 0x90
  5.  
  6. bIIC_ReadACK(iicHandle);
  7.  
  8. vIIC_SendByte(iicHandle, 0x01); //发送寄存器地址 0x01
  9. bIIC_ReadACK(iicHandle);
  10. vIIC_SendByte(iicHandle, 0xc0); //具体如何配置看手册
  11. bIIC_ReadACK(iicHandle);
  12. vIIC_SendByte(iicHandle, 0x83);
  13. bIIC_ReadACK(iicHandle);
  14. vIIC_Stop_Signal(iicHandle);
  15.  
  16. }

2. 写入指针寄存器0x00,准备读取电压

  1. void uSen_ADS1115_PointRegister(IIC_HandleTypedef * iicHandle, uint8_t Register_Address)
  2. {
  3. vIIC_Start_Signal(iicHandle); //1. IIC_Start ; 起始信号
  4. vIIC_SendByte(iicHandle, Slave_Address); //2. IIC_Send Device Address(W); 发送设备地址 0x90
  5.  
  6. vIIC_Ack(iicHandle);
  7.  
  8. vIIC_SendByte(iicHandle, 0x00); //4. IIC_Send Register Address ; 发送要操作的寄存器地址
  9. vIIC_NAck(iicHandle);
  10.  
  11. vIIC_Stop_Signal(iicHandle); //9. IIC_Stop ; 结束信号
  12. }

3.读取电压数据

  1. float uSen_ADS1115_Read_Date(IIC_HandleTypedef * iicHandle)
  2. {
  3. uint8_t uRev_Register_Data_H = 0x00,uRev_Register_Data_L = 0x00;
  4. float uRev_Register_Data = 0x00;
  5.  
  6. vIIC_Start_Signal(iicHandle); //1. IIC_Start ; 起始信号
  7. vIIC_SendByte(iicHandle,0x91); //7. I2C_Send Device Address(R); 发送设备地址+1 准备读取
  8. vIIC_Ack(iicHandle); //8. I2C_Ack ; 等待应答
  9. uRev_Register_Data_H = uIIC_RecvByte(iicHandle); //9. I2C_ReadByte ; 读取高位数据
  10. vIIC_Ack(iicHandle);
  11. uRev_Register_Data_L = uIIC_RecvByte(iicHandle); //9. I2C_ReadByte ; 读取低位数据
  12. vIIC_NAck(iicHandle);
  13.  
  14. //数据处理
  15. vIIC_Stop_Signal(iicHandle);
  16. uRev_Register_Data=uRev_Register_Data_H*+uRev_Register_Data_L; //合取为16位数据
  17.  
  18. if(uRev_Register_Data>=0x8000)
  19. uRev_Register_Data=((float)(0xffff-uRev_Register_Data)/32767.0)*4.096;
  20. else
  21. uRev_Register_Data=((float)uRev_Register_Data/32768.0)*4.096
  1. ; return uRev_Register_Data; }

4. 数据处理

(16位数据/2的15次方)*量程

即(uRev_Register_Data/32768)*4.096

注意有电压有正负

5.量程范围

VCC+/-量程

比如 0v+/-4.096

基于STM32F429的ADS1115驱动程序的更多相关文章

  1. 基于STM32F429和Cube的主从定时器多通道输出固定个数的PWM波形

    主从定时器的原理已在上篇博文: 基于STM32F429+HAL库编写的定时器主从门控模式级联输出固定个数PWM脉冲的程序 讲解了,这篇重点就讲如何实现多通道的PWM级联输出. 1.软件环境 Keil5 ...

  2. 基于STM32F429和Cube的ov2640程序

    1.ov2640和DCMI介绍 OV2640 是 OV(OmniVision)公司生产的一颗 1/4 寸的 CMOS UXGA(1632*1232)图 像传感器.该传感器体积小.工作电压低,提供单片 ...

  3. 基于STM32F429的TFT0.96屏幕驱动

    1.介绍TFT 2.Cube配置  该屏幕是用SPI通信的,但没有MISO引脚,意思是说该屏幕只能接收数据,但无法读取里面的数据,理论上说四线就能启动,但我弄不出,只能用六线. 在Cube上只要开启六 ...

  4. 基于STM32F429的内存管理

    1.内存管理介绍 内存管理,是指软件运行时对计算机内存资源的分配和使用的技术.其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源. 内存管理的实现方法有很多种,他们其实最终都是要 ...

  5. 基于STM32F429+HAL库编写的定时器主从门控模式级联输出固定个数PWM脉冲的程序

    硬件设备   42步进电机,步进电机驱动器,正点原子F429开发板 开发软件    keil5,Cube 综述   一般要精准的控制电机,就要控制单片机的引脚输出指定个数的PWM波,有多种可实现的方法 ...

  6. 基于STM32F429和HAL库的CAN收发例程

    1.CAN协议介绍 CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信协议.在当前的汽车产业中,出于对安全性.舒适性.方便性.低公 ...

  7. 基于STM32F429,Cubemx的SAI音频播放实验

    书接上文:https://www.cnblogs.com/feiniaoliangtiangao/p/11060674.html 和 https://www.cnblogs.com/feiniaoli ...

  8. 基于STM32F429,Cubemx的SDHC卡的基本Fatfs文件移植

    本博文要求各位初步了解Fatfs文件系统 友情提示Fatfs官网:http://elm-chan.org/fsw/ff/00index_e.html 1.开发软件 keil5,Cube5.21 2.实 ...

  9. 基于WDF的PCI/PCIe接口卡Windows驱动程序(3)- 驱动程序代码(头文件)

    原文出处:http://www.cnblogs.com/jacklu/p/4679304.html 在WDF的PCIe驱动程序中,共有四个.h文件(Public.h  Driver.h  Device ...

随机推荐

  1. django基础之day09,创建一个forms表单组件进行表单校验,知识点:error_messages,label,required,invalid,局部钩子函数,全局钩子函数, forms_obj.cleaned_data,forms_obj.errors,locals(), {{ forms.label }}:{{ forms }},{{ forms.errors.0 }}

    利用forms表单组件进行表单校验,完成用户名,密码,确认密码,邮箱功能的校验 该作业包含了下面的知识点: error_messages,label,required,invalid,局部钩子函数,全 ...

  2. eclipse 导入别人拷贝过来的工作空间项目

    切换自己的工作空间 File --> Import --> Existing Project into Workspace --> 选择项目根目录 --> 确定 如果你的ecl ...

  3. 《Java练习题》习题集四

    编程合集: https://www.cnblogs.com/jssj/p/12002760.html Java总结:https://www.cnblogs.com/jssj/p/11146205.ht ...

  4. Mybatis使用心德

    什么是Mybatis? Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动.创建连接.创建statement等繁杂的过 ...

  5. Mybatis一级缓存、二级缓存详讲

    Mybatis 一级缓存.二级缓存 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 查询缓存 首先,我们先看一下这个标题“查询缓存”,那就说明跟增.删.改是没有任何关联的,只有在查询 ...

  6. PlayJava Day027

    进程状态 1.创建状态:在程序中用构造方法创建了一个线程对象后,新的线程对象便处于新建状态 此时,它已经有了相应的内存空间和其他资源,但还处于不可运行状态 新建一个线程对象可采用Thread类的构造方 ...

  7. Python如何运行程序

    人生苦短,我用Python. 作为一个开发人员,如何写代码是必须要知道的,代码如何运行也是有必要了解的.通过了解代码如何运行,可指导我们写出效率更高的代码.下午看了<Python学习手册> ...

  8. vs2017 输出 ling to sql 转为执行的sql语句

    在项目视图中,找到->输出 窗口,在窗口中选择ASP.NET Core Web服务器,调试项目即可看到执行的sql语句

  9. oracle截取时间的年/月/日/时/分/秒

    修改日期格式为年月日时分秒: alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';select to_char(sysdate,'yyy ...

  10. django-xadmin自定义widget插件(自定义详情页字段的显示样式)

    有时候我们想要修改xadmin详情页字段的显示方式,比如django默认的ImageField在后台显示的是image的url,我们更希望看到image的缩略图:再比如django将多对多字段显示为多 ...