Уникаючи плутанини між відсутністю введення та нулем у двійковій?


10

Припустимо, я передаю дані через FM, де 0 - 2 Гц, а 1 - 4 ГГц. Передавач передає 2 Гц, коли немає входу. Якби я подавав отриманий двійковий код до порту UART мікроконтролера, як би мікроконтролер відрізняв відсутність даних від 0?

Це стає актуальним, наприклад, при передачі символів ASCII. Припустимо наступний рядок:

01000110 01101111 01101111 01100010 01100001 01110010

Оскільки я додав пробіли, ми можемо перекласти це на:

Фообар

Але для машини рядок виглядатиме так:

010001100110111101101111011000100110000101110010

Як би ви створили ці "пробіли", щоб ви не заплутували символи ASCII, коли отримуєте двійкові?


5
Ось як UART це вирішує, посилання . Зупиніть і запустіть біти, оскільки ви подаватимете його на порт UART, він також повинен передавати їх.
Бенс Каулікс

Боюся, я не зовсім розумію вашу діаграму. Здається, що "Почати біт" - це просто нуль, що відновить мою проблему. Наприклад, як би знати різницю між 01111000 і 00111100, якби рядок становив 000 01111000 000?
Алленф

2
@Allenph, коли ви не відправляєте шину, не працює, і вона зберігається у логічно високому стані. Коли ви починаєте передачу пакету, перший біт завжди логічно низький. Це початковий біт. Потім слід вісім бітів даних, а потім стоп-біт, який логічно високий. Мікропроцесор знає, коли надходить наступний біт, оскільки він знає швидкість шини, яку ви налаштували. І мікропроцесор, і блок, що передає мікропроцесор, повинні бути налаштовані з однаковою швидкістю передачі.
Маттіас Йохансон

Відповіді:


16

Якщо ви подаєте щось на порт UART мікропроцесора, ви повинні дотримуватися протоколу зв'язку UART, якщо ви хочете, щоб мікропроцесор розумів, чим ви його подаєте. Вам потрібно вставити кожен символ ASCI в пакет UART, який містить початковий біт, стоп-біт і, можливо, біт парності, набагато більше інформації можна знайти на сторінці UART Wikipedia .

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


2
Ключовим моментом є те, що налаштоване число стоп-бітів є мінімальним, а не максимальним. У режимі очікування серійної лінії асинхронізації є розширений стоп-біт. Отже, якщо радіо має працювати в режимі холостого ходу на 0, то найпростішою відповіддю є перевернути вихід UART перед тим, як вести радіо з ним, щоб воно простоювало на 0, а 1 - це початок. Потім інвертуйте отримані дані, перш ніж обробляти їх за допомогою UART.
RBerteig

6

Є цілі багато методів для цього. Ви можете подивитися кодування в Манчестері або NRZ-коди. Або 8b / 10b кодування , яке відображає кожні 8 бітів даних у 10-бітну послідовність, яка дозволяє відновити тактову частоту, виправлення помилок та спеціальні символи «кома», які можна використовувати для виявлення початку та кінця передачі.


5

Усі символи ASCII шириною 8 біт, ви можете бачити це в таблиці ASCII. Значення HEX символів ASCII не виходять за рамки FF (1111 1111)

UART не може приймати більше одного байта даних (8 біт) одночасно, також, крім цих 8-бітових даних, є біти STOP і START, PARITY і ще кілька, які ви можете бачити на зображенні, показаному нижче, і які разом утворюють пакет зв'язку UART.

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

Отже, коли ви надсилаєте символи ASCII в UART, ви надсилаєте їх по черзі, і ось так складається рядок. Ви вже знаєте, що рядок - це лише масив символів.


4
ascii - це 7 біт, а не 8, однак прийнято класти його у 8 бітовий біт, щоб вирівнювання було тривіальним. Це також дозволяє інші набори символів і utf8.
hildred

0

Протокол UART, як пояснив Маттіас, є асинхронним протоколом на основі часу. Те, що визначає межі між бітами, - це час, відведений від початку початкового біта. Таким чином, мікроконтролер буде "вибірки" бітових (N+half)/baudrateсекунд після початку пускового біта. Половина біт - це просто зробити вибірку в середині бітів, щоб вона могла мати половинну різницю в часі між приймачем і передавачем (пам’ятайте, що відмінності накопичуються, а найгірший випадок трапляється в останньому біті кожного кадру, як правило, але не завжди, 8-бітова ширина, залежно від конфігурації). Ключовим для його роботи є отримання приймача та приймача з баудратами якомога ближче.

Отже, мікроконтролер рахує час між кожним бітом, щоб знати, де кожен біт знаходиться в кадрі. Наступний символ перейде в наступний кадр. Коли кожен кадр закінчується, мікроконтролер починає слухати наступний кадр автоматично, тому, коли настає наступний біт запуску, він уже знає, що він повинен запустити новий кадр. Ось так розділяються персонажі.

Додатково додам, що вам фактично не потрібні дві частоти для передачі на мікроконтролер, що приймає UART. Ви можете використовувати одну частоту як OOK замість двох частот як FSK . Він має більш високу спектральну ефективність, а схеми набагато простіші, оскільки вам потрібен лише перемикач несучої хвилі як передавач і одиночний детектор частоти як приймач, що дуже схоже на код Морзе. Пам'ятайте, як правило, використовуйте носії з частотами, які набагато вище, ніж боудрат, інакше прості схеми працюватимуть неправильно.

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