Первое, что заметил Олин: уровни противоположны тому, что обычно выводит микроконтроллер:
Не о чем беспокоиться, мы увидим, что мы тоже можем это прочитать. Мы просто должны помнить, что в области видимости стартовый бит будет a, 1
а стоповый бит 0
.
Далее, у вас неправильная временная база, чтобы прочитать это правильно. 9600 бит в секунду (более соответствующих единиц , чем бод, хотя последний не является неправильным само по себе) 104 ы на один бит, который является 1 / 10th разделения в текущей обстановке. Увеличьте масштаб и установите вертикальный курсор на первом ребре. Это начало вашего старта. Переместите второй курсор к каждому из следующих ребер. Разница между курсорами должна быть кратна 104 s. Каждые 104 - это один бит, сначала стартовый бит ( ), затем 8 бит данных, общее время 832 и стоповый бит ( ). μ μ μμμμ1
μ0
Не похоже, что данные экрана соответствуют отправленным 0x00
. Вы должны увидеть узкий 1
бит (стартовый бит) , а затем более низкого уровня (936 с, 8 бит данных ноль + стоп - бит).
То же самое для отправления; Вы должны увидеть длинный высокий уровень (снова 936 s, на этот раз стартовый бит + 8 битов данных). Так что это должно быть почти на 1 деление с вашими текущими настройками, но это не то, что я вижу.
Похоже, что на первом скриншоте вы отправляете два байта, а на втором - со вторым и третьим значениями. μμ
0xFF
μ
guesstimates:
0b11001111 = 0xCF
0b11110010 = 0xF2
0b11001101 =
0xCD 0b11001010 = 0xCA
0b11001010 = 0xCA
0b11110010 = 0xF2
править
Олин абсолютно прав, это что-то вроде ASCII. На самом деле это 1 дополнение ASCII.
0xCF ~ 0x30 = '0'
0xCE ~ 0x31 = '1'
0xCD ~ 0x32 = '2'
0xCC ~ 0x33 = '3'
0xCB ~ 0x34 = '4'
0xCA ~ 0x35 = '5'
0xF2 ~ 0x0D = [CR]
Это подтверждает, что моя интерпретация скриншотов верна.
edit 2 (как я интерпретирую данные, по популярному запросу :-))
Предупреждение: это длинная история, потому что это расшифровка того, что происходит в моей голове, когда я пытаюсь декодировать что-то подобное. Прочитайте его, только если вы хотите узнать один из способов справиться с этим.
Пример: второй байт на 1-м скриншоте, начиная с 2 узких импульсов. Я намеренно начинаю со второго байта, потому что в нем больше ребер, чем в первом байте, поэтому будет проще сделать его правильно. Каждый из узких импульсов составляет около 1/10 деления, так что каждый может иметь высоту 1 бит, а младший бит между ними. Я также не вижу ничего более узкого, чем это, поэтому я думаю, что это немного. Это наша ссылка.
Затем, после 101
более длительного периода на низком уровне. Выглядит примерно в два раза шире, чем предыдущие, так что это может быть 00
. Высокий следующий, который снова в два раза шире, так что будет 1111
. Теперь у нас есть 9 бит: стартовый бит ( 1
) плюс 8 бит данных. Таким образом, следующий бит будет стоп-бит, но потому что это0
это не сразу видно Итак, все это вместе 1010011110
, включая старт и остановку. Если бы стоповый бит не был равен нулю, я бы где-то сделал неверное предположение!
Помните, что UART сначала отправляет младший бит (младший значащий бит), поэтому нам придется обратить вспять 8 бит данных: 11110010
= 0xF2
.
Теперь мы знаем ширину одного бита, двойного бита и 4-битной последовательности, и мы посмотрим на первый байт. Первый высокий период (широкий импульс) немного шире 1111
второго байта, поэтому он будет иметь ширину 5 бит. Нижний и верхний периоды, следующие за ним, равны ширине двойного бита в другом байте, так что мы получаем 111110011
. Снова 9 бит, поэтому следующий должен быть младшим, стоп-бит. Это нормально, поэтому, если наши предположения верны, мы можем снова обратить биты данных: 11001111
= 0xCF
.
Тогда мы получили подсказку от Олина. Первое сообщение имеет длину 2 байта, на 2 байта короче второго. И «0» также на 2 байта короче, чем «255». Так что это, вероятно, что-то вроде ASCII, хотя и не совсем. Также отмечу, что второй и третий байт «255» одинаковы. Отлично, это будет двойная «5». У нас все хорошо! (Время от времени вы должны подбадривать себя.) После расшифровки «0», «2» и «5» я замечаю, что между кодами для первых двух есть разница 2, а между последними - 3 два. И, наконец, я замечаю, что 0xC_
это дополнение 0x3_
, которое является шаблоном для цифр в ASCII.