Простой пример управления портами P1..P22 платы AVR-USB-MEGA16 (portctrl) Печать
Добавил(а) microsin   

Устройство, которое может зажигать светодиоды, подключенные к портам P1..P22 макетной платы AVR-USB-MEGA16 [1].

Взял за основу пример hid-data. Для проверки запаял только 8 светодиодов к портам P1..P8. Можно управлять платой, тупо посылая туда 5 байт с помощью программы hidtool.exe (взял готовую из того же примера hid-data, просто перекомпилил её для нового значения usbconfig.h\USB_CFG_DEVICE_NAME). Структура данных такая - первые 3 байта содержат 22 бита, которые надо поменять, а 5-й байт содержит 0 или 1. Если 0, то нужно сбросить указанные биты, а если 1, то установить. Команда чтения должна вернуть в 3 байтах состояние светодиодов.
portctrl_IMG_8319sm.jpg

Светодиоды зажигаются/гаснут по команде с консольной программы, а также можно считать состояние светодиодов. Примеры:

1. Зажечь светодиод на порте P1 (выдать туда +5 вольт). На состояние остальных светодиодов команда не влияет. Последний, пятый байт в командной строке определяет, нужно зажечь (если он ==1) или погасить (если он ==0) светодиоды на портах, указанных в байтах с 1-го по 3-й (четвертый байт лишний, а также не используются биты 7 и 6 третьего байта):
hidtool write 0x01 0x00 0x00 0x00 0x01

2. Погасить светодиод на порте P1 (на состояние остальных светодиодов команда не влияет):
hidtool write 0x01 0x00 0x00 0x00 0x00

3. Установить лог. 1 на порте P10 (на состояние остальных портов и светодиодов команда не влияет):
hidtool write 0x00 0x02 0x00 0x00 0x01

4. Установить лог. 0 на порте P10 (на состояние остальных портов команда не влияет):
hidtool write 0x00 0x02 0x00 0x00 0x00

5. Записать во все порты P1..P22 лог. 0:
hidtool write 0xFF 0xFF 0x3F 0x00 0x00

6. Записать во все порты P1..P22 лог. 1:
hidtool write 0xFF 0xFF 0x3F 0x00 0x01

7. Прочитать статус портов:
hidtool read
0xff 0xff 0x3f 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

Статус портов P1..P22 находится в первых трех байтах (0xff 0xff 0x3f, то есть все порты в состоянии лог. 1).

Байты перемычек (fuse bits) ATmega16 должны быть 0xFF (low) и 0x09 (high). 

[Ссылки]

1. Макетная плата AVR-USB-MEGA16.
2. Firmware Сергея Кухтецкого, которое позволяет управлять ресурсами микроконтроллера (писать/читать регистры, порты и проч.) с помощью класса Visual C#. Весь алгоритм работы устройства USB можно перенести в ПО хоста, что упрощает программирование.
3. CDC-IO - управление ресурсами микроконтроллера через виртуальный COM-порт и простую консоль, т. е. не нужно не только писать firmware, но даже писать ПО хоста. Берете готовую любимую терминальную программу (SecureCRT, HyperTerminal, TerraTerm и проч.) - и управляете ножками (регистрами, таймерами, чем угодно) микроконтроллера.
3. Работа с USB для чайников на примере AVR-USB-MEGA16 site:vanoid.ru - программа на Delphi - управление портами макетной платы AVR-USB-MEGA16 (в макетную плату прошито firmware класса-обертки Сергея Кухтецкого).
4. 140120portctrl.zip - исходный код проекта portctrl и готовые скомпилированные прошивки на разные частоты кварца (см. папку hex внутри архива).