Урок 10. Робота з UART інтерфейсом
В цьому уроці я розповім про UART інтерфейс в мікроконтролерах AVR і про роботу з ним в BASCOM-AVR. UART — це універсальний асинхронний приймально-передавач. Сам інтерфейс досить поширений і є практично у всіх AVR мікроконтролерах, винятком є лише мікроконтролер Attiny13 та ще деякі. Передача даних здійснюється по біту в рівні проміжки часу, цей проміжок часу задається швидкістю в бодах, ось, наприклад, стандартні швидкості: 4800 бод, 9600 бод, 19200 бод, 38400 бод тощо. Слід також врахувати, що швидкість повинна бути однаковою з обох сторін підключення. До речі, приймач і передавач працюють незалежно. Підключення UART здійснюється по трьом лініям: RXD – прийом, TXD – передача і GND – загальний (мінус). Підключати UART потрібно, так би мовити, "наоборот" RXD до TXD, а TXD до RXD, як на малюнку нижче:
За допомогою UART також можна зв'язати мікроконтролер і комп'ютер, але є одна проблема: у UART інтерфейсу логічні рівні 0 і +5 вольт, а в комп'ютері логічні рівні в інтерфейсі RS-232 можуть бути від -25 до -3 вольт і від +3 до +25 вольт. Вирішити цю проблему нам допоможе конвертер рівнів, його можна зібрати на транзисторах, а краще використовувати спеціальну мікросхему MAX232. Ось найпоширеніша схема підключення MAX232:
Робота з UART в BASCOM-AVR
Перш за все, перед початком роботи з UART потрібно вказати швидкість в бодах, робиться це командою: $baud = (швидкість). Наприклад: $baud = 9600 .Також не забуваємо вказувати реальну частоту тактового генератора командою $crystal = (швидкість Hz), в іншому випадку швидкість роботи програми не буде співпадати зі швидкістю роботи мікроконтролера і в підсумку прийом або передача даних буде неправильною. Приклад написання команди $crystal на частоту 8МГц: $crystal = 8000000. До речі, має сенс відкрити вікно налаштувань в BASCOM-AVR (Options>Compiler>Communications):
У цьому вікні налаштувань ви можете вказати швидкість роботи UART, тактову частоту тактового генератора і побачити відсоток помилок при вибраній тактовій частоті. Але краще вказувати швидкість і тактову частоту безпосередньо в самій програмі. До речі, відсоток помилок при тактовій частоті в 4МГц дуже малий (0.16%), але все ж є. Якщо ви хочете, щоб відсоток помилок був нульовим, потрібно підібрати таку тактову частоту, яка буде кратна швидкості роботи UART. Наприклад, при тактовій частоті 3.6864 МГц і швидкості роботи UART у 115 200 бод відсоток помилок буде нульовим.
Отже, після вказання тактової частоти і швидкості роботи UART можна приступити до роботи з самим інтерфейсом. Щоб надіслати щось в UART, є команда Print (змінна або текст у лапках), ось приклад її використання: Print "Hello, world!". Окрім тексту в лапках можна виводити й змінні, причому одразу кілька, розділяючи крапкою з комою, наприклад: Print "Weight:" ; a ; "kg" або так Print "Hello," ; "world!" . Також з UART можна і приймати, робиться це командою Input (текст або змінна в лапках для відправки), (змінна, куди записувати отримані дані). Як бачимо, все дуже просто: спочатку пишемо в лапках текст, який передасться в UART, а потім вказуємо змінну, в яку запишуться отримані дані з UART. Ось приклад: Input "Weight:", a
Робота з UART на практиці
Ну а тепер спробуємо "порулити" UART на практиці, спочатку зберемо просту схему:
Потім наберемо просту програму, (використовуючи отримані знання) і скомпілюємо її. Ось і вона:
$crystal = 8000000 $baud = 9600 Dim A As Byte Print "Hello, world!" Print "Hello http://cxem.net" Input "Size:" , A Print "Size=" ; A ; "bytes" End
А працювати ця програмка буде так: спочатку буде надсилати в UART текст, а потім буде чекати прийому даних (в даному випадку числа), які запишуться в змінну a і пізніше надішле текст разом зі змінною. Для тих, кому лінь компілювати, в файлах до уроку є готова прошивка. Прошиваємо мікроконтролер, підключаємо виводи мікроконтролера RXD, TXD (підключаємо, як я писав вище) і GND до COM порту комп'ютера (через конвертер рівнів) або до USB (USB – UART перехідник), відкриваємо на комп'ютері програму для роботи з COM портами, наприклад: Terminal by Bray, Hyper Terminal або Terminal emulator в BASCOM-AVR, вказуємо COM порт, до якого підключилися, вказуємо швидкість в бодах, дивимося у вікно програми, подаємо живлення на мікроконтролер і радіємо. Необхідно також врахувати, що після прошивки мікроконтролера потрібно встановити фьюз біти на потрібну нам тактову частоту генератора, в даному випадку (для програмки вище) на 8МГц. На 8МГц можна використовувати внутрішній тактовий генератор мікроконтролера і встановити фьюз біти ось так (для PonyProg2000):
В залозі:
На фотографії у мене плата для програмування Attiny2313, USB-UART перехідник і програматор USBtiny. Нижче ви можете подивитися відео, як це працює
Файли для уроку (проект в Proteus, вихідний код, прошивка) додаються
Урок 11. Працюємо з DS1307 мікросхемою годинника реального часу
Прикріплені файли:
- mc129.rar (12 Кб)