У мене на мікроконтролері немає UART, так як я можу додати його?


13

Я використовую мікроконтролер ATMEGA32HVB, який має можливість збалансувати осередки, за допомогою яких ми можемо підключати 4 батареї послідовно та використовувати один за одним. Це дуже корисно для управління живленням, тому я не можу використовувати інший мікроконтролер. Запропонуйте, будь ласка, кілька методів додати до нього UART, щоб я міг легко інтерфейсувати серійні пристрої.


11
Програмний спосіб UART, описаний користувачем26129, називається біт- ударом .
Йохан.А

4
Просто мій суб'єктивний 0,02 долара, але я зазвичай віддаю перевагу окремому виділеному контролеру батареї та інтегрованому UC UART замість навпаки. Для чого потрібне управління акумулятором, інтегроване в UC?
Мельс

Мені доведеться використовувати акумуляторні батареї, які будуть заряджатися за допомогою сонячної панелі, тому мені потрібно 4 битви в серії, які будуть використовуватися один за одним
user27475

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

Відповіді:


17

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

З погляду на таблицю даних видно, що ваш мікроконтролер має SPI та I2C (який Atmel називає двопровідним інтерфейсом (TWI)). Це, мабуть, найкращі інтерфейси, які можна використовувати для приєднання зовнішнього UART. Зазначені пристрої доступні у багатьох виробників. Деякі приклади:

  • Exar ( http://www.exar.com/connectivity/uart-and-bridging-solutions/i2c-spi-uarts ) має лінійку SPI / I2C 1- та 2-канальних UART-пристроїв, що охоплюють ~ 1.6- 3.3V робочий діапазон. Я не використовував жодної з цих частин конкретно, але раніше використовував пристрої Exar (з паралельними інтерфейсами шини пам'яті), і вони добре працювали.

  • NXP ( http://ics.nxp.com/products/bridges/i2c.spi.slave.uart.irda.gpio/ ) має лінійку пристроїв SPART / I2C UART / IrDA / GPIO, доступних також у 1- та 2 -канальні різновиди в декількох діапазонах напруги. В минулому я широко використовував ці частини (зокрема SC16IS762) з великим успіхом.

  • Максим ( http://www.maximintegrated.com/datasheet/index.mvp/id/2052 ) має пристрої MAX3110E та MAX3111E, які є UART-підключеними SPI. Однією унікальною особливістю цих пристроїв є те, що вони мають інтегрований лінійний драйвер RS-232. Отже, якщо вам потрібен ваш UART для інтерфейсу до пристрою, який використовує лінійні напруги RS-232 замість логічних рівнів (наприклад, ПК), це може бути корисним, оскільки це позбавить вас від додавання іншої лінійки драйверів ліній до вашої плати.


Нічого собі, ніколи не знав, що у Максима є ці предмети, +2, якби міг.
Тево Д


8

Вам потрібно буде використовувати програмний драйвер UART. Залежно від того, що ви очікуєте від цього UART, ви можете використовувати AVR305 (надзвичайно компактний, але жодних функцій, крім блокування напівдуплексного надсилання / отримання), AVR274 (керований перериванням, досить функція завершена), ви можете написати власний драйвер програмного забезпечення UART або ви можете використовувати той, який ви знайдете в Інтернеті, наприклад, googling 'avr software uart'


3

Коротка примітка щодо розробки програмного забезпечення "UART": існує, принаймні, якісно різні підходи, залежно від вимог:

  • Драйвер біт-бангу «Перейняти все» відключить усі переривання та використовувати код, що рахується циклом, для перегляду кожного біта. Отримання даних з драйвером "перебрати все" вимагає, щоб при надходженні даних контролер нічого не робив, але чекав на них.

  • Драйвер біт-баг "перейняти основний цикл" буде поводитись так само, як зазначено вище, за винятком того, що він буде використовувати ресурс таймера для тимчасових розрядів бітів, а не підрахунку циклів. Перерви, які не потребують занадто довгого обслуговування, можуть бути залишені увімкненими. Для послідовної передачі ресурс таймера з фіксованою швидкістю може бути спільним для інших цілей; для послідовного прийому, однак, драйвер біт-бангу повинен мати можливість перезавантажити таймер, коли приходить стартовий біт, щоб змусити його закінчуватися в середині кожного вхідного бітового часу.

  • Драйвер, що керується повністю перериванням, використовує таймер з фіксованою швидкістю, який працює на деякому кратному рівні швидкості передачі даних (3 і 5 разів краще, ніж 4 рази), і робить все через цей таймер. Такий драйвер може працювати одночасно з усім іншим, але вимагає швидшого процесора, ніж вимагали колишні типи драйверів.

Щоб уникнути того, що перші два стилі контролера вічно чекають даних, які ніколи не можуть надходити, звичайно, щоб підпрограми читання включали значення тайм-аута. Зауважте, що якщо цикл aa-контролера робить, наприклад, "отримайте байт під час очікування до 100 мс для нього, зробіть якісь інші речі, якщо жоден не з'явився, то отримайте наступний байт тощо". і байт приходить між тимчасовим часом виходу "контрольного" виходу, і контролер знову починає чекати, що байт буде загублений; пристрій, з яким він спілкується, повинен очікувати такої можливості.

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

Одна примітка про розставання: контролер, який використовує один з перших двох стилів bit-bang uart для отримання даних, повинен обробити кожен байт даних перед падінням краю біта початку наступного байту, щоб уникнути втрати даних. Якщо контролер знає, що обробка потребуватиме щонайменше половини бітового часу, вона може максимально збільшити час, доступний для обробки, приймаючи кожен байт, як тільки він схопив останній біт даних, а не чекав біту зупинки. В якості подальшого засобу, що надає контролеру більше часу, може бути корисним пристрій, який надає йому передачу даних двома стоп-бітами, а не одним. Якщо "позначити паритет" можна налаштувати, це додасть ще один додатковий час. Передача, наприклад, 115200-8-M-2, дозволить отримати більше часу на обробку, ніж 57600-8-N-1, навіть незважаючи на те, що вона буде подавати дані в 1,6 рази швидше.


1

Ви можете просто використовувати штифт вводу / виводу UC. Єдине, що при переключенні або передачі даних на цих штифтах у вас повинна бути частота штифтів, подвійна до швидкості передачі. Ось як нормально працює UART, він відбирає бітовий сигнал посередині.

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