Простой пример управления портами 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 байтах состояние светодиодов. Светодиоды зажигаются/гаснут по команде с консольной программы, а также можно считать состояние светодиодов. Примеры: 1. Зажечь светодиод на порте P1 (выдать туда +5 вольт). На состояние остальных светодиодов команда не влияет. Последний, пятый байт в командной строке определяет, нужно зажечь (если он ==1) или погасить (если он ==0) светодиоды на портах, указанных в байтах с 1-го по 3-й (четвертый байт лишний, а также не используются биты 7 и 6 третьего байта): 2. Погасить светодиод на порте P1 (на состояние остальных светодиодов команда не влияет): 3. Установить лог. 1 на порте P10 (на состояние остальных портов и светодиодов команда не влияет): 4. Установить лог. 0 на порте P10 (на состояние остальных портов команда не влияет): 5. Записать во все порты P1..P22 лог. 0: 6. Записать во все порты P1..P22 лог. 1: 7. Прочитать статус портов: Статус портов P1..P22 находится в первых трех байтах (0xff 0xff 0x3f, то есть все порты в состоянии лог. 1). Байты перемычек (fuse bits) ATmega16 должны быть 0xFF (low) и 0x09 (high). [Ссылки] 1. Макетная плата AVR-USB-MEGA16. |