Różnica między rzeczywistą wartością binarną a wartością oscyloskopu


14

Próbowałem zobaczyć znak ASCII „A” z oscyloskopem, ale rzeczywista wartość binarna i wartości oscyloskopu są różne, dlaczego tak jest? ASCII „A” Wartość binarna - 01000001

Oscyloskop wyświetla ten wykres:

Ascii A.

Ascii A.

Używam Arduino Uno do wysyłania wartości ASCII za pomocą kodu:

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

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

Odpowiedzi:


35

Oto jak odczytujesz przebieg oscyloskopu. Poświęciłem czas na edycję obrazu fali i opatrzenie go adnotacjami, aby pokazać, który bit jest który. Mikrokontroler wysyła 10 bitów na znak; START, który zawsze wynosi 0, 8 bitów danych, i STOP, który zawsze wynosi 1. Linia również spoczywa na 1, więc pierwszy opadający zbocze START ostrzega odbiorcę, że nadchodzi bajt. Bity wysyłane są najpierw LSB, więc jeśli chcesz „spojrzeć” na nie arytmetycznie, musisz je odwrócić poziomo, aby miały jakikolwiek sens. Szerokość każdego bitu zależy od szybkości transmisji, a nadajnik i odbiornik muszą wiedzieć, jaka jest szybkość transmisji.

Na poniższym obrazku widać, że wysyła on trzy znaki: znak ASCII „A”, znak powrotu karetki i znak wiersza.

wprowadź opis zdjęcia tutaj


Jeśli jest to komunikacja szeregowa, wave daje tak. dobrze? Co to są CR i LF? Jakie inne dane można uzyskać, np. CR lub LF?
user38701,

1
CR to Carriage Return, LF to Line Feed. Razem tworzą one nową linię, np. Kursor przechodzi na początek następnego wiersza. Są częścią standardu „ASCII” („American Standard Code for Information Interchange”), google „wykresu ASCII” lub czegoś takiego.
PkP

@ user38701: CRLF dzieje się po naciśnięciu klawisza Enter. Technicznie rzecz biorąc, CR ma być klawiszem powrotu, a LF ma być klawiszem Enter, ale konsola szeregowa interpretuje klawisz Enter jako CRLF (lub czasami tylko LF). W większości języków programowania CR to „\ r”, a LF to „\ n”, ale niektóre kompilatory / języki generują CRLF dla „\ n”
slebetman 24.09.15

1
Zwrot karetki jest prosty. Użył printlnpolecenia, które oznacza wydrukowanie ciągu, a także „\ r \ n”. Tak więc trzy postacie
ps95

1
warto zauważyć, że zakończenia linii są specyficzne dla systemu. CRLF to przede wszystkim zakończenie linii w systemie Windows i Arduino. Jeśli powtórzysz ten sam test, używając terminala na Linuksie jako źródła „A”, zobaczysz tylko LF.
Nicolas Holthaus,

13

Jeśli spojrzysz na dokumentację Arduino println () , zobaczysz, że dołącza ona znak powrotu karetki i znak końca linii. W systemie dziesiętnym otrzymamy 65 (A), 13 (CR) i 10 (LF), co w binarnym tłumaczeniu oznacza:

01000001 00001101 00001010

Asynchroniczne dane szeregowe wysyłane są najpierw LSB, dzięki czemu stają się:

10000010 10110000 01010000

Twój sygnał jest bezczynny, więc bit startowy będzie wynosił 0, a bit stopowy będzie równy 1, więc dodając go do każdego bajtu, otrzymujesz:

0100000101 0101100001 0010100001

Trudno jest ustalić dokładny czas z twojego diagramu, ale wydaje się, że przynajmniej z grubsza się zgadza i powinien dać ci wyobrażenie, skąd pochodzą niektóre dodatkowe bity i dlaczego są ponownie zamawiane. Link do Wikipedii udostępniony przez Kvegaoro zawiera wiele dobrych informacji na temat asynchronicznych danych szeregowych.


1

Jeśli w strumieniu, który pokazuje, że jest szereg asynchroniczny , oscyloskop pokaże odpowiedni bit początkowy, bit (y) stopu (ów) i bity parzystości. Weź również pod uwagę, czy twój sygnał jest odwrócony, czy nie, a pogoda to Najpierw znaczący bit lub leas znaczący pierwszy. Jeśli dodasz więcej szczegółów na temat strumienia szeregowego, który reprezentowałeś na zdjęciu, możemy dać ci bardziej szczegółową odpowiedź, w przeciwnym razie jest to tylko wykształcone przypuszczenie

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.