关于用ATMEGA8-16PU制作最小Arduino的一个发现(外接电源)
本帖最后由 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通信。等回去测试一下看看行不行。 值得记录下! 经常用8的 还没发现有这个问题呢 本帖最后由 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导致的启动延迟。 刚才换328P试了一下,结果是一样的。 本帖最后由 Simon 于 2013-11-27 01:37 编辑
isilcala 发表于 2013-11-26 22:52 static/image/common/back.gif
刚才换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 好像确实有这个问题,以前用mega8做了个便携的超声波测距,每次启动的时候都会延时很久,那时候一直没想明白什么情况 进一步搜索,很多人用ATmega168也碰到同样问题。有个解决方法是在RX跟GND间并一个103电容,这样既解决启动问题,又不影响TTL通信。等回去测试一下看看行不行。 Simon 发表于 2013-11-27 01:17 static/image/common/back.gif
谢谢测试!
我用的是1.0.5板自带的对应Arduino NG or older w/ ATmega8的Bootloader,如果不在pin2上 ...
当然是通过TTL刷入的。
不过我用的是optiboot的bootloader。会不会跟这个也有关系。因为一直用的optiboot,玩下来没遇到过这个问题。楼主也可以试试看换个bootloader是否能解决问题。 Simon 发表于 2013-11-27 01:17 static/image/common/back.gif
谢谢测试!
我用的是1.0.5板自带的对应Arduino NG or older w/ ATmega8的Bootloader,如果不在pin2上 ...
话说1.0.5自带的UNO的bootloader就是optiboot的,其他的都还不是。楼主328是不是用的UNO的bootloader? 我的最小系统也没遇到啊 留个记号,:victory: isilcala 发表于 2013-11-27 13:29 static/image/common/back.gif
话说1.0.5自带的UNO的bootloader就是optiboot的,其他的都还不是。楼主328是不是用的UNO的bootloader?
用的都是Arduino IDE官方版本自带的bootloader,328是没问题的。反正这个问题没有遇到就没有问题,遇到了可以找这个帖子就是了。国外似乎挺多人碰到同样问题的,据说是元器件干扰或者芯片内部干扰,没有一个定论。 Simon 发表于 2013-11-27 21:20 static/image/common/back.gif
用的都是Arduino IDE官方版本自带的bootloader,328是没问题的。反正这个问题没有遇到就没有问题,遇到了 ...
只是讨论问题本身而已。
有时能解决一个问题的所获,比问题本身更大嘛~
虽然偶暂时没遇到这个问题,也是好奇,所以另想了一个可能的方向而已。若有兴趣可以继续琢磨,若无则当偶没说罢~ isilcala 发表于 2013-11-27 21:38 static/image/common/back.gif
只是讨论问题本身而已。
有时能解决一个问题的所获,比问题本身更大嘛~
嗯,不是不想找出原因,是实在没那个本事,只能留给高手了。看别人的贴,很多人并不是自己制作的最小系统,用的是Arduino官方当时的板子。 做了十多个8-16和8A的最小系统,从未发生过你的现象,你刷optiboot那个bootloader试试
页:
[1]
2