Was ist Serial.begin (9600)?

Ich weiß, dass dies etwas initialisieren soll:

Serial.begin(9600); 

Aber ich möchte Weißt du was es wirklich bedeutet?

Kommentare

Antwort

Serial.begin(9600) druckt eigentlich nichts. Dafür möchten Sie“ Serial.print("Hello world!") verwenden, um den Text zu drucken. “ Hallo Welt!“ an die serielle Konsole. Vielmehr wird die serielle Verbindung mit 9600 Bit pro Sekunde initialisiert.

Beide Seiten der seriellen Verbindung (dh der Arduino und Ihr Computer) müssen so eingestellt sein, dass sie die serielle Verbindung mit derselben Geschwindigkeit verwenden, um eine beliebige Art zu erhalten von verständlichen Daten. Wenn die Geschwindigkeit der beiden Systeme nicht übereinstimmt, werden die Daten verstümmelt.

9600 Bit pro Sekunde ist die Standardeinstellung für das Arduino und für die Mehrheit der Benutzer vollkommen ausreichend Sie könnten es auf andere Geschwindigkeiten ändern: Serial.begin(57600) würde den Arduino so einstellen, dass er mit 57600 Bit pro Sekunde sendet. Sie müssten die Software einstellen, die Sie auf Ihrem Computer verwenden (wie die Der serielle Monitor von Arduino IDE) mit derselben Geschwindigkeit, um die gesendeten Daten zu sehen.

Kommentare

  • Baud und BPS sind zwei verschiedene Dinge … kann ‚ den Link, nach dem ich jetzt gesucht habe, nicht finden.
  • Was ist, wenn ich “ Serial setze? .begin (0); “ oder “ Serial.begin (4000); “ . Ich möchte wissen, was der Unterschied zwischen den Zahlen ist.
  • Serial.begin wird verwendet, um die Kommunikationsgeschwindigkeit in Bit pro Sekunde festzulegen. Ein Byte entspricht 8 Bit, aber serielle Verbindungen senden ein Start- und Stoppbit, um den Start und das Ende eines bestimmten Bytes an das empfangende System zu identifizieren. Somit werden 10 Bits benötigt, um ein Zeichen zu senden. Die Verwendung von Serial.begin(0) teilt dem Arduino mit, dass es mit 0 Bit pro Sekunde mit der seriellen Schnittstelle kommunizieren soll. Wie zu erwarten, bedeutet dies, dass der Arduino niemals Daten sendet. Serial.begin(4000) bewirkt, dass das Arduino Daten mit 4000 Bit pro Sekunde sendet. Dies ist nicht Standard, aber ansonsten in Ordnung.
  • Kurz gesagt: Durch Ändern der Nummer wird die Geschwindigkeit geändert. Wenn die Zahl kleiner gemacht wird (z. B. Serial.begin(300)), sendet der Arduino Daten langsamer. Wenn Sie es beispielsweise auf 57600 erhöhen, werden Daten schneller gesendet. Sowohl das sendende als auch das empfangende System müssen sich auf die zu verwendende Geschwindigkeit einigen: Mit dem seriellen Programm Ihres Computers ‚ wie dem Fenster „Arduino Serial Monitor“ können Sie die Geschwindigkeit einstellen, mit der Ihr Computer empfängt Daten, Sie können jedoch nur aus den gängigen Geschwindigkeiten auswählen: 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600 und 11520 Bit / Sek. Sie können ‚ keine anderen Geschwindigkeiten wie 4000 eingeben. 9600 ist normalerweise gut.
  • Baud and BPS are two different things... can't find the link I was looking for now. – Hier ‚ s eine Erklärung: Anhang C: “ baud “ vs. “ bps “

Antwort

Ein Bild sagt mehr als 1000 Wörter (1024 Wörter, wenn Sie mit Computern arbeiten), also werde ich einige Bilder posten …

Ich habe mein Uno so eingerichtet, dass „Fab“ mit 9600 Baud gesendet wird, und die Ergebnisse auf einem Logikanalysator erfasst.

Serielle Kommunikation - 3 Buchstaben

Die rot schattierten Teile sind die“ Leerlauf „-Periode zwischen Bytes.

Aus der obigen Grafik geht hervor, dass die Die Tx-Datenleitung (Senden) ist normalerweise hoch (1), bis sie niedrig abfällt, um den Beginn eines Zeichens (Bytes) anzuzeigen. Dies ist das Startbit . Dann die 8 Datenbits (angezeigt durch weiße Punkte) ) erscheinen mit der Baudrate (9600 Proben pro Sekunde). Danach wird die Linie wieder hoch gebracht. Dies ist das Stoppbit (der rote Teil). Dann sehen wir das Startbit für das nächste Zeichen und so weiter. Der „Stopp“ -Teil kann unbegrenzt lang sein, muss jedoch mindestens eine Bitlänge haben.


Weitere Details für das erste Zeichen (der Buchstabe „F“ oder 0x46 oder 0b01000110) können sein hier zu sehen:

Serielle Kommunikation - ein einzelnes Byte

  • A – keine Daten (Tx ist hoch)

  • B – Das „Startbit“. Die Zeile wird niedrig genommen, um dem Empfänger mitzuteilen, dass ein Zeichen (Byte) zu senden beginnt. Der Empfänger wartet anderthalb Uhrzeiten, bevor er die Leitung abtastet.

  • C – Das erste Zeichen kommt an (der Buchstabe „F“ oder 0x46 oder 0b01000110). Es gibt kein Taktbit als solches, die eingehenden Daten werden einfach mit der Baudrate (Übertragungsrate) abgetastet. Im Gegensatz zur SPI-Kommunikation kommen die Daten zuerst mit dem niedrigstwertigen Bit an (falls Sie nicht 8 Bits pro Byte senden). Wir sehen also 01100010 (anstatt 01000110).

  • D – Das Stoppbit. Dies ist immer hoch, um sicherzustellen, dass wir zwischen dem Ende dieses Bytes und dem Beginn des nächsten Bytes unterscheiden können. Da das Startbit eine Null und das Stoppbit eine Eins ist, gibt es immer einen klaren Übergang von einem Byte zum nächsten.

  • E – Das Startbit für das nächstes Zeichen.


Aus der Erfassung des Logikanalysators geht hervor, dass T1 - T2 0,1041667 ms beträgt und dies geschieht das ist 1/9600:

1 / 9600 = 0.00010416666 seconds 

Die Rate von 9600 gibt Ihnen also die Anzahl der Bits pro Sekunde und umgekehrt ist das Zeitintervall zwischen den Bits .


Andere Überlegungen

  • Serielle Kommunikation ist nicht selbstgetaktet (im Gegensatz zu SPI oder I2C und anderen), daher müssen sich Sender und Empfänger auf eine Taktrate einigen.

  • Die Taktrate ist auf dem Arduino nicht genau, da die Hardware die Systemuhr herunterteilen muss, um eine serielle Uhr zu erhalten, und die Teilung nicht immer genau ist. Es liegt fast immer ein Fehler vor, der Betrag ist im Datenblatt angegeben (Angaben für einen 16-MHz-Systemtakt, z. B. beim Uno):

    Fehler bei der seriellen Baudrate

  • Sie können die Anzahl der Datenbits variieren, die Sie nicht senden müssen In 8 von ihnen können Sie tatsächlich 5 bis 9 Bits senden.

  • Optional kann nach den Datenbits ein Paritätsbit gesendet werden p>

    • Wenn Sie „ungerade“ Parität angeben, wird das Paritätsbit so gesetzt, dass die Gesamtzahl der 1-Bits ungerade ist.
    • Wenn Sie „gerade“ Parität angeben wird das Paritätsbit so gesetzt, dass die Gesamtzahl der 1-Bits gerade ist.
    • Wenn Sie keine Parität angeben, wird das Paritätsbit weggelassen.

    Dies kann dem Empfänger helfen, zu erkennen, ob die Daten korrekt angekommen sind oder nicht.

  • Das Paritätsbit wird vor dem Stoppbit gesendet.

  • Bei 9 Datenbits (wie im SeaTalk-Protokoll verwendet) wird das Paritätsbit als 9. Datenbit neu verwendet . Daher können Sie nicht sowohl 9 Datenbits als auch ein Paritätsbit haben.

  • Sie können auch zwei Stoppbits haben. Dies verlängert im Grunde nur die Zeit zwischen Bytes Tage „war dies so, dass langsame elektromechanische Geräte das vorherige Byte verarbeiten konnten (z. B. um es zu drucken).


Mögliche Beschädigung

Wenn Wenn Sie serielle Daten in der Mitte eines Streams abhören, ist es durchaus möglich, dass ein 0-Bit in der Mitte des Streams als Startbit interpretiert wird und der Empfänger danach alles falsch interpretiert.

Der einzige wirkliche Weg, dies zu beheben, besteht darin, von Zeit zu Zeit eine ausreichend große Lücke (z. B. 10 Bit lang) zu haben, damit dies nicht passieren kann.


Invertierte Logik

Die hier gezeigten Bits (Logikpegel) werden nicht invertiert. Das heißt, ein 1-Bit ist HIGH und ein 0-Bit ist LOW. Wenn Sie RS232-Geräte haben, wird wahrscheinlich etwas wie -12 gesendet V für ein 1-Bit und +12 V für ein 0-Bit. Dies wird invertiert, weil eine Eins kleiner als th ist Eine Null, spannungsmäßig.

Wenn Sie solche Geräte haben, müssen Sie eine Spannungsumwandlung und eine logische Inversion durchführen. Chips wie der MAX232 erledigen beides für Sie. Sie können auch die -12 V liefern, die zum Ansteuern solcher Geräte erforderlich sind, indem sie diese mithilfe einiger vom Benutzer bereitgestellter Kondensatoren intern erzeugen.


Faustregel

Da wir mit einem Startbit, 8 Datenbits und einem Stoppbit insgesamt 10 Bits haben, können Sie als schnelle Faustregel die Anzahl der Bytes berechnen Sie können in einer Sekunde senden, indem Sie die Bitrate durch 10 teilen.

ZB. Bei 9600 BPS können Sie 960 Byte pro Sekunde senden.


Zu reproduzierender Code:

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

Antwort

; TLDR; Es initialisiert den seriellen Kommunikationsanschluss und legt die Baudrate fest. Das Gerät, mit dem Sie kommunizieren (oder Arduino IDE Serial Monitor), muss auf eine passende Baudrate eingestellt sein. Sobald Sie den Port initialisiert haben, können Sie mit dem Senden oder Empfangen von Zeichen beginnen. Arduino-Serienreferenz

Kommentare

  • Nicht zu verringern oder zu respektieren @ Nick- Gammon ‚ bietet eine hervorragende Berichterstattung zu diesem Thema.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.