Автопортал || Авто - статьи

Сельскохозяйственная техника
Чтение RSS

AVR-CDC: віртуальний COM-порт через Low-Speed ​​USB (використовується бібліотека V-USB)

У статті описується 2 проекти, засновані на бібліотеці V-USB - CDC-232 і CDC-IO. Автор - Osamu Tamura @ Recursion Co., Ltd.

Обидва проекти являють собою просту схему на мікроконтролері AVR (ATtiny45 / 85, ATtiny461, ATtiny2313, ATmega8 / 48/88), яка при підключенні до порту USB комп'ютера (далі просто PC) створює віртуальний COM-порт. В обох проектах використовується безкоштовна бібліотека V-USB, яка дозволяє засобами firmware, прошитого в мікроконтролер AVR, підтримати роботу інтерфейсу USB. Перший проект (CDC-232) створює на комп'ютері віртуальний COM-порт, через який можна обмінюватися даними з яким-небудь іншим пристроєм, що має низьковольтний RS-232C (наприклад, з мікро контролером AT89C51 Atmel). Другий проект (CDC-IO) теж створює віртуальний COM-порт, але він призначений для управління ресурсами мікроконтролера (регістрами внутрішнього призначення). Тобто посилкою простих текстових команд в консольної програмі Ви можете змінювати стан ніжок мікроконтролера AVR, читати їх стан, управляти таймерами - лічильниками, PWM, читати ADC і т. Д.

[CDC-232]

CDC-232 створює віртуальний COM-порт на PC, навіть якщо він не має реального порту RS-232C. Це дозволяє проводити обмін даними RS-232C (без сигналів управління) після приєднання пристрою і установки драйвера.

Віртуальний COM-порт, який працює через програмну реалізацію USB
Віртуальний COM-порт, який працює через програмну реалізацію USB

[Застосування CDC-232]

Запрограмуйте AVR, спаяти схему і підключіть пристрій в порт USB комп'ютера. Встановіть драйвер (якщо у Вас операційна система Windows). Отримайте доступ до пристрою через згенерований віртуальний COM-порт з програми терміналу або написану Вами програму (яка працює з COM-портом). Сигнали управління (DTR, DTS, RTS, CTS) не використовуються, тому налаштуйте програму терміналу в режим "no flow-control" (без контролю потоку).

Windows запити щодо встановлення драйвера заново щоразу, коли Ви підключіть пристрій в інший порт USB. Раніше встановлений драйвер детектується автоматично. Буде призначено іншого номер COM-порту. Якщо Ви встановите серійний номер в AVR (пересоберіте вихідний код з новим usbconfig.h), Ви можете отримати той же самий номер COM-порту на будь-якому порте USB. Але в цьому випадку Ви не можете підключити відразу декілька пристроїв CDC з одним і тим же серійним номером.

Перед тим, як від'єднати пристрій, закрийте COM-порт в термінальній програмі або в Вашому самопісний додатку. В іншому випадку Ви не зможете підключити пристрій знову через невірне дескриптора файлу (broken file handle). В цьому випадку запустіть програму терміналу або ваша заявка. Переключитися в режим швидкої передачі можна використанням "lowcdc.vbs", при цьому можна отримати швидкість вище 9600 bps.

Loop-back тест на версії ATtiny45
Loop-back тест на версії ATtiny45

[Принципові схеми CDC-232]

Ці схеми розраховані на ATtiny45 / 85, ATtiny2313 / AT90S2313 і ATmega8 / 48/88/168. У всіх цих мікроконтролерів firmware програмується через ISP. Червоний LED знижує напругу USB від 5V до 3.3V, і надає його для AVR. Струм споживання близько 10mA, і його мало для харчування інших вузлів. Коли підключаєтеся до іншого MCU (микроконтроллеру), з'єднайте Gnd і з'єднайте TxD і RxD хрест-навхрест. R4 обмежує зворотний струм, коли зовнішній MCU харчується від Vcc 5V (Ви можете R4 не ставити, якщо напруга живлення зовнішнього MCU одно 3.3V). R5 захищає ніжку TxD, коли вона замкнута на Gnd. Ви можете опустити і R4 і R5, якщо Ви з'єднуєтеся через RS-232C драйвер на зразок MAX232. Використовуйте кварцовий резонатор. Незважаючи на те, що керамічний резонатор в більшості випадків працює добре, але для даного застосування він не підходить, оскільки догляд частоти занадто великий, і тому пристрій може працювати нестабільно.

ATtiny45 / 85 використовує внутрішній RC-генератор і PLL. Він відкалібрований на частоту 16.5 МГц по частоті сигналу SOF (Start Of Frame) порту USB, коли пристрій підключено до PC. UART в цьому випадку реалізований програмно. Він не може підтримувати високу швидкість передачі даних. Якщо TxD і RxD проінвертірованний (пересоберіте проект з опцією -DINVERT), Ви можете безпосередньо підключитися до сигналів RS-232C. Формат настройки порту 300-4800bps, 8N1.

CDC-232 для ATtiny45-20
CDC-232 для ATtiny45-20

Приклад на ATtiny45 з використанням коннектора mini-B

У мікроконтролера ATtiny2313 / AT90S2313 всього лише 2 KB пам'яті програм. Механізм установки терміналу опущений (т. Е. Автодетекта швидкості немає). Встановіть перемикач DIP для зміни швидкості.

CDC-232 для ATtiny2313-20 CDC-232 для ATtiny2313-20

У мікроконтролерів ATmega8 / 48/88's внутрішній UART конфигурируется від PC автоматично. Формат настройки 1200-57600bps, дані 7/8, парність N / E / O, кількість стоп-біт 1/2

CDC-232 для ATmega8 / 48 / 88-20 CDC-232 для ATmega8 / 48 / 88-20

Підключення до фізичних лініях RS-232C вимагає інверсії полярності TxD і RxD, а також відповідність рівнів сигналу. Використовуйте спеціальну IC зразок MAX232. Ви можете її замінити простими схемами (див. Далі).

Коли цільової MCU має інше харчування Vcc (відмінне від 3.3V), утворюються зворотні струми витоку через сигнальні лінії. Це спотворює сигнал, або підживлює MCU без джерела живлення. Ця схема не дуже хороша, але достатня для більшості випадків.

[CDC-IO]

CDC-IO управляє регістрами спеціального призначення (Special Function Registers, SFR) мікроконтролера AVR через віртуальний COM-порт на PC. Це дозволяє вільно читати / записувати паралельні порти MCU (ніжки мікроконтролера). Працюють також операції з таймерами / лічильниками, PWM, ADC, EEPROM, що дозволяє додатку на PC досягти дуже глибокого управління мікро контролером і розробляються на ньому пристроєм.

Зовнішній інтерфейс з використанням програмної реалізації протоколу USB
Зовнішній інтерфейс з використанням програмної реалізації протоколу USB

[Застосування CDC-IO]

Інсталяція така ж, як і у CDC-232. Швидкість COM-порту довільна. Відправлення текстових команд відбувається через програму терміналу або з вашої програми на PC. Якщо Ви хочете отримати більш високу швидкість передачі, використовуйте "lowcdc.vbs" для перемикання в bulk transfer mode.

Набір команд CDC-IO (Instruction Set)

ФункціяКомандаФорматВідповідь

Who @ @ "cdc-io", CR-LF Get? address? data, CR-LF Set = data address = CR-LF AND & Set & data address & CR-LF OR & Set | data address | CR-LF EX-OR & Set ^ data address ^ CR-LF Set Double $ data2 data1 address $ CR-LF

Версія з ATtiny2313 має тільки команди "Set", "Get", "Xor".

У таблиці команд використані наступні позначення:

address: адреса регістра SFR, відображений на пам'ять (memory mapped) в hex-форматі
data: 8 біт дані в hex
роздільник: Tab, Space, CR, LF
predefined addr (зумовлені символічні адреси, case-insensitive, НЕ підтримуються ATtiny2313): PINB, DDRB, PORTB PINC, DDRC, PORTC PIND, DDRD, PORTD

Приклади ( '_' означає роздільник):

DDRB _? _ Повертає значення DDRB разом з CR-LF.
12_34 _ = _ Запис 0x12 за адресою 0x34, у відповідь повертає CR-LF.
FB_PORTC _ & _ Запис (PORTC & 0xFB) в PORTC, повертає CR-LF.

(Приклади для ATtiny2313)
36 _? _ Повертає величину PINB (0x36) разом з CR-LF.
12_37 _ = _ Запис 0x12 за адресою DDRB (0x37), повертає CR-LF.
FB_38 _ ^ _ Запис (PORTB ^ 0xFB) в PORTB (0x38), повертає CR-LF.

Попередні дані та адресу можуть бути використані повторно. Просто введіть символ команди для повтору.

Команда "Set Double" використовується для запису в EEPROM.

Уникайте зміни біт порту, на якому присутні сигнали USB. Використовуйте '&', '|' або "^ 'для модифікування напрямки порту (вхід або вихід). Використовуйте PIN * для перемикання біт в протилежний стан (toggle), якщо порт призначений як вихід (output).

Коли дозволені переривання, повідомляється номер вектора переривання, коли воно викликається.

Всі регістри SFR доступні. Див. Даташит AVR для використання таймерів, ADC, EEPROM, і т. П.

[Принципові схеми CDC-IO]

Якщо напруга живлення Vcc цільової схеми одно 5V, і порти AVR налаштовані як входи, поставте резистори (3K3 ... 10Kом) для запобігання зворотного потоку. Використовуйте тільки кварцовий резонатор. Незважаючи на те, що керамічний резонатор в більшості випадків працює добре, але для даного застосування він не підходить, оскільки догляд частоти занадто великий, і тому пристрій може працювати нестабільно.

ATtiny45 / 85 використовує внутрішній RC-генератор і PLL. Він відкалібрований на частоту 16.5 МГц по частоті сигналу SOF (Start Of Frame) порту USB, коли пристрій підключено до PC.

CDC-IO для ATtiny45-20
CDC-IO для ATtiny45-20

CDC-IO для ATtiny45-20

CDC-IO для ATtiny461-20

Для ATtiny2313 реалізовані тільки команди "Set", "Get" і "Xor" через обмежену пам'яті програм цього мікроконтролера. Ця версія також не має механізму interrupt-report.

CDC-IO для ATtiny2313-20
CDC-IO для ATtiny2313-20

CDC-IO для ATmega8 / 48 / 88-20
CDC-IO для ATmega8 / 48 / 88-20

[Приклад програми]

Це експериментальна схема і приклад програми для ATmega8 / 48. Програма написана на C, VB, VC, VC ++ та C #. Ви можете використовувати інші мови (або макроси), якщо вони можуть працювати з портом RS-232C.

На фото показаний зовнішній вигляд експериментальної схеми
На фото показаний зовнішній вигляд експериментальної схеми

Регулятор змінює тон пищалки і маску миготіння світлодіодів
Регулятор змінює тон пищалки і маску миготіння світлодіодів.

[Приклад управління без програми]

Операційні системи дозволяють працювати з COM-портами, як зі звичайними файлами. Ось так, наприклад, під Windows Ви можете надіслати команду пристрою, який створює віртуальний COM-порт COM3 (в текстовому файлі comands.txt записана послідовність команд):

c: \ temp> copy comands.txt COM3
1 file (s) copied.

Що цікаво - під Windows XP можна використовувати тільки імена COM1..COM9. Імена COM10, COM11, COM12, COM13 і далі Windows не сприймає як системні, і думає, що це не порт, а файл (навіть якщо такий порт реально є в диспетчері Пристроїв).

[Посилання]

1. Вихідні тексти програм і firmware, описані в статті, документація, драйвер для w2k, XP, Vista .
2. Проект CDC-232, портований на AVR-USB-MEGA16 (ATmega16 з кварцом на 16 МГц) .
3. AVR-CDC - Virtual COM Port over Low-Speed ​​USB site: recursion.jp - сайт AVR-CDC Osamu Tamura @ Recursion Co.
4. USB консоль для управління радіолюбительськими приладами .

Address?