温度传感器NST175手册阅读

温度传感器NST175手册阅读

首先看芯片的输入和输出:主要关注IIC接口,毕竟是要驱动这个芯片读取温度。在编写此博客时还未对改温度传感器进行调试,只是阅读手册,把需要重点关注的地方标记出来。

一、芯片管脚

image-20240617214527475

image-20240617214420614

二、温度输出格式

接下来查看它的寄存器配置,翻译手册:

每个温度测量转换的数字输出存储在只读温度寄存器中。NST175的温度寄存器是一个12位的只读寄存器,它存储了最新转换的输出。必须读取两个字节才能获得数据,并列于表4.5和表4.6中。前12位用于表示温度,所有剩余的位都等于零。温度的数据格式列于表4.1中。负数用二进制补码(2‘s comlement)格式表示。在通电或重位后,温度寄存器读取0°C,直到第一次转换完成.

image-20240617215317953

用户可以通过寻址配置寄存器并相应地设置分辨率位,来获得9、10、11或12位的分辨率。对于9位、10位或11位的分辨率,将使用温度寄存器中的最有效位(MSBs),并将未使用的最小有效位(LSBs)设置为零。

NST175支持快速(最多400 kHz)和高速(最多2 MHz)模式的传输协议。所有的数据字节首先被传输到MSB上。

温度输出格式:

image-20240617215229671

三、NST175设备地址:

要与NST175通信,主必须首先通过从地址字节为从设备地址。从地址字节由七个地址位和一个指示执行读或写操作的意图的方向位组成。NST175具有三个地址引脚,允许在一个总线接口上对多达27个设备进行寻址。表4.2描述了用于正确连接多达27个设备的引脚逻辑电平。A1表示脚连接到电源(VDD);0表示脚连接到GND;float表示脚未连接。引脚A0、A1和A2的状态在每条总线通信上进行采样,并且必须在接口上的任何活动之前进行设置。

image-20240617215759710

image-20240618071705876

硬件配置A2 A1 A0 = 0 Float 1,所以器件地址是:0101001,一共7bit。还有1bit是读写位,读为1写为0,所以器件地址加上读写位一共8bit,值为0101_0011=0x53表示FPGA对NST175进行读操作;值为0101_0010=0x52表示FPGA对NST175进行写操作;

四、NST175读写寄存器操作

image-20240617220036190

寄存器字节首先被发送到MSB,然后是LSB。即先写高位。

写时序:

image-20240618060941786

image-20240617220840103

**读时序:**读时序需要写入两次IIC设备地址,第一次写入是为了改变指针寄存器里面的值,从而访问需要访问的寄存器,这个操作是往IIC设备里面写,读写标志位应该为0(写);第二次的IIC设备地址,读写标志位应该设置为读(1),后面2byte数据是IIC设备返还给FPGA的数据,这些数据是从寄存器读出的。

image-20240618073058659

1)指针寄存器:

指针寄存器用于指向访问的寄存器

image-20240617221548853

寄存器对应的地址如图:

image-20240617221635493

温度寄存器:0000_0000 = 0x00
配置寄存器:0000_0001 = 0x01
低温限制寄存器:0000_0010 = 0x02
高温限制寄存器:0000_0011 = 0x03
产品ID寄存器:0000_0111 = 0x07
2)温度寄存器:

NST175的温度寄存器是一个12位的只读寄存器,它存储了最新转换的输出。必须读取两个字节才能获得数据,如表4.5和表4.6所示。字节1是最重要的字节,其次是字节2,即最不重要的字节。前12位用于指示温度,所有剩余的位等于零。如果不需要该信息,则不必读取最小的字节。在通电或重置值之后,温度寄存器读取0°C,直到第一次转换完成。

image-20240617221940745

3)配置寄存器:

配置寄存器是一个8位的读/写寄存器,用于存储控制温度传感器的工作模式的位。读取和写操作首先执行MSB。NST175的配置寄存器的格式如表4.7所示,然后是寄存器位的分解。配置寄存器的通电或复位值均为等于0的位(上电后全部位置为0)。

image-20240617222212348

  • SD:配置关闭模式

    NST175的关闭模式允许用户通过关闭除串行接口以外的所有设备电路来节省最大功率,这将电流消耗减少到通常小于0.1 μA。当SD位为1时,启用关闭模式;当当前转换完成时,设备关闭。当SD等于0时,设备保持连续转换状态。

    SD=1:关闭模式
    SD=0:连续模式
    
  • TM:温度控制模式

    NST175的温控器模式位向设备指示是在比较器模式(TM = 0)还是在中断模式(TM = 1)下运行。有关比较器和中断模式的更多信息,请参阅上限和下限寄存器部分。

    TM=0:比较模式
    TM=1:中断模式
    
  • POL:极性配置

    NST175的极性位允许用户调整警报引脚输出的极性。如果POL位设置为0(默认值),则警报销将变为活动低。当POL位设置为1时,警报销变高,警报销的状态反转。警报销在各种模式下的操作如图4.8所示。

    image-20240618061719726

POL=0:测量温度超过高温限制寄存器的值时,警报引脚输出0
POL=1:测量温度超过高温限制寄存器的值时,警报引脚输出1
  • F1/F2:故障队列

故障条件定义为当测量的温度超过用户在Thigh和Tlow寄存器中设置的自定义限制时。此外,还可以使用故障队列对生成警报所需的故障条件数进行编程。提供故障队列是为了防止由于环境噪声而产生的错误警报。故障队列需要连续的故障测量,以触发警报功能。表4.8定义了可编程在设备中触发警报条件的测量故障数量。有关Thigh和TLOW寄存器格式和字节顺序,请参阅“上限和下限寄存器”部分

image-20240617224036297

F1 F2=0 0:测量1次
F1 F2=0 1:连续测量2次
F1 F2=1 0:连续测量4次
F1 F2=1 1:连续测量6次
  • R1/R0:转换器分辨率

转换器分辨率位控制内部ADC转换器的分辨率。这种控制允许用户通过编程更高分辨率或更快的转换时间来最大化效率。表4.9确定了分辨率位以及分辨率与转换时间之间的关系

image-20240617224223860

R1 R2 = 0 0:分辨率为9bit,0.5℃
R1 R2 = 0 1:分辨率为10bit,0.25℃
R1 R2 = 1 0:分辨率为11bit,0.125℃
R1 R2 = 1 1:分辨率为12bit,0.0.0625℃
  • OS:一次性测量模式

    NST175采用了一次性的温度测量模式。当设备处于关闭模式时,向OS位写入一个1将开始一次温度转换。在单次转换完成后,设备返回到关机状态。当不需要连续的温度监测时,此特性有助于降低NST175的功耗。当读取配置寄存器时,OS总是读取为零。

    要和关闭模式搭配使用
    OS = 1:关闭模式下,往OS位写入1,就开始单次温度转换,转换完毕之后,NST175进入关机在状态
    

配置寄存器配置的值:

config[7:0]=8'b0111_0011;//0x73,配置为连续转换模式、比较模式、极性POL=0、故障队列为01--连续测量2次、分辨率设置我i12bit、OS=0
4)高低温限制寄存器

在比较器模式(TM = 0)中,当温度等于或超过Thigh上的值时,NST175的警报销被激活,并根据故障位F1和F0产生连续数量的故障数。对于相同数量的故障,直到温度低于指示的TLOW值时,警报销将保持激活值。在中断模式(TM = 1)中,当温度等于或超过Thigh时,警报针将处于激活状态。在发生任何寄存器的读取操作,或设备成功响应SMBus警报响应地址之前,警报销一直保持活动状态。如果设备处于关闭模式,警报销也会被清除。当警报销被清除时,它只有在温度低于TLOW时才会再次被激活。当温度降至低于TLOW时,警报销将被激活并保持激活,直到被任何寄存器的读取操作或对SMBus警报响应地址的成功响应清除。当警报销被清除时,上述循环重复,当温度等于或超过Thigh时,警报销被激活。此外,还可以通过使用常规呼叫重置命令重置设备来清除警报销。此操作还可以通过将设备返回到比较器模式(TM = 0)来清除设备中的内部寄存器的状态。

这两种操作模式都如图4.8所示。表4.10、表4.11、表4.12和表4.13描述了Thigh和TLOW寄存器的格式。首先发送最重要的字节,然后是最不重要的字节。Thigh和TLOW的通电复位值为:THIGH = 80°C and TLOW = 75°C

Thigh和TLOW的数据格式与温度寄存器相同。

image-20240618060419575

image-20240618060531338

温度、Thigh和TLOW寄存器的所有12位都用于所有转换器分辨率的警报功能的比较。即使转换器配置为9位分辨率,Thigh和TLOW中的三个LSB也会影响警报输出。

5)产品ID寄存器: PRODID: Product ID Register (Read-Only) Pointer Address: 07h

image-20240618060818500

网上前辈写的代码可以借鉴,是用c来写的,如果是Nios配置的话可以参考:

#include "STC15Fxxxx.H"
//#include "oled.h"/*************	本地常量声明	**************/
#define MAIN_Fosc		11059200L	//定义主时钟
#define	BaudRate1		9600UL	//选择波特率#define	Timer1_Reload	(65536UL -(MAIN_Fosc / 4 / BaudRate1))		//Timer 1 重装值, 对应300KHZ
#define	Timer2_Reload	(65536UL -(MAIN_Fosc / 4 / BaudRate1))		//Timer 2 重装值, 对应300KHZ
#define uchar unsigned char
#define uint  unsigned int#define Slave_Id  0x90Slave_Id,芯片地址IO配置,对应关系请查询Spec 
#define Temp_Reg  0x00温度数值寄存器,深度为2byte
#define Conf_Reg  0x01配置寄存器,深度为1bytesbit OLED_SCL = P3^2;//时钟 D0(SCLK?
sbit OLED_SDIN = P3^3;//D1(MOSI) 数据sbit Alert = P5^4;
sbit Alert_Led =P5^5;#define SCLK_Clr() OLED_SCL=0
#define SCLK_Set() OLED_SCL=1#define SDIN_Clr() OLED_SDIN=0
#define SDIN_Set() OLED_SDIN=1#define Alert_Led_On()  Alert_Led=0
#define Alert_Led_Off() Alert_Led=1/*************	本地变量声明	**************/
unsigned char T_flag = 0;
unsigned char Temp_H = 0,Temp_L = 0;  //TL:底八位 TH:高八位
bit	B_TX1_Busy;	//发送忙标志/*****************************************************
//延时1us
******************************************************/
void delayus(uint i)
{while(i--);
}/*****************************************************
//延时1ms
******************************************************/
void delayms(uint ms)
{unsigned int i;do{i = MAIN_Fosc / 13000;while(--i)	;   //14T per loop}while(--ms);
}/**********************************************
//IIC Start
**********************************************/
void IIC_Start()
{SCLK_Set() ;SDIN_Set();SDIN_Clr();SCLK_Clr();
}/**********************************************
//IIC Stop
**********************************************/
void IIC_Stop()
{SCLK_Set() ;SDIN_Clr();SDIN_Set();
}/**********************************************
//IIC Master Ack
**********************************************/
void IIC_Ack()
{SCLK_Clr();SDIN_Clr();delayus(5); //delay 5uSSCLK_Set();	
}
/**********************************************
//IIC Wait Slave Ack
**********************************************/
void IIC_Wait_Ack()
{SCLK_Set() ;SCLK_Clr();
}/**********************************************
// IIC Write byte
**********************************************/
void Write_IIC_Byte(unsigned char IIC_Byte)
{unsigned char i;unsigned char m,da;da=IIC_Byte;SCLK_Clr();for(i=0;i<8;i++)		{m=da;m=m&0x80;if(m==0x80){SDIN_Set();}else {SDIN_Clr(); }da=da<<1;SCLK_Set();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();SCLK_Clr();}
}/**********************************************
// IIC Write byte
**********************************************/
unsigned char Read_IIC_Byte()
{unsigned char i;unsigned int da = 0;SCLK_Clr();_nop_();_nop_();_nop_();SDIN_Set();for(i=0;i<8;i++)	//8	{da=da<<1 ;SCLK_Set();//delayus(5);if(OLED_SDIN == 1){da++;}SCLK_Clr();}IIC_Ack();return da;
}void SendData(char dat)
{if(!B_TX1_Busy)		//发送空闲{B_TX1_Busy = 1;		//标志发送忙SBUF = dat;	//发一个字节while(!TI);TI = 0;ES = 1;}
}void Uart_Init()
{B_TX1_Busy = 0;	P3M0 = 0xff;P3M1 = 0xff;S1_8bit();				//8位数据S1_USE_P30P31();		//UART1 使用P30 P31口	默认AUXR &= ~(1 << 4);	//Timer stop		波特率使用Timer2产生AUXR |= 0x01;		//S1 BRT Use Timer2;AUXR |=  (1 << 2);	//Timer2 set as 1T modeTH2 = (u8)(Timer2_Reload >> 8);TL2 = (u8)Timer2_Reload;AUXR |=  (1 << 4);	//Timer run enabledelayms(100);	REN = 1;	//允许接收ES  = 1;	//允许中断INT1 = 1;IT1 = 1;                    EA = 1;		//允许全局中断EX1 = 0;
}void read_temp()   
{	unsigned int Data = 0;	 IIC_Start();  		 Write_IIC_Byte(Slave_Id);            //Slave address,SA0=0	   90IIC_Wait_Ack();	Write_IIC_Byte(Temp_Reg);			//write commandIIC_Wait_Ack();IIC_Stop();delayms(50);//等待温度准换完成,连续温度转换模式,此句可忽略。IIC_Start();Write_IIC_Byte((Slave_Id+1);            //Slave address,SA0=0		91IIC_Wait_Ack();Temp_H = Read_IIC_Byte();		// MSBIIC_Ack();							Temp_L = Read_IIC_Byte();		//LSB//IIC_Ack();		IIC_Stop();if(Temp_H>127)//温度为负值{T_flag = 0;Data = Temp_H*256 + Temp_L;Data >>= 4;Data=~Data;Data++;Data <<= 4;Temp_H = Data/256;Temp_L = Data%256;}else{	T_flag = 1;Temp_L >>= 4;Temp_L <<= 4;			}									
}void  Temp_Init()   
{		IIC_Start();  		 			   //先Write_IIC_Byte(Slave_Id);          //0x90  Slave address,SA0=0	 IIC_Wait_Ack();	Write_IIC_Byte(Conf_Reg);		   //0x01  配置寄存器 write commandIIC_Wait_Ack();Write_IIC_Byte(0x60);              // 分辨率最高IIC_Wait_Ack();IIC_Stop();									
}void main(void)
{Uart_Init();//配置串口Temp_Init();//配置最高12bit分辨率,0.0625℃.如不需要配置,此行可忽略。default分辨率是9bit,0.5℃while (1){		read_temp();//读取温度数据//读取 Temp_H Temp_L 的温度数据; 实际温度数值 = (Temp_H*256+Temp_L)/256,Temp_H和Temp_L 需要转为十进制。Temp_H=0;Temp_L=0;delayms(5);}
}
/********************* UART1中断函数************************/
void UART1_int (void) interrupt UART1_VECTOR
{if(RI){RI = 0;//RX1_Buffer[0] = SBUF;		//保存一个字节}if(TI){TI = 0;B_TX1_Busy = 0;		//清除发送忙标志}
}
--晓凡  2024618日于武汉书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/29167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

618大促背后:优秀制造企业如何精准备货?

618这场年中购物盛宴点燃了消费者的热情。而在背后&#xff0c;是许许多多的制造企业在默默发力&#xff0c;对于他们来说&#xff0c;这不仅仅是一个促销的机会&#xff0c;更是一个检验供应链响应速度、库存管理能力以及市场洞察力的关键时刻。那么&#xff0c;优秀的制造企业…

WACV2024检测Detection论文49篇速览

WACV2024 Detection论文摘要速览49篇 Paper1 CLRerNet: Improving Confidence of Lane Detection With LaneIoU 摘要小结: 车道线检测是自动驾驶和驾驶辅助系统中的关键组成部分。现代基于锚点的深度车道检测方法在车道检测基准测试中表现出色。通过初步的实验&#xff0c;我们…

macbook屏幕录制技巧,这2个方法请你收好

在当今数字化时代&#xff0c;屏幕录制成为了一项不可或缺的技能&#xff0c;无论是教学演示、游戏直播&#xff0c;还是软件操作教程&#xff0c;屏幕录制都能帮助我们更直观地传达信息。MacBook作为苹果公司的标志性产品&#xff0c;其屏幕录制功能也备受用户关注。本文将详细…

区区微服务,何足挂齿?

背景 睿哥前天吩咐我去了解一下微服务&#xff0c;我本来想周末看的&#xff0c;结果周末没带电脑&#xff0c;所以只能周一看了。刚刚我就去慕课网看了相关的视频&#xff0c;然后写一篇文章总结一下。这篇文章算是基础理论版&#xff0c;等我之后进行更多的实践&#xff0c;…

帕金森患者在饮食上需要注意什么

帕金森病患者在饮食上应该遵循以下几个基本原则&#xff1a; 饮食清淡&#xff1a;应多吃新鲜的水果和蔬菜&#xff0c;如苹果、芹菜、菠菜等&#xff0c;以补充维生素和促进胃肠道蠕动。营养均衡&#xff1a;应多吃富含优质蛋白的食物&#xff0c;如鸡蛋、牛奶&#xff0c;以…

Swift开发——元组

Swift语言的数据类型包括整型、浮点型、字符串、布尔型、数组、元组、集合和字典等,本文将详细介绍元组。 01、元组 严格意义上,元组不属于数据类型,而属于数据结构。元组将一些变量或常量或字面量组织成一个有序的序列,索引号从0开始,用圆括号“()”括起来,各个元素间用…

hive 安装 嵌入模式 笔记

$ hive $ HIVE_HOME/bin/schematool -dbType derby –initSchema $ schematool -verbose -validate -dbType derby $HIVE_HOME/bin/hiveserver2 这个启动了先不要关闭&#xff0c;再打开一个终端进行下面的步骤 Beeline -u &#xff08;用自己的名字和密码&#xff09; show d…

毕业答辩PPT:如何在短时间内高效准备?

提起PPT&#xff0c;大家的第一反应就是痛苦。经常接触PPT的学生党和打工人&#xff0c;光看到这3个字母&#xff0c;就已经开始头痛了&#xff1a; 1、PPT内容框架与文案挑战重重&#xff0c;任务艰巨&#xff0c;耗费大量精力。 2、PPT的排版技能要求高&#xff0c;并非易事…

眼镜片怎么洗?眼镜清洗有哪些方法?超声波清洗机能洗眼镜吗?

现在戴眼镜的人有很多&#xff0c;但是所谓的戴眼镜容易&#xff0c;清洗眼镜却是比较难的一件事&#xff01;不要以为眼镜好像看着不脏&#xff0c;然后随便用眼镜布擦一下就完事了……其实不是的&#xff01; 眼镜片上面有细小的灰尘颗粒&#xff0c;而随着我们用眼镜布擦眼…

css之sprite

css之sprite 图片整合 sprite 优势 整合的方法 ps 新建图层&#xff08;名字为英文、给定宽高、选择像素、背景内容设置透明、创建&#xff09;ctrlc复制小图 ctrlv 粘贴 选择工具移动位置裁剪工具&#xff0c;剪掉下方多余的位置 enter导出&#xff08;PNG&#xff09; 精灵…

MySQL多表查询操作

一对多SQL表创建 -- 创建部门表(父表) create table dept(id int auto_increment comment ID primary key,name varchar(50) not null comment 部门名称 ) comment 部门表;-- 给部门表插入数据 insert into dept (name) values (研发部),(市场部),(财务部),(销售部),(总经办);-…

【Linux】进程间通信2——命名管道

1. 命名管道(FIFO) 1.1. 基本概念 简单&#xff0c;给匿名管道起个名字就变成了命名管道 那么如何给 匿名管道 起名字呢&#xff1f; 结合文件系统&#xff0c;给匿名管道这个纯纯的内存文件分配 inode&#xff0c;将文件名与之构建联系&#xff0c;关键点在于不给它分配 D…

2024 年最新 Python 基于 LangChain 框架基础案例详细教程(更新中)

LangChain 框架搭建 安装 langchain pip install langchain -i https://mirrors.aliyun.com/pypi/simple/安装 langchain-openai pip install langchain-openai -i https://mirrors.aliyun.com/pypi/simple/ChatOpenAI 配置环境变量 环境变量 OPENAI_API_KEYOpenAI API 密钥…

生成式人工智能如何改变客户服务

生成式人工智能不仅重新定义了品牌与客户的互动方式&#xff0c;还重新定义了品牌如何优化内部资源&#xff0c;以提供更加个性化和高效的服务。 了解在就业和效率方面的挑战和机遇&#xff0c;使用生成式人工智能工具进行客户服务和支持任务。 生成式人工智能不仅重新定义了品…

【Quartus 13.0】EP1C3144I7 部署4*6矩阵键盘

仿照 正点原子 的 Sample 修改 V2手册 P266 没有用这个 给出的手动按键控制的矩阵模块 为 4*6 矩阵键盘外接模块 每一个按键自带led&#xff0c;所以对应的接口是合并在一起的一个引脚 按下后 LED 亮&#xff0c;vice versa 底部 LED*8 目前不清楚有什么用 或许可以变成 16进…

《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 02 Clos拓扑

本章回答以下问题&#xff1a; 什么是 Clos 拓扑&#xff0c;它与“接入 - 汇聚 - 核心”拓扑有何不同?Clos 拓扑的特征是什么?Clos 拓扑对数据中心网络的影响是什么? Clos拓扑 云原生数据中心基础设施的先行者们想要构建一种支持大规模水平扩展网络。 基本的Clos拓扑如图…

记录一下 Chrome浏览器打印时崩溃问题

问题描述&#xff1a; 为了查看页面内存占用情况&#xff0c;按F2,打开Memory chrome浏览器点击“打印”按钮&#xff0c;或Ctrl P 时出现如下页面 一直以为是页面问题&#xff0c;每次打印的时候遇到这种 崩溃现象 就是重新刷新页面 但今天刚开一个页面&#xff0c;内存 …

【2024最新精简版】RabbitMQ面试篇

文章目录 Kafka和RabbitMQ什么区别惰性队列&#xff08;Lazy Queues&#xff09;是怎么实现的&#xff1f;RabbitMQ工作模式有哪些 ?你们项目中哪里用到了RabbitMQ ?为什么会选择使用RabbitMQ ? 有什么好处 ?使用RabbitMQ如何保证消息不丢失 ?消息的重复消费问题如何解决的…

在IDEA 2024.1.3 (Community Edition)中创建Maven项目

本篇博客承继自博客Windows系统Maven下载安装-CSDN博客 Maven版本&#xff1a;maven-3.9.5 修改设置&#xff1a; 首先先对Idea的Maven依赖进行设置&#xff1b;打开Idea&#xff0c;选择“Costomize”&#xff0c;选择最下边的"All settings" 之后找到Maven选项&…

利用LabVIEW项目管理和组织LabVIEW应用程序

如何利用LabVIEW项目管理和组织LabVIEW应用程序&#xff0c;提供了关于文件定义、磁盘上的文件组织、LabVIEW项目浏览器、交叉链接和相关资源的建议。这些推荐在开发前就应建立&#xff0c;以确保应用程序能扩展到大量VIs并适应多开发者环境。 目录 定义和识别应用程序文件 磁…