最好的电子音响科技diy制作网站

haoDIY_音响电子电脑科技DIY小制作发明

I2C和温度传感器- emc1182

时间:2017-05-23 20:05来源:未知 作者:admin 点击:
//这个函数指针移动登记然后读databyte GetTempRegister(字节登记){线传输(TempSensor);/ /发送从设备地址/ /注:所有write()报表数据发送到一个缓冲区,实际写作是由endtransmission线启动。写(登记);//将
I2C和温度传感器- emc1182

在我们过去的教学,我们展示了如何使用一个简单的Arduino示意要检查你的设备的正确连接。

如何开始使用I2C

这一次我们将带您通过一个温度传感器连接。然后一些样本代码来获得温度测量。

您将需要:

1 Arduino Uno或类似的控制器

2。在一emc1182突破板

三.线路板

4。几根电线

5。一个1uf和0.1uF电容是可选的。

步骤1:进行连接

进行连接

的emc1182双温度传感器

这是一个奇怪的芯片emc1182。它运行在3.3V最大。但它有5V电压的数据引脚。所以你必须使用3.3V电源芯片,但你可以使用普通的I2C 5V通信。

技术上采用SMBus协议是I2C几乎完全相同。你可以忽略的差异。

dfn-8突破板

这是一个dfn-8部分是麻烦找到一个突破板。我们一方面腐蚀我们的第一个。让我们和别人更容易,我们正在运行一个Kickstarter的价格在一个伟大的一群突破板。竞选活动已经结束,但如果你仍然有兴趣再给我们发送电子邮件。你可以通过教学,联系我们或我们的网站Kickstarter,www.jouletime.com。检查了Kickstarter的这里。

http:/ / www.kickstarter。COM /项目/ 1257390142 /巴…

基本和提前突破板加更

简单的四线连接,2的电力和2的数据

当你第一次运行连接这部分3.3v从Arduino到线路板。然后你跑地。从芯片的评估板使用一个1uF电容0.1 UF电源和地之间。我们在我们的照片相同的设置。

  1. 3.3 V Arduino引脚1 emc1182。
  2. 地面Arduino引脚5 emc11882。
  3. 5 Arduino引脚8 emc1182。
  4. A4 - Arduino引脚7 emc1182。

我告诉你,这些地方很容易布线。

步骤2:选择

除了基础知识

有一个外部传感器的选择。这里的诀窍是使用双极晶体管/二极管作为传感器。

在双极晶体管中,PN结的行为像一个二极管。作为一个二极管的升温,电气特性的变化。的emc1181能够测量这种变化并将其转化为一个精确的温度读数,非常酷的把戏。

所以一旦你做好一切工作,您可以添加一个远程温度传感器晶体管。

该芯片有一个引脚如果达到最高温度发送报警。使用这将取决于什么类型的电路有。

还有一个调节温度的校准输出登记。

如果你不知道如何做到这一点,我们建议您阅读评估板上的数据表。它有很多很好的关于如何使用的一些特征。

步骤3:先测试I2C扫描仪是否工作

先测试I2C扫描仪是否工作

你可以运行I2C扫描仪软件我们分享我们最后的命令。温度传感器将出现在0x4c。我们已经准备了扫描仪来寻找这个装置。

我们使用该芯片的emc1182-1版。它的地址是硬编码在1001100b,emc1182-2版本是硬编码在1001101b。你可以有一个在你的电路的各个版本,你可以跟他们单独选择的地址发送给。

的emc1182-a具有更大的灵活性可编程地址。

疯狂的是设备地址是7位长。这是一位缺乏一个字节。您必须添加一个零的开始地址让这8位长。这使得从1001100b地址更改为01001100b(二进制数)或0x4c(十六进制)。Arduino软件将切换领导位高或低取决于你正在阅读或写作的传感器。这是它如何工作的Arduino。它可能不同,如果您使用其他软件。

步骤4:I2C寄存器

在你的传感器的信息将被存储在一个登记。每个都有它自己的地址登记。

你开始为通信设备地址发送,即从地址。对我们来说这是0x4c。然后你把你想读的登记地址。然后你端传输。

该芯片是现在发送信息的登记,你选。当你做你的下一个传输将使用这个地址。

发送的请求命令你如何读取数据。你把它从地址然后告诉它回读多少字节的数据。素描用while循环读取每一个字节的数据。这种芯片,温度是一个单字节。

如果你不了解寄存器,试试我们的命令寄存器。

http:/ / www.instructables。COM /身份证/如何使用计算机…

除了资讯库

从Arduino官方资讯库没有用所有的I2C器件的工作。韦恩写了他自己版本的系统电路韦恩的I2C库

所以我们开始使用的版本。我们的GitHub库中有一个版本相同的草图使用I2C库。你将要安装的I2C库尝试其他素描。

步骤5:下面的代码是

你可以在这里找到我们的代码:

emc1182素描

这里是一个代码的复制和粘贴。因为它是代码的命令编辑混淆它与HTML并没有复制好。你应该使用GitHub链接。

/ /这个草图是由Frank Fox写的jouletime。

/ /找我们http://www.jouletime.com

/ /店上市易趣网在http://www.jouletime.com//shop


/*这个草图将演示如何使用双通道温度传感器,emc1182,从微芯片传感器精确到+ / - 1摄氏度β修正读数。包括内部和外部温度传感器。外部温度传感器使用一个二极管、晶体管和一个可选的电容滤波器。该装置包括众多选择,高/低限,β-构型,二极管理想因子、等设备兼容1.8V SMBus和I2C通信。我们将使用一个固定的奴隶地址版本,emc1182-1。这个装置,从地址是1001100b,(0x4c)。否则,设备地址是由电阻连接的价值选择。该装置具有多个操作寄存器0x00到0xFF。写模式:写模式必须包含三字节的信息:写从地址、控制/控制/操作操作登记,登记了一些重要的控制/操作登记地址的数据:数据的高字节0x00内部二极管。外部二极管数据的高字节0x01。0x03配置,掌握一般操作。镜像0x09。0x04的转化率,如何经常阅读更新,镜像0x0a。0x10外部二极管低字节的数据,只有3的MSB。0x25外部二极管测试配置。(默认0x08)0x27外部二极管理想因子。(默认0x12)0x29内部二极管数据的低字节,MSB仅3。阅读方式:发送的奴隶,发送控制登记,念奴地址,多少字节的数据。没有自动增量在阅读登记。你一定要把你想看的新登记的登记地址每次。否则会重复阅读同一过。以前读过,你可以写的登记地址先选择一个操作登记。如果地址已设置,然后读可以立即发生。* /

#包括/包括/ TWI(I2C两线接口)与你的图形库。

#定义tempsensor 0x4c字节= 0;

无效setup() / *执行这些动作:1。准备和启动串口监控。2。写登记地址和打印出来的串口监视寄存器的值。*/ {串行。开始(9600);/ / 1。设置串口监测数据发送到屏幕。线。begin();而(!串行){ //等待串口监控开始。延迟允许列奥纳多式板连接到串行端口。;} / / 2。写寄存器地址,然后读登记数据。delay(3000); // wait 3 seconds i=0; Serial.print("This is Internal Diode Data High Byte, "); Serial.print(GetTempRegister(i), HEX); // the value is displayed Serial.print(", default 0x00."); Serial.println(); // line return i++; Serial.print("This is External Diode Data High Byte, "); Serial.print(GetTempRegister(i), HEX); // the value is displayed Serial.print(", default 0x00."); Serial.println(); // line return i++; Serial.print("This is Status, "); Serial.print(GetTempRegister(i), HEX); // the value is displayed Serial.print(", default 0x00."); Serial.println(); // line return i++; Serial.print("This is Configuration, "); Serial.print(GetTempRegister(i), HEX); // the value is displayed Serial.print(", default 0x00."); Serial.println(); // this creates a line return i++; Serial.print("This is Conversion Rate, "); Serial.print(GetTempRegister(i), HEX); // the value is displayed Serial.print(", default 0x06."); Serial.println(); // this creates a line return i++; Serial.print("This is Internal Diode High Limit, "); Serial.print(GetTempRegister(i), HEX); // the value is displayed Serial.print(", default 0x55."); Serial.println(); // this creates a line return i++; Serial.print("This is Internal Diode Low Limit, "); Serial.print(GetTempRegister(i), HEX); // the value is displayed Serial.print(", default 0x00."); Serial.println(); // this creates a line return i++; Serial.print("This is External Diode High Limit, High Byte, "); Serial.print(GetTempRegister(i), HEX); // the value is displayed Serial.print(", default 0x55."); Serial.println(); // this creates a line return i++; Serial.print("This is External Diode Low Limit, High Byte, "); Serial.print(GetTempRegister(i), HEX); // the value is displayed Serial.print(", default 0x00."); Serial.println(); // this creates a line return Serial.print("This is External Diode Beta Configuration, "); Serial.print(GetTempRegister(0x25), HEX); // Serial.print(", default 0x08."); Serial.println(); // this creates a line return Serial.print("This is External Diode Ideality Factor, "); Serial.print(GetTempRegister(0x27), HEX); // Serial.print(", default 0x12."); Serial.println(); // this creates a line return Serial.print("This is Internal Diode Data Low Byte, only 3 MSB, "); Serial.print(GetTempRegister(0x29), HEX); // Serial.print(", default 0x00."); Serial.println(); // this creates a line return /* i++; Serial.print("This is Internal Diode Low Limit (Mirror) "); Serial.print(GetTempRegister(i), HEX); // the value is displayed Serial.print(", default 0x00."); Serial.println(); // this creates a line return */ delay(2000); // 2 second delay until repeat} void loop(){ // Read the internal and external temperature, and Send the data to serial monitor. i=0; int temp=0; Serial.println(); // this creates a line return Serial.println(); // this creates a line return Serial.print("This is Internal Diode, High Byte "); Serial.print(GetTempRegister(i), DEC); // the decimal value is displayed Serial.print("C, or "); temp=GetTempRegister(i)*9/5+32; //Convert to Fahrenheit Serial.print(temp, DEC); Serial.print("F. "); Serial.println(); // this creates a line return i++; Serial.print("This is External Diode, High Byte "); Serial.print(GetTempRegister(i), DEC); // the decimal value is displayed Serial.print("C, or "); temp=GetTempRegister(i)*9/5+32; //Convert to Fahrenheit Serial.print(temp, DEC); Serial.print("F. "); Serial.println(); // this creates a line return delay(4000);// 4 second delay}#p#分页标题#e#

//这个函数指针移动登记然后读databyte GetTempRegister(字节登记){线传输(TempSensor);/ /发送从设备地址/ /注:所有write()报表数据发送到一个缓冲区,实际写作是由endtransmission线启动。写(登记);//将登记地址。线。endtransmission();/ /结束安装。字节数据= 0;//变量返回数据线。请求(tempsensor,1);//发送从机地址,并指定多少字节的数据同时读(电线。available()){数据线。read();/ /继续阅读数据的同时,我们要求13个字节(12)。} }返回数据;

步骤6:打开串口监视器

打开串口监视器

当你运行这个草图,它将信息发送到串口监控。你要你上传到你的Arduino的草图后打开屏幕。

素描会在各个寄存器的反馈信息。最明显的一个是内部温度。这是芯片本身的实际温度。你可以把你的手指放在它温暖起来看到读数变化。(请务必接地和不带电的当你触摸这部分。)

这仅仅是一个基本的素描。你可以添加警报和其他东西,如果你的设计需要。

有乐趣改变代码进入其他功能。让我们注意如果你和分享你的可畏的改进。


(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片