上一页 下一个

微控制器的工作原理

由:马歇尔的大脑

构建数字温度计

现在您对Stamp和LCD有了一些了解,我们可以添加另一个组件并创建数字温度计。为了创建一个温度计,我们将使用一个称为DS1620的芯片。该芯片包含:

  • 一个温度传感器
  • 一个模数转换器用于温度传感装置
  • 一个移位寄存器从A/D转换器读取数据
  • 一个小eepm(电可擦可编程只读存储器)来记住设置

DS1620有两种模式:在一种模式下,它作为一个独立的恒温器芯片,在另一种模式下,你把它连接到计算机上,把它用作一个恒温器温度计.EEPROM会记住当前模式以及恒温器的设定温度。

广告

将DS1620连接到邮票非常容易。DS1620采用8针芯片。从DS1620的戳记到引脚8提供+5伏。为DS1620的引脚4提供接地。然后使用来自Stamp的3个I/O引脚驱动DS1620上的3个引脚:

  • DS1620的引脚1是数据引脚。你在这个引脚上读写数据位。
  • DS1620上的引脚2是时钟引脚。你用这个引脚在移位寄存器中输入和输出数据。
  • DS1620的引脚3是复位/选择引脚。你把引脚3设置高来选择芯片并与它通信。

对于这个示例代码,假设:

  • 数据引脚到Stamp上的I/O引脚2。
  • 时钟引脚到邮票上的I/O引脚1。
  • 重置/选择引脚到Stamp上的I/O引脚0。

完成的连接看起来像这样:

你也可以从Jameco(零件号146456)或视差(零件号27917)在一个“应用工具包”,其中包括芯片,电容器,一些良好的文档和示例代码。或者你可以自己买芯片Jameco(零件号114382)。我建议在您第一次尝试使用DS1620时获得应用程序工具包,因为文档非常有用。

您可以将DS1620组装在印花载体板的原型区域或单独的面包板上。一旦你组装好它,将你的液晶显示器连接到邮票的I/O引脚3,然后加载并运行以下程序:

象征RST = 0的选择/复位线象征CLK 1620 = 1的时钟线移位寄存器1620 DQ = 2象征“1620 DQ_PIN象征= pin2数据线”销代表DQ象征液晶= 3的数据行液晶开始:低RST取消1620,除非跟高时钟的时钟针1620应该默认高暂停1000等待温度计和液晶引导设置:高RST '选择1620 b0 = $0C ' $0C是1620命令字节'说“写配置”gosub shift_out '发送到1620 b0 = %10 ' %10是1620命令字节'设置温度计模式gosub shift_out '发送到1620低RST '取消选择1620暂停50 '延迟50ms EEPROM start_convert:b0 = $ EE EE美元是1620命令字节开始转换高RST选择1620 gosub shift_out”发送到1620年低点RST“取消1620”这是主循环”——读取和显示温度每秒钟main_loop:高RST的选择b0 = 1620 AA AA美元是1620命令字节读取温度gosub shift_out”发送到1620 gosub shift_in”读温度从1620年低RST的DS1620取消选择。gosub显示“显示温度在1000摄氏度暂停”等等goto main_loop的shift_out子程序发送任何的b0字节到1620 shift_out:输出DQ的设置DQ销的输出模式b2 = 1到8低CLK“准备时钟位”到1620年DQ_PIN = bit0发送数据位高CLK的门闩数据点到1620 b0 = b0/2转变所有比特的向位0下返回“shift_in子例程被9-bit”从1620年shift_in温度:input DQ '设置DQ引脚到'输入模式w0 = 0 '清除w0为b5 = 1到9 w0 = w0/2 '移位输入右。低CLK '询问1620下位bit8= DQ_PIN '读取位高CLK '切换时钟引脚next返回'以摄氏度显示温度:如果bit8= 0那么pos '如果bit8=1 '那么temp是负b0 = b0 &/ b0 '通过nding它自身b0 = b0 + 1 pos: serout LCD, n2400, (254, 1)'清除LCD serout LCD, n2400, ("Temp = ")' display "Temp=" '在显示器上bit9 = bit0 '保存半度b0 = b0 / 2 '转换为度如果bit8 = 1然后neg '看看Temp是否为负serout LCD, n2400, (#b0)' display positive temp goto half neg: serout LCD, n2400, ("-", #b0)' ' display negative temp half:如果bit9 = 0,则even serout LCD, n2400, (".5 .C”) ' display the half degree goto done even: serout LCD, n2400, (".0 C") ' display the half degree done: return

如果您运行这个程序,您将发现它显示摄氏温度的精度为0.5度。

DS1620测量的温度单位是摄氏半度。它以9位2s补数的形式返回温度,范围为-110到250华氏度(-55到125摄氏度)。将收到的数字除以2得到实际温度。二进制补数是一种方便的表示方式吗.下面的列表显示了一个4位2s补码数的值:

0111: 7 0110: 6 0101: 5 0100: 4 0011: 3 0010: 2 0001: 1 0000: 0 1111: -1 1110: -2 1101: -3 1100: -4 1011: -5 1010: -6 1001: -7 1000: -8

您可以看到,这4位代表的值不是0到15,而是一个2s补数中的4位代表的值是-8到7。您可以查看最左边的位来确定这个数字是负的还是正的。如果数字是负的,你可以将位反转并加1以得到数字的正表示。

下面是这里显示的数字温度计程序:

  1. 它使用象征关键字来设置几个常量,使程序更容易阅读(也使您可以轻松地将芯片移动到Stamp上的不同I/O引脚)。
  2. 它将DS1620上的CLK和RST引脚设置为预期值。
  3. 它向DS1620上的EEPROM写入一个命令字节,告诉芯片在“温度计模式”下工作。因为模式存储在EEPROM中,所以你只需要做一次,所以你可以在运行程序一次后从程序中取出这段代码(以节省程序空间)。
  4. 程序发送命令EE美元(“$”表示“十六进制数”——$EE是十进制的238)告诉温度计开始转换过程。

程序然后进入一个循环.每秒钟,它都会向DS1620发送一个命令,告诉DS1620返回当前温度,然后它将DS1620返回的9位值读入w0变量。通过切换DS1620上的CLK线,Stamp每次发送和接收数据1位。记住,w0(16位)变量覆盖了b0/b1(8位)变量,后者覆盖了bit0/bit1/…/bit15(1位)变量,因此当您从DS1620插入位到第8位并将w0除以2时,您所做的是将每个位向右移动,以将DS1620的9位温度存储到w0。一旦温度保存在w0中,显示子程序就会确定这个数字是正的还是负的,并在LCD上适当地显示为摄氏温度。从C度到F度的转换是:

dF = dC * 9/5 + 32

在这一点上,我们已经成功地创造了一个极其昂贵的温度计。你会用它做什么?这里有一个想法。假设你为一家制药公司工作,你在全国各地运输昂贵的药物,这些药物必须在整个过程中保持一定的温度,否则药物会变质。您可以使用Stamp创建一个数据记录温度计.这两个Jameco(零件号143811)和视差(零件号27960)销售一种叫做“RAM Pack模块”的设备。它包含一个低功耗的8千字节(或可选的32千字节)RAM芯片,带有串行接口。您可以将此组件(或类似的组件)添加到Stamp中,并编写代码将每分钟的温度读数保存到RAM中。然后,您可以将您的印章塞进药品运输中,并在旅行的另一端取回印章。RAM模块将包含整个旅程的温度历史记录,你就会知道药物是否解冻了。

现在你知道了微控制器是如何工作的,你就可以用Stamp构建各种各样的整洁、有用的设备!

有关微控制器和相关主题的更多信息,请查看下面的链接。

相关文章

基本邮票连结

图片链接

常见问题

其他链接

游戏