极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 45416|回复: 9

arduino用看门狗失败,L灯狂闪

[复制链接]
发表于 2015-9-23 22:20:25 | 显示全部楼层 |阅读模式
本帖最后由 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=[Optiboot] 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


烧录后刷个看门狗程序就成功了。
回复

使用道具 举报

发表于 2015-9-24 13:51:13 | 显示全部楼层
先把 loop 的內容移走後, 確認是否可以每 8 秒 閃 10次.
回复 支持 反对

使用道具 举报

发表于 2015-9-24 16:30:23 | 显示全部楼层
我测试过只有uno支持看门狗,其他的两个版本不行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-24 19:07:42 | 显示全部楼层
Super169 发表于 2015-9-24 13:51
先把 loop 的內容移走後, 確認是否可以每 8 秒 閃 10次.

失败了,loop里没代码,执行起来仍然是L灯狂闪
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-24 19:15:12 | 显示全部楼层
qpanda 发表于 2015-9-24 16:30
我测试过只有uno支持看门狗,其他的两个版本不行

我拿328p刷uno,nano刷uno,测试了看门狗都不行,实在是想不出除了bootloader以外还有什么注意事项
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-24 19:29:22 | 显示全部楼层
qpanda 发表于 2015-9-24 16:30
我测试过只有uno支持看门狗,其他的两个版本不行

请教下你是自己刷uno的吗?
直接用nano或者pro mini还是用328P刷?
用的IDE是什么版本?64位还是32位的?
回复 支持 反对

使用道具 举报

发表于 2015-9-24 20:40:17 | 显示全部楼层
qpanda 发表于 2015-9-24 16:30
我测试过只有uno支持看门狗,其他的两个版本不行

剛用 nano 試了, 開始後正常,  LED 一秒一次的閃, 8S 後有重啟, 但重啟後 LED 快速瘋狂的閃過不停.
回复 支持 反对

使用道具 举报

发表于 2015-9-25 13:33:58 | 显示全部楼层
我只是用uno r3的板子测试过,没单独刷过
回复 支持 反对

使用道具 举报

发表于 2015-9-25 16:33:07 | 显示全部楼层
本帖最后由 mengfeng009 于 2015-9-25 16:44 编辑

看看芯片手册啦.

设置1秒看看, 时长和电压有一定关系

wdt_enable (WDTO_1S);  // 1s watch dog
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-25 17:27:29 | 显示全部楼层
mengfeng009 发表于 2015-9-25 16:33
看看芯片手册啦.

设置1秒看看, 时长和电压有一定关系

已经试过用5v 16M 的nano刷uno的bootloader,设置8秒也是不行
等下我再试试看设置1秒能不能重启成功
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-8 06:15 , Processed in 0.067109 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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