Perché l'avvio del monitor seriale riavvia lo schizzo?


31

Se carico uno schizzo che invia dati seriali, vedo immediatamente i LED TX / RX lampeggiare una volta caricato lo schizzo. Se quindi avvio il monitor seriale, lo schizzo sembra ricominciare.

Uno schizzo minimo nudo che mostra questo comportamento:

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

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

Testato con diverse schede e versioni Mac e Windows dell'IDE.

Esempio di output - ritorna su "Setup" quando apro il monitor seriale:

Ricomincia

Perchè è questo?


5
Non ho mai visto uno schizzo che utilizza seriale non farlo, quindi letteralmente qualsiasi schizzo.
Cybergibbons,



Ho un problema separato. Il leostick di Arduino (e altri) non si autoresetano più. Come lo rinnovo?
CMCDragonkai,

Risposte:


33

Arduino utilizza i segnali RTS (Request To Send) (e penso che DTR (Data Terminal Ready) ) per il reset automatico. Se si ottiene un terminale seriale che consente di modificare le impostazioni di controllo del flusso, è possibile modificare questa funzionalità.

Il terminale Arduino non offre molte opzioni e questo è il valore predefinito. Altri ti permetteranno di configurare molto di più. Impostando il controllo di flusso su nessuno, sarà possibile connettersi / disconnettersi dalla seriale senza ripristinare la scheda. è abbastanza utile per il debug quando vuoi essere in grado di collegare semplicemente il connettore e vedere l'output senza dover ricominciare lo schizzo.

Un altro modo per disabilitare il ripristino automatico è quello di mettere un resistore pull up sul pin di ripristino.

Disabilitazione del ripristino automatico su connessione seriale


2
Arduino Unos può essere riparato con un condensatore da 10 µF tra RESET e GND. Funziona con l'unica installazione per cui l'ho usato, finora ...
scruss

1
Ho provato a usare PuTTY , collegandomi alla porta COM in cui appare Arduino (COM16 nel mio caso). Sta ancora ripristinando Arduino se "Controllo flusso" in Connessione / Seriale è impostato su "Nessuno" (le altre opzioni sono "XON / XOFF", "RTS / CTS" e "DSR / DTR"). Ho usato la versione 0.60 di PuTTY.
Peter Mortensen,

-cont: è stato provato su un Arduino Uno R3.
Peter Mortensen,

Duemilanove e Uno hanno una traccia etichettata "EN RESET" che controlla questo comportamento. Annullare quella traccia per disabilitare il ripristino automatico. Saldare un filo attraverso i pad per riattivarlo.
Mhopeng,

12

La verità è sempre nei fogli dati, negli schemi e nel codice:

Arduino UNO utilizza effettivamente la /DTRlinea per attivare un ripristino, come puoi vedere nel seguente foglio dati:

ripristinare lo schema


Il collegamento all'immagine schematica è interrotto.
Linhartr22,

1
Grazie, l'ho risolto! In realtà pensavo che SO stesse memorizzando nella cache immagini, ma sembra che non lo sia, quindi mi assicurerò di tenerlo sempre acceso.
zmo,

Ancora una volta, è rotto. Forse puoi aggiungerlo come immagine usando l'opzione imgur di StackExchange? Fai clic sull'opzione "immagine" nella barra degli strumenti dell'editor.

fatto, grazie per il suggerimento (in realtà ho avuto il mio sito inattivo per 10 giorni perché stavo facendo un po 'di manutenzione, che era solo temporanea)
zmo

1
Sì, ma cosa succede realmente? È dovuto al modo in cui ATmega16U2 è programmato (affermando che PD7 è basso quando una porta COM viene aperta da un programma?)? O seguendo alcuni standard per DTR?). E qual è l'implicazione di C5? - ripristinerà il processore principale per entrambe le transizioni (da basso ad alto e da alto a basso)? Qual è l'ampiezza approssimativa dell'impulso (in microsecondi) sul pin di reset del processore principale e che aspetto ha?
Peter Mortensen,

1

Questo risolve il 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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.