极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20028|回复: 15

关于用ATMEGA8-16PU制作最小Arduino的一个发现(外接电源)

[复制链接]
发表于 2013-11-26 19:48:33 | 显示全部楼层 |阅读模式
本帖最后由 Simon 于 2013-11-27 12:29 编辑

不知道大家有没有碰到过这样的问题,用ATMEGA8-16PU搭建的最小Arduino系统,在用USB2TTL连接供电的时候是能够正常执行程序的,但是如果不连接USB2TTL传送数据,只用外部电源供电,则最小系统不会执行程序,除了RESET的时候PIN19上连接的灯闪几下表示MCU没有问题。

如果MCU用的是ATMEGA328就没有这个问题,而同样的ATMEGA8-16PU,如果用编程器用ICSP写入程序,也可以正常执行,不受影响,但后面就不能再通过USB2TTL来传送程序了(必须重新用编程器写Bootloader)。

百思不得其解。也不知道在搜索引擎上用什么关键字找类似问题。今天一个偶然的搜索,发现了这个问题的解决办法。

就是,如果不接USB2TTL的时候,要用一只10K的电阻把Pin2下拉到GND,否则Arduino的Bootloader会一直等待USB2TTL的连接信号,因而不会执行程序。

就这么简单啊……………………………………………………

原文链接后附,在页面里面搜索:If not using a serial connection就能找到解决方案了,但为何ATMEGA328就不需要这么做呢?是MCU能力不同,所以对于ATMEGA8的Bootloader不做过多的检查处理?不管怎么说,总之这个问题算是解决了。

http://playground.arduino.cc/Learning/AtmegaStandalone

进一步搜索,很多人用ATmega168也碰到同样问题。有个解决方法是在RX跟GND间并一个103电容,这样既解决启动问题,又不影响TTL通信。等回去测试一下看看行不行。
回复

使用道具 举报

发表于 2013-11-26 21:10:26 | 显示全部楼层
值得记录下! 经常用8的   还没发现有这个问题呢
回复 支持 反对

使用道具 举报

发表于 2013-11-26 22:44:14 | 显示全部楼层
本帖最后由 isilcala 于 2013-11-26 22:51 编辑

特意去测试了一下,ATMEGA8-16PU,自己焊的一块DIY板,刷入Blink:

接TTL时,刚插上,L灯会快闪多次,然后开始Blink。
如果按Reset, L灯会快闪3下,然后开始Blink。

接外部电源,刚插上,L灯没有快闪,直接开始了Blink。
如果按Reset, L灯会快闪3下,然后开始Blink。和接TTL时一样。

未能重现楼主的问题。


关于ICSP写程序,有一个概念需要注意:

ICSP是标准的擦写芯片的方法,最后刷鞋的程序一定会覆盖之前刷写入的内容。

而Arduino的Bootloader本质上也是一个程序。只是这个程序的功能是实现通过TTL“自己刷写自己”,后续通过TTL刷入的程序被安排到了另一个起始地址,以避免覆盖Bootloader。

如果通过ICSP直接刷入程序,则覆盖了bootloader,这就是为什么芯片失去了通过TTL刷程序的功能。但这样依旧有一个好处,一个是释放出了bootloader自身占用的空间;另一个是移除了bootloader导致的启动延迟。
回复 支持 反对

使用道具 举报

发表于 2013-11-26 22:52:00 | 显示全部楼层
刚才换328P试了一下,结果是一样的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-27 01:17:22 | 显示全部楼层
本帖最后由 Simon 于 2013-11-27 01:37 编辑
isilcala 发表于 2013-11-26 22:52
刚才换328P试了一下,结果是一样的。


谢谢测试!

我用的是1.0.5板自带的对应Arduino NG or older w/ ATmega8的Bootloader,如果不在pin2上接一个10K电阻下拉到GND,光连接外接电源,不连接TTL,确实无法启动,只要一接通这只下拉电阻,等个8秒左右,程序启动(也是用Blink来测试)。绝对不会像你所说的,马上开始执行程序。请确认你所指的刷入Blink程序是通过TTL写入而不是ICSP写入。

Upload by programmer跟TTL刷程序的区别当然是知道的,用ICSP刷出来的程序因为不需要Arduino的Bootloader,所以倒是启动非常快,也不会卡在这个pin2下拉电阻的问题上,确实是外部电源一给电就马上运行程序了。

写下来,只是给有碰到相似情况的人借鉴。没有碰到这个问题的,完全可以忽略。

讨论在这里,似乎2006年的应该就是ATmega8的Arduino吧。
http://forum.arduino.cc/index.php/topic,24642.0.html
回复 支持 反对

使用道具 举报

发表于 2013-11-27 08:34:09 | 显示全部楼层
好像确实有这个问题,以前用mega8做了个便携的超声波测距,每次启动的时候都会延时很久,那时候一直没想明白什么情况
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-27 12:29:38 来自手机 | 显示全部楼层
进一步搜索,很多人用ATmega168也碰到同样问题。有个解决方法是在RX跟GND间并一个103电容,这样既解决启动问题,又不影响TTL通信。等回去测试一下看看行不行。
回复 支持 反对

使用道具 举报

发表于 2013-11-27 13:25:47 | 显示全部楼层
Simon 发表于 2013-11-27 01:17
谢谢测试!

我用的是1.0.5板自带的对应Arduino NG or older w/ ATmega8的Bootloader,如果不在pin2上 ...

当然是通过TTL刷入的。

不过我用的是optiboot的bootloader。会不会跟这个也有关系。因为一直用的optiboot,玩下来没遇到过这个问题。楼主也可以试试看换个bootloader是否能解决问题。
回复 支持 反对

使用道具 举报

发表于 2013-11-27 13:29:57 | 显示全部楼层
Simon 发表于 2013-11-27 01:17
谢谢测试!

我用的是1.0.5板自带的对应Arduino NG or older w/ ATmega8的Bootloader,如果不在pin2上 ...

话说1.0.5自带的UNO的bootloader就是optiboot的,其他的都还不是。楼主328是不是用的UNO的bootloader?
回复 支持 反对

使用道具 举报

发表于 2013-11-27 13:33:15 | 显示全部楼层
我的最小系统  也没遇到啊  
回复 支持 反对

使用道具 举报

发表于 2013-11-27 20:52:18 | 显示全部楼层
留个记号,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-27 21:20:26 | 显示全部楼层
isilcala 发表于 2013-11-27 13:29
话说1.0.5自带的UNO的bootloader就是optiboot的,其他的都还不是。楼主328是不是用的UNO的bootloader?

用的都是Arduino IDE官方版本自带的bootloader,328是没问题的。反正这个问题没有遇到就没有问题,遇到了可以找这个帖子就是了。国外似乎挺多人碰到同样问题的,据说是元器件干扰或者芯片内部干扰,没有一个定论。
回复 支持 反对

使用道具 举报

发表于 2013-11-27 21:38:02 | 显示全部楼层
Simon 发表于 2013-11-27 21:20
用的都是Arduino IDE官方版本自带的bootloader,328是没问题的。反正这个问题没有遇到就没有问题,遇到了 ...

只是讨论问题本身而已。

有时能解决一个问题的所获,比问题本身更大嘛~

虽然偶暂时没遇到这个问题,也是好奇,所以另想了一个可能的方向而已。若有兴趣可以继续琢磨,若无则当偶没说罢~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-27 22:07:46 | 显示全部楼层
isilcala 发表于 2013-11-27 21:38
只是讨论问题本身而已。

有时能解决一个问题的所获,比问题本身更大嘛~

嗯,不是不想找出原因,是实在没那个本事,只能留给高手了。看别人的贴,很多人并不是自己制作的最小系统,用的是Arduino官方当时的板子。
回复 支持 反对

使用道具 举报

发表于 2013-11-28 01:30:17 | 显示全部楼层
做了十多个8-16和8A的最小系统,从未发生过你的现象,你刷optiboot那个bootloader试试
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-10 00:03 , Processed in 0.037916 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表