Найти в Дзене
Rikou

Управляем светодиодами с ПК через USB-USART

В данной статье рассмотрим один из вариантов управления обычными светодиодами с помощью ПК. Чтобы управлять светодидами с ПК их нужно к нему както подключить. Вариантов может быть множество: например порты LPT, COM, USB, Ethernet и так далее. Но просто напрямую подключить светодиод можно не к каждому порту. Здесь будет рассмотрено подключение светодиодов через USB-USART интерфейс. USB-USART представляет собой мост, который посредством специального драйвера эмулирует работу COM порта и отправляет данные на USART интерфейс. Логический уровень USART и COM являются совместимыми. Компьютер посредством специальной программы передает данные на COM (USART) порт, эти данные передаются в виде битовых последовательностей с определенной скоростью (частотой) и непосредственно управлять светодиодами через него нельзя. Чтобы можно было непосредственно управлять выводами микроконтроллера и подключенными к ним же светодиодами, нужен приемник USART-данных по определенному протоколу. Как раз его здесь со

В данной статье рассмотрим один из вариантов управления обычными светодиодами с помощью ПК.

Чтобы управлять светодидами с ПК их нужно к нему както подключить. Вариантов может быть множество: например порты LPT, COM, USB, Ethernet и так далее. Но просто напрямую подключить светодиод можно не к каждому порту.

Здесь будет рассмотрено подключение светодиодов через USB-USART интерфейс. USB-USART представляет собой мост, который посредством специального драйвера эмулирует работу COM порта и отправляет данные на USART интерфейс. Логический уровень USART и COM являются совместимыми. Компьютер посредством специальной программы передает данные на COM (USART) порт, эти данные передаются в виде битовых последовательностей с определенной скоростью (частотой) и непосредственно управлять светодиодами через него нельзя. Чтобы можно было непосредственно управлять выводами микроконтроллера и подключенными к ним же светодиодами, нужен приемник USART-данных по определенному протоколу. Как раз его здесь соберем и рассмотрим.

Для простоты сборки будет использоваться беспаячный метод. Для работы потребуется макетная плата, набор перемычек, микроконтроллер ATmega8, Кварц на 11,0592 МГц, несколько светодиодов и резисторов, а также USB-USART переходник и программатор для прошивки МК. Также для отправки данных протребуется программа Терминал (или ее аналог) для отправки данных на COM-порт.

Набор деталей, в том числе USB-USART адаптер (справа-внизу)
Набор деталей, в том числе USB-USART адаптер (справа-внизу)
Схема электрическая принципиальная
Схема электрическая принципиальная

По схеме все довольно просто, для подключения к ПК используются USB-USART адаптер, МК ATmega8 подключается к нему через RxD и TxD пины, в качестве пользовательских портов служат все доступные свободные выводы МК. Данной схемой можно управлять с компьютера 18 портами ввода-вывода МК (т.е. 18 светодиодов, или любой другой нагрузки, не превышающих максимально допустимый ток МК). Питание 5 Вольт схема получает от USB, с выхода USART порта, но при желании можно подключть МК к внешнему питанию.

По сути данная схема представляет собой ни что иное как конвертер USART в пользовательский параллельный порт на 18 I/O линий. За протокол приема-передачи USART-I/O отвечает прошивка МК. Протокол написан специально под данную схему и довольно прост, передача 8 бит (1 байт), прием 24 бита (3 байта). Контроль ошибок не предусмотрен.

Стоит заметить что, порты ввода-вывода не отправляют логический 1. Выводы работают в режиме "с открытым стоком", который либо отключает, либо соединяет выходной контакт МК с "землей", то есть вывод МК работает как логический "0" и высокоимпедансный "Z". Поэтому для получения логический 1 следует подключать к выводам внешний подтягивающий резистор. И это сделано не просто так, а для того, чтоб можно было использовать порт не только на передачу, но и на прием данных. Так как выводы в режиме "открытый сток" не мешают приему данных, в отличие от логического режима, где передается непосредственно "1", либо "0". Хотя в рассматриваемом здесь примере ничего приниматься с портов не будет.

Как же включить/ отключить светодиоды в схеме отправляя данные с ПК? Конечно, нужно знать алгоритм протокола приема передачи!

Как уже было сказано, передача осуществляется по 8 бит данных. Старшие 2 бита являются командой, младшие 6 бит являются данными.

Для доступа к порту "PB" микроконтроллера нужно написать 01хххххх, для доступа к порту "PC" - 10хххххх, для доступа к порту "PD" 11хххххх, где хххххх является приемными битами порта. Например, чтоб включить PB0 нужно отправить 01000001 (0х41), чтоб отключить PB0 нужно отправить 01000000 (0х40). Соответственно для доступа к PC1 нужно отправить 10000010 (0х82) или 10000000 (0х80) и так для остальных бит-портов.

Для чтения данных с портов нужно отправить 0 (0х0), в ответ микроконтроллер отправит 3 байта данных считанных с каждого порта PB, PC и PD, при этом каждые старшие 2 бита всегда читаются как 0. Из за того, что PD0 и PD1 заняты под RxD и TxD, выходные данные данного порта смещены на два бита влево, то есть 0 бит приема-передачи соответствует PD2, 1 бит соответственно PD3 и так далее.

Ну, а теперь перейдем непосредственно к эксперименту.

Для начала прошиваем МК, например через AVRdude. Необходимо прошить HEX и EEP файлы. Для установки МК на нужную частоту, устанавливаем Fuse-биты CKSEL3-1 в значение 1 (Unprogrammed), остальные оставляем по умолчанию (за более подробной информацией обращаться к даташиту на данный МК).

ВАЖНО: Следует считать Fuse-биты перед их записью, это исключает непреднамеренное изменение остальных Fuse-бит!

После прошивки МК можно подключать к нему USB-USART адаптер по предложенной схеме.

После подачи питания должны засветиться все подключенные светодиоды, по умолчанию на каждый порт через подтягивающие резисторы выводится 111111 (0x3F). Тогда открываем программу терминал и выполняем правильную настройку. Номер COM-порта должен быть выбран в соответствии с вашей системой, Скорость 9600, Размер передачи - 8 бит, Стоп-бит 1, Четность - Нет.

Для отправки данных в передающей строке терминала вводим байт данных. Для отправки байта нужно написать спецсимол "перечеркнутая S" (литер $).

Программа Терминал, отбравка байта "40" в 16-ричном формате
Программа Терминал, отбравка байта "40" в 16-ричном формате

Вот 6 команд для управления тремя светодиодами, подключенными соответственно к PB0, PC0, PD2:

$40 - отключить красный светодиод, $41 - включить светодиод.

$80 - отключить желтый светодиод, $81 - включить светодиод.

$C0 - отключить зеленый светодиод, $C1 - включить светодиод.

Пример работы в каринках:

Собственно эксперимент удачно завершен.

Конечно, управлять светодиодами на первый взгляд практически бесполезно, если только они у вас висят не на новогодней елке. Однако, можно вместо светодиодов подключить любую другую нагрузку, например реле (важно не превышать максимально допустимый ток МК, либо использовать схемы согласования), и управлять с компьютра чем угодно, хоть светом в туалете, тут уже все в вашей фантазии.

В следующей статье мы попробуем что нибудь по интереснее и используем данную схему не только для отправки данных на светодиоды, но и попробуем принимать данные с помощью данной схемы на компьютер.

Прошивку для МК можно скачать по ссылке:

USART_PIO.zip

Вторая часть