Разница между реальным двоичным значением и значением осциллографа

14

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

Осциллограф отображает этот график:

Асия А

Асия А

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

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

void loop() {  
  Serial.println("A");  
  delay(1000);  
}
user38701
источник

Ответы:

35

Вот как вы читаете осциллограф. Я нашел время, чтобы отредактировать ваше изображение формы волны и аннотировать его, чтобы показать, какой бит какой. Микроконтроллер отправляет 10 бит на символ; START, который всегда равен 0, 8 битам данных, и STOP, который всегда равен 1. Строка также покоится на 1, поэтому первый спад START предупреждает получателя о поступлении байтов. Сначала биты отправляются LSB, поэтому, если вы хотите «взглянуть» на них арифметически, вам нужно отразить их горизонтально, чтобы они имели какой-либо смысл. Ширина каждого бита определяется скоростью передачи, и передатчик и приемник должны знать, что такое скорость передачи.

Из рисунка ниже видно, что он отправляет три символа: ASCII-символ «A», возврат каретки и перевод строки.

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

PKP
источник
Если это последовательная связь, волны дают так. право? Что такое ЧР и НЧ? Какие другие данные можно получить, например, CR или LF?
user38701
1
CR - возврат каретки, LF - перевод строки. Вместе они образуют новую строку, например курсор переходит в начало следующей строки. Они являются частью стандарта ASCII («Американский стандартный код для обмена информацией»), Google «ASCII chart» или чего-то еще.
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, дает много полезной информации об асинхронных последовательных данных.

PeterJ
источник
1

Если тот поток, который вы показываете, является асинхронным последовательным , осциллограф покажет соответствующий стартовый бит, стоповый бит (ы) и биты четности. Также примите во внимание, является ли ваш сигнал инвертированным или нет, и будет ли он старшим значащим битом или младшим значащим битом первым. Если вы добавите более подробную информацию о последовательном потоке, который вы представили на рисунке, мы можем дать вам более подробный ответ, в противном случае это всего лишь догадка.

Kvegaoro
источник