欢迎光临散文网 会员登陆 & 注册

【教程/搬运】一些电路装置技巧—来自 Programmatic

2018-12-01 16:37 作者:dcfhft  | 我要投稿

原帖在官方论坛T-MEC电路讨论组里,链接:
(原帖为英文,本专栏是翻译和搬运)
https://forums.terraria.org/index.php?threads/a-wiring-tip-a-day.54933/
https://forums.terraria.org/index.php?threads/a-wiring-tip-a-day-week-2.55220/
原作者— Programmatic
Programmatic在官方论坛的个人主页: https://forums.terraria.org/index.php?members/programmatic.37545/

Tip#1:
使用Terraria edit—Tedit(Terraria地图编辑器)
我知道很多电路初学者可能不愿意使用第三方工具,但Tedit是非常有用的。在Terraria中建造电路是一个非常繁琐的过程。没有什么比建造一些大型的电路更让人伤脑筋的了,你可能会发现在你设置的区域里没有足够的空间来建造它。
在Terraria原版中,你必须拆掉你的整个电路来重新建造它。但是使用Tedit就不一样了,在Tedit中你可以非常方便的移动整个电路,你可以使用撤销、重做、复制、粘贴这四个在Tedit中非常重要的功能。
你需要建造的电路可能会有很多重复的部件组成。在Terraria里重复建造这些部分可能很乏味,但是在Tedit中,你只需要点击几个选项就可以复制粘贴几十次甚至上百次。
使用Tedit还可以消除建造电路的最大阻碍之一:地图的生成。你可以使用Tedit来生成一个巨大的空白世界,还可以把它铺满宝石墙壁来照亮而不需要火把。
使用Tedit与在Terraria里建造相比还有许多优势,我强烈建议你学习使用它。要确保时常备份你的世界,并使用最新版本的Tedit。
补充:Tedit使用教程,来自us_danger:
https://v.youku.com/v_show/id_XMjYxNTUzOTMyOA==.html?sharefrom=iphone&sharekey=94e55fb64897ede731daa4df320232247
https://v.youku.com/v_show/id_XMjYxNTUzOTMyOA==.html?sharefrom=iphone&sharekey=94e55fb64897ede731daa4df320232247
https://v.youku.com/v_show/id_XMjY1OTIzNjg4OA==.html?sharefrom=iphone&sharekey=65e701896c26b31fdb4fe482e033f4989
https://v.youku.com/v_show/id_XMjY3ODQwODE1Ng==.html?sharefrom=iphone&sharekey=c6eec511a34e95869dbfa94973228b5d9
———
使用mod也可以方便的建造电路,推荐Cheatsheet mod,它有能够跨地图复制粘贴物块的功能。但就建造大型电路来说,还是Tedit更加万能。

Tip#2:使用故障逻辑门建造触发器
虽然有各种逻辑门可以用来执行基本的逻辑操作,如与门、或门和非门,但是还有另一个逻辑设备可能被一些初学者忽略或低估:故障逻辑灯(故障逻辑门)。
故障逻辑灯的原理相当简单,将灯安放在任何逻辑门(与、或、非、与或、与非、或非)的顶部会改变它输出信号的逻辑,故障逻辑门输出信号的方式是概率性的,这个概率依故障逻辑门和故障逻辑灯之间的亮起的逻辑灯和总共的逻辑灯的数量比值而定。当故障逻辑门和故障逻辑灯之间只有一个逻辑灯时,故障逻辑门就会有0%或100%的概率(也就是是和否)输出信号。

 



因为这个特性,故障灯门(从现在起我将这么称呼它,其实就是一个故障逻辑门加一个故障逻辑灯组成的最基本的部件)充当一个晶体管(也可看做二极管),可以用来控制信号的传输方向(晶体管或二极管都是单向传输信号)。
然而,故障灯门不仅可以用于简单的晶体管,还可以用来建造触发器。
触发器是一种能够存储状态(值)的逻辑设备。根据接受到的不同输入,不同类型的触发器状态改变的也不同。
我将向您展示的第一个触发器是D触发器(D即为data):
D触发器会保存一个特定值并有两个输入端;第一个输入端(红线)是一个触发器,它将触发器的存储值(绿线)设置为第二个输入(蓝线)的当前值。这样,您可以轻松地存储信息以供之后使用。
这种触发器依靠故障逻辑灯门具有异或门的性质来工作;两个输入端连接到同一个逻辑灯,只有当输入的值(0和1)不同时,灯才会打开。在这里,输入和输出线都连接到逻辑灯上。当这些值不同时触发器将导致输出值变化并与输入值相匹配。
D触发器很容易平铺建造,这使得它可以用单个触发端(信号输入端)存储大量信息:

附:要想理解本条内容,请确保你理解本视频

或是本帖http://tieba.baidu.com/p/5794870961中有关故障逻辑门(概率逻辑门)的部分。之后的条目中(包括此条)会多少涉及数字电子技术的知识,推荐各位在本帖之外查一查百科

Tip#3:使用故障逻辑门灯建造SR锁存器
除D触发器之外,另一个有用的触发器装置是SR锁存器(用于置位-复位):

 



SR锁存器的功能类似于D触发器,但它没有一个触发器端和一个值输入端,而是有两个触发器输入端。一个触发器端(蓝线)用来打开锁存器,而另一个触发器端(红线)用来将其关闭。这是有用的,它使设备在被激活后不能被关闭,除非拉动重置开关。
与D触发器一样,SR锁存器也很容易平铺放置,允许你将一个重置开关连接到多个锁存器上:

Tip#4:学***制
在电子装置中,计算机不可能用我们都熟悉的数字系统来计算:也就是十进制。相反,电子装置使用一个名为二进制的数字系统。
与使用10个数字(0到9)的十进制不同,二进制只使用两个(0和1)。这是因为电子信号只能有两种不同的状态,开和关,它们对应于0和1。
看到0和1的长字符串可能会很吓人,而且似乎仅用两位数来计算很难,但在现实中,二进制的运算原理与十进制完全一样。
理解十进制数的“扩展形式”(按权相加)。在展开形式中,原数字中的每一个数字被写成该数字乘以10的幂。例如:12345=1*10000+2*1000+3*100+2*10+1*1。(1=10^0,10=10^1,100=10^2,以此类推)
二进制的工作原理是和它一样的,但是它使用的不是10的幂,而是2的幂。例如:11001=1*16+1*8+0*4+0*2+1*1。如果认定一个二进制数的最右边的数字是第“0”位,那么,从右到左,与第n个二进制数相对应的十进制数将等于这个二进制数(0或1)乘上2的n次方。
手动将二进制数转换为十进制数很简单,只要将与二进制数中每个1相对应的2的幂相加起来(例如,11001是1+8+16=25)。
(权和的方法)

另一种将二进制数转换为十进制数的方法是从0开始,然后从左到右读取二进制数,对数字中的每个1加上1,然后在每一步之后将数字翻倍,除了最后一步(1、2、3、6、12、24、25)。
相反,将十进制转换为二进制可以通过确定2的多少次幂与该数字的大小匹配来完成。要将25转换回二进制,你会首先发现最大的2次方小于25,也就是16。然后,从25减去16,得到9,然后重复这个过程,直到达到0。最后,取减去的每个2的幂来组成一个二进制数。
(重复除以2的方法)

我所描述的这些技术只是手动在十进制和二进制之间转换的方法。在计算机中进行这些转换要复杂得多,所以我将把这个过程留给以后的教程。我还将在后面的系列中演示如何进行加法和乘法等操作。

附:Programmatic给出的有关二进制的教程很简略,各位可自行百度二进制运算、二-十进制转换的详细资料来学习

Tip#5:使用故障灯门进行移位(递次电路)
在二进制中,移位是一种功能,它可以使一组数据中的每一个位都向左或向右移动。例如,左移00011001一位会产生00110010。注意,在每个数字的左边多加0。这是因为移位的结果可能会根据可用位而改变。在本教程里,我将会在下面的示例中使用8位二进制数(也称为一字节)。
如果一个1在移动时从字节的任何一边掉下来(进位),它就会被舍掉。
在数学上讲,如果不舍掉1,则向左移动一位会使该数字乘以2。右移一位则是将它除以2,如果这个数字在右边有一个1(在这种情况下这个数字是奇数),那么这个1被舍掉,结果被四舍五入,所以00000101(十进制数5)右移一位就是00000010(十进制数2)。
这里有一个左移的例子:



当触发器端(红线)被激活时,每个开启的故障灯门都会关闭自己的逻辑灯,同时打开其左侧的逻辑门灯。要创造一个正确的移位,只需把线接到另一端。通过将最左边的一个位连接到最右边的一个位,从而使由最左边掉下来的“1”不是消失,而是被发送到这个字节的右侧。这就是所谓的向左循环移位:



同理,也可由此建造向右循环移位的电路

附:此条内容不适合初学者理解,大家可以在吧内找精品贴或是看我在Tip2里给的链接自行查看递次电路的教程(递次电路和移位电路是同一个东西)

Tip#6:使用累加器建造加法器和计数器
累加器是一个非常有用的装置。它可以存储插入到其中的任何内容的总和。建造累加器要先从上升边缘检测器开始:

 



上升边缘检测器是一种装置,当输入端从关闭到开启时输出信号。你也可以通过倒置逻辑灯来创建一个下降边缘检测器,它只在输入端从打开到关闭时输出脉冲。如果你将一系列的下降边缘检测器并排放置并从右向左连接,你将得到一个累加器:


当线路被触发时,累加器存储的值以相应位的2的幂值增加。只需将最右边的电线连接到触发器上,就可以将累加器用作计数器。您还可以同时触发多条线路,以使累加器可以增加任意值。注意,如果累加器内的值超过11111111(最大值),则会发生溢出,导致其发生重置。
通过倒置所有的逻辑灯(从而将它们转换为上升边缘检测器),您可以反转累加器,从而使插入到其中的数据被减去。

附:累加器其实和我们平时所述的降频电路别无二致

Tip#7:叠加单一的组件以建造更复杂的装置


在这之前,我们知道了如何建造各种可以在1bit(八个数位)的数位上运行的装置,从D触发器到移位器再到累加器。现在是时候将它们放在一起来建造更完善的装置了。
这可以通过将装置堆建在一个类似架子的结构中,以一种非常紧凑的组件组装方式来完成。
例如,这里有一个D触发器阵列和一个累加器连接在一起:



上面一行是D触发器阵列,下面一行是累加器,摆放的石砖只是为了帮助连接电路。
请注意,看我是如何使用单线传输特定bit的所有信号的。 我本可以用单独一种颜色的电线来做D触发器,而对累加器中的每一位使用另一种颜色的电线连接,但是将同一根电线连接到每一个与一个bit相连接的装置上要容易得多,也更有整齐性。 
更换电线颜色也很重要,就像我对蓝线和绿线所做的那样,因为这样可以让两个bit相互连接而不产生干扰。
最后,注意一下如何使用单独的一组红线连接累加器中的D触发器。如果我没有这样做,那么来自D触发器的信号将激活累加器中的下降边缘(沿)触发器。
无论如何,这只是一个如何组合设备的基本例子。在构建更大的设备堆栈时,请记住我提到的规则(每比特一根垂直线、交替的电线颜色和单独的触发器线),因为我将在后面的教程中展示的大多数设备都将使用这些规则。

Tip#8:使用比较器比较数值

比较器是将两个数值作为输入,并确定它们是相等的还是一个值大于另一个值的装置(比较大小)。
要建造一个二进制数值的比较器,需要考虑关于二进制数的两个很明显但是重要的事实: 1大于0;1在较高的地方(即左边)的数值大于1在较低的地方。 
知道这些之后, 您可以比较两个二进制数字,方法是从左到右扫描它们,并找到第一个出现在同一位置的两个位不匹配的情况。 
例如,00110110大于00110010。
如果您查看每个数字中最左边的位,然后一次向右移动一位,直到找到不匹配的位为止,你就会知道,结果是1的位,就必须是更大的数字。
如果,在比较数字时,没有匹配过一对不同的位,那么你就知道这两个数字是相等的。
下面是使用故障灯门实现此过程的方法:


这个比较器包含一个单比特比较(一行) ,它会触发三个输出端中的一个,从上到下的输出端的情况分别是蓝色=绿色、蓝色>绿色和蓝色<绿色。
如果是单独比较一个位,你可以看到蓝线和绿线的位都连接到顶端的一对故障灯门。如果位不同,这对门将向红线发送信号,如果它们相同则向黄线发送信号,从而继续下一位的比较。
如果位不同,则红线触发一对仅由绿线控制的故障灯门。 如果绿线连接的位关闭,则“蓝色>绿色”的输出端将被触发,因为蓝线连接的位必须打开。 但是,如果绿线连接的位打开,则触发“蓝色<绿色”的输出端。

Tip#9:使用Shift-Add算法来建造一个乘法器
现在你已经知道了如何使用累加器执行二进制加法,现在是使用累加器建造乘法器的时候了。
在二进制中,乘法可以通过两种方式完成。要执行X*Y,只需将X加进累加器Y次,也可以使用更有效的方法:Shift -Add。Shift-Add类似于用手乘十进制数的长乘法方法。在竖式乘法中(就是小学学的那个笔算多位数相乘的方法),把X乘以Y的每一位数字,然后把每一个结果相加在一起即为解(这里不需要多说)。
类似地,使用Shift-Add,扫描Y中的每个位,对于每个数值为1的位,都会将X加到累加器中一次。在每一步之后,左移X以便将其值增加到下一个位置。
Terraria中的乘法器(示例)如下:


正如你所看到的,这是我向你展示的第一个需要一个半砖驱动来操作的装置。这是因为Shift-Add方法需要对每一位都执行一次运算,在这种情况下需要执行8次。
从上到下的第一行表示Y值,第二行表示X值,底部的一行用来保存结果。当左下角开关被激活时,半砖驱动开启并激活产生一次移位,并在每个tick中执行一次操作。在每次操作中,通过右移位从Y值中读取单个位。如果来自Y的一个位的值为1,则黄线触发一组故障灯门,将X的当前值发送到累加器。然后,X值被左移。 请注意,在Y值的右移和X值的左移之间放置了一个额外的故障灯门。 这是为了确保X值在被左移之前会被发送到累加器。 然后,半砖驱动重复这8tick的整个过程,直至完成乘法运算。

Tip#10:使用与门建造多路复用器


在数字电路中,多路复用器是一种使用二进制输入端从一个长值中选择单个位的设备。
例如,可以使用多路复用器从一系列传送器中选择单个传送器以建造传送阵。 多路复用器也可用于将较小的二进制数转换为十进制单数,我将在以后的教程中展示。 这是一个多路复用器,它使用3位的输入端在8个不同的输出端之间进行选择:

 


当前,二进制输入端的值为0,所以使最底端的火把处于亮起状态。通过输入一个二进制数,其相应的火把将被多路复用器触发。多路复用器使用有分叉结构的与门装置工作。
每两个相邻的垂直的与门,其第一个与门最上面的逻辑灯为关闭状态,第二个与门的逻辑灯为开启状态(可见下图)。 拉动这相应两个与门所属的一列的开关会使这两个灯交换状态。每个与门也从其左边的列中接收一个输入信号。这样,你就可以控制信号从左到右的传输。
你可以很容易地复制和粘贴一个复用器,使它能控制的位数翻倍并且增加输入端的个数。

示例,传送阵的应用

Tip#11:使用BCD码对二进制数进行编码


由于数字电路只使用二进制数字,所以不可能以十进制形式存储数字。然而,你可以使用BCD码,一个可以用来存储十进制数字的二进制表示形式。在BCD中,十进制数的每个单独数字都由一个4位二进制数表示(因为至少需要4位二进制数值才能表示0到9)。例如,123将被表示为0001 0010 0011。然后,你可以使用一系列复用器将每个BCD码数字转换为十进制数字。


我们通常使用8421BCD码,有关BCD码的更多信息可自行查找学习

Tip#12:使用七段线显示器以十进制显示BCD码数字


现在你已经知道了如何使用BCD码编码十进制数字,我可以向你展示如何以它们的十进制形式显示BCD码数字。这可以使用七段线显示器来完成。
七段线显示器的设计很简单,它由7条线构成,3条水平的,4条垂直的,它们可以点亮为不同的组合,组成十进制数字。大多数数字时钟使用七段线显示器来显示时间。要建造一个七段线显示器,需要将三个火把(或其他通过信号触发可以有亮度变化的物块)算作一组,一共排列七组,并为每组火把连接正确的电线颜色。由于有7段线和只有4种电线颜色,有3种颜色的电线将不得不使用两次。
建造完成后,将电线合并为两个组,并将它们连接到解码器,如下所示:

 


这两个解码器本质上是多路复用器,根据BCD码输入端的输入而激活单个与门。从右到左的与门分别代表0到9。然后将每段的电线连接到将点亮这些段的数字的与门。请注意,在下面的解码器中(由图可知一共有两个解码器),我已经去除了表示数字1的与门,因为这些段中没有一个是为该值亮起的。



【教程/搬运】一些电路装置技巧—来自 Programmatic的评论 (共 条)

分享到微博请遵守国家法律