Cosè Serial.begin (9600)?

So che questo serve per inizializzare qualcosa:

Serial.begin(9600); 

Ma voglio sai cosa significa veramente?

Commenti

Risposta

Serial.begin(9600) in realtà non” stampa nulla. Per questo “vuoi utilizzare Serial.print("Hello world!") per stampare il testo” Ciao mondo!” alla console seriale. Piuttosto inizializza la connessione seriale a 9600 bit al secondo.

Entrambi i lati della connessione seriale (cioè Arduino e il tuo computer) devono essere impostati per utilizzare la stessa velocità di connessione seriale per ottenere qualsiasi tipo di dati intelligibili. Se cè una mancata corrispondenza tra ciò che i due sistemi pensano sia la velocità, i dati saranno confusi.

9600 bit al secondo è limpostazione predefinita per Arduino ed è perfettamente adeguata per la maggior parte degli utenti, ma potresti cambiarlo ad altre velocità: Serial.begin(57600) imposterebbe Arduino per trasmettere a 57600 bit al secondo. Dovresti impostare qualunque software stai usando sul tuo computer (come il Monitor seriale dellIDE di Arduino) alla stessa velocità per vedere i dati inviati.

Commenti

  • Baud e BPS sono due cose diverse … non riesco ‘ a trovare il link che stavo cercando ora.
  • e se inserissi ” Seriale .begin (0); ” o ” Serial.begin (4000); ” . Voglio dire, voglio sapere qual è la differenza tra i numeri?
  • Serial.begin viene utilizzato per impostare la velocità di comunicazione, in bit al secondo. Un byte è uguale a 8 bit, ma le connessioni seriali inviano un bit di inizio e di fine per identificare linizio e la fine di un particolare byte al sistema ricevente. Pertanto, sono necessari 10 bit per inviare un carattere. Luso di Serial.begin(0) dice ad Arduino che dovrebbe comunicare con la seriale a 0 bit al secondo. Come ci si potrebbe aspettare, questo significa che Arduino non invierà mai alcun dato. Serial.begin(4000) farà in modo che Arduino invii dati a 4000 bit al secondo. Questo non è standard, ma per il resto va bene.
  • In breve: cambiando il numero cambia la velocità. Riducendo il numero (ad es. Serial.begin(300)) Arduino invierà i dati più lentamente. Aumentandolo, diciamo a 57600, i dati verranno inviati più velocemente. Sia il sistema di invio che il sistema di ricezione devono concordare la velocità da utilizzare: il programma seriale del tuo computer ‘, come la finestra di Arduino Serial Monitor, ti consentirà di impostare la velocità alla quale il computer riceverà i dati ma è possibile selezionare solo tra le velocità comuni: 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600 e 11520 bit / sec. Non puoi ‘ inserire altre velocità, ad esempio 4000. 9600 è generalmente buona.
  • Baud and BPS are two different things... can't find the link I was looking for now. – Qui ‘ s una spiegazione: Appendice C: ” baud ” e ” bps ”

Rispondi

Unimmagine vale 1000 parole, quindi dicono, (1024 parole se lavori con i computer) quindi posterò alcune immagini …

Ho impostato il mio Uno per inviare “Fab” a 9600 baud e ho acquisito i risultati su un analizzatore logico.

Comunicazioni seriali - 3 lettere

Le parti ombreggiate in rosso sono il periodo di” inattività “tra i byte.

Dal grafico sopra si noti che il La linea dati Tx (trasmissione) è normalmente alta (1) fino a quando non scende bassa per indicare linizio di un carattere (byte). Questo è il bit di inizio . Quindi gli 8 bit di dati (indicati da punti bianchi ) vengono visualizzati alla velocità di trasmissione (9600 campioni al secondo). Dopo di che la linea viene portata di nuovo in alto. Questo è il bit di stop (la parte rossa). Quindi vediamo la parte iniziale per il personaggio successivo e così via. La parte “stop” può essere indefinitamente lunga, tuttavia deve essere lunga almeno un bit.


Maggiori dettagli per il primo carattere (la lettera “F” o 0x46 o 0b01000110) possono essere visto qui:

Comunicazioni seriali - un singolo byte

  • A – nessun dato (Tx è alto)

  • B – Il “bit di inizio”. La riga viene abbassata per indicare al destinatario che un carattere (byte) sta iniziando a essere inviato. Il ricevitore attende unora e mezza prima di campionare la linea.

  • C – Arriva il primo carattere (la lettera “F” o 0x46 o 0b01000110). Non esiste un bit di clock in quanto tale, i dati in ingresso vengono semplicemente campionati alla velocità di trasmissione (trasmissione). A differenza della comunicazione SPI, i dati arrivano per primi al bit meno significativo (nel caso in cui non si inviino 8 bit per byte). Quindi vediamo 01100010 (anziché 01000110).

  • D – Il bit di stop. Questo è sempre alto, per garantire che possiamo distinguere tra la fine di questo byte e linizio di quello successivo. Poiché il bit di inizio è uno zero e il bit di arresto è uno, cè sempre una chiara transizione da un byte al successivo.

  • E – Il bit di inizio per il carattere successivo.


Puoi vedere dallacquisizione dellanalizzatore logico che T1 - T2 è 0,1041667 ms, e come accade cioè 1/9600:

1 / 9600 = 0.00010416666 seconds 

Quindi la velocità di 9600 ti dà il numero di bit al secondo e linverso è l intervallo di tempo tra i bit .


Altre considerazioni

  • Le comunicazioni seriali non sono auto-sincronizzate (a differenza di SPI o I2C e altri) quindi sia il mittente che il destinatario devono concordare una frequenza di clock.

  • Il clock rate non è esatto su Arduino, perché lhardware deve dividere il clock di sistema per ottenere un clock seriale, e la divisione non è sempre esatta. Cè quasi sempre un errore, limporto è indicato nella scheda tecnica (cifre indicate per un orologio di sistema a 16 MHz, come su Uno):

    Errore di velocità di trasmissione seriale

  • Puoi variare il numero di bit di dati, non è necessario inviare 8 di loro, infatti puoi inviare da 5 a 9 bit.

  • Può opzionalmente esserci un bit di parità inviato dopo i bit di dati.

    • Se specifichi la parità “dispari”, il bit di parità è impostato in modo tale che il numero totale di 1 bit sia dispari.
    • Se specifichi la parità “pari” , il bit di parità è impostato in modo tale che il numero totale di 1 bit sia pari.
    • Se non specifichi alcuna parità, il bit di parità viene omesso.

    Questo può aiutare il destinatario a rilevare se i dati sono arrivati correttamente o meno.

  • Il bit di parità viene inviato prima del bit di stop.

  • Nel caso di 9 bit di dati (come utilizzato nel protocollo SeaTalk) il bit di parità viene riutilizzato come 9 bit di dati . Quindi non puoi avere sia 9 bit di dati che un bit di parità.

  • Puoi anche avere due bit di stop. Questo fondamentalmente allunga solo il tempo tra i byte. giorni “in modo che unapparecchiatura elettromeccanica lenta potesse elaborare il byte precedente (ad es. per stamparlo).


Possibile danneggiamento

Se inizi ad ascoltare i dati seriali nel mezzo di uno stream, è del tutto possibile che un bit 0 nel mezzo dello stream venga interpretato come un bit di inizio, e quindi il ricevitore interpreterà tutto ciò che segue in modo errato.

Lunico vero modo per risolverlo è avere di tanto in tanto un divario abbastanza ampio (ad es. 10 bit) che ciò non possa accadere.


Logica invertita

I bit mostrati qui (livello logico) non sono invertiti. Cioè, 1 bit è HIGH e 0 bit è LOW. Se si dispone di apparecchiature RS232 che probabilmente invieranno qualcosa come -12 V per 1 bit e +12 V per 0 bit Questo è invertito perché uno è meno th uno a zero, dal punto di vista della tensione.

Se si dispone di tali dispositivi, è necessario eseguire la conversione della tensione e linversione logica. Chip come MAX232 faranno entrambe le cose per te. Possono anche fornire i -12 V necessari per alimentare tali apparecchiature generandole internamente con laiuto di alcuni condensatori forniti dallutente.


Regola empirica della velocità

Poiché, con un bit di inizio, 8 bit di dati e un bit di stop abbiamo un totale di 10 bit, come regola pratica rapida, puoi calcolare il numero di byte puoi trasmettere in un secondo dividendo il bit rate per 10.

Es. A 9600 BPS puoi inviare 960 byte al secondo.


Codice da riprodurre:

 void setup() { Serial.begin(9600); Serial.print("Fab"); } void loop () { }  

Risposta

; TLDR; Inizializza la porta di comunicazione seriale e imposta la velocità di trasmissione. Il dispositivo con cui stai comunicando (o Arduino IDE Serial Monitor) deve essere impostato su un baud rate corrispondente. Una volta inizializzata la porta puoi iniziare a inviare o ricevere caratteri. Riferimento seriale Arduino

Commenti

  • Non sminuire o mancare di rispetto @ Nick- Leccellente copertura di Gammon ‘ di questo argomento.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *