[置顶] 一些网站

PHP

PhpBug:https://bugs.php.net/

Zend Framework:https://www.phpfans.net/manu/ZF/

JavaScript

JavaScript图表:https://echarts.baidu.com/examples/

mescroll 下拉控件:http://www.mescroll.com/

Promises:http://wiki.commonjs.org/wiki/Promises

正则工具:https://regexr.com/

ini解析:https://github.com/iwonmo/IniFormat

胶水JS:WASM:http://webassembly.org.cn/

Android

Apk在线反编译:http://www.javadecompilers.com/apk/

Adb:http://adbshell.com/downloads

AI

TensorFlow 国内:http://www.tensorfly.cn/tfdoc/get_started/introduction.html

TensorFlow 官网:https://tensorflow.google.cn/

Numpy:https://www.numpy.org.cn/

游戏

Cocos 引擎:http://docs.cocos.com/creator/manual/zh/

单片机

元器件:https://www.alldatasheetcn.com/

Arduino Mini:https://store.arduino.cc/usa/arduino-pro-mini

Google Chromium PC Frame

nw.js:https://nwjs.io/

Electron:https://electronjs.org/

cef:https://bitbucket.org/chromiumembedded/cef/src/master/

设计学习

doyoudo:http://www.doyoudo.com/



时钟周期 机器周期 指令周期

时钟周期:也称之为振荡周期。这里的振荡就像钟表一样,振荡一次走1秒,连续的振荡产生振荡脉冲,钟表持续走下去。所以时钟周期是一个时间向量。具体的计算:时钟频率的倒数,这里的时钟频率指的是晶振的频率,因为时钟周期的产生是依靠晶振实现的,所以一般单片机CPU外围电路必须加晶振,有些CPU内带振荡,实际这个振荡并非晶振产生的,而是由振荡电路产生的,所以它们是不一样的东西。如果说一个晶振的频率是12Mhz(兆赫兹),那么它的时钟周期就是1/12us(纳秒),也就是12的倒数,单位是:纳秒。所以说选择晶振频率越大,CPU执行速度越快。当然也不是可以选择无限大,这里需要具体的参考CPU数据手册,一般都有上限值。晶振产生的波形是正弦波,连续的正玄波就是脉冲,而CPU执行需要这样的脉冲信号来进行指令的读取执行等操作。CPU的时钟周期也是CPU完成一项原子性操作的时间向量,也就是说:CPU在1个时钟周期内只能做一件事,比如说读指令。不过有些CPU架构在一个时钟周期内并不能完成读指令,所以又引进了一个概念:机器周期。


机器周期:1个机器周期内只能做一件原子性操作:取指令,寄存器读、寄存器写、等。1个机器周期等于若干个时钟周期,这里的比例关系需要看具体的CPU架构,比如说51单片机用的CPU就是1个机器周期等于12个时钟周期。然后就可以具体的计量一个原子性操作具体需要多长时间,比如说取指令在某个CPU架构下就可能需要3个机器周期,寄存器读可能需要5个机器周期。


指令周期:一条指令执行所需要的时间,这里的时间指的是机器周期。这里的指令是指的一条完整的指令执行下来。比如说:访问指令:先取指令,然后在进行访问。这样的指令算下来就需要2个机器周期。取指令需要1个机器周期,进行访问需要1个机器周期。这个不是很好理解,就像a=1+2看着是一条指令,但是如果编译器没有优化的前提下,它映射到CPU上指令是非常多的。所以指令周期理解一下就好,意思就是一条指令完整的运行后所花的时间,这里的时间是机器周期。


晶振为什么两端老是加电容:这个是晶振设计上的要求,要想晶振起振,必须有一个负载电容。只有你的外部电路中的电容值等于晶振内部设计的负载电容值时,晶振才会发生振荡。想要深入了解晶振可以Google搜索一下相关说明。


写到这里我突然想起IO堵塞的问题,一个IO堵塞后指令是否会堵塞,不过现在想来,这是不一样的东西,一个是CPU指令的触发,一个是系统的执行问题。而且还有时间片的存在。想来不能一起考虑。


个人理解,如有错误还望指出。

AutoDeskEagle SparkFun

本博客前面文章有介绍SparkFun库,但是发现Arduino有一些电路符号依旧无法打开,比如说排针。在进行右键打开元件库的时候发现是一个叫做SparkFun.lbr的库,所以从网络上下载安装后完美打开。

屏幕快照 2019-11-16 上午1.16.27.png

上述就是SparkFun封装库里的排针。不过我发现和Eagle自带的排针封装Pinhead差不多,连尺寸我量了一下都是一样的。

AutoDeskEagle Label

首先来看别人的Label

屏幕快照 2019-11-16 上午1.01.12.png

D9、D8这些是标签的名称,标签的功能是会将网络连接到一起,前提是网络的标签名取的一致。

轮廓框的显示方式如下,选择工具面板中的label,放置到你要更改名称的网络中,然后右键查看属性。

屏幕快照 2019-11-16 上午1.05.09.png


这里将Xref勾选上就可以显示外轮廓框。Xref的意思是:外部参考。

Cam350 Apertures are used which have a size of 0

ad0c501f17bd18aad21d77e6a8effb5.png

原因:孔径表(D码表)里面存在为0的数值。

导入后,按A键查看D码表。

a266b6233effbf3c1802322125452e2.png

可以看到的确存在一个数值为0的D码。关闭这个D码表页面,然后按下D键

d4870d1efa43cf9c4aec66b2f3c040e.png

找到刚才我们寻找到为0的D码,然后点击OK。(后续的截图,所以这里为12.0)这一步相当于激活。

高亮显示:点击OK以后按下H键。

7e7677a177bca987c3bc6209539290f.png

白色线就是D码为16的位置,如果不明显,可连续按H键。

回到PCB图,进行修改,或者直接在Cam350修改。

这里看着像是边框的问题,所以我加宽了边框线。再次导入就可以了。

注意:gerber导出时候填写的参数,在你用Cam350导入的时候一定要一致,这样才不会有错位的问题出现。

PCB 敷铜和填充

填充有两种形式:多边形 (任意形状)、矩形

多边形填充会自动规避不填充的网络,矩形填充则不会。两者均会与其选中的网络进行短接处理。他们均只能在板子的顶层和底层进行填充。

敷铜属于多边形填充,需要指定其网络,一般指定GND网络。会将标注有GND的铜线进行短接,并避开其余网络。

填充铜箔后会增大导电能力,增强抗干扰能力等。

填充方式均是以网格方式填充,PCB编辑软件可设置相应铜箔宽度、间距等参数。