我刚开始涉足电子领域,已经着迷了。最近几天与Arduino一起玩,我知道二进制是不同电压的代表-例如+ 5V代表1
和GND代表0
。
我一直在尝试发现微控制器在物理层面上是如何将二进制转换为这些电压的。我似乎在任何地方都找不到描述。谁能分享他们的知识或使我指向描述其工作原理的地方/好书?
我刚开始涉足电子领域,已经着迷了。最近几天与Arduino一起玩,我知道二进制是不同电压的代表-例如+ 5V代表1
和GND代表0
。
我一直在尝试发现微控制器在物理层面上是如何将二进制转换为这些电压的。我似乎在任何地方都找不到描述。谁能分享他们的知识或使我指向描述其工作原理的地方/好书?
Answers:
我想以稍微不同的方式重申KellenJB的部分答案:
从二进制1和0到5 V和0 V之类的电压都没有转换。微控制器或任何物理电路仅在该电压下工作。
当我们在脑海中就电路的工作原理形成简化模型时,这些电压在我们的头脑中被“转换”为二进制1和0。
实际上并没有发生“转换”。二进制1和0只是底层电压的虚拟表示。实际上,在许多系统中,高电压可能意味着0,而低电压则意味着1。这样做有一些原因,但是您可能更想尽早开始研究。
要了解逻辑中发生的情况,最好检查一下晶体管。晶体管可以用于很多事情,但简单来说,您可以将其视为开关。从概念上讲,您可以像在墙上的电灯开关那样思考它,但是它不是通过物理移动开关来控制,而是通过电流变化来控制。您可以将点亮的灯视为1,将熄灭的灯视为0。现在,您可以开始将这些开关组合成不同的集合,以创建不同的逻辑元素(例如AND,OR,NOR等)。
我知道我的回答还不够详细,但我希望它能回答您的问题。如果您需要更多说明,我将愿意添加更多细节,只是不想让您不知所措。
简短的答案是它不“转换”,电压是二进制的(或二进制)。就像在纸上写一个数字一样,标记是数字的表示,或者是算盘上的数,石头的位置是数字的表示。
二进制是一个数字系统,就像十进制(或八进制,十六进制等)一样
十进制(base-10)有10个符号(0123456789)二进制(base-2)只有两个(01)
在任何基数中的序列10表示第一幂的基数,因此在十进制10中表示10 ^ 1 = 10,在二进制中则表示2 ^ 1 =2。接着,十进制100表示10 ^ 2 = 100,并且用二进制表示2 ^ 2 =4。依此类推。
用电子来表示十进制是可能的,但很复杂,因此他们选择了可以用简单的0和1(或开/关)表示的二进制。对此
有一些变化,例如三元(3状态)系统,当然还有模拟计算。在晶体管出现之前,有机械打孔机(谷歌知道很多,如果有时间的话,一些非常有趣的读物)
最早的二进制数字计算机是用真实的开关(电子继电器)制成的。的楚泽Z3(1941)是一个例子:
此后,使用真空管代替继电器(可以在没有移动机械部件的情况下切换得更快),由真空管代替继电器进行切换。的ENIAC是与真空管由早期的计算机的一个例子。
然后在60年代,晶体管问世,并在IC之后不久。晶体管执行的功能与早期机器中的继电器/阀门相同,但更小,更快,功耗更低。
二进制计算机电路基本工作方式背后的实际理论根本没有改变,就像我们没有改变数学中数字处理方式一样-算法有所改进,但基本规则保持不变。
因此,如果您知道二进制的工作原理,并且有一个简单的电路可以将1或0存储为两个不同的电压电平(例如5V和0v),并且可以执行其他简单的逻辑功能(如AND和OR),那么,您可以将它们全部结合起来做更复杂的事情。
由于所有这些二进制电路只是最基本的开关,因此您可以通过在两种状态(例如机械/继电器/阀/晶体管/?)之间交替的任何东西来实现相同的目的。
举一个以二进制存储数字的例子,假设我们有8个开关(它们的类型不重要)
,1表示5V,0表示0V。
我们要存储数字123。
十进制为123 =(1 X 10 ^ 2)+(2 * 10 ^ 1)+(3 x 10 ^ 0)
二进制为01111011 =(0 x 2 ^ 7)+(1 x 2 ^ 6) +(1×2 ^ 5)+(1×2 ^ 4)+(1×2 ^ 3)+(0×2 ^ 2)+(1×2 ^ 1)+(1×2 ^ 0)
因此,所有我们要做的是将开关0、1、3、4、5、6设置为5V,将开关7和2设置为0V。这以二进制形式“存储”数字123。该设置将被称为“寄存器”。
如果您想了解更多有关如何组合开关以形成更复杂的电路的信息,请阅读有关数字逻辑的好书,或者咨询google。
这个网站开始似乎还不错。
电压只是表示二进制文件的一种方式。这是一种非常有效的实用转换,可以使用不同的晶体管配置实现二进制逻辑。
通常以电子方式实现二进制逻辑的方式是使用CMOS(http://en.wikipedia.org/wiki/CMOS)技术,在该技术中,两个MOS晶体管成对互补设置,以形成CMOS门。但是,还有其他二进制逻辑的电子实现,例如使用TTL(http://en.wikipedia.org/wiki/Transistor –transistor_logic)或继电器。但是您可以使用任何真正的纸张,纸制机器人山羊皮: http //www.robives.com/category/product_tags/logic_goats。电子CMOS实施恰好是一种高效且实用的方法。
在这些简单的CMOS门中,您可以构建更复杂的逻辑门:NAND和NOR是标准的非门。其中,您可以构建所有内容,包括二进制逻辑,加法器,寄存器文件,内存。通过这些,您可以构建一个ALU,直到完整的微处理器。
如果您想了解更多信息,可以阅读一本关于数字逻辑的书,我碰巧拥有并喜欢这本书:
了解VCPU的构建的一种实用的好方法就是使用VHDL和FPGA自己构建一个。您可以获得便宜的FPGA开发板,并且该软件通常是免费的(有限制的许可证)。我有些勤勉,这是相当实惠的:
简而言之,在给定范围内(通常为5至12伏),最高有效位在该范围的前半部分为0,在另一范围为1。通过将二分之一进一步除以此类推,直到计算出所有位,来计算下一个最高有效位。
因此,二进制只是关于定期测量的升高和降低电压。
这是一个简化的示例。在1V至256V的范围内,让我们使用伪代码将137(模拟)转换为二进制(数字):
// used this way: analogToNumeric(137, 256);
function convert(var number, var length) {
if (number > length) { return(ERROR); }
function convert(var half, var binary) {
if (half < 2) { return(binary); }
elseif (number < half) {
return(convert((half / 2), append(binary, 0)));
} else {
return(convert((half / 2), append(binary, 1)));
}
} return(convert((length / 2), list()));
}