Вітаю всіх хабраюзеров. У цій статті буде написано, як зробити дисплей, який спілкується з комп'ютером по USB. Для реалізації цього задуму я вибрав AVR-контролер ATMega16. Що б не морочитися з обв'язкою, я вибрав цю макетну плату.
Для чого цей дисплей може використовуватися - вирішувати вам. Крім того - ніхто не змушує це робити в форм-факторі дисплея - це може бути пучок світлодіодів, світлодіодна стрічка, кілька релюшек - все, що завгодно.
«Залізо» тут дуже просте. Оскільки обв'язка USB вже є, потрібно просто підключити індикатор до контролера. Висновки сегментів, рівно як і висновки розрядів, бажано садити цілком на один порт (щоб висновок символу був не складніше записи в цей самий порт).
програматор
Для програмування цього чудний макетної плати є два способи. Перший - класичний - SPI / JTAG. Другий - бутлоадер. який працює через HID інтерфейс, і активується при замиканні MOSI і землі.
Зараз практично всі пристрої підключаються до комп'ютера через USB-інтерфейс. Більш того, у багатьох нових ПК COM і LPT порти відсутні (хоча під них є контакти на мат. Плати). Багато хто вважає, що HID призначений виключно для мишок, клавіатур і інших пристроїв введення. Це не так. HID пристроєм може бути все, що завгодно. Хоча HID і забезпечує низкоскоростной обмін даними (<64 кб/с), но он может значительно сократить время разработки устройства за счет отсутствия необходимости написания драйверов. На выходе получится простое устройство, которое опознается в большинстве современных ОС.
Для організації USB-обміну з боку контролера використовується бібліотека V-USB. яка і бере на себе всю брудну роботу. Слід зауважити, що сигнал D + обов'язково повинен приходити пін, який має переривання (в даному випадку - INT0). Крім того, контролер повинен мати строго певну тактову частоту (на платі видно 16-мегагерцовий кварц), інакше нічого не заробить.
Все HID-пристрої мають свої дескриптори. У цих дескрипторах пристрій описує, що воно буде робити - приймати, відправляти дані, або все відразу, що це за пристрій - клавіатура, миша, джойстик, або просто якийсь свій пристрій, а також деякі інші параметри. Для типових пристроїв вже є типові драйвера, але навіть той факт, що USB-дисплеї зустрічаються в продажу нечасто, не примушує нас писати свій драйвер! Нам необхідно написати тільки реалізацію свого високоуровнего протоколу - HID надає хороший рівень абстракції.
Спершу оголосимо дескриптор, відміну тут в цьому рядку:
0x95, 0x05, // REPORT_COUNT (5)
У цьому рядку вказується довжина FEATURE-репорт - п'ять байт, виключаючи ReportID. Перший байт - статус (стан вбудованого світлодіода), ще чотири - інформація, що виводиться на ДІСП
Для роботи дисплея потрібно направити порти на вихід (A і C, я направляв все Піни - іншої периферії все одно немає).
Для збереження інформації про поточний стан дисплея потрібні дві змінні (ще одна - для спрощення коду). Щоб не перенавантажувати статтю, весь код винесено на pastebin.
Великий брат
Для комп'ютера була написана програма на Дельфі з використанням компонента JvHidDevice.
Вихідні тексти все там же - на pastebin.
Всі ці вихідні роблять дуже просту річ - на стороні хоста - перетворення символів в їх картинки і відправка по USB, на контролері - прийом і відображення. Слід зазначити, що знакогенератор реалізований на хості, щоб виключити непотрібні перепрошивки контролера.