Программирование AVR Макетная плата AVR-USB162 Wed, November 13 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Макетная плата AVR-USB162 Печать
Добавил(а) microsin   

Эта отладочная плата позволяет разрабатывать маленькие устройства USB. Чип AT90USB162, который установлен на плате, имеет встроенный аппаратный интерфейс, позволяющий изготавливать full-speed USB 2.0 устройства, соответствующие современным требованиям.

С помощью макетной платы AVR-USB162 и библиотеки LUFA Вы легко можете разработать собственные устройства HID (клавиатуры, джойстики, мыши, устройства ввода/вывода и т. д.) или сделать последовательный порт на классе CDC (виртуальный COM-порт), причем разрабатывать драйвер для устройств HID и CDC не нужно - они работают на всех современных компьютерных платформах. Программное обеспечение для разработки также присутствует на всех современных операционных системах - включая Linux, Windows, и Macintosh (Mac OS).

at90usb162-02-sch.jpg at90usb162-04IMG_8330.jpg at90usb162-04IMG_8334.jpg

На макетной плате AVR-USB162 установлены:
- miniUSB коннектор J1, через который питается плата.
- кнопка SW2 HWB, управляющая работой bootloader-а, и кнопка SW1 RESET.
- коннектор ISP/debugWIRE J4, через который можно запрограммировать плату с помощью стандартного программатора (avrdude, JTAGICE-mkII, PonyPROG, STK200, STK500, AVR Dragon, AVRISP-MkII, USBasp и проч.), а также отлаживать программу через аппаратный отладчик, поддерживающий шину debugWIRE (например, JTAGICE-mkII, AVR Dragon). Программирование и отладка работают в широко известных IDE AVR Studio и IAR Embedded Workbench.
- перемычка J3, управляющая напряжением питания ядра микроконтроллера (иногда это может понадобиться).
- индикационный светодиод VD1.
- макетное поле с шагом 2.54 мм (100 mil), которое можно при необходимости отпилить, уменьшив тем самым размер USB-устройства.
- контактные площадки P1..P22, на которые разведены порты микроконтроллера и питание.

AVR-USB162-pinout

Размеры платы с макетным полем 64.8 x 30.7 мм, без макетного поля 45.4 x 30.7 мм (для уменьшения размеров макетное поле можно отрезать). Толщина платы вместе с монтажом 11.5 мм (определяется самым высоким элементом на плате - ISP коннектором, он выступает над поверхностью TOP платы на 9 мм). USB-коннектор выступает за край платы на 2 мм.

[Дополнительные возможности портов ввода-вывода AT90USB162]

Все порты микроконтроллера AT90USB162 могут работать не только как простые ножки ввода вывода GPIO. Они также могут нести дополнительные функции, привязанные к богатой внутренней аппаратуре ядра AVR. В таблице ниже представлено краткое описание этих функций (полное описание см. в даташите на микроконтроллер AT90USB162).

Контакт платы Имя порта Описание возможностей
P1 PB0 ~SS, PCINT0. ~SS - этот вывод может работать как аппаратная выборка интерфейса SPI (Slave Port Select input). PCINT0 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 0).
P2 PB1 SCK, PCINT1. SCK - тактовый сигнал интерфейса SPI (Master Clock output, Slave Clock input). PCINT1 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 1).
  PB2 PDI, MOSI, PCINT2. Этот вывод не выведен на контакты P1..P22, поскольку используется для программирования ISP. PDI - SPI Serial Programming Data Input. Во время последовательного программирования AT90USB162 этот вывод используется как вход данных. MOSI - сигнал данных интерфейса SPI. PCINT2 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 2).
  PB3 PDO, MISO, PCINT3. Этот вывод не выведен на контакты P1..P22, поскольку используется для программирования ISP. PDO - SPI Serial Programming Data Output. Во время последовательного программирования AT90USB162 этот вывод используется как выход данных. MISO - сигнал данных интерфейса SPI. PCINT3 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 3).
P3 PB4 T1, PCINT4. эта ножка может работать как тактовый вход для таймера/счетчика 1 (Timer/Counter1 External Counter Input). Подробнее см. в статье "Использование 16-bit Timer/Counter1 для измерения и подсчета импульсов". PCINT4 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 4).
P4 PB5 PCINT5 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 5).
P5 PB6 PCINT6 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 6).
P6 PB7 OC0A, OC1C, PCINT7. OC0A и OC1C могут работать как выходы сигнала события совпадения таймера/счетчика 0 и 1 (Timer/Counter Compare Match Output). PCINT7 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 7).
P7 PC2 PCINT11 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 11).
P8 PC4 PCINT10 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 10).
P9 PC5 OC1B, PCINT9. OC1B - выход сигнала события совпадения таймера/счетчика 1 (Timer/Counter1 Output Compare Match Output). PCINT9 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 9).
P10 PC6 OC1A, PCINT8. OC1A - выход сигнала события совпадения таймера/счетчика 1 (Timer/Counter1 Output Compare Match Output). PCINT8 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 8).
P11 PC7 ICP1, INT4, CLKO. ICP1 - вход для захвата внешних импульсов (Timer/Counter1 Input Capture Pin). Может использоваться для измерения длительностей сигнала с помощью таймера 1. INT4 - внешний источник прерывания 4 (External Interrupt source 4). CLK0 - может работать как выход тактов генератора, эта возможность разрешается программированием фьюза.
P12 PD0 OC0B, ~INT0. OC0B - выход сигнала события совпадения таймера/счетчика 1 (Timer/Counter1 Output Compare Match Output). INT0 - внешний источник прерывания 0 (External Interrupt source 0).
P13 PD1 AIN0, ~INT1. AIN0 - положительный вход аналогового компаратора (Analog Comparator Positive input). INT1 - внешний источник прерывания 1 (External Interrupt source 1).
P14 PD2 AIN1, RXD1, ~INT2. AIN1 - отрицательный вход аналогового компаратора (Analog Comparator Positive input). RXD1 - вход приемника UART (USART1 Receive Data). INT2 - внешний источник прерывания 2 (External Interrupt source 2).
P15 PD3 TXD1, ~INT3. TXD1 - вход передатчика UART (USART1 Transmit Data). INT3 - внешний источник прерывания 3 (External Interrupt source 3).
P16 PD4 INT5 - эта ножка может работать как внешний источник прерывания 5 (External Interrupt source 5). К порту PD4 также подключен индикационный светодиод VD1.
P17 PD5 XCK1, PCINT12. XCK1 - тактовый вход для UART (USART1 External Clock). PCINT12 - этот вывод может также работать как вход внешнего прерывания по изменению логического уровня (Pin Change Interrupt source 12).
P18 PD6 ~RTS, INT6. ~RTS - управление входным потоком данных UART (USART1 Receiver Flow Control). INT6 - внешний источник прерывания 6 (External Interrupt source 6).
P19 GND Земля, общий провод всех сигналов, минус питания.
P20 VCC Напряжение питания портов ввода/вывода, либо 3.3V, либо 5V (зависит от положения перемычки J3).
P21 GND Земля, общий провод всех сигналов, минус питания.
P22 PD7 ~HWB, TO, ~CTS, INT7. HWB - Hardware Boot, вход активации бутлоадера (загрузчика программы через USB), подключен к кнопке SW2 HWB. T0 - тактовый вход для таймера/счетчика 0. ~CTS - управление потоком данных передачи UART (USART1 Transmitter Flow Control). INT7 - внешний источник прерывания 6 (External Interrupt source 7).

Сигналы совпадения таймера OC0A, OC1C, OC1B, OC1A, OC0B могут использоваться для генерации постоянного аналогового уровня и звуковых сигналов с помощью ШИМ (PWM). Сигнал совпадения выдается, когда содержимое счетчика таймера совпало с предопределенным заранее значением. Подробнее см. статью "ATmega16 - PWM с помощью T/C0, T/C1, T/C2" и даташит на AT90USB162.

[Чем программировать - USB bootloader Atmel, Flip DFU]

В микроконтроллер прошито заводское программное обеспечение (bootloader, называемое также DFU - Device Firmware Uploader или Device Firmware Upgrade), позволяющее загрузить программу пользователя в память микроконтроллера через интерфейс USB и запустить её на выполнение. Это позволяет писать и отлаживать программы, не имея вообще никакого отладчика и программатора. Конечно, не те удобства, что предоставляет аппаратный отладчик JTAGICE-mkII, но зато дешево и сердито, затраты для быстрого старта минимальные. Программа и технология, предоставляющая такие возможности, называется Flip (FLexible In-system Programmer), программа бесплатна и доступна для скачивания на сайте atmel.com. Подробная документация, как все это делается, также доступна, правда на английском языке.

После заливки firmware с помощью загрузчика Flip DFU сам загрузчик не стирается, поэтому Вы можете перепрошивать макетную плату через USB практически неограниченное количество раз. Это очень удобно использовать для обновления программного обеспечения в приборах, где работает макетная плата, потому что ISP-программатор оказывается не нужен.

Прошивку-bootloader, записанную на фабрике Atmel (она обеспечивает работу Flip), нельзя считать ISP-программатором, поскольку она защищена lock-битами. Для того, чтобы можно было воспользоваться ISP-программатором или debugWIRE-отладчиком, чип придется стереть, что полностью уничтожит Flip-bootloader. Но особо печалиться по этому поводу не надо, так как на сайте atmel.com доступен для свободного скачивания бинарник bootloader-a (см. [7]), и его всегда можно восстановить. Как я понял, использование Flip исключает применение для отладки обычного ISP-программатора и отладчика debugWIRE, и наоборот.

AT90USB162fuses.JPG AT90USB162lockbits.JPG

Установка программы, интерфейс Flip и работа с ним под Windows до предела упрощены. Скачайте инсталлятор по ссылке [6], установите. При подключении макетной платы AVR-USB162 через USB система запросит драйвера, подсуньте ей путь до c:\Program Files\Atmel\Flip 3.3.2\usb\ (это драйвер для bootloadera и Flip), после этого в системе появится устройство AT90USB162:
AT90USB162device.JPG

Запускаем программу Flip, выбираем в меню Device -> Select... -> AT90USB162, жмем вторую кнопочку со шнурком на картинке (Select a Communication Medium), выбираем USB, в появившемся маленьком окошке жмем Open. Вуаля! Появился нехитрый интерфейс программатора Flip:
AT90USB162flip01.JPG

Как видно на скриншоте, доступно для использованием пользователем только 12 килобайт памяти (4 килобайта съел Flip-bootloader).

Имеется также удобная консольная программа batchisp.exe, избавляющая от лишних телодвижений при программировании памяти микроконтроллера. Вот пример командного файла для программирования памяти чипа AT90USB162:

"c:\Program Files\Atmel\Flip 3.4.7\bin\batchisp.exe" -device AT90USB162 -hardware usb -operation erase f memory flash blankcheck loadbuffer release\psw-storage.hex program verify

@pause

batchisp-FLIP-AT90USB162-example

В этом примере сразу друг за другом выполняются 4 операции: очистка FLASH памяти чипа (команда erase), проверка качества очистки памяти (команда blankcheck), программирование памяти файлом release\psw-storage.hex (команды loadbuffer и program), проверка записанных данных программы (команда verify). Весь процесс занимает считанные секунды.

После программирования можно сразу запустить записанную программу firmware, если к списку команд добавить команду start. Команда start имеет следующий индекс:

start < reset | noreset > address

Если указана опция reset, то на ножке RESET микроконтроллера будет сформирован импульс сброса, который может использоваться для сброса внешних схем. Если к ножке сброса RESET микроконтроллера никаких устройств не подключено, то может быть указана опция noreset. Параметр address задает адрес, не который должен произойти безусловный переход (обычно это адрес 0). Пример:

"%ProgramFiles%\Atmel\Flip 3.4.7\bin\batchisp.exe" -device AT90USB162 -hardware usb -operation erase f memory flash blankcheck loadbuffer debug\psw-storage.hex program verify start noreset 0

[Если bootloader не работает, программа Flip не видит чип AT90USB162]

При исправной и правильной схеме может быть два варианта - у Вас стерт bootloader, либо записана пользовательская программа, которая получает управления вместо bootloader.

Если стерт bootloader - его надо восстановить с помощью ISP-программатора. Скачайте бинарник bootloader (см. [7]) и прошейте в чип AT90USB162.

Если запускается пользовательская программа, то bootloader можно запустить стандартной процедурой, описанной в документации:

- подключаем плату через USB
- нажимаем кнопку SW1 RESET
- удерживая кнопку SW1 RESET, нажимаем кнопку SW2 HWB
- удерживая кнопку SW2 HWB, отпускаем кнопку SW1 RESET
- отпускаем SW2 HWB

После этой процедуры у нас в системе должно появиться устройство LibUSB-Win32 Devices\AT90USB162 (см. в Диспетчере Устройств), и теперь снова будет работать программирование через USB с помощью программы DFU Flip. Если устройство LibUSB-Win32 Devices\AT90USB162 в Диспетчере Устройств не появилось, значит надо перепрошить bootloader (Вы его каким-то образом стерли).

[Если не устанавливается драйвер Flip для чипа AT90USB162]

Вы установили Flip, подключаете макетную плату к компьютеру, система Windows видит новое устройство и запрашивает драйвер. Но после того, как Вы ей указываете путь до драйвера %ProgramFiles%\ATMEL\FLIP 2.4.6\usb\, система говорит, что не нашла драйвер, и устройство остается в Диспетчере Устройств с желтым восклицательным знаком. Причина в том, что Вы по ошибке установили старый Flip, который не поддерживает чип AT90USB162. Удалите этот Flip, и установите самый свежий - на момент декабря 2011 это был Flip 3.4.5 for Windows (он написан на Java, если у Вас в системе не установлена подсистема Java, выбирайте для закачки полный пакет, где имеется Java Runtime Environment). После этого повторите процесс установки драйвера, указав папку %ProgramFiles%\ATMEL\Flip 3.4.5\usb\.

[Аналоги]

AVRopendous
Teensy USB Development Board
AVR-USB-162 от Olimex
Benito at90USB162 Board
Bumble-B AT90USB162 development board (fletchtronics.net)
Minimus AVR USB Dev Kit

[Проблемы и способы их решения]

См. [8].

[Ссылки]

1. Общее описание библиотеки LUFA и документация по библиотеке LUFA на русском языке.
2. Как из макетной платы AVR-USB162 сделать ISP программатор, совместимый с avrdude.
3. Примеры с сайта Olimex - для AVR Studio+WinAVR (gcc version 3.4.6).
- мигание светодиодом
- опрос кнопки
- генератор частоты
- демонстрационный код USB-мыши
- демонстрационный код виртуального COM-порта.
4. AVR-USB162: где найти рабочие примеры кода firmware и ПО хоста.
5. USB DFU Bootloader Datasheet site:atmel.com - описание bootloader (технология Flip) при работе через USB.
6. FLIP site:atmel.com - программа Atmel, с помощью которой Вы можете прошить плату через USB без программатора (используется USB DFU Bootloader, встроенный в микросхему AT90USB162). По этой же ссылке доступно для закачки firmware бутлоадеров DFU Flip (см. также [7]). Старая версия Flip 3.3.2 здесь.
7. bl_usb_162v105.zip - прошивка bootloader-а.
8. FAQ по макетной плате AVR-USB162 (чип AT90USB162).

 

Комментарии  

 
0 #31 Jack 27.07.2018 15:22
Подскажите, сколько я могу нагрузить на эту платку? Сам usb порт выдаёт 5V 500mA, и мне нужно нагрузить светодиодов на 480mA. Так вообще можно? И как вообще происходит питание оконечников через микросхему или на прямую от порта. Я не разбираюсь, а спалить контроллер не хочется. И ещё, сколько вообще потребляет платка и сколько в таком случае от 500mA остаётся под мои запросы?

microsin: вообще-то просто так нельзя. Во-первых, Вам следует учитывать, что 500 миллиампер это довольно большой ток, так что на резисторе R3 будет падать 0.5V, и еще довольно много на шнуре USB (в зависимости от его качества). Во-вторых, сам микроконтроллер потребляет ток около 50mA. В-третьих, если заглянуть в даташит, то станет ясно, что на одну ножку порта микроконтроллер а AT90USB162 можно подключить максимальную нагрузку не более 40mA, и это при соблюдении условия, что суммарно через все выводы микроконтроллер а и ножки GND и VCC должен протекать ток не более 200mA. Следовательно, между ножками порта и светодиодами, чтобы выдать токи порядка 400..450mA, следует ставить буферы.
Цитировать
 
 
0 #30 Андрей 01.12.2013 23:31
Скажите, можно ли использовать выводы SPI разъёма для общения с периферийными микросхемами?

microsin: да, можно.
Цитировать
 
 
+3 #29 Волька 17.04.2013 01:30
Вот как применил вашу макетную плату: http://ibnteo.klava.org/keyboard/catboard-newcaps2.jpg
Получился отличный контроллер клавиатуры. Если кому интересно, исходный код открыт: http://catboard.klava.org/ru.html
Цитировать
 
 
-1 #28 Igor 01.06.2012 19:10
Не подскажете, что происходит с платой после запуска бутлоадера стандартной процедурой (нажатие reset, reset удержание + нажатие HWB, отпускание reset, отпускание HWB). Далее Flip-пом считываем память программ и она пустая. Без процедуры изложенной выше, до запуска программы из Flip память программ читается правильно. Видимо после описанной процедуры управление не просто передаётся доунлодеру, но и стирается память программ?

microsin: к сожалению, не могу ответить максимально полно на Ваш вопрос. Попробуйте найти ответ в официальной документации Atmel. Насколько мне известно, после простого запуска бутлоадера и далее запуска Flip-а память чипа не стирается. Стирается она только после специального выбора функции Erase в программе Flip. А вот почему не читается память через Flip после нового запуска бутлоадера - не знаю. Возможно, что это сделано специально для защиты / копирайта, чтобы никакая грязная лапа не могла заграбастать код. Если что-то Вас не устраивает в таком поведении - пользуйтесь альтернативными бутлоадерами с открытым исходным кодом (см. например библиотеку LUFA) или напишите свой собственный.
Цитировать
 
 
-1 #27 Вадим 25.03.2011 01:05
LUFA - это говно полное, и примеры с сайта ATMEL тоже в AVR Studio не идут... А если пое...ся - пойдут, только изменить в исходниках ничего не получиться, драйверы запутаны просто пизде... их файлы раскиданы где попало, короче ХУ.. свой драйвер сделаешь!
Цитировать
 
 
0 #26 Айк 28.02.2011 18:22
Насколько я понял, разводка схемы, номиналы конденсаторов, резисторов разработана вами. Скажите пожалуйста, если этот контролер будет управлять большим нагрузками (к примеру коммутировать обмотки шагового двигателя), скажется ли это на работе USB шины? Вы тестировали схему в подобных условиях? И второй вопрос: чем отличается ваша схема от аналогичной Olimex?

microsin: схема разработана на основе starter-китов Atmel, Olimex и Teensy. Контроллер может управлять любыми нагрузками, если правильно спроектировать схему. Например, для устранения влияния помех нужно использовать оптронную развязку от силового оборудования и правильно организовывать заземление (зануление). В подобных условиях плата мною не тестировалась. Основные отличия AVR-USB162 от аналогичной Olimex (по мере уменьшения важности, ИМХО):
1. Цена.
2. Размер макетного поля, общий размер макетной платы. AVR-USB162 разрабатывалась не только для макетирования, но и для мелкосерийного изготовления малогабаритных USB-устройств радиолюбителями .
3. Наличие стабилизатора и коннектора для подключения внешнего питания на макетной плате Olimex. На макетной плате AVR-USB162 этого нет, эта плата по умолчанию предназначена для питания от USB.
4. В макетной плате AVR-USB162 имеется перемычка U3 для управления напряжением питания портов ввода/вывода чипа, на макетной плате Olimex такой возможности нет.
5. На AVR-USB162 обычно стоит кварц на 16 МГц, на Olimex AVR-USB-162 стоит кварц 8 МГц.
6. На AVR-USB162 обычно стоит коннектор ISP 6 pin (цоколевка Atmel), на Olimex AVR-USB-162 стоит коннектор ISP 10 pin.
7. На макетной плате Olimex имеется сигнал подключения порта USB - USB_P, на AVR-USB162 такого сигнала нет.
Цитировать
 
 
+1 #25 pavel 26.02.2011 13:48
Уважаемый microsin, есть ли меры предосторожност и для того, чтобы не повредить bootloader? Или в каком случае, при каких действиях bootloader будет поврежден? Заранее спасибо.

microsin: исходников фирменного бутлоадера Atmel нет, в документации я тоже ответа на Ваш вопрос я не встречал. Поэтому полно ответить на него не могу. В соответствии со здравым смыслом бутлоадер нельзя повредить самим бутлоадером, если, например, попытаться перезаписать область памяти бутлоадера с помощью Flip. Т. е. программой Flip повредить бутлоадер должно быть невозможно (даже если нажать в оболочке Flip кнопку Erase - при этом очищается область памяти, куда можно записать программу пользователя). А вот программатором ISP стереть бутлоадер чипа AT90USB162 можно. Кроме того, я отметил интересную особенность - в состоянии перемычек по умолчанию (как чип поставляется с завода) двоичный код бутлоадера с помощью ISP считать тоже нельзя - область памяти программ 0x0000..0x3FFF читается как вся заполненная байтами 0xFF, хотя в конце где-то должен быть бутлоадер.
Цитировать
 
 
+2 #24 pavel 26.02.2011 02:34
Установил FLIP. Выбираю чип ( Device->Select ) Но там у меня нету AT90USB162. Может нужна последняя версия FLIP?

microsin: конечно, скачайте последнюю версию, сейчас это Flip 3.4.2. У меня Flip 3.3.2, и там уже есть чип AT90USB162.
Цитировать
 
 
+1 #23 Gtor 15.02.2011 18:18
А есть какие-нибудь примеры на ассемблере, и вообще воспринимает ли макетная плата AVR-USB162 ассемблер, или нужен только Си? :sigh:

microsin: микроконтроллер у абсолютно все равно, на чем Вы пишете программу - на ассемблере, Паскале, Си, или даже в двоичных кодах. Но для USB на ассемблере Вы вряд ли найдете примеры для чипа AT90USB162, так как протокол USB слишком сложен для его реализации на ассемблере. Если же Вас не интересует USB, то можете брать любые примеры на ассемблере для семейства AVR ATmega, не привязанные к аппаратуре чипа. Этот ассемблерный код будет без проблем работать и на чипе AT90USB162, так как у него тоже ядро AVR ATmega.
Цитировать
 
 
-1 #22 Tim 15.02.2011 16:41
Уважаемый microsin, перекомпилирова л проект HID мыши, в makefile не была указана частота, добавил её:
...
## My
F_CPU = 16000000
CDEFS = -DF_CPU=$(F_CPU)UL

## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += $(CDEFS)
...
При построении проекта вижу в окне build следующее:

avr-gcc.exe -I"./.." -I"../conf" -I"../../../../at90usb162" -I"../../../../common" -mmcu=at90usb162 -DF_CPU=16000000UL -D AVRGCC -Wall -gdwarf-2 ...

где -mmcu=at90usb162 -DF_CPU=16000000UL, как я понимаю, и указывают компилятору микроконтроллер и частоту.
Прошиваю микроконтроллер и имею то же самое, что было, то есть ничего, Windows не видит никакого устройства.
Может ли быть дело сборке макетной платы, учитывая что светодиод всё-таки мигает как положено? Буду благодарен за любую помощь и направления куда копать.

microsin: возможно, что у Вас аппаратура, на которую рассчитана программа мыши, отсутствует в схеме, и поэтому программа мыши не работает. Смотрите исходники и соответствующую документацию по проекту мыши.
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Top of Page