Che cos'è Serial.begin (9600)?


Risposte:


22

Serial.begin(9600)in realtà non stampa nulla. Per quello che vorresti usare 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 (ovvero Arduino e il computer) devono essere impostati in modo da utilizzare la stessa connessione seriale per ottenere qualsiasi tipo di dati intelligibili. Se c'è una discrepanza tra ciò che i due sistemi pensano sia la velocità, i dati verranno confusi.

9600 bit al secondo è il valore predefinito per Arduino ed è perfettamente adeguato per la maggior parte degli utenti, ma è possibile modificarlo ad altre velocità: Serial.begin(57600)impostare Arduino in modo che trasmetta a 57600 bit al secondo. Dovresti impostare qualsiasi software che stai utilizzando sul tuo computer (come il monitor seriale IDE di Arduino) alla stessa velocità per vedere i dati inviati.


2
Baud e BPS sono due cose diverse ... non riesco a trovare il link che stavo cercando ora.
Pinguino anonimo,

e se inserissi "Serial.begin (0);" o "Serial.begin (4000);". Voglio dire, voglio sapere qual è la differenza tra i numeri?
shajib0o

3
Serial.begin viene utilizzato per impostare la velocità di comunicazione, in bit al secondo. Un byte equivale a 8 bit, ma le connessioni seriali inviano un bit di inizio e di fine per identificare l'inizio e la fine di un determinato byte al sistema ricevente. Pertanto, sono necessari 10 bit per inviare un carattere. Usando Serial.begin(0)dice ad Arduino che dovrebbe comunicare con seriale a 0 bit al secondo. Come prevedibile, ciò 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.
Eypete,

2
In breve: cambiando il numero si cambia la velocità. Riducendo il numero (ad es. Serial.begin(300)), Arduino invia i dati più lentamente. Aumentandolo, diciamo a 57600, invierà i dati 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 Arduino Serial Monitor, ti permetterà di impostare la velocità alla quale il tuo computer riceverà i dati ma puoi selezionare solo dal comune velocità: 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600 e 11520 bit / sec. Non è possibile inserire altre velocità, come 4000. 9600 di solito è buono.
Eypete,

Baud and BPS are two different things... can't find the link I was looking for now.- Ecco una spiegazione: Appendice C: "baud" vs. "bps"
Nick Gammon

21

Un'immagine 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 di logica.

Comunicazioni seriali - 3 lettere

Le parti ombreggiate in rosso rappresentano il periodo di "inattività" tra i byte.

Dalla nota grafica sopra riportata che la linea di dati Tx (trasmissione) è normalmente alta (1) fino a quando non scende per indicare l'inizio di un carattere (byte). Questo è il bit iniziale . Quindi gli 8 bit di dati (indicati da punti bianchi) vengono visualizzati alla velocità di trasmissione (9600 campioni al secondo). Dopodiché la linea viene nuovamente elevata. Questo è il bit di stop (la parte rossa). Quindi vediamo il bit 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) sono disponibili qui:

Comunicazioni seriali - un singolo byte

  • A - nessun dato (Tx è alto)

  • B - Il "bit iniziale". La linea è abbassata per dire al destinatario che un carattere (byte) sta iniziando a essere inviato. Il ricevitore attende un'ora e mezza prima di campionare la linea.

  • C - Il primo carattere arriva (la lettera "F" o 0x46 o 0b01000110). Non esiste un bit di clock in quanto tale, i dati in entrata vengono semplicemente campionati alla velocità di trasmissione (trasmissione). Contrariamente alla comunicazione SPI, i dati arrivano prima i bit meno significativi (nel caso in cui non si inviano 8 bit per byte). Quindi vediamo 01100010 (anziché 01000110).

  • D - Il bit di stop. Questo è sempre elevato, per garantire che possiamo distinguere tra la fine di questo byte e l'inizio 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 iniziale per il personaggio successivo.


T1 - T2Dall'acquisizione dell'analizzatore logico è possibile visualizzare 0,1041667 ms e, in realtà, 1/9600:

1 / 9600 = 0.00010416666 seconds

Pertanto, la frequenza di 9600 fornisce il numero di bit al secondo e l'inverso è l' intervallo di tempo tra i bit .


Altre considerazioni

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

  • La frequenza di clock non è esatta su Arduino, perché l'hardware deve dividere l'orologio di sistema per ottenere un clock seriale e la divisione non è sempre esatta. C'è quasi sempre un errore, la quantità è indicata nel foglio dati (cifre riportate per un clock di sistema a 16 MHz, come su Uno):

    Errore di velocità di trasmissione seriale

  • Puoi variare il numero di bit di dati, non devi inviarne 8, infatti puoi inviare da 5 a 9 bit.

  • Opzionalmente può essere inviato un bit di parità dopo i bit di dati.

    • Se si specifica la parità "dispari", il bit di parità viene impostato in modo tale che il numero totale di 1 bit sia dispari.
    • Se si specifica la parità "pari", il bit di parità viene impostato in modo tale che il numero totale di 1 bit sia pari.
    • Se non si specifica la 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 9o bit di dati. Pertanto non è possibile avere sia 9 bit di dati sia un bit di parità.

  • Puoi anche avere due bit di stop. Questo in pratica allunga il tempo tra i byte. Ai "vecchi tempi" ciò avveniva in modo che le apparecchiature elettromeccaniche lente potessero elaborare il byte precedente (ad es. Per stamparlo).


Possibile corruzione

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

L'unico vero modo per recuperare da questo è di avere un divario abbastanza grande, di volta in volta, (ad es. Lungo 10 bit) che non può accadere.


Logica invertita

I bit mostrati qui (livello logico) non sono invertiti. Cioè, un 1 bit è ALTO e uno 0 bit è BASSO. 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 è inferiore a zero, dal punto di vista della tensione.

Se si dispone di tali dispositivi, è necessario eseguire la conversione di tensione e l'inversione logica. Chip come il MAX232 faranno entrambi per voi. Possono anche fornire i -12 V necessari per pilotare tale apparecchiatura generandola internamente con l'aiuto di alcuni condensatori forniti dall'utente.


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 empirica rapida, è possibile calcolare il numero di byte che è possibile trasmettere in un secondo dividendo il bit rate per 10 .

Per esempio. A 9600 BPS è possibile inviare 960 byte al secondo.


Codice da riprodurre:

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

void loop ()
  {
  }

1

; 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 una velocità di trasmissione corrispondente. Dopo aver inizializzato la porta, puoi iniziare a inviare o ricevere caratteri. Riferimento seriale Arduino


Non sminuire o mancare di rispetto all'eccellente copertura di Nick-Gammon su questo argomento.
linhartr22,
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.