M8系统开发手记(2)

Wayne Huang

2011年1月2日

0  写在前面的话

继续上一篇的话题,我们这次介绍最小系统的硬件构建。话说,最近的有些事情让我还是比较感慨的。有时候,觉得那些崇高的职业或许已经并不崇高了。其实,一个职业的崇高与否并不在于这个职业所做的是什么,更在于从事这个职业的人是否将其视为崇高。如果,一群人丧失了从事相关职业的那种职业道德、职业信仰,那么即使所从事的事业是再崇高的,也和浑浑噩噩的过日子没有两样。我不知道那群人是怎么了,但作为我来说,如果别人将希望、信任都寄托在我身上的时候,我真不知我怎么能用冷漠去面对他们。又或许,他们的冷漠,是对这个大环境的无声叹息。

1  M8最小系统的建立

前面内容我想对于很多有一定硬件基础的人来说,就是一长段漂亮的废话。就好像半夜坐地铁的时候,整节车厢里没几个人,此时突然某人需要释放一下肠道内的秽气,接着就听到一声悠长、响亮且类似小号低鸣的声音,临到最后,还荡气回肠得转了个弯,随着这段小插曲的结束,一股奇怪的味道便慢慢扩散开来。不过我想我的文章应该没有那么不羁吧。那么接下来,让我们言归正传,开始我们构建M8最小系统的奇妙旅程。

1.1  M8最小系统介绍与分析

最小系统是指能够让单片机正常运行的最基本系统的构建,当然这里是只硬件系统。如果你曾经接触过AT89S52之类的单片机,就应该知道51的最小系统涉及的元件还是很多的。但是,M8相比51来说,最小系统就简单很多了。最小系统是很多更复杂更大系统的基础,我们之后的很多内容将基于这样的最小系统而扩展出来的。所以,如果你对最小系统有一定的了解,相信对你今后构建更复杂的系统会有一定的帮助。

一般情况下,单片机的最小系统有几个部分组成。提供时钟脉冲的时钟震荡电路、提供复位信号的复位电路以及提供电源的电源电路。有这三个部分,基本就能让单片机正常的运行起来了,虽然这样的情况下并做不了什么实质性的事情。但是,这是任何复杂电路中都会包含的公共部分。

对于我们伟大的M8来说,以上这三种电路的构成可以说是相当容易的。不过我这里所说的是最最小系统,也就是说,这是一个让M8正常运行的最简单的电路。或许你会觉得我所说的会不会有些太罗嗦了。但是,相信你深入之后会发现,其实这并不能算是很罗嗦。因为严格的说,M8并没有最小系统的说法,这里我只是沿用了51的思路罢了。如果你曾经使用过AT89S52这类单片机,那相信你会对于晶振起振这件事比较敏感,因为有时候搞得不好会出现不起振而实验失败的情况。但是,M8就不太可能出现这种情况,即使你像我一样用的是多孔实验板。因为,M8的最最小系统只有3个外围元件。

1.1.1  M8最小系统之电源

一般来说,电子系统都应该有一个电源作为其运行的动力。当然啦,有时候这种电源或许并不太明显,比如矿石收音机就是一个比较典型的例子。不过,这已经超出了本文涉及的范围了。相信,对于初学者来说,很多时候会忽视电源的重要性,但是一个稳定的电源将是整个系统的关键。

如果你的电学基础还停留在中学物理课上,或许会把电源和"干电池"等同,但是要知道,电池本身是有内阻的,因此在实际运用中,电压并不是很稳定。而且,M8主要的工作电压是5V,这样很难用电池的串并联达到合适的电压。所以,我们所说的一般是稳压电源,一个好的稳压电源会让我们成功的概率高很多。

电源本生就可以看成一个复杂的系统。所以,如果你自己有能力制作电源的话可以做一个5V的稳压电源,比如用变压器转换一下220V的电压,然后通过一个全桥。不过,我个人还是比较推荐用现成的稳压电源,毕竟我们是做软件的,任何时候都拥有"重用原则"的觉悟,"不再造轮子"的口号不是放在嘴上的。最简单的获取5V电源的方式是你的电脑,因为USB端口的电源引脚是5V的,而且就算没有识别出USB设备,端口的供电还是正常提供的,只是电流方面有一些限制,建议不要超过200mA。另外,很多手机充电器用的适配器也是5V的,具体的你可以看一下适配器上的参数,一般上面会标的很清楚,比如我NOKIA的充电器用的就是5V的电源。当然,如果你那边有报废的电脑之类的东西,还可以把上面的电源拆下来加以利用,因为里面有5V供电的,其中黑线为地,红色为+5V。

我想作为和计算机打交道比较多的我们来说,用主机电源会比较可行吧,当然这话也不是说其他方案不好,就比如我用的就是手机充电器上的适配器,主要是感觉主机电源有些笨重。不过,采用主机电源的优点在于,主机的电源本身就是为高频数字电路设计的,因此在做实验的时候电源的稳定性能得到保证。而且,主机电源的供电电流也比较大,而且一般会有过流保护,所以也增加了实验的安全性。但是,主机电源由于本身是一个系统,所以并不会像其他电源那样,插上电就会供电。比较简单的办法是把电源上的那一困线中,找一根黑线,当然不是脸上的那根,然后再找一根绿线,之后把这两根线用导线连起来,这样电源就运行了,当然如果你细心点,可以用一个拨动开关替代那根导线。

到这里,我们已经有一个5V的电源了。但是,这只是我所说的最小系统外的电源。我这里所说的最小系统电源,是在其后面的。其实也很简单,就是一个开关和一个电解电容。开关么,我想就不用多介绍了,至于电解电容是并联在正负极之间的,其作用是利用电解的充放电来防止开关在断开和闭合时产生的过于急促的跳变,而且也能让输入电源更加稳定一点。我采用的是一个4u7的电解电容,用下来的效果比较好。

1.1.2  M8最小系统之复位

起初,神创神天地。地是空虚混沌,渊面黑暗;神的灵运行在水面上 - 创世记1章1 ∼ 2节

对于刚上电的单片机来说,情况也与此相仿。因为,不可测的因素还是比较多的,所以,根据状态机的概念,系统的运行结果也会变得不可测。因此,一般单片机启动后需要通过复位操作让整个系统回归到一个初始状态,之后系统便开始有序的运行了。

复位电路就是为这个复位操作而设计的,在众多的单片机电路中,复位电路根据不同的情况会有很多中设计方法,简单的也有复杂的也有,但终归是在电路上电之后一段时间,给单片机一个复位信号。如果我没记错的话51最小系统的复位电路还是比较复杂的,需要有电容二极管什么。但是,我们这里讨论的是M8,很庆幸,M8内部自带有复位电路,我们所要做的就是再复位脚上加一个电阻然后再连到+5V上,以便把这个引脚拉高,就可以了。之后的一切就交给内部电路去解决。当然,如果你连这个电阻都想省略的话,也是可以的不过需要对M8进行一些小设置。这样,我们的最小系统几乎是在上电的同时,完成了复位操作。

这里想补充一点小常识,就是关于引脚的处理。一般情况下,引脚总是要和高点平或低电平相连的,因为这样能保证这个引脚处于可控的电平下,当然,也有些情况引脚是可以悬空的,也就是不接任何东西,这种情况下如果作为输入引脚,那引脚所处的状态是未知的。因此,对于复位等信号引脚,最好能将其电平设定在一个固定的电平上,当然这个电平要在保证不影响电路运行的情况,就好像M8虽然内部有复位电路,但还是要把复位脚拉高一样。

1.1.3  M8最小系统之振荡

话说,现在有些细心的朋友会有些困惑,或者会问我:"你会不会数数字?"。因为我刚才前面说了,M8的最小系统只有三个外围元件,前面我说的如果包括开关的话,已经有三个了。那如果算上振荡电路,那一定要超过三个外围元件的设定了。难道是笔者也振荡了一下?

但是,这里我要告诉你,三个元件的前提是不会被打破的。因为...。在说"因为"之前,我想说一下前面提到的复位电路,那个复位电路实际上就像我前面所说的那样是内置的。所以...。对,你没有猜错,你不用怀疑,M8内部也集成了一个RC振荡电路。我想,你现在会说:"不带你这么耍赖的。"但是,事实就是这样。

当然,内部有RC振荡并不代表不能接外置的。因为RC振荡电路的频率对温度比较敏感,所以很多时候并不精确。虽然说,M8能够手动校准,但温度这东西毕竟是会变化的,现在校准了并不代表以后也能正常工作。比如,你校准的时候是"夏天的海南岛",使用的时候是"冬天的东北三省",而且都是户外进行的。因此,如果对频率要求比较高的情况下,采用外部晶振是不二的选择。

另外一个选择外部晶振荡的原因,是由于内部RC振荡电路的最高频率是8MHz,而M8的最高额定工作频率是16MHz。当你需要使用高于8MHz的时钟频率工作的时候,也必须选择外部晶振电路。同时,M8内部的RC振荡电路是可以在多个振荡频率上选择的,默认情况下是1MHz,通过设置M8的参数,能选择1 ∼ 8MHz中的某个频率作为当前工作频率。

但作为这里的最小系统而言,我们采用默认的1MHz内部RC振荡就可以了,所以这里的振荡电路就一个元件也没有了。其实,这样的话也减少了构建最小系统失败的几率。毕竟,有时候振荡电路不起振,不能给单片机提供时钟信号的情况还是会发生的,而且振荡电路其实也算一个挺娇贵的电路,这点对玩过51的同学来说还是深有体会的吧。

1.2  M8最小系统的组装

在上面一节中,我们已经对M8最小系统的各主要部分做了一些简单的了解。但是,我想对于广大的同学们来说,动手实践一下才是王道,不然的话那我前面描写有关工具的章节,岂不是真要如同我本章一开始所描写的那样了么?所以,这一节我将把重点放在最小系统的搭建上。

作为实验用的话,虽然"面包板"比"洞洞板"更适合,但是前者的可靠性显然没有后者好。因为"面包板"的元件和导线是插上去的,这样有时候就会造成因为接触不良产生的问题,而且面包板的布线有些特殊,对于刚接触电路的同学可能会不太习惯。然而,"洞洞板"就比较好了,元件是焊接上去的,这就能保证不会因为实验板本身的问题造成接触不良,其次我建议各位使用的是单孔"洞洞板",这样的话,虽然使用起来会造成导线的增加,但是可以让布局更直观一些。所以,我们这里所描述的主要都是针对"洞洞板",采用的元件也主要是双列直插封装的。

根据我们前面所述,你只需要三个外围元件就可以完成这次的组装实验了。他们分别是1个10kΩ的电阻、1个拨动开关和1个4.7μF的电解电容。虽然说从电路图上看的确是这样,但是实际制作起来还会需要一些其他的东西作为辅助。当然,如果你觉得这样没有必要,也完全可以按照电路图直接连接,这也不会有什么问题。不过,采纳加一些辅助材料有助于让自己的作品更规整更漂亮一些,何乐而不为呢?

1.2.1  组装系统时的接插件

相比我们的父辈来说,我们的DIY材料可谓是琳琅满目了,这样一来,我们制作的东西会给人更加"标准"的感觉,但同时我们也会丧失父辈的那种充分利用手边材料的动手能力。想一下,在曾经的那个年代,为了装一台超外差收音机,要从一堆价格"昂贵"的三极管中,找出匹配的两、三个三极管的那种感觉吧。更何况,我们很多父辈DIY的器件,很多都是从买来的废旧电路板上拆下来的。这么看来,我们现在的环境真的比我们的父辈要幸福很多了。

所以,我们既然有那么好的环境,自然要好好利用已有的资源啦。接插件就是我们需要好好利用的东西了。接插件的种类繁多,主要的功能就是起到连接的作用,比如我们主板上的那些跳线和排针就是接插件的一种。使用现成的这种接插件,有助于我们今后对系统进行扩展,也能让作品看起来更美观。这次我们所要涉及的接插件主要有两种:芯座和DC插头插座,那么我接下来就围绕这两个来简单介绍一下。

Figure Figure 1: 28pin测试座

芯座将是我首先要介绍的。通常,集成电路安装在电路板上,是需要通过芯座的,当然我指的是双列直插。或许,有些人会因此拿着某些电路板跑过来质问我:"这块板子上的集成电路怎么直接焊在板子上呢?",虽然说这样的情况的确有。但作为初学者,我建议你们在条件许可的情况下,使用一下。因为,我们现在是在做实验,我们不能百分百保证我们不会把集成电路搞坏,那么如果用芯座,你可以方便的更换损坏的集成电路。另一个原因,推荐初学者使用,是因为作为初学者常犯的错误是在焊接的时候让元件过热,虽然说这东西可以经受一定的高温,但是通过芯座可以更好的防止把元件焊坏。毕竟,辛苦焊上去的集成电路,最后发现被焊坏了,那不是很杯具?所以,就像我一开始说的,如果条件允许,比较建议用芯座。

Figure Figure 2: DC电源插座

DC插座主要的作用是能让电源线连接到板子上。根据我的使用情况,我比较建议各位使用这样的DC座和插头。因为我个人采用的是接线柱作为供电接入的,但是这样会有个比较严重的问题,那就是当接线柱上的线意外脱落的话,很容易造成导线碰触而短路。所以,如果采用这种DC座,可以让实验更安全一些。不过,对于DC座你要稍微留意一下孔径,因为不同孔径的DC座和插头是不能通用的。如果你不想使用这种DC座的话,也可以采用我使用的接线柱,相对来说接线柱的使用更灵活一些。或者利用USB插座,因为刚才说了,USB的供电是5V的。

1.2.2  组装系统的连线

Figure Figure 3: ATMega8-16PU

在介绍系统连线之前,我想先简单说一下集成电路引脚的识别。虽然,我知道这个对于很多"高手"来说,太小儿科了。但是我还是想简单说一下,毕竟对于新手,什么都是需要了解的。如图3所示,就是我们介绍的核心ATMega8,你可以在上面看到,在末端有个明显的半圆形缺口,那个就是标记点,可不要以为那是传说中的加工缺陷。一般来说,把这个缺口朝上,面对集成电路有字的正面,左手第一个引脚的标记是1号脚,然后逆时针方向依次是2号,3号等等。

如果你曾经接触过74系列的集成电路,你或许还会记得在芯片的左上角是正,右下角是GND,然后接好之后就能正常工作了。虽然M8和这个类似,但是在电源的连接上有些技巧。根据M8的手册,我们可以知道M8电源相关的引脚为:VCC(7)、GND(8)、AVCC(20)、AGND(22)以及AREF(21)1。严格来说,模拟电源和数字电源要隔离分开的,避免互相干扰。但是,作为一个目前还未涉及ADC的电路,这点可以稍微变通一下,就是把模拟电源和数字电源直接连接,而AREF是ADC的基准电压,这个引脚可以悬空,也可以直接和AVCC相连。所以,综上所述,电源的引脚连接是VCC和AVCC相连,然后和电源正极连。GND和AGND互连,然后和电源负极连。AREF可以悬空,也可以和VCC相连。

对于连线,我有个小小的技巧。一般在接线前,先根据线路图和元件的实际尺寸将元件位置布局好。然后在一张纸上画出你所需要连的导线,之后你每连一根就用其他颜色的笔描一根。这样做的目的是避免在以后连线过多的情况下有疏漏或者接错的情况。同时,在正式使用之前,建议反复检查一下你焊的板子,避免出现有短路或者断开的情况,这个时候就需要万用表了。另外,对于新手来说,常翻的错误可能是把正反面搞错。比如,设计的时候是按着正面布局来的,但因为焊接的时候往往是在反面,这样就很容易发生接反的情况,甚至是正反混接的情况。

1.2.3  最小系统相关线路图

考虑到线路图对画质要求会比较高,并且由于软件的原因,我采用的输出格式是pdf。但是,鉴于格式原因,我无法将其上传至Blog。所以,有需要的话,可以留下你的邮箱,留言索取。

2  文外音

感觉这篇文章的内容并不算太精彩,特别是对那些电子学专业的人,更可谓是鸡肋。但是,我所针对的并不是电子学的大牛,而是那些需要得到帮助的人。因此,对于了解的人,你可以跳过相关的内容,对于,不了解的,你可以补充一下。另外,关于有些人提出要看在下习作的照片。其实,我之前已经准备过一些照片,但今天翻出来的时候发现很多地方都有遗漏。所以,目前来说并没有我的照片可以提供。不过,随着章节的深入,我想我会补充进去的。对于电路图的索取,你可以在Blog下方留言索取,只要留下你的邮箱即可,我会在第一时间以附件形式发给你的。

我很欢迎你对我的文章转载,但转载的同时请注明文章的出处。这样做的目的是能让阅读的人能更好更及时的得到回复。另外,由于blog排版的问题,很多地方并不尽如人意。所以,如果你想所要电子版的话,可以在相应的文章后留下你的电子邮箱,我会及时的发送给你。最后,感谢各位长久以来对我的支持。


Footnotes:

1此处是以双列直插封装为例

M8系统开发手记(2)相关推荐

  1. M8系统开发手记(1)

    M8系统开发手记(1) Wayne Huang 2010年12月25日 0  写在前面的话 这篇文章将会涉及有关硬件相关的内容,如果要问我为什么会从软件转到硬件,这其中有一个比较悠长的故事. 我想通过 ...

  2. python开发mes系统_MES系统开发手记(一)

    前言: 从ERP开发转到MES系统开发又是将近5年时间了,前后做了几个项目的MES系统,终于想为自己的这几年开发做个总结,写一个比较产品化的MES系统. (一):建模 1.基础资料,建立以下几个信息中 ...

  3. MES系统开发手记(一)

    转载链接:https://www.cnblogs.com/peterzhou/archive/2009/07/11/1520824.html 前言: 从ERP开发转到MES系统开发又是将近5年时间了, ...

  4. Unity 2D独立开发手记(九):UGUI仿GTA地图系统

    一直觉着GTA的小地图很方便,在地图上的图标能够实时反映出各种任务点.设施等的方位,那么我也仿照它的地图系统做一个简陋的. 还有,提前说一下,这篇文章面向至少用UGUI做过按钮点击事件的读者,因为一些 ...

  5. 交通银行香港分行实施 Linux 前端系统的开发手记

    交通银行香港分行实施 Linux 前端系统的开发手记 2004 年被称为是 Linux 应用推广的开端之年.剖开历史巨大的横断面,诸多的 Linux 应用项目如繁星,开始隐隐出现在巨大的苍穹下.它们中 ...

  6. 2016-04-25-信息系统实践手记5-CACHE设计一例

    layout: post title: 2016-04-25-信息系统实践手记5-CACHE设计一例 key: 20160425 tags: 业务 场景 CACHE 系统分析 系统设计 缓存 modi ...

  7. HoloLens开发手记 - HoloLens shell概述 HoloLens shell overview

    使用HoloLens时,shell是由你周围的世界和来自系统的全息图像构成.我们将这种空间成为混合世界(mixed world). shell包含了一个可以让你将全息图像和应用放置在世界中的开始菜单( ...

  8. HoloLens开发手记-硬件细节 Hardware Detail

    微软HoloLens是世界第一款完全无线缆的全息计算机.通过在新方式上赋予用户的全息体验,HoloLens重新定义了个人计算(Personal Computing).为了将3D全息图形固定到你周围的真 ...

  9. HoloLens开发手记-配置开发环境 Install the tools

    随着Build 2016开发者大会的结束,HoloLens开发包也正式开放下载.Hololens没有独立的SDK,开发特性被集成到最新的Visual Studio Update 2中.如果你没有Hol ...

最新文章

  1. JavaScript 初学者必看“箭头函数”
  2. jQuery拼接页面元素
  3. python教程:模块的作用与说明
  4. [转] 程序员面试题精选100题(35)-找出两个链表的第一个公共结点
  5. linux之xargs命令用途
  6. Haproxy+Nginx实现web负载均衡群集
  7. 支付宝“跑路”,一亿用户服务彻底关停!
  8. Ecshop源码阅读
  9. Canny算子中的非极大值抑制(Non-Maximum Suppression)分析
  10. 通过代码创建obj格式的三维模型
  11. Win7下如何让Numlock保持打开状态
  12. python中abs函数是什么意思_python中abs是什么意思
  13. 乐鑫esp8266学习rtos3.0笔记第3篇: 一篇文章带你搞掂存储技术 NVS 的认识和使用,如何利用NVS保存整型、字符串、数组以及结构体。(附带demo)
  14. java实现日期加一天
  15. 2021-9-25 MQTT 阿里云服务器 esp32 micropython物联 以及pythonPC端
  16. 微信小程序实现轮播图(超简单)
  17. MAC上写Verilog并编译仿真
  18. flutter在IOS上显示英文
  19. Python 爬虫 数据提取
  20. 华为机试(python):字符串1

热门文章

  1. jmeter性能测试--对MQTT服务做压力测试
  2. 2018 开学第一课
  3. 武汉新时标文化传媒有限公司短视频的类型
  4. unity 如何实现一个日志上报系统
  5. ORA-39325 ORA-39112
  6. 你懂SOLID原则吗?
  7. 边云协同,边缘云更出彩
  8. cf1677C. Tokitsukaze and Two Colorful Tapes(div1)
  9. scratch双语教师课件文档手册 1.初识scratch
  10. 收集的一些google搜索引擎技巧