Szeregowe dane pokazują się dziwnie

12

Mam prosty szkic, który drukuje „Hello World” do serialu, ale zamiast tego dostaję bełkot.

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

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

Dlaczego nie wypisuje „Hello World”, jak mówi kod?

sachleen
źródło
Czy sprawdziłeś, czy inicjalizacja portu szeregowego jest prawidłowa i zgodna z terminalem szeregowym komputera? Setup () powinien mieć coś takiego jak Serial.begin (9600);
Rajendra
@Rajendra ten wiersz znajduje się w podanym przeze mnie przykładzie kodu. Poza tym tak naprawdę nie mam problemu. Jest to powszechny problem dla początkujących i odpowiedziałem na pytanie poniżej.
sachleen

Odpowiedzi:

8

Płyta i terminal prawdopodobnie nie używają tej samej prędkości transmisji. Sprawdź prawy dolny róg terminala szeregowego Arduino i upewnij się, że jest ustawiony na 9600.

Dane szeregowe

Komunikacja szeregowa polega na wysyłaniu całego strumienia danych po jednym bicie. Jest to w przeciwieństwie do standardowego portu równoległego, który wysyła jeden bajt na raz. Oba urządzenia muszą wiedzieć, z jaką prędkością wysyłane są dane. Ponadto oba urządzenia muszą działać z tą samą prędkością. Nazywa się to szybkością transmisji.

Szybkość transmisji

Baud tak naprawdę oznacza tylko liczbę impulsów na sekundę. W kontekście komunikacji szeregowej oznacza to, ile bitów jest przesyłanych na sekundę. Jedną z najczęstszych wartości jest 9600, ale są też inne, które są współczynnikami lub wielokrotnościami 9600. Nie ma to jednak znaczenia, o ile oba urządzenia działają z tą samą prędkością.

Jeśli wysyłam Ci wiadomości szybciej niż je otrzymujesz, tracisz dane. Jeśli wysyłam ci wiadomości wolniej niż je otrzymujesz, masz bzdury pomieszane z tym, co ci wysłałem.

Dane, parzystość, bity stopu

Jeśli spojrzysz na dokumentację begin(), zobaczysz, że może ona przyjąć dwa parametry:

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

Mamy nadzieję, że rozumiesz teraz szybkość, to są bity na sekundę, z którymi Arduino będzie się komunikować.

Drugi parametr, configpozwala skonfigurować kilka innych rzeczy na temat szeregowej transmisji danych. Są to bity Data, Parzystość i Stop. Zobaczysz na stronie to wartości takie jak 5N1, 6N1iSERIAL_8N1 (the default)

Pierwsza liczba reprezentuje liczbę bitów danych. Drugi znak mówi ci, jaki jest rodzaj bitu parzystości. Edla parzystości parzystej, Oparzystej nieparzystej lub Nbez parzystości. Trzecia liczba mówi, ile bitów stopu.

Tak naprawdę, przy 8N1 mamy 10 bitów wysyłanych na każde 8 bitów „twoich” danych. 1 bit startowy, 8 bitów danych i 1 bit stopu.

W każdym razie obie strony muszą uzgodnić te informacje, a także prędkość. Terminal szeregowy Arduino nie daje możliwości zmiany tych ustawień, ale robią to inni, więc musisz upewnić się, że wszystkie ustawienia konfiguracji są takie same.

Więcej informacji na wiki: Asynchroniczna komunikacja szeregowa

sachleen
źródło
0

Odpowiedź Sachleen (powyżej) mówi:

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.

Jeśli liczba ta wynosi 9600 i nadal występują zniekształcone dane, sprawdź dane wyjściowe uzyskane podczas przesyłania kodu. Powinien brzmieć:

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

Ta dolna linia (tego, co opublikowałem) mówi, jaka jest domyślna prędkość transmisji twojego urządzenia. Dla mnie zmieniłem Serial.begin(9600);-> Serial.begin(57600);i sprawdziłem, czy prawy dolny róg mojego terminalu szeregowego Arduino wskazuje 57600.

Po uruchomieniu tego, i to zadziałało, byłem w stanie przełączyć się z powrotem na 9600 i uzyskać nienaruszone dane. Arduino wydaje się być wybrednym ...

nieznany z nazwiska
źródło
0

Spędziłem pół godziny próbując rozwiązać ten problem, a to mój Arduino Pro Mini miał 3,3 V i wybrałem 5 V w Arduino IDE (na PC). Druk seryjny nigdy tak nie działa, nawet przy takiej samej szybkości transmisji.

Wybierz odpowiednią płytkę w Arduino IDE.

Aby było jasne, należy wybrać prawidłowy procesor (napięcie / prędkość zegara) w zakładce Narzędzia .

tmaster
źródło