Зовнішній usb-дисплей, savepearlharbor

Вітаю всіх хабраюзеров. У цій статті буде написано, як зробити дисплей, який спілкується з комп'ютером по 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, на контролері - прийом і відображення. Слід зазначити, що знакогенератор реалізований на хості, щоб виключити непотрібні перепрошивки контролера.

Фотографії майже готового виробу (клікабельні)

Зовнішній usb-дисплей, savepearlharbor

Зовнішній usb-дисплей, savepearlharbor

Схожі статті