Різниця між реальним бінарним значенням і значенням осцилографа


14

Я спробував побачити символ ASCII "A" за допомогою осцилографа, але реальне бінарне значення та значення осцилоскопа різні, чому це так? Двійкове значення ASCII "A" - 01000001

Осцилоскоп відображає цей графік:

Ascii A

Ascii A

Я використовую Arduino Uno для надсилання значення ASCII за допомогою коду:

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

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

Відповіді:


35

Ось як ви читаєте форму хвилі осцилографа. Я взяв час, щоб відредагувати вашу картину сигналу та анотувати її, щоб показати, який біт є. Мікроконтролер посилає 10 біт на символ; START, який завжди становить 0, 8 біт даних і STOP, який завжди є 1. Рядок також спирається на 1, тому перший спадний край START попереджає одержувач про те, що байт надходить. Біти надсилаються спочатку LSB, тож якщо ви хочете арифметично "подивитися" на них, вам потрібно відобразити їх по горизонталі, щоб це не мало сенсу. Ширина кожного біта визначається боудратом, і передавач і приймач повинні обидва знати, що таке бодрат.

На малюнку нижче видно, що він надсилає три символи: символ ASCII 'A', повернення каретки та канал рядка.

введіть тут опис зображення


Якщо це послідовне спілкування, хвилі дають так. правильно? Що таке CR та LF? Які ще дані можна отримати, наприклад, CR або LF?
user38701

1
CR - повернення перевезення, LF - подача лінії. Разом вони утворюють новий рядок, наприклад, курсор переходить до початку наступного рядка. Вони входять до стандарту "ASCII" ("Американський стандартний код для обміну інформацією"), google "ASCII-діаграма" або чогось іншого.
PkP

@ user38701: CRLF - це те, що відбувається при натисканні клавіші введення. Технічно CR повинен бути ключем повернення, а LF повинен бути ключем введення, але послідовна консоль інтерпретує ключ введення як CRLF (або іноді просто LF). У більшості мов програмування CR є "\ r", а LF - "\ n", але деякі компілятори / мови виводять CRLF для "\ n"
slebetman

1
Повернення каретки просте. Він використовував printlnкоманду, що означає друкувати рядок, а також "\ r \ n". Так три персонажі
ps95

1
Варто зазначити, що закінчення рядків є специфічними для системи.CRLF - це передусім припинення ліній Windows та Arduino. Якщо ви повторили той самий тест, використовуючи термінал на Linux як джерело "A", ви побачили б лише LF.
Ніколя Холтай

13

Якщо ви подивитесь на документацію Arduino println (), то побачите, що вона додає повернення вагона та передається в кінці рядка. Таким чином, у десятковій частині ви отримаєте 65 (A), 13 (CR) та 10 (LF), що у двійковій формі означає:

01000001 00001101 00001010

Серійні дані асинхронізації спочатку надсилаються LSB таким чином, що стає:

10000010 10110000 01010000

Ваш сигнал у режимі очікування високий, тому початковий біт буде 0, а бітовий стоп - 1, додаючи, що до кожного байту ви закінчите:

0100000101 0101100001 0010100001

Трохи важко розробити точний термін у вашій діаграмі, але це, здається, принаймні приблизно збігається, і повинно дати вам уявлення, звідки беруться деякі зайві біти і чому вони переупорядковуються. Посилання Вікіпедії, надане Kvegaoro, дає багато хорошої довідкової інформації про асинхронізацію серійних даних.


1

Якщо в тому потоці, який ви показуєте, є асинхронний серійний , осцилоскоп покаже відповідний біт запуску, біт зупинки та біти парності. Також врахуйте, якщо ваш сигнал перевернуто чи ні, а погода - це найважливіший біт першим або спочатку виставить значний біт. Якщо ви додасте більше деталей про послідовний потік, який ви представили на малюнку, ми можемо дати вам кращу більш детальну відповідь, інакше це лише освічена здогадка

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.