最新电影在线观看,jrs低调看直播,avav天堂,囯产精品宾馆在线精品酒店,亚洲精品成人区在线观看

ZYNQ-驅動外設開發-iic接口的溫濕度傳感器si7021

學習內容

進一步熟悉IIC接口的開發調試。

開發環境

vivado 18.3 SDK pynq-z2

硬件平臺搭建

參考前文-ZYNQ-實現外設驅動開發-iic接口的光強度傳感器GY-30的搭建過程

(博客鏈接)

ZYNQ-實現驅動iic接口的光強度傳感器GY-30

下面給出部分更改操作:這里我們需要把之前選到的MIO改成EMIO

同時參考我們的pynq的電路圖:

進行管腳分配,這里我開始把管腳分配到了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 
#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();
    return0;
}
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;
}

運行效果

在這里插入圖片描述

summary

在我們進行IIC或者不同協議的開發時候,我們一定要進行電平的匹配,本次工程就是遇到了這樣的問題,根據具體的開發板,傳感器,還有配置的輸出電平,進行合適的配置,是成功運行的關鍵。

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 0
收藏 1
關注 20
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧