我考虑过以某种方式购买酸奶制造商。是的,这样酸奶就能制成优质且始终保持相同质量的酸奶。为此需要什么?首先,原材料,其次,温度准确且稳定,其次,设置烹饪时间。我开始选择并面对以下埋伏:廉价的酸奶制造商不受监管。也就是说,在加热丝内部,实际上,该加热丝已连接到网络。酸奶机内部的温度将同时取决于收集者的手,环境温度,月相和克苏鲁(Cthulhu fhtagn)的睡眠深度。当然,这种情况不适合我。更让我感到困扰的是酸奶制造商周围的情况,他们的功能和参数使我很适合我。由于某种原因,这种酸奶制造商的制造商认为他们正在向市场供应太空产品,并且这种产品的价格应该合适。在选择过程中,强烈的精神痛苦使我发了言,我对我心爱的妻子表达了对酸奶制造商不人道的定价政策的愤慨,在口头表达的过程中,我说了“我会为五百卢布做得更好”。然后单击...这是背景故事。现在是故事。在构建出色的设备的过程中,我遇到了一个错误。显示当前温度后,控制器会定期重新启动。也就是说,有时它正常工作几个小时,有时每隔几秒钟重置一次。由于这种情况是在将ds18b20传感器轮询功能引入固件后开始发生的,因此我自然而然地向她寻求错误搜索。并没有发现任何东西。堆栈没有中断,该函数未向其内存区域写入任何内容。总的来说,它可以正常工作。此外,禁用此功能也消除了该错误,该错误明确表明(当时在我看来)这一场合的英雄。我认为同步系统应归咎于一切。由于我的石头很小(attiny2313a),而且没有足够的计时器来存放所有乳液,因此我编写了一个任务管理器来摆脱这种情况,该任务管理器从功能中接收任务和所需的延迟时间,并将它们放入队列中。然后,在倒计时必要的时间后,他将控制权转移给他们。我将最小延迟时间设置为1毫秒。这使我可以设置从毫秒到一分钟的延迟。但是,如果您查看ds18b20传感器数据表,您会发现与温度传感器的通信有时会持续500毫秒以上(重置并等待状态)。
但是,如果在此过程中中断干扰了通讯功能怎么办?将存在一个时隙偏移,由于该偏移,控制器将无法读取该位或正确识别其存在。我找到了使用同步的出路。这个过程很简单。当传感器轮询功能发现它将与传感器进行长期通讯时,它会与位于计时器1寄存器A中的“时间管理器”中断同时在计时器1的寄存器B中设置一个中断。而且由于严格按照中断向量地址来处理中断,因此从中断表可以看出,在同步过程之后,传感器轮询功能将在“时间管理器”中断后立即获得控制。好吧,哪里有bug?是的,到处都是。但是我个人认为问题可能出在中断的交集上。也就是说,在执行一个中断的过程中有另一个中断进入时。继续清理代码以解决此问题,直到我发现自己的行为导致即使没有连接传感器也开始出现问题。禁用了传感器轮询功能后,我确信现在控制器的复位不取决于其操作。然后一个绝妙的猜想震惊了我。需要测量电压!万用表高兴地报告说控制器上有4.2伏。 “当然,我想,董事会。然后,我将外部电源连接到板上(在此之前,我对USB电源不满意)。万用表发出了很多声,板上的是4.98伏。带着胜利的感觉,我在董事会上看到了不可思议的东西。存在错误!而且它变得更加充满活力。现在,控制器每隔几秒钟就会重置一次,有时甚至是瞬间。搜索继续进行复仇,并导致在屏幕上显示信息的功能。正如您可能猜到的那样,她的一切都很好,尤其是在写完她之后,她经过了适当的测试。而且,尽管如此,所有事情都说我难以捉摸的错误就在于此。原来,该错误仅在显示当前温度页面时发生。没有显示错误的电源,开始,时间的页面。没有找到任何可能导致这种行为的东西,我决定以食物为基础。即,在正常电压下错误频繁发生的事实。通过降低电压,我发现控制器上的电压为3.8伏时,后者可以稳定工作。这种情况破坏了所有格局。然后我想起了欧姆定律。电流与电压成正比。总是?没有。在LED上,此法则无效。它可以更精确地工作,但带有小工具。通过二极管的电流的比例与常规电阻器上的比例不同,因为半导体器件大多是非线性的。请记住至少要有一个晶闸管或一个齐纳二极管(齐纳二极管)。这是数据表中LED的电流-电压特性曲线(黑线)与电阻负载的电流-电压特性曲线(红线)的比较
可以看出,对于阻性负载,欧姆定律是上帝和大师。如果电压增加10%,则电流将增加10%。但是,没有人是LED的法令。如果仅将LED上的电压提高10%(从2伏增加到2.2伏),其电流将跳100%,即两倍!但就我而言,最主要的是,在二极管导通的那一刻,电压的增加也增加了其压降。我有32个二极管!四个七段指示灯,每个指示灯带有八个LED(七个段和一个点)。它们不是通过多路复用而是通过移位寄存器与我连接,这是因为:1.非常缺少attiny2313控制器的结论。2.通过多路复用连接时,它们的闪烁让我很烦恼(完美主义次数)3.多路复用器消耗大量的控制器资源进行输出(第二号完美)另外,我连接了移位寄存器,具有在显示更新期间关闭屏幕的功能(第三号完美)。为什么我放弃此功能-我不知道。毕竟,我选择的逻辑可以工作到100 MHz的频率。因此,可以在控制器的全频(我有10 MHz)下将数据放入其中。那么,谁有时间注意到指示器比特在这种频率下的移动?继续。我的电路的电源由L7805稳压器提供,这是其连接图。
稳压器提供1A的电流,没有任何问题。在调节器的输出端有一个0.1微法拉的电容器,从理论上讲,该电容器应能平滑电流波动。它在5伏特下的电荷为0.5微库仑。在3.8伏时,电荷分别为0.38微库仑。在3.8伏特时,LED消耗约288 mA,在5伏特时约416 mA。因此,当电压从3.8伏提高到5伏时,电容器存储的电荷将增加24%,但是电流消耗将同时增加30%以上。计算当然是示例性的,但是表明在这样的电路中的电压降越大,电源电压就越大。在3.8伏特时,降压对于控制器而言并不重要。但是在5伏电压时,下降幅度增加,并开始重置控制器。并且由于温度显示页面上的控制器已精确重置,因为此页面上确切包含的所有显示指示器。解决方案很简单。在代码中,您只需要注释掉用于打开和关闭sbi displayPort,offDispWire指示器和cbi displayPort,offDispWire指示器的行。 ldi XL, videoMem
cbi displayPort, shiftWire
cbi displayPort, storageWire
;sbi displayPort, offDispWire
ZpushToDisplay:
ldi temp2, 8
ld temp, X+
ZnextbitToDisplay:
cbi displayPort, dataWire
sbrc temp, 7
sbi displayPort, dataWire
sbi displayPort, shiftWire
cbi displayPort, shiftWire
lsl temp
dec temp2
cpi temp2, 0
brne ZnextbitToDisplay
cpi XL, videoMem+sizeVideoMem
brne ZpushToDisplay
sbi displayPort, storageWire
cbi displayPort, storageWire
;cbi displayPort, offDispWire
放电已停止。控制器从此过着幸福的生活。Z.Y. 难以捉摸的错误搜索过程指出了方案中的另一个漏洞。事实是,移位寄存器的最大耗散功率约为0.5瓦,流经电源输出或地的电流约为70毫安。如果显示带小数点的数字八,则通过移位寄存器的电流应约为104毫安,如您所知,这是多余的。不是我没有考虑这一刻。我已经考虑到了。但是在计算LED电阻器的过程中,他屈服于微小的缺陷,并忘记了LED是非线性元件,并且将流过它的电流减小两倍,这不足以使限流电阻器的电阻加倍。通常,在任何无法理解的情况下,请参阅CVC!