Дуже часто, розробляючи якусь «Мікроконтроллерні пристрій», виникає необхідність підключити його до комп'ютера. При цьому не потрібно якихось «над-завдань», всього-то й потрібно передати з комп'ютера в пристрій якусь команду або невеликий масив данн; і / або, навпаки - з пристрою вивантажити дані в комп'ютер. Зазвичай для таких цілей використовують старий, перевірений RS232. Однак, зараз знайти комп'ютер з подібним інтерфейсом - вельми непросте завдання ...
Поглянувши на задню стінку Вашого комп'ютера, Ви навряд чи побачите щось підходяще для завдання - окрім декількох портів USB.
USB - дуже вдале рішення в еволюції комп'ютерної техніки: і «гаряче» підключення, і харчування є і ще багато чого хорошого ... Одне погано - вже дуже складний інтерфейс вийшов. Якщо копнути інтернет в цьому напрямку - відразу ... руки опускаються.
Є прекрасний вихід з ситуації - використання емуляції СОМ-порту. Для цього є маса «копійчаних» мікросхем: CP2102, PL2303, CH340 і ін.
Все що стосується USB - вони беруть на себе, а нам дають добре знайомий UART. За цим принципом влаштовано безліч виробів, наприклад, так побудовано взаємодія Arduino з комп'ютером ...Цікаво обійтися без цих «милиць» - благо - ресурсів навіть ATtiny для цього вистачає з надлишком ... Подивимося - як реалізована емуляція COM порту в широко поширеному проекті Digispark. Раніше було розглянуто варіант підключення плати до комп'ютера і Arduino IDE
Всі нюанси емуляції описані в першоджерелі на Digistump. Зараз розглянемо варіант використання плати для її взаємодії з комп'ютером через USB - DigiCDC. Для цього зручно використовувати злегка доопрацьований під DigiCDC приклад Echo з розділу Приклади -> DigisparkUSB -> EchoКлючовим моментом в програмі є рядок
після її виконання Digispark перетворюється в Digispark Virtual Com Port і комп'ютер його так і виявляє (при цьому DigisparkBootloader з пристроїв в диспетчері зникає). Для того щоб комп'ютер визначив новий пристрій так як треба, комп'ютера треба підсунути потрібний драйвер (вказати на файл DigiSerial.inf)
Якщо комп'ютер потрібний драйвер сам не знайшов, вказуємо йому на те що треба і отримуємо потрібний пристрій в диспетчері пристроїв:
З вийшов COM портом можна робити все, що завгодно. Найпростіше - «нацькувати» на нього монітор Arduino IDE. Просто в налаштуваннях середовища вибираємо наш новий COM порт і працюємо з ним ...
У використанні такого «порту» є нюанси:
- Бібліотека DigiCDC використовує досить багато оперативної пам'яті. Рекомендується при виведенні в порт тексту користуватися функцією F (), наприклад: SerialUSB.print (F ( "test")).
- Порт можна використовувати для обміну повідомленнями, як це зазвичай прийнято (типова рядок Serial.print () використовується майже у всіх творіннях). Але, тепер треба використовувати, наприклад, SerialUSB.read () замість Serial.read () і т.п.
- Ніякої вказівки швидкості обміну при ініціалізації тепер не потрібно, просто пишемо: SerialUSB.begin ().
- Обмін через емульований порт о-о-дуже повільний. На передачу символу йде 5 мс. Це треба мати на увазі при розробці рішень.
- Якщо в проекті треба використовувати затримку функцією delay (). то її треба замінити на SerialUSB.delay ().
- У проектах з DigiCDC функцііSerialUSB.delay () іліSerialUSB.refresh () потрібно викликати не рідше, ніж кожні 10 мс, якщо немає викликів інших функцій SerialUSB.
Приклад роботи скетчу:
Waiting for input ...
Press 0 to LED off or 1 to LED On ...
0 LED Off ...
Waiting for input ...
Press 0 to LED off or 1 to LED On ...
1 LED On ...
Waiting for input ...
Press 0 to LED off or 1 to LED On ...
Наведений вище скетч реагує на клавішу «1» - включенням світлодіода на платі Digispark, а, при натисканні клавіші «0», вимикає його.