Por que iniciar o monitor serial reinicia o esboço?

31

Se eu enviar um esboço que envie dados seriais, imediatamente vejo os LEDs TX / RX piscarem quando o esboço for enviado. Se eu iniciar o monitor serial, o esboço aparecerá para reiniciar.

Um esboço mínimo que mostra esse comportamento:

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

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

Testado com várias placas e versões Mac e Windows do IDE.

Exemplo de saída - ele volta para "Configuração" quando abro o monitor serial:

Reiniciar

Por que é isso?

Cybergibbons
fonte
5
Eu nunca vi um esboço que use serial não fazer isso, então literalmente qualquer esboço.
Cybergibbons
Eu tenho um problema separado. O leostick do Arduino (e outros) não é mais definido automaticamente. Como eu o renoco?
CMDragonkai #

Respostas:

33

O Arduino usa os sinais RTS (Request To Send) (e acho que DTR (Data Terminal Ready) ) para redefinir automaticamente. Se você obtiver um terminal serial que permita alterar as configurações de controle de fluxo, poderá alterar essa funcionalidade.

O terminal do Arduino não oferece muitas opções e esse é o padrão. Outros permitem que você configure muito mais. Definir o controle de fluxo como nenhum permitirá que você se conecte / desconecte da série sem redefinir sua placa. é bastante útil para depuração quando você deseja apenas conectar o conector e ver a saída sem precisar iniciar o esboço novamente.

Outra maneira de desativar a redefinição automática é colocar um resistor pull up no pino de redefinição.

Desativando a redefinição automática na conexão serial

sachleen
fonte
2
O Arduino Unos pode ser fixado com um capacitor de 10 µF em RESET e GND. Ele trabalha para a instalação Eu usei-o para, tão longe ...
scruss
1
Tentei usar o PuTTY , conectando à porta COM em que o Arduino aparece (COM16 no meu caso). Ele ainda está redefinindo o Arduino se "Controle de fluxo" em Conexão / Serial estiver definido como "Nenhum" (as outras opções são "XON / XOFF", "RTS / CTS" e "DSR / DTR"). Eu usei a versão 0.60 do PuTTY.
Peter Mortensen
-cont: Foi testado em um Arduino Uno R3.
Peter Mortensen
O Duemilanove e o Uno têm um rastreamento chamado "EN RESET" que controla esse comportamento. Raspe esse rastreamento para desativar a redefinição automática. Solde um fio nas almofadas para reativá-lo.
Mhopeng 14/05
12

A verdade está sempre nas folhas de dados, nos esquemas e no código:

O Arduino UNO realmente usa a /DTRlinha para acionar uma redefinição, como você pode ver na seguinte folha de dados:

redefinir esquema

zmo
fonte
O link para sua imagem esquemática está quebrado.
Linhartr22
1
Obrigado, eu consertei! Na verdade, eu pensei que o SO estava armazenando imagens em cache, mas parece que não está, por isso vou me certificar de mantê-las sempre ativadas.
Zmo
Mais uma vez, está quebrado. Talvez você possa adicioná-lo como uma imagem usando a opção imgur do StackExchange? Basta clicar na opção 'imagem' na barra de ferramentas do editor.
feito, obrigado pela dica (Na verdade, eu tinha o meu próprio site para baixo por 10 dias porque eu estava fazendo alguma manutenção, que era apenas temporário)
Zmo
1
Sim, mas o que realmente acontece? É devido à maneira como o ATmega16U2 é programado (afirmando PD7 baixo quando uma porta COM é aberta por um programa?)? Ou seguindo algum padrão para DTR?). E qual é a implicação de C5? - redefinirá o processador principal para ambas as transições (baixo para alto e alto para baixo)? Qual é a largura aproximada do pulso (em microssegundos) no pino de redefinição do processador principal e como ela é?
Peter Mortensen
1

Isso corrige o problema

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)
Julian Lewis
fonte