arduino用看门狗失败,L灯狂闪
本帖最后由 tempchar 于 2015-10-29 21:53 编辑最近发现自己做的一块板不稳定,要隔几天reset一下,就学习了看门狗。
拿一片328p刷了pro mini和uno、nano,然后用mega2560当作isp下载这段程序测试看门狗功能。
测试时发现,饿死狗以后L灯(D13)狂闪,reset无效。
研究了下网上的几个解决方法。
1是bootloader太旧,看门狗有bug。对照了自己的IDE是1.64,hardware\arduino\avr\boards.txt里的bootloader都是optiboot,应该是最新版。
2是用编程器下载程序。我现在都是用IDE的“使用编程器上传”功能。
除了这两个问题都想不到其他出错的可能,大家帮忙看下要怎么办
#include <avr/wdt.h>
void setup() {
wdt_disable();
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, INPUT);
pinMode(10, INPUT);
for (int i = 0 ; i <= 10 ; i ++) {
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}
wdt_enable(WDTO_8S);
}
void loop() {
if (digitalRead(11) == LOW) {
delay(500);
}
else {
delay(200);
digitalWrite(12, HIGH);
delay(200);
digitalWrite(12, LOW);
wdt_reset() ;
}
}
------------------------------------------------分割线------------------------------------------------
放了好久最近又看了些文档才搞明白。
问题果然出在bootloader上,我之前都是用官方IDE里带的optiboot。
今天从github上下载了最新版本的bootloader,测试以后还就行了!
下载解压缩后放到系统盘Documents\Arduino\hardware\optiboot\avr目录下,把boards.txt改到适合arduino 1.6.4,增加2行
pro328o.upload.tool=arduino:avrdude
pro328o.bootloader.tool=arduino:avrdude
把pro328o.bootloader.file=optiboot_atmega328_pro_8MHz.hex改成pro328o.bootloader.file=optiboot/optiboot_atmega328_pro_8MHz.hex。
因为我用的是328p和内部8M时钟,再把pro328o.bootloader.low_fuses=0xff改成pro328o.bootloader.low_fuses=0xf2。
完整的配置如下:
pro328o.name= Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328
pro328o.upload.protocol=arduino
pro328o.upload.maximum_size=32256
pro328o.upload.speed=115200
pro328o.upload.tool=arduino:avrdude
pro328o.bootloader.tool=arduino:avrdude
pro328o.bootloader.low_fuses=0xf2
pro328o.bootloader.high_fuses=0xdc
pro328o.bootloader.extended_fuses=0x05
pro328o.bootloader.path=optiboot
pro328o.bootloader.file=optiboot/optiboot_atmega328_pro_8MHz.hex
pro328o.bootloader.unlock_bits=0x3F
pro328o.bootloader.lock_bits=0x0F
pro328o.build.mcu=atmega328p
pro328o.build.f_cpu=8000000L
pro328o.build.core=arduino:arduino
pro328o.build.variant=arduino:standard
烧录后刷个看门狗程序就成功了。 先把 loop 的內容移走後, 確認是否可以每 8 秒 閃 10次. 我测试过只有uno支持看门狗,其他的两个版本不行 Super169 发表于 2015-9-24 13:51 static/image/common/back.gif
先把 loop 的內容移走後, 確認是否可以每 8 秒 閃 10次.
失败了,loop里没代码,执行起来仍然是L灯狂闪 qpanda 发表于 2015-9-24 16:30 static/image/common/back.gif
我测试过只有uno支持看门狗,其他的两个版本不行
我拿328p刷uno,nano刷uno,测试了看门狗都不行,实在是想不出除了bootloader以外还有什么注意事项 qpanda 发表于 2015-9-24 16:30 static/image/common/back.gif
我测试过只有uno支持看门狗,其他的两个版本不行
请教下你是自己刷uno的吗?
直接用nano或者pro mini还是用328P刷?
用的IDE是什么版本?64位还是32位的? qpanda 发表于 2015-9-24 16:30 static/image/common/back.gif
我测试过只有uno支持看门狗,其他的两个版本不行
剛用 nano 試了, 開始後正常,LED 一秒一次的閃, 8S 後有重啟, 但重啟後 LED 快速瘋狂的閃過不停. 我只是用uno r3的板子测试过,没单独刷过 本帖最后由 mengfeng009 于 2015-9-25 16:44 编辑
看看芯片手册啦.
设置1秒看看, 时长和电压有一定关系
wdt_enable (WDTO_1S);// 1s watch dog
mengfeng009 发表于 2015-9-25 16:33 static/image/common/back.gif
看看芯片手册啦.
设置1秒看看, 时长和电压有一定关系
已经试过用5v 16M 的nano刷uno的bootloader,设置8秒也是不行
等下我再试试看设置1秒能不能重启成功
页:
[1]