Serielle Daten, die seltsam auftauchen


12

Ich habe eine einfache Skizze, die "Hello World" zur Serie druckt, aber ich bekomme stattdessen eine Menge Kauderwelsch.

void setup() {
    Serial.begin(9600);
}

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

Warum wird "Hello World" nicht wie im Code angegeben gedruckt?


Haben Sie überprüft, ob die Initialisierung der seriellen Schnittstelle korrekt ist und mit dem seriellen PC-Terminal übereinstimmt? Die setup () sollte so etwas wie Serial.begin (9600) haben;
Rajendra

@ Rajendra diese Zeile ist in dem Codebeispiel, das ich gegeben habe. Außerdem habe ich das Problem eigentlich nicht. Es ist ein häufiges Problem für Anfänger und ich habe die folgende Frage beantwortet.
Sachleen

Antworten:


8

Die Karte und das Terminal verwenden wahrscheinlich nicht die gleiche Baudrate. Überprüfen Sie die untere rechte Ecke des Arduino Serial Terminal und stellen Sie sicher, dass es auf 9600 eingestellt ist.

Serielle Daten

Serielle Kommunikation funktioniert, indem der gesamte Datenstrom bitweise gesendet wird. Dies steht im Gegensatz zum standardmäßigen parallelen Port, der jeweils ein Byte sendet. Beide Geräte müssen wissen, mit welcher Geschwindigkeit die Daten gesendet werden. Außerdem müssen beide Geräte mit der gleichen Geschwindigkeit arbeiten. Dies nennt man die Baudrate.

Baudrate

Baud bedeutet eigentlich nur Impulse pro Sekunde. Bei der seriellen Kommunikation bedeutet dies, wie viele Bits pro Sekunde übertragen werden. Einer der gebräuchlichsten Werte ist 9600, aber es gibt auch andere gebräuchliche Werte, die Faktoren oder Vielfache von 9600 sind. Es spielt jedoch keine Rolle, solange beide Geräte mit der gleichen Geschwindigkeit arbeiten.

Wenn ich Ihnen Nachrichten schneller sende, als Sie sie erhalten, gehen Daten verloren. Wenn ich Ihnen Nachrichten langsamer sende, als Sie sie empfangen, wird der Unsinn mit dem vermengt, was ich Ihnen gesendet habe.

Daten, Parität, Stoppbits

Wenn Sie sich die Dokumentation begin()ansehen, werden Sie feststellen, dass zwei Parameter verwendet werden können:

Serial.begin(speed)
Serial.begin(speed, config)

Hoffentlich verstehen Sie die Geschwindigkeit jetzt, es sind die Bits pro Sekunde, mit denen der Arduino kommunizieren wird.

Mit dem zweiten Parameter configkönnen Sie einige andere Dinge zur seriellen Datenübertragung konfigurieren. Dies sind die Daten-, Paritäts- und Stoppbits. Sie werden auf der Seite sehen , es hat Werte wie 5N1, 6N1undSERIAL_8N1 (the default)

Die erste Zahl gibt an, wie viele Datenbits vorhanden sind. Das zweite Zeichen gibt an, welche Art von Paritätsbit vorhanden ist. Efür gerade Parität, Ofür ungerade Parität oder Nfür keine Parität. Die dritte Zahl gibt an, wie viele Stoppbits vorhanden sind.

Mit 8N1 werden also wirklich 10 Bits für jeweils 8 Bits "Ihrer" Daten gesendet. 1 Startbit, 8 Datenbits und 1 Stoppbit.

Auf jeden Fall müssen sich beide Seiten auf diese Informationen sowie die Geschwindigkeit einigen. Das serielle Arduino-Terminal bietet Ihnen nicht die Möglichkeit, diese Einstellungen zu ändern, andere jedoch, sodass Sie sicherstellen müssen, dass alle diese Konfigurationseinstellungen identisch sind.

Weitere Informationen im Wiki: Asynchrone serielle Kommunikation


0

Sachleens Antwort (oben) lautet:

The board and terminal are probably not using the same baud rate. 
Check the bottom right corner of the Arduino Serial Terminal
and make sure it is set to 9600.

Wenn diese Zahl 9600 ist und Sie immer noch verstümmelte Daten erhalten, überprüfen Sie die Ausgabe, die Sie beim Hochladen des Codes erhalten haben. Es sollte ungefähr so ​​lauten:

Sketch uses 2754 bytes (8%) of program storage space. Maximum is 30720 bytes.
Global variables use 195 bytes (9%) of dynamic memory, leaving 1853 bytes for local variables. Maximum is 2048 bytes.
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM5 -b57600 -D -Uflash:w:C:\Users\Owner\AppData\Local\Temp\arduino_build_457862/LockCode.ino.hex:i 

avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : COM5
         Using Programmer              : arduino
         Overriding Baud Rate          : 57600

In der unteren Zeile (von dem, was ich gepostet habe) ist die Standard-Baudrate Ihres Geräts angegeben. Für mich habe ich geändert Serial.begin(9600);-> Serial.begin(57600);und überprüft, ob in der unteren rechten Ecke meines Arduino Serial Terminal 57600 steht.

Nachdem ich dies ausgeführt hatte und es funktionierte, konnte ich auf 9600 zurückschalten und nicht verstümmelte Daten abrufen. Arduino scheint pingelig zu sein ...


0

Ich habe eine halbe Stunde lang versucht, das zu lösen, und es war mein Arduino Pro Mini mit 3,3 V, und ich hatte 5 V in der Arduino IDE (auf dem PC) ausgewählt. Der serielle Druck funktioniert auch bei gleicher Baudrate nie so.

Wählen Sie die richtige Karte in der Arduino IDE.

Um dies zu verdeutlichen, muss der richtige Prozessor (Spannung / Taktrate) auf der Registerkarte Tools ausgewählt werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.