ZYNQ-实现外设驱动开发-iic接口的温湿度传感器si7021

简介: ZYNQ-实现外设驱动开发-iic接口的温湿度传感器si7021

学习内容


进一步熟悉IIC接口的开发调试,上次工程只是模拟开发,本次将进行实践操作。

开发环境


vivado 18.3

SDK

pynq-z2

硬件平台搭建


参考前文-ZYNQ-实现外设驱动开发-iic接口的光强度传感器GY-30的搭建过程

下面给出部分更改操作:

这里我们需要把之前选到的MIO改成EMIO

image.png

同时参考我们的pynq的电路图:

image.png

进行管脚分配,这里我开始把管脚分配到了AR_SCL和AR_SDA上,试了很多次都不行,然后我就改到了相邻的AR12和A13上,就能正常工作了,这里应该是之前电平一直没有匹配的问题,这里我也没找到好的办法,只能更换引脚。

添加约束文件,为EMIO提供管脚分配文件

set_property -dict { PACKAGE_PIN N17   IOSTANDARD LVCMOS18 } [get_ports { IIC_0_scl_io }]; #IO_L24N_T3_34 Sch=ar_scl
set_property -dict { PACKAGE_PIN P18   IOSTANDARD LVCMOS18 } [get_ports { IIC_0_sda_io }]; #IO_L24P_T3_34 Sch=ar_sdaIIC_0_scl_io

搭建完成,生成bit流然后输出。

SDK软件部分


这里我就直接给出代码吧,详细解释在前文了。

/*
 * helloworld.c: simple test application
 *
 * This application configures UART 16550 to baud rate 9600.
 * PS7 UART (Zynq) is not initialized by this application, since
 * bootrom/bsp configures it to baud rate 115200
 *
 * ------------------------------------------------
 * | UART TYPE   BAUD RATE                        |
 * ------------------------------------------------
 *   uartns550   9600
 *   uartlite    Configurable only in HW design
 *   ps7_uart    115200 (configured by bootrom/bsp)
 */
#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xiicps.h"
#include "xparameters.h"
#include "sleep.h"
#define I2C_0_DEVICE_ID XPAR_PS7_I2C_0_DEVICE_ID
#define I2C_0_CLK 100000
#define IIC_0_SALV_ADDR 0x40
// XIicPs* iicps;
static XIicPs iicps;
static XIicPs_Config * iicpscfgtr;
//初始化 iic
int initIicPs(XIicPs *iicps , XIicPs_Config * iiccfg);
int main()
{
    int status;
    double h_out;
    double t_out;
    unsigned short tmp;
    char CmdHumidity = 0xE5;
    char CmdTemperature = 0xE3;
    char t_temp[2];
    char h_temp[2];
    init_platform();
    status=initIicPs(&iicps,iicpscfgtr);
    if(status !=XST_SUCCESS){
        return XST_FAILURE;
      }
    printf("load success!\n");
    while(1){
    status=XIicPs_MasterSendPolled(&iicps,&CmdTemperature,1,IIC_0_SALV_ADDR);
      if(status !=XST_SUCCESS){
            return XST_FAILURE;
          }
    XIicPs_MasterRecvPolled(&iicps,t_temp,2,IIC_0_SALV_ADDR);
    status=XIicPs_MasterSendPolled(&iicps,&CmdHumidity,1,IIC_0_SALV_ADDR);
        if(status !=XST_SUCCESS){
              return XST_FAILURE;
            }
        XIicPs_MasterRecvPolled(&iicps,h_temp,2,IIC_0_SALV_ADDR);
    tmp=(h_temp[0]<<8)|(h_temp[1]&0xfe);
    h_out=((125*tmp)/65536)- 6;
    tmp=(t_temp[0]<<8)|(t_temp[1]&0xfc);
    t_out=((175.72*tmp)/65536) - 46.85;
    printf("Humidity : %.1f   Temperature : %.1f\n",h_out,t_out);
    usleep(1000000);
    }
    cleanup_platform();
    return 0;
}
int initIicPs(XIicPs *iicps , XIicPs_Config * iiccfg){
  int status;
  iiccfg = XIicPs_LookupConfig(I2C_0_DEVICE_ID);
  status = XIicPs_CfgInitialize(iicps,iiccfg,iiccfg->BaseAddress);
  if(status != XST_SUCCESS){
    return  XST_FAILURE;
  }
  //set iic rate
  status = XIicPs_SetSClk(iicps,I2C_0_CLK);
  if(status != XST_SUCCESS){
      return  XST_FAILURE;
  }
  return XST_SUCCESS;
}

运行效果


image.png

summary


在我们进行IIC或者不同协议的开发时候,我们一定要进行电平的匹配,本次工程就是遇到了这样的问题,根据具体的开发板,传感器,还有配置的输出电平,进行合适的配置,是成功运行的关键。

Vuko公众号同步更新~


欢迎大家关注我的公众号。如果需要工程微信后台留言即可~

目录
相关文章
|
6月前
|
传感器 存储 内存技术
单片机的接口与外设
单片机的接口与外设
120 1
|
数据格式
STM32外设系列—红外遥控
本文详细介绍了红外通信的应用,原理。介绍了一种常用的二进制脉冲码形式。最后,给出了红外遥控的实现思路和程序设计。
386 2
STM32外设系列—红外遥控
|
传感器 编解码 物联网
STC89C52+DHT20设计的环境温湿度检测仪
本项目基于STC89C52单片机和DHT20温湿度传感器,实现了一款环境温湿度检测仪。通过传感器采集环境的温度和湿度数据,利用IIC接口的OLED显示屏显示出来,便于用户实时监测环境温湿度状态。
188 1
|
传感器 芯片
可编程 USB 转串口适配器开发板与振弦传感器测量模块
当通过 IIC 接口修改 VM5xx 单个寄存器后,被修改的寄存器立即保存(断电不丢失),但连续寄存器的写入仅当时修改生效,模块重启后会自动恢复。为了能够使寄存器永久保存,可以单独向功能寄存器 03 写入指令码 0x000C 来强制保存所有寄存器。
可编程 USB 转串口适配器开发板与振弦传感器测量模块
|
传感器 5G 数据处理
ZYNQ(FPGA)与DSP之间GPIO通信
基于 TI KeyStone 架构 C6000 系列 TMS320C6657双核C66x 定点/浮点 DSP以及 Xilinx Zynq-7000 系列 XC7Z035/045 SoC 处理器设计的高端异构多核评估板,由核心板与评估底板组成。 DSP采用 TMS320C6657 双核C66x 定点/浮点,每核主频1GHz/1.25GHz。 Xilinx Zynq SoC处理器采用的XC7Z035/045集成PL端Kintex-7架构+PS 端双核ARM Cortex-A9 ,28nm可编程逻辑资源。
ZYNQ(FPGA)与DSP之间GPIO通信
|
传感器 存储 芯片
STM32F407硬件I2C实现MPU6050通讯(CUBEIDE)
STM32F407硬件I2C实现MPU6050通讯(CUBEIDE)
325 0
|
XML 测试技术 网络安全
开发调试工具:可编程USB转IIC/I2C/SPI/UART适配器模块开发板
发个方便测试I2C、SPI、1Wire接口的工具模块 总的思路是通过USB或者UART接口发送一些协议字符串,由模块转换成上面几种接口的硬件时序电信号,实现与这几种接口芯片、设备的快速测试。
15 玩转STM32之IIC通信(芯片硬件篇)(下)
15 玩转STM32之IIC通信(芯片硬件篇)
15 玩转STM32之IIC通信(芯片硬件篇)(上)
15 玩转STM32之IIC通信(芯片硬件篇)
|
传感器 芯片
可编程 USB 转串口适配器开发板 与温湿度传感器芯片
SHT3x-DIS 是 IIC 接口的温度、湿度传感器芯片,可工作于单次测量或连续自动测量模式。USB2S 已有 1 片 SHT31-DIS 芯片,芯片地址为 0x88。
可编程 USB 转串口适配器开发板 与温湿度传感器芯片