Почему запуск последовательного монитора перезапускает эскиз?

31

Если я загружаю любой эскиз, который посылает последовательные данные, я сразу же вижу, как светодиоды TX / RX мигают после загрузки эскиза. Если я затем запусту последовательный монитор, появится эскиз для перезапуска.

Минимальный набросок, демонстрирующий это поведение:

void setup()
{
    Serial.begin(9600);
    Serial.println("Setup");
}

void loop()
{
  Serial.println("Loop");
  delay(1000);
}

Протестировано с несколькими платами и версиями IDE для Mac и Windows.

Пример вывода - он возвращается к «Установке», когда я открываю последовательный монитор:

Перезапуск

Почему это?

Cybergibbons
источник
5
Я никогда не видел набросок, использующий серийные номера, не делай этого, поэтому буквально ни одного наброска.
Cybergibbons
У меня есть отдельная проблема. Arduino leostick (и другие) больше не сбрасывается автоматически. Как я могу сдать его в аренду?
CMCDragonkai

Ответы:

33

Arduino использует сигналы RTS (Request To Send) (и я думаю, что DTR (Data Terminal Ready) )) для автоматического сброса. Если вы получаете последовательный терминал, который позволяет вам изменять настройки управления потоком, вы можете изменить эту функцию.

Терминал Arduino не дает вам много вариантов, и это по умолчанию. Другие позволят вам настроить гораздо больше. Установка управления потоком на ноль позволит вам подключаться / отключаться от последовательного порта без сброса платы. это очень полезно для отладки, когда вы хотите иметь возможность просто подключить соединитель и увидеть результат без необходимости начинать набросок заново.

Еще один способ отключить автоматический сброс - это установить нагрузочный резистор на контакт сброса.

Отключение автоматического сброса при последовательном соединении

sachleen
источник
2
Arduino Unos можно закрепить конденсатором 10 мкФ через RESET и GND. Это работает для той установки, для которой я его использовал, пока…
scruss
1
Я попытался использовать PuTTY , подключившись к COM-порту, на котором появляется Arduino (COM16 в моем случае). Он все еще сбрасывает Arduino, если «Управление потоком» в Соединении / Последовательном соединении установлено на «Нет» (другие опции - «XON / XOFF», «RTS / CTS» и «DSR / DTR»). Я использовал версию 0.60 PuTTY.
Питер Мортенсен
-конт: это было опробовано на Arduino Uno R3.
Питер Мортенсен
У Duemilanove и Uno есть след с меткой «EN RESET», который контролирует это поведение. Сотрите эту трассировку, чтобы отключить автоматический сброс. Припой проволокой через колодки, чтобы снова включить его.
Мопенг
12

Истина всегда в таблицах данных, схемах и коде:

Arduino UNO фактически использует /DTRлинию для запуска сброса, как вы можете видеть на следующей таблице:

сбросить схему

ZMO
источник
Ссылка на ваше схематическое изображение не работает.
linhartr22
1
Спасибо, я это исправил! Я действительно думал, что SO кэширует изображения, но похоже, что это не так, поэтому я буду следить за тем, чтобы они всегда были включены.
zmo
Опять это сломано. Возможно, вы можете добавить его в качестве изображения с помощью опции imgur в StackExchange? Просто выберите опцию «изображение» на панели инструментов редактора.
сделано, спасибо за подсказку (у меня фактически был свой собственный сайт в течение 10 дней, потому что я выполнял некоторую поддержку, которая была просто временной)
zmo
1
Да, но что на самом деле происходит? Это из-за того, как ATmega16U2 запрограммирован (утверждая низкий уровень PD7, когда программа открывает COM-порт?)? Или следуя некоторому стандарту для DTR?). И в чем смысл С5? - сбросит ли он основной процессор для обоих переходов (от низкого к высокому и от высокого к низкому)? Какова приблизительная ширина импульса (в микросекундах) на выводе сброса основного процессора и как он выглядит?
Питер Мортенсен
1

Это решает проблему

import os
import sys
import termios
import fcntl

        self.fd = sys.stdin.fileno()

        # Stop resetting the arduino on serial connect

        self.newattr = termios.tcgetattr(self.fd)
        self.newattr[2] = self.newattr[2] & ~termios.HUPCL
        termios.tcsetattr(self.fd, termios.TCSANOW, self.newattr)
Джулиан Льюис
источник