某个项目中使用到JHM1400读取所研制的压力传感器输出。学习了1400 IIC通信协议代码,整理了解读文档,帮助使用JHM1400 IIC通信开发的初学者。


1.JHM1400 基础知识:

CYC模式: cyclic mode

FIFO( First Input First Output)   先进先出存储器

IIC地址  -   7位寻址

在7位寻址过程中,从机地址在启动信号后的第一个字节开始传输,该字节的前7位为从机地址,第8位为读写位,其中0表示写,1表示读。

2.标准例程

主程序:

1.CYC配置

就是发送几个命令  见数据手册

发送完配置命令再测试一下读数据

其中,从机地址:

//The 7-bit IIC address of the JHM1200 is 0x78

u8 Device_Address = 0x38 << 1;

// 0x38=[ 0011  1000 ]   <<1   也就是  [ 0111 0000 ]

uint8_t BSP_IIC_Read(uint8_t address, uint8_t *buf, uint16_t count):

//IIC读函数

/**

* @brief IIC master perform read operation at specific operation

*        IIC主控在具体的操作中执行读操作

* @param IIC

* @param address

* @param buf

* @param count

* @return uint8_t

*/

3.程序源码注释:

1-进入CYC模式并启用FIFO

void Come_CYC(void)
{u8 buffer[10] = {0};buffer[0] = 0xE0;  //Start_CYC 进入 CYC 模式  见1400数据手册25页buffer[1] = 0x00;buffer[2] = 0x00;BSP_IIC_Write(Device_Address, buffer, 3);  //写命令:add,bufferdelay_us(5);while (1)  //状态判断,避免出错{if (JHM1400_IsBusy()){delay_us(1);
//          printf("Come_CYC 1400 is busy!\r\n");}elsebreak;}buffer[0] = 0xE1; //设置CYC模式下的滤波系数 //见1400数据手册第17页buffer[1] = 0x50; //启用FIFObuffer[2] = 0x00;BSP_IIC_Write(Device_Address, buffer, 3);//还是发送命令:add,buffer   delay_ms(5);while (1){if (JHM1400_IsBusy()){delay_ms(1);}else{break;}    }BSP_IIC_Read(Device_Address, buffer, 10);  //进行一次数据读取printf("Come_CYC buffer[0] = %x\r\n",buffer[0]);
}

2-从FIFO读数据

void Read_Fifo(void)
{u8 buffer[10] = {0};u8 i = 0;u8 cnt = 1;buffer[0] = 0xA1;   //读取命令  还是见数据手册29页 相关命令buffer[1] = 0x00;buffer[2] = 0x00;BSP_IIC_Write(Device_Address, buffer, 3); //发命令delay_us(5);while (1){if (JHM1400_IsBusy()){delay_us(1); }elsebreak;}if(JHM1400_FIFO_FULL() || (!JHM1400_FIFO_EMPTY()))  //当FIFO满了,或者不为空{for(i = 0; i < 31; i++){BSP_IIC_Read(Device_Address, buffer, 10);//根据IIC的底层协议代码,返回数据会存储在buffer内printf("Read buffer[0] =  %x %x\r\n",cnt,buffer[0]);printf("Read buffer[1] = %x\r\n",buffer[1]);printf("Read buffer[2] = %x\r\n",buffer[2]);printf("Read buffer[3] = %x\r\n",buffer[3]);printf("Read buffer[4] = %x\r\n",buffer[4]);delay_ms(10);cnt++;}}
}

因为是开了FIFO  所以数据格式是:

FIFO最多存32个数据,外层循环读不同时候存的数据

内层几个printf把数据到串口  (地址、状态、  三个字节的数据位)

3-IIC底层协议:

一般的做法是用软件模拟,把IO口配置成IIC模式

然后打包几个 read  write 函数,方便调用。

IIC配置的底层协议在各平台很容易找到,也有很多例程可以参考。

1400例程中的IIC配置:

很常见的配置方式。

源代码见 例程中 gpio_iic.c 文件

引脚配置、ACK配置就不在赘述

看一下写字符串命令的函数:BSP_IIC_Write():

unsigned char  BSP_IIC_Write(unsigned char address, unsigned char *buf, unsigned short count)
{// Prepare IIC address with read bit 0address &= 0xFE;   //这个操作就是前七位不变,最后一位置0  七位寻址,最后一位示意写命令// IIC master send Start symbolStart(); //开始通信DelayUs(1);// IIC master Send IIC address and read bit, check ACK  发送add并检查ACKSendByte(address);DelayUs(5);if (Check_ACK()){Stop();return 1; //timeout}// IIC master Send data bytes & check ACK  // 要发送的数据存在buf里面,发送  count次 ,也就是count个字节while (count){SendByte(*buf); //发送buf第一个字节DelayUs(5);if (Check_ACK())  //如果收到ACK  就说明发送命令结束了,可以提前return{Stop();return 2; //timeout}buf++; //这个操作是指针后移一位,指向下一个字节count--;}Stop(); //结束通信return 0;
}

【JHM1400】电阻桥式或半桥式传感器信号调理模块例程相关推荐

  1. 全桥电路与半桥电路如何连接在一起

    1.ADC采集器内部使用的是半桥电路 通过通断测量分析: ADI-实际与AC24-/COM供电引脚连通 2.模拟量变送器内部使用全桥电路 通过分析: AV-与DC24-相连通 3.错误的电路连接:(上 ...

  2. 半桥dcdc变换器matlab,450W多路DC/DC变换器设计方案

    1 概述 450W多路DC/ DC 变换器是一种直流变换开关电源,其输入电压为直流27V ,电源输出分别为直流±20V 10A 和5V 10A 三种不同的类型,其中电源的输入与输出隔离,且输出电源的± ...

  3. 电磁炉的三种工作形式_单管电路_半桥电路和全桥电路

    电磁炉的核芯电路是一个变频电路,即将50或60Hz的低频市电转换成20kHz的高频电供给感应线圈来产生高频磁场,使金属锅具在磁场作用下产生涡流而发热.目前电磁炉变频电路的主要形式有三种:单管电路.半桥 ...

  4. H8系列MCU在半桥电磁炉中的应用

    现阶段网上大部分的资料都是家用小功率电磁炉,而大功率(3-20KW)的电磁炉随着商用领域的发展,应用量越来越大.本文是基于合泰的H8系列单片机在半桥中大功率半桥电磁炉的应用. https://www. ...

  5. GBU808-ASEMI品质家电用桥堆制柜整流桥

    编辑:ll GBU808-ASEMI品质家电用桥堆制柜整流桥 型号:GBU808 品牌:ASEMI 封装:GBU-4 电性参数:8A 800V 正向电流:8A 反向耐压:800V 引脚数量:4 芯片个 ...

  6. arctanx麦克劳林公式推导过程_半桥 LLC 基波分析和参数计算过程推导

    本文是 21Dianyuan 社区原创技术文章,作者 LLC 谐振,感谢作者的辛苦付出. 直流增益公式推导 直流 LLC 谐振电源,其实也相当于 buck-boost 电源.要想弄明白和推导理论公式, ...

  7. 半桥dcdc变换器matlab,半桥式DC-DC变换器设计.doc

    半桥式DC-DC变换器设计 半桥式DC-DC变换器设计 [摘要]近年来,随着电力电子器件.控制理论的发展和人们对电源性能要求的提高,电力电子技术引起了学者们的广泛关注.目前一些发达国家正逐渐把电力变换 ...

  8. 半桥llc 增益 matlab程序,半桥LLC谐振设计多路输出辅助电源

    引言 随着电力电子技术的发展,稳定.可靠.低EMI成为对辅助电源最基本的要求.本文详细介绍了一种多路输出,而且相互独立的新型辅助电源的设计方法. 设计采用AC/DC-AC/DC的变换方案.不控整流后的 ...

  9. 半桥llc 增益 matlab程序,“狠”完整的LLC谐振半桥电路分析与计算!

    原标题:"狠"完整的LLC谐振半桥电路分析与计算! 完整的LLC谐振半桥电路分析与计算 一.概述 在传统的开关电源中,通常采用磁性元件实现滤波,能量储存和传输.开关器件的工作频率越 ...

最新文章

  1. 在Windows Server 2012中如何快速开关桌面上经典的“计算机、我的文档”等通用图标...
  2. 发动机的工作原理,你知道吗?
  3. Redis(零):背景
  4. 伪类::selection自定义文本选中时的样式(CSS3样式),CSS3的word-break单次换行
  5. 决策树的python实现
  6. 【工程项目经验】之32/64位平台printf uint64的方法
  7. python numpy数组切片_python中numpy数组切片实验解释
  8. [51nod1084]矩阵取数问题 V2
  9. python爬取方式_Python3 实现爬取网站下所有URL方式
  10. 政企用户网络安全常见风险盘点
  11. 三线压力传感器原理_压力传感器 压力传感器原理
  12. python安装库的命令-免费足球现场直播直播
  13. 用计算机绘制函数图像数学大师,用Excel来绘制数学中的函数图像
  14. Unity问题(1)——mesh法线反转
  15. COGS 336 Vijos 1018 NOI2003 智破连环阵
  16. Android “adb”不是内部或外部命令,也不是可运行的程序或批处理文件
  17. 用 Java3D 写游戏
  18. C++约瑟夫环(又称丢手绢)解决---最简单的理解
  19. JSON的parse()方法
  20. 走遍美国 —— 各州及其别名

热门文章

  1. 利用系统相机相册获取单张图片,兼容7.0
  2. 【leetcode】【简单】13. 罗马数字转整数【字典搜索】
  3. hs8545m5虚拟服务器,华为HS8545M光猫怎么开启路由功能
  4. Silverlight5正式候选版发布附下载地址(Silverlight 5.0 RC)
  5. root精灵有mac版的吗,苹果有root
  6. Go实现 Bit 数组(集合)
  7. 51单片机:串行口控制寄存器SCON
  8. django+haystack+ElasticsearchSearch
  9. 报表模块-report
  10. python:pyqt5+mysql=学生信息管理系统(图文并茂,超详细, 附源码)——增删改查篇