原创 ATmega16单片机的温控程序(一)

2012-6-4 14:54 1414 12 12 分类: MCU/ 嵌入式

很久没做单片机,最近帮个朋友做了个很小的功能。朋友要求很简单:1、ATmega16控制DS18B20读取温度数据;2、当温度高于某个值的时候,单片机控制散热风扇开启。其实这是个很简单的工程,我记得本科的单片机课程实验里就有DS18B20的内容,但通过这么个小工程,自己发现,不管是多么小的一个工程项目,从设计之初到最后调试通过,其中的步骤都是必不可少的。下面就是个人的一些感受。

首先要说的是,电路板是朋友已经做好的,并且跟我说在别的地方已经被使用了,这在最开始就给我带来了个定时bug。在此我想说个题外话,实验室最近”流行“开一句话叫”你确定?“”我确定。“什么意思呢,就是说,每当你从别人手上接手一个事情一个东西的时候,必须确定对方给的信息是否是确定的,换句话说也是要求对方给予保证,这样如果真出了什么问题,责任也就可以明显地划分开来了。(我很后悔当时没有明确问清楚……以至于出了很多的问题)

问题一:电源混乱。

很多人可能不太在意VCC和VDD的区别,认为这两者都是电源,只是个人习惯表示不一样而已。说实话,很多地方这两者也都不被大家所区分,当两者单独出现的时候可以说不会出什么问题。但当两者一起出现的时候,问题就来了,因为两者的意义完全不一样。

VCC:指的是接入电路的电压;

VDD:指的是接入器件的电压。也就是说,在同一个板子上,VCC是大于等于VDD的。而朋友给我的板子却刚好相反,将两者混乱了。而我看到原理图之后,一眼发现了两者的不规则,确定了下VCC接5V,VDD接12V。一接电,啪,传感器烧了,发现DS18B20竟然接了VDD上。(后来询问才知道,因为原理图设计的时候就是在别处摘的,所以接的是VDD。很显然,人家接VDD是正确的,可是用在这个板子的VDD就错了啊!更气愤的是,刚说完没问题,一上电就烧了!)原理图如下:

 

未命名.jpg

 

问题二:时钟不准确。

上电是第一步,确保各个芯片器件电源正常后,便要检查时钟了。如上图,这个设计采用的是内部时钟,ATmega16内部有1M/2M/4M/8M四种可选频率,需要通过配置编程来设置。随后按照DS18B20的时序写c代码了,时序篇留待下篇细说。在这想起老师说的一句话:没有一步登天的程序。确实,再小的工程再简单的程序都不可能一次就成了。果不其然,程序烧进去,屁反应没有。于是就开始查,首先看看时钟,做了个频率1M的方波输出,结果示波器测得果然不对,足足差了几个数量级。第一反应就是,之前传感器电压过高,串回电流太大导致了芯片烧坏。在这有个个人经验,单片机这个东西很奇怪,如果不是电源接错了,而且I/O口由于电流串回导致芯片烧坏的,并不会所有功能都坏掉,而是会出现部分功能丢失错乱。

总之,个人的经验总结,不管工程有多么的简单,做一个数字电路工程的步骤方法大多可分四步:

第一:电源检查;

第二:时钟检查;

第三:程序设计电路调试。

其中不能有丝毫的想当然,因为可能之前的一个小小的疏忽都可能导致后期的大隐患。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
12
关闭 站长推荐上一条 /3 下一条