电子产品世界 » 论坛首页 » 嵌入式开发 » 单片机 » 跟着菜鸟一步一步走向单片机~(从Arduino到51再到Arm,我们一起成长,加


共10条 1/1 1 跳转至

跟着菜鸟一步一步走向单片机~(从Arduino到51再到Arm,我们一起成长,加油!!)

菜鸟
2015-03-22 04:39:18    评分

第一次发这种文,还是自我介绍下。我叫胡灿培,大一的孩子~比我大的叫我小皮就好(不过这里叫我皮哥的人应该也不少)。我自己接触单片机才几个月,算是新手+菜鸟,观点若有谬误,还请大家指正。


第一次就先讲讲我怎么接触单片机的吧,以及,在我的印象中单片机是什么。


肯定有不少同学从别人口中听到这个奇怪的词会有点莫名其妙,可能也有人会像我一样在百度淘宝上到处搜“单片机”、“开发板”之类的词(那时PCB板和芯片对我来说还是神奇的东西)。再后来,我和单片机的第一次亲密接触是我们的专业认知实验。虽然也就是老师给几个程序让我们传给单片机,看看灯亮不亮,模块工不工作。但看着LED闪烁的间隔随着键盘的敲击而改变,对我这种从未接触过这类小玩意的人来说确实是种不可思议的感觉。那块单片机就是带我走进这个世界的Arduino。(我个人喜欢叫它杜伊诺女神~)

然后买了板子,打印了一本书,过上了半个月只摸那一本书的生活~(我总喜欢这样描述我上学期的学习生活:我翘的微积分和线代比我上的还多)

那块板子就是公认门槛最低的Arduino,书也是很快上手的《Arduino从基础到实践》


如果现在问我单片机是什么?我还是无法解释清楚。在我心里,单片机就是一个黑箱子。大家中学时对电路里面的黑箱子都不陌生吧~单片机就是这样,给个电源,里面的程序(你当然看不到)就会控制 它周围的电路,表现出一定的电学特性。区别就是,单片机这个“黑箱子”是你设计的。而且,单片机之所以被称之为single chip,自然是因为把整个机器装进了一块芯片。

我们暂时不讨论CPU,总线,RAM,ROM这类复杂的概念。当我们需要去了解的时候,我们就已经有了足够理解它们的能力。


今天就扯到这吧,我在参加我们学校第一团队招新的通宵测试,要完成的全是纯软件的任务。。。做到2点的时候突然发现纯软件不适合我。就像彻悟一般,决定一心一意做嵌入式。那么,就从这个帖子开始吧!


下一次,我将跟大家分享单片机的基本操作和最浅显的原理




关键词: 菜鸟     单片机     Arduino     成长    

院士
2015-03-23 09:29:26    评分
2楼
写的不错,继续

专家
2015-03-28 08:42:29    评分
3楼
又顽皮了

菜鸟
2015-03-28 10:20:25    评分
4楼
...为了讲清楚驱动装不上去的解决办法,我果断把当初装了一晚上的驱动卸载了到现在还没装好,所以才一直没更新

菜鸟
2015-03-29 11:25:17    评分
5楼

赞一下


菜鸟
2015-03-30 22:08:52    评分
6楼

        这次是单片机的操作和基本原理~

        我自己是小白,主要也是带小白迈开第一步,所以----从最简单的开始吧,一开始是Arduino。

 

        假定有一块Arduino的板子。(用UNO吧,这是最普遍最典型的版本,我也将用这个来讲解。其他型号大同小异)

    

        首先下载个开发环境IDE(完全免费的哦),上官网去。链接http://arduino.cc/en/Main/Software(这里顺便说下,学Arduino最好的办法不是看各种书本,看单片机,看C语言。。。那没用,效率太低!最好的办法其实是看官网和IDE里面的例程)

        Arduino的官网是纯英文的,英语不好的同学(比如我)看起来会有点吃力。可是没办法啊,人家屌~~如果我自己开发一种单片机当然用中文做网站。改变这一情况的办法就是不断进步,只有我们领先了,世界才会注意到我们,我们的语言也将使用得更加普遍。(所以,为了我们的下一代,努力吧少年!)

        废话少说!看这个图,是点了上面链接之后进入的网页界面。英语不好也没关系,看我的红框。windows总认识吧,installer(安装包)认识吧,ZIP file(压缩文件)也认识吧。第一个就是Windows系统下的安装包,第二个是Windows下的压缩包(解压就可以直接运行,不用安装的)。第三个第四个我不了解Mac的系统,所以不认得。。。最后俩,32位和64位的Linux安装。

 

    选择适合自己系统的安装包下载安装之后(一般人用的是windows吧),就可以进入下一步了。打开IDE看看长啥样先。。。

        最左边的“文件”---->"示例“里面有大量例子,都配有英文说明。其实Arduino的语言不用过多注释,很容易理解的,所谓”最好的注释就是没有注释“。窃以为只有学会从官网上学习,才算是进入了学习的殿堂。回归正题~这儿也没有过多要说的,大家建立文件的时候好像只能以英文,数字和下划线作文件名,而且文件只有放在一个和它同名的文件夹内才能正常执行。

        再下面一排从左到右是”检验“(看代码有没有语法错误),”上传”(将程序写进单片机内部),”新建文件“,”打开“,”保存“。

 

        对IDE具体的操作等会儿再来看~我们先把Arduino的驱动装了吧

        很多情况下把板子连到电脑上过一会儿右下角就提示”设备安装成功“。但是~~总是有意外会来临。(比如说我换了Win7系统之后就花了一晚上才装好驱动)

 

        如果设备安装失败怎么办!(这里针对win7)

(为了做这个我还把自己电脑里的驱动卸载了。。。)        

桌面上右键”我的电脑“---->"属性”,打开后左边有个“设备管理器”,打开后显示所有连接到电脑的设备。这里有个“未知设备”,可能就是我们的Arduino右键之~“更新驱动程序软件”

点击“浏览计算机以查找驱动程序软件”,然后选择驱动路径。Arduino的驱动是在它的软件目录下,所以在IDE的安装路径下找到Drivers(比如说我是把IDE安装在D:Program files\Arduino下的),选择“包括子文件夹”,下一步就开始安装了。

但是~事情也不总是那么顺利(做这一行就得面对各种各样的意外并解决之~),系统提示“Windows已找到设备的驱动程序软件,但在试图安装它时出现错误”“系统找不到指定的文件”。

。。。首先去刚才那个Drivers下面看看,里面有个“Old _Arduino_Drivers”,这个压缩包里面存放的是各种Arduino之前的驱动程序,如果“找不到文件”,可能是因为更新的驱动和板子不兼容了,所以可以从这里找到。解压之~~~

重复刚才设备管理器中“更新设备程序软件”的操作,一般情况下这样就好了。

但是!

啥?还是找不到指定的文件???

我在QQ群里见过一个人,他也是驱动装到了这还装不上去。然后我脑子一抽,让他禁用驱动程序签名试试,结果还真的装上去了。。。我把禁用驱动程序签名的教程链接在这http://jingyan.baidu.com/article/3f16e003cb7d0f2590c10345.html

不好,我刚才卸载了的驱动还没装上,不能就这么完了~

 

继续搞,继续搞!

 

在我一个多星期每天查资料装驱动到一点多之后,今晚终于找到了正确的方法。

Windows的每个操作都会被记录在系统日志中。这些内容远比图形界面的提示详细得多。所以碰到问题去查系统日志确实是个不错的选择。C盘下的C:\Windows\inf\setupapi.dev.log这个文件记录的应该是安装驱动时的记录,可以用记事本打开。由于它是从上到下更新的,所以最近安装的驱动记录应该在最下面。从下面开始翻,翻到如图所示的地方就停下来,从分隔处往下看。(下面出现的各种Arduino的文件也算是提示)


往下看啊往下看。。。

直到我看到了这样的文字!!!!


复制到下面来看看:

Unable to load INF: 'C:\Windows\System32\DriverStore\FileRepository\mdmcpq.inf_amd64_neutral_fbc4a14a6a13d0c8\mdmcpq.inf'(00000003)

Error 3: The system cannot find the path specified.

Could not find include INF file "mdmcpq.inf". Error = 0x00000003

画横线的部分,这是啥?卧槽,这尼玛咋就unable to load了呢!果断复制路径C:\Windows\System32\DriverStore\FileRepository\mdmcpq.inf_amd64_neutral_fbc4a14a6a13d0c8,打开!然后windows的提示竟然是。。。木有此文件夹!木有这个文件夹当然不能加载里面的文件啦~~那我就找找看,我先打开C:\Windows\System32\DriverStore\FileRepository,然后找和mdmcpq.inf_amd64_neutral_fbc4a14a6a13d0c8相似的文件夹。果然找到俩~

你不是说找不到mdmcpq.inf'吗,那我就构造出你的路径!我把mdmcpq.inf_amd64_neutral_58dc586avf2f5改成mdmcpq.inf_amd64_neutral_fbc4a14a6a13d0c8,变成和系统日志里面一样的名字,然后安装驱动,哼哼~~立刻安装成功!

 

总结一下。。。我的驱动一直没装成功,是因为索引的目录找不到。那么我们就应该看看他要找啥,比如他要在盘子里拿个馒头,那我就在盘子里放个馒头~没盘子我就放个盘子~~(其实电脑好笨的说)

 

附上我看过觉得对安装驱动很有帮助的一些资料,感谢各位大大发帖为我们解决问题~~

http://www.51hei.com/arduino/3816.html

http://www.lab-z.com/win7ard/

http://www.dfrobot.com.cn/community/forum.php?mod=viewthread&tid=402&extra=

 


菜鸟
2015-03-30 22:10:23    评分
7楼
简直了,装个驱动搞这么久。。。我是否该加快更新进度了?

菜鸟
2015-04-01 17:54:49    评分
8楼

上次我们讨论了如何在驱动安装失败时解决问题。其实系统日志什么的对我来说也是略高端。。。不过我也受益不少。希望这些东西不会把初学者们吓跑,毕竟我觉得和这个相比,还是单片机写程序更简单。

那就进入正题咯~第一次点亮LED

首先电路。画张原理图在这(画得不像表打我。。。)

其次是介绍我们会用到的硬件:面包板,LED,电阻,杜邦线(公公)

面包板

这种小板子在淘宝上应该三四块钱就能买到。我没找到小板子,就从百度上盗了张图,然后画了几笔。面包板就这样,我画红线的地方就是电气上相连的孔(孔太多了,我只画了一部分,其余类推)。不过有一点很值得注意:这种面包板两侧的孔不一定是全部连在一起的。也就是说,上面那条横线中间有断开的部分,下面的也有。如果要使用的话拿导线把两边连在一起就好

LED

很便宜的~~LED有正负极之分,一般情况下引脚长的为正极。如果引脚断了还可以看灯珠的外形。灯珠不是规则的,仔细观察就会发现正极的那一侧很圆润,而负极的一侧有一个小小的平面。最准的应该是直接看里面:里面有两块金属,大的那一个就是负极。(我只见过最普通的几种二极管,不知道这个规律是不是普遍适用的)。然后附上各种LED的压降和电流~~

电阻

一个一分钱。。。电阻是为了不让LED烧坏,当然得根据LED的参数来选择。Arduino的高电平是5V,我做这个的时候用的是3mm白发蓝的LED,压降3.1-3.6V,我取3.3V;电流5-17.5mA,我取15mA。这样算的阻值

为了防止烧坏,我就拿个150欧的吧,算得电流10mA左右,嗯,也够了~


杜邦线

连接线,当然不用多解释~我买的一排4020cm长的,3块钱

 

准备好了东西就可以照着原理图连电路咯~连好电路就可以写程序了~

 

上次介绍了IDE的界面,一打开之后,中间它自己有介绍Arduino程序的结构,就是一个setup,一个loop,那么让我们用实例来分析它的结构吧

 

注意大小写哦~还有,所有符号必须在英文状态下输入!错了它就认不出来了

行,就这么简单!我来一句一句的解释

 

第一行意思就是用ledPin这几个字符来代表整数13,也就是,后面凡是出现ledPin的地方都当作13int是整型变量,最后面的分号是每个语句之后都必须加的。用ledPin代表13的作用是,以后需要修改的时候只用改这一处就行了,而不用到处去找13(说不定还会把不该改的改了)。这一行连起来就是

整型变量   ledPin   的值为13

 

第二行,setupArduino里面必备的函数,用来进行一些初始化的设置。Void是“空”的意思,表示这个函数运行之后不向函数外传递任何值。()中间是输入这个函数的数值,此处没有向setup输入任何值,因此圆括号内没有东西。函数除了名称和输入之外,还包含有需要执行的语句,在{}内写出。

 

第三行,pinModeledPinOUTPUT);  pinMode可以设置一个引脚是输出还是输入,所谓输出就是向外界提供电平,输入就是读取外界电平的变化。前面ledPin代表的是13,用在这里就是13号引脚(指的是板子上的13号)。这句话的意思就是

设置引脚状态   ledPin   为输出状态;

 

第五行,loop函数是Arduino中的主函数,多数工作都在loop中完成,其中void,(),{}等符号和setup中的一样,这是每个函数都有的。

 

第六行digitalWrite(ledPin,HIGH); 这句话digitalWrite自然就是数字写,用这个函数可以向外输出逻辑15V)和逻辑00V),用在这里是向13号引脚输出高电平。

数字电平输出   ledPin脚   为高电平;

 

至此,一个最简单的程序已经完成,可以烧录了

 

右键“我的电脑”,“属性”,“设备管理器”,查看端口。

显然Arduino连接在了COM6,然后进入IDE设置一下。“工具”,“板”,“Arduino UNO”,然后是“工具”,“端口”,“COM6”这样电脑和Arduino之间就建立了通讯

按下第一个按钮“编译”,OK,不报错,再按下第二个按钮“上传”将程序传到Arduino中。这里要提到,用下载器给pro mini的板烧录的时候需要冷启动一下,就是当下载器上的RXTX灯都闪烁的时候,按下pro mini上的按键,这样程序才能烧写成功。

看效果,棒棒哒!

UNO的板子上原来就有一个灯连在13脚上,为了方便检测板子是好是坏。那个灯也会随着我们的LED而亮


还没有结束哦~我们点一下IDE上面的“文件”,“示例”,“Basics”,“Blink”,会看到一堆东西吧

灰色的是注释,就是只让人看的部分,因为电脑在编译程序时会直接跳过注释。注释的方法有两种,一种是   /*注释内容*/   另一种是   //注释内容

前面一种可以跨行注释,对/**/中间的部分都注释;而后一种注释只对//这一行后面的部分有效

应该有写注释的习惯(虽然我一直不写),因为时间长了之后再去看代码就很难记得每句话的作用,这时候有了注释就可以帮助理解代码。

 

关于程序编译的部分呢,digitalWrite可以输出HIGH也可以输出LOW,前面的理解了就好说。delay函数嘛,顾名思义就是延时,保持前面的状态,延时多少毫秒。在这段代码中,前面一个delay是保持13脚为HIGH的状态1000ms,后面一个delay是保持13脚为LOW的状态1000ms。因此烧写之后就会看到LED亮一秒,灭一秒。

 

来总结一下吧,这次我们了解了面包板,LED的一些知识,可以写一个最简单的Arduino程序了。setup,loop,pinMode,digitalWrite,delay什么的。能控制IO口电平就是第一步,以后会很快的~


菜鸟
2016-07-26 20:54:11    评分
9楼
很不错的文章,楼主继续更新啊

菜鸟
2016-12-17 16:56:42    评分
10楼
楼主更新啊 这个很有用啊

共10条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]