查看: 409|回复: 2
打印 上一主题 下一主题

Arduino 技巧(一)如何避免Arduino在串口连接时Reset

[复制链接] qrcode

32

主题

38

帖子

115

积分

注册会员

Rank: 2

积分
115
楼主
跳转到指定楼层
发表于 2015-9-14 07:25 PM | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不知你有没有注意到过,Arduino下载程序是自动的,不像其它ISP软件,需要上电写入或按Reset键写入,秘密在于Arduino板上的这个小部件——电容。每当串口建立连接,与USB链接的芯片会发一个短的脉冲,相当于手动按了Reset键。系统从bootloader开始执行,如果此时有sketch上传,则执行ISP功能。

这个复位初看一下没什么问题,可如果在不能中断的控制系统中,硬件意外重启必须严格避免!

具体方法参考这里:Disabling Auto Reset,其实非常简单,就是给Reset管脚跟VCC串个电阻,电容不足以把点位拉低到Reset,就不会自动重启!

 

接下来做个试验:准备一个Arduino(Leonardo 除外)和一个嗡鸣器,以下几种皆可:
 
随便接到两个输出管脚上,比如7和4,7接+ 4接-。

写一小段代码,在setup()里面设置输出。

// the setup function runs once when you press reset or power the board

void setup()

{

    Serial.begin(9600);

    pinMode(13, OUTPUT);

    pinMode(4, OUTPUT);

    pinMode(7, OUTPUT);

    digitalWrite(4, LOW);

    digitalWrite(7, HIGH);

    delay(500);

    digitalWrite(7, LOW);

}

 

// the loop function runs over and over again forever

void loop()

{

    Serial.print(\'.\');

    digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)

    delay(200);              // wait for a second

    digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW

    delay(100);              // wait for a second

}

 

接下来,使用Arduino串口工具打开串口,你就发现每次打开串口的时候都会“滴”。。。

这个复位在实际应用中,尤其是需要跟计算机通信时要特别注意!



实测,重启在以下几种情况下发生:
1. 打开串口调试界面(有些串口工具不会reset,原因参考附录)
2. 在有外接电源的情况下,拔插USB线。
3. 如果USB线连在HUB上,拔插HUB上的其它USB设备也可能导致重启。
4. 重启电脑。



附录参考 http://playground.arduino.cc/Main/ArduinoReset

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

82

帖子

4

积分

新手上路

Rank: 1

积分
4
沙发
发表于 2015-9-15 09:28 AM | 只看该作者

不错  不错

回复 支持 反对

使用道具 举报

0

主题

88

帖子

16

积分

新手上路

Rank: 1

积分
16
板凳
发表于 2015-9-15 11:51 AM | 只看该作者
很好,楼主辛苦了~
回复 支持 反对

使用道具 举报

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

本版积分规则

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