Управление электрическими цепями через USB

Обновлено 23.11.13. Теперь устройство на заводской плате!

Многие из нас наверно хотели бы управлять электрическими цепями через комп. А че? неплохо было бы))) Представь, звонит тебе друг, говорит: «Через 20 мин буду», тут проходит 20 минут, звонок в двери, но как же впадлу вставать из-за компа, идти открывать двери и т.д. А представь иную ситуацию: звонок в двери, тут у тебя на мониторе вылазит сообщение типа «У Вас гости», ты нажимаешь кнопку на компе — открывается магнитный замок на дверях и ты орешь на весь дом: «Заходи», или тебе нужно включить электрочайник, свет или еще что то. В наше время это уже не фантастика а вполне реалистично, только вот из-за хреновой экономики далеко не каждый может позволить себе даже самый простейший «смарт-хаус», но если есть желание и прямые руки, то можно запросто сделать управление электрическими цепями через ПК.

В наше время достаточно много людей умеют программировать, они могут написать программку под комп, которая смогла бы управлять внешними устройствами, но как подключить тот же электрочайник к компу? Ну можно к примеру через LPT порт, только вот его уже редко где можно увидеть, что тогда остается? USB!!!

Давайте сделаем устройство, которое будет подключаться к USB и сможет управлять электроцепями(например, включать освещение), реагировать на замыкание кнопок(например, дверной звонок) и еще что-то.

Итак, из чего же мы будем его делать? Те, кто интересовался данным вопросом, наверно уже слышали об модуле Ke-USB24A.Описалово:

Модуль Ke-USB24A предназначен для сопряжения внешних цифровых и аналоговых устройств, датчиков и исполнительных механизмов с компьютером через шину USB. Определяется как дополнительный (виртуальный) COM порт. Модуль имеет 24 дискретные линии ввода/вывода (либо лог. 0 либо лог. 1) с возможностью настройки направления передачи данных (вход/выход) и встроенный 10-ти разрядный АЦП. Для управления модулем предусмотрен набор текстовых команд управления (KE — команды).

Отличительные особенности:

  • интерфейсный модуль для сопряжения по шине USB
  • определяется ОС Windows/Linux как виртуальный COM порт
  • не требует дополнительных схемных элементов, сразу готов к работе
  • 24 дискретные линии ввода/вывода с возможностью независимой настройки направления передачи данных (вход/выход) и сохранения настроек в энергонезависимой памяти модуля
  • встроенный 10-ти разрядный АЦП с гарантированной частотой дискретизации до 400 Гц.
  • динамический диапазон напряжения входного аналогового сигнала для АЦП от 0 до 5 В
  • набор готовых текстовых команд управления высокого уровня (KE — команды)
  • удобный форм-фактор в виде модуля с DIP-колодкой и разъемом USB-B
  • возможность питания как от шины USB так и от внешнего источника питания (режим выбирается джампером на плате)
  • возможность сохранения данных пользователя в энергонезависимой памяти модуля (до 32 байт)
  • возможность изменения строкового дескриптора USB устройства
  • каждый модуль имеет уникальный серийный номер доступный программно
  • поддержка ОС Windows 2000, 2003, XP 32/64 bit, Vista 32/64 bit и Windows 7 32/64 bit
  • поддержка OS Linux

Вроде бы это то, что нам нужно, НО… цена этого чуда начинается от $40. Наверно у вас уже пропало желание его покупать))).

Давайте лучше сами соберем подобный модуль, только чтобы он был доступный даже голодному студенту!

Из обязательных критериев: дешевизна и легко доступность компонентов, простота сборки.

В качестве микроконтроллера возьмем широко распространенный ATmega8 (без индекса L в конце). Характеристики нашего модуля будут такие:

  • Подключение к ПК через USB.
  • определяется ОС Windows как USB HID устройство, не требующее драйверов.
  • Сразу готов к работе.
  • 7 линий вывода с логическим состоянием (активен/неактивен).
  • 2 линии вывода с плавным управлением напряжения от минимума до максимума. Только это не ЦАП(цифрово-аналоговый преобразоватль) а ШИМ (широтно-импульсная модуляция). Но с помощью фильтра можно легко превратить в ЦАП.
  • 7 линий ввода с логическим состоянием (активен/неактивен).
  • 1 АЦП(аналогово-цифровой преобразователь) с возможностью подключения внешнего источника опорного напряжения (ИОН).
  • Возможность заливать новую прошивку прямо через USB.

Почему я выбрал именно HID а не виртуальный COM порт (CDC)? Во первых, не нужны драйвера, во вторых — HID в несколько раз меньше грузит микроконтроллер чем CDC, так как данные запрашиваются не постоянно, а только тогда, когда этого требует хост (компьютер), и вообще, COM порт уже отмирает, сейчас аппаратных COM портов уже практически нет, остались только виртуальные. Логические линии вывода предназначены для управления только двумя состояниями — включенный или выключенный, при выключенном на выходе (ножке микроконтроллера) будет 0В при включенном — 5В, сюда вы можете подключить просто светодиод и управлять ним с ПК, а можете подключить реле (через транзистор) и управлять более мощной нагрузкой (освещение и т.д.). Линии вывода с регулировкой напряжения(ШИМ выход) позволяют плавно менять напряжение на ножке микроконтроллера от 0В до +5В с шагом 5/1024В. Линии ввода с логическим состоянием предназначены для мониторинга состояния кнопок, ключей и т.д. Когда линия замкнута на землю (корпус, GND), ее состояние = 0, если не замкнута — 1. АЦП позволяет измерять напряжение, сюда можно подключить потенциометр, аналоговый термодатчик, или еще что то, только напряжение, на этой ножке не должно превышать напряжение питания. В качестве источника опорного напряжения для АЦП можно использовать как внешний ИОН, так и напряжение питания модуля. Чтобы при перепрошивке не приходилось подключать микроконтроллер к программатору, сделаем возможность заливки прошивки прямо через USB, без использования внешнего программатора.

Схема устройства:

Как видите, схема достаточно проста, только коннекторы я прикрепил на схеме не по порядку, это потому что у ATmega8 ножки каждого порта почему то расположены в разброс, зато на самой плате будет выглядеть красиво))).

Печатная плата:

Ну и в результате получилось вот что:

Теперь разберемся что куда будем подключать:)

  1. USB — Порт. Думаю его все знают.
  2. Индикатор питания.
  3. Кнопка сброса (перезагрузка).
  4. Логический вход 1.
  5. Логический вход 2.
  6. Логический вход 3.
  7. Логический вход 4.
  8. Логический вход 5.
  9. Логический вход 6.
  10. Логический вход 7.
  11. Вход АЦП.
  12. Вход для подключения ИОН.
  13. Этот контакт подключен к питанию устройства. Замкните перемычкой 12 и 13 контакты чтобы напряжение ИОНа было равно напряжения питания.
  14. Логический выход 1.
  15. Логический выход 2.
  16. ШИМ выход 1.
  17. ШИМ выход 2.
  18. Логический выход 3.
  19. Логический выход 4.
  20. Логический выход 5.
  21. Логический выход 6.
  22. Логический выход 7.

Устройство на заводской плате:

 

В этой версии платы добавлены защитные диоды BAV99 на все входы.

Внимание! В данной версии платы контактный входы немного перебазированы. В файлах прошивка именно для этой платы. Подробнее смотрите в файле main.c начиная с 36 строки.

 

Что такое GND?

Даже начинающий радиолюбитель знает что такое GND, но некоторым людям это кажется страшным буквами. GND — это, так сказать, общий контакт. Его еще называют землей и массой. Провод обычно черного света (иногда белого или еще какого нить). GND также подключается к металлическому корпусу устройства. На плате в большинстве случаев все свободное место заполняет GND в виде больших полигонов. На нашем модуле есть полигоны в виде сеточки, они так же соединяются с корпусом USB — разъема.

Программа для микроконтроллера.

Так как в статье я хочу рассказать как управлять цепями через USB с помощью готового модуля, то я не буду объяснять как работает программа микроконтроллера, снизу можете скачать исходники и посмотреть, там много комментов. Здесь я напишу просто об идентификаторах устройства.

Итак, в исходниках находится файл usbconfig.h, в нем есть строки

1
2
3
4
5
6
7
8
#define  USB_CFG_VENDOR_ID       0x10, 0x00
#define  USB_CFG_DEVICE_ID       0x01, 0x00
 
#define USB_CFG_VENDOR_NAME     'k','i','b','e','r','m','a','s','t','e','r','.','p','l','.','u','a'
#define USB_CFG_VENDOR_NAME_LEN 17
 
#define USB_CFG_DEVICE_NAME     'U','S','B','-','C','o','n','t','r','o','l'
#define USB_CFG_DEVICE_NAME_LEN 11

Первые две строчки — это ID производителя и ID продукта, такие есть у каждого USB устройства, только в этом файл указывается сначала младший байт, потом старший, в проге под комп — наоборот. Дальше идет имя производителя (вендора) и название устройства, также указывается длина строки в байтах. Программа ПК сначала будет искать устройств по ID и потом, среди найденных, будет искать по имени.

Прошивка устройства.

В скачанных файлах в папке MCU\usb_bootloader\ найдите файл main.hex — это usb-bootloader, его нужно залить в МК с помощью внешнего программатора. После заливки также нужно правильно установить фьюзы, в окне программатора STK500 должно выглядеть так:

Если вы пользуетесь другой программой, то можете просто ввести значения фьюз-битов HIGH и LOW (смотрите на скрин).

После удачной прошивки, можно попробовать прошить устройство через бутлоадер. Как он работает? При включении МК (просто при подаче питания, или после ресета) сразу запускается бутлоадер, он проверяет условие, если оно истинно, то запускается инициализация бутлоадера (комп при этом находит устройство). В качестве условия у нас будет «Логический вход 1 = 0», то есть, чтобы запустить бутлоадер, нужно замкнуть Логический вход 1  на GND и нажать на устройстве кнопку RESET, в диспетчере устройство должно появиться новое HID устройство, так же не требующее драйверов:

Такс, теперь в папке MCU\USB_Control\default\ запускаем файл boot.bat, должно выскочить окошко, в котором будут бегать циферки:

Если окно сразу же закрылось, тогда вы сделали что то не правильно. Если же все ок, тогда внешний программатор для этого устройства Вам уже не понадобится. Теперь можете отключить Логический вход 1  от GND. И на всякий случай, нажмите RESET. В диспетчере устройств так же должно появиться HID устройство (комп напишет что найдено новое). Убедитесь, что в диспетчере появилось именно это устройство.

Хост

Хост — это то, что будет управлять устройством, в нашем случае — компьютер. Управление устройством с ПК я опишу более подробно.

Для программистов Delphi написать прогу управления HIDом не составит проблем так как в инете куча инфы. А вот программистам C++ Builder не все так сладко, но, как оказалось, не так все и плохо))). В инете я нарыл библиотеку hidlibrary.h, вот с ее помощью мы будет работать с HID устройством.

Скачайте исходники и запустите USB Control.cbproj (C++ Builder 2010).

В файле hidlibrary.h в самом верху есть строка

1
const char idstring[] = "vid_0010&pid_0001";

Да-да, это те же самые ID, которые мы указывали в usbconfig.h. Если будете менять VID and PID, то не забывайте отредактировать эту строку. Кроме данной строки в файле hidlibrary.h нам больше ничего редактировать не нужно, можете его закрыть.

Открываем main.cpp, вверху указан относительный адрес к файлу usbconfig.h», это нужно чтобы библиотека HID знала имя вендора и продукта.

1
#include "../MCU/USB_Control/usbdrv/usbconfig.h"

Создадим форму, на форме будет один CheckListBox для управления логическими выходами, 2 ScrollBar для управления ШИМ каналами, один ListBox для отображения логических входов, один Label для отображения состояния АЦП и один таймер. Должно получиться вот такое:

Переименуйте СкрулБары в ScrollBar_PWM1 и ScrollBar_PWM2, в их свойствах установите Max=1023.

Создадим структуру

1
2
3
4
5
6
7
8
9
10
#pragma pack (push, 1)
struct status_t{
    unsigned char    logical_outputs;
    unsigned char    logical_inputs;
    unsigned char    ADC_DATA;
    unsigned short int    PWM1;
    unsigned short int    PWM2;
} ;
struct status_t    DeviceStatus;
#pragma pack ( pop)

#pragma pack нужна чтобы компилятор не выравнивал структуру. В logical_outputs хранятся состояние всех логических выходов, в побитном режиме, то есть, первый бит хранит состояние первого выхода, второй — второго и так до седьмого. Аналогично logical_inputs хранит состояние логических входов. В ADC_DATA хранится состояние АЦП, минимальное значение 0, максимальное — 255. В PWM1 хранится состояние первого ШИМ выхода (плавная регулировка напряжения), в PWM2 — состояние второго, минимальное значение 0, максимальное — 1023.

В программе ПК нужно считать с микроконтроллера эту структуру, ну и далее обработать принятые данные. Чтобы установить новые значения выходов, нужно сначала записать в структуру новые значения, а потом отправить измененную структуру на микроконтроллер. При установке новых значений нужно редактировать только первый, 4 и 5 элементы, редактирование остальных двух не даст никакого эффекта.

Далее создаем экземпляр класса

1
HIDLibrary <status_t> hid;

И добавляем функцию connect().

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int connect(void)
{
   int i, n, res=0;
   string exampleDeviceName = "";
 
   exampleDeviceName += vendorName;
   exampleDeviceName += " ";
   exampleDeviceName += productName;
 
   n = hid.EnumerateHIDDevices();
 
   for (i=0; i<n; i++)            // ищем наше устройство
   {
      hid.Connect(i);
 
      // GetConnectedDeviceName() возвращает string,
      // где через пробел указаны vendor и product Name.
      // Сравниваем, если совпало - значить устройство наше
      if ( hid.GetConnectedDeviceName() == exampleDeviceName )
      {
         res = 1;
         break;
      }
   }
   return res;
}

Теперь данные с HID-устройства можно запросить с помощью функции hid.ReceiveData, указав в качестве параметра указатель на структуру, только перед запросом нужно проверить, подключено ли устройство:

1
if  ( connect() ) hid.ReceiveData(&DeviceStatus);

Аналогично можно передать данные в устройство:

1
if ( connect() ) hid.SendData(&DeviceStatus);

А теперь давайте допишем нашу программу (или просто скачайте исходники, там все готовое))).

Добавьте где нить в коде (лучше сразу после структуры) эти строки:

1
2
char  vendorName[]  = {USB_CFG_VENDOR_NAME, 0};
char  productName[] = {USB_CFG_DEVICE_NAME, 0};

Так как нужно будет работать с отдельными битами, объявим несколько дефайнов:

1
2
3
4
#define sbi(reg,bit) reg |= (1<<bit) // установить бит
#define cbi(reg,bit) reg &= ~(1<<bit) // сбросить бит
#define ibi(reg,bit) reg ^= (1<<bit) // инвентировать бит
#define CheckBit(reg,bit) (reg&(1<<bit)) // проверить бит

В свойствах таймера укажите Enabled = True, Interval = 500. Щелкните по нем дважды и в обработчике напишите

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    if (!connect()) return;        // Выходим, если устройство не подключено
 
    hid.ReceiveData(&DeviceStatus);    // Читаем данные с устройства
 
    for (char i = 0; i < 7; i++)
        CheckListBox_LogOuts->Checked[i] = CheckBit(DeviceStatus.logical_outputs, i);
 
    ScrollBar_PWM1->Position = DeviceStatus.PWM1;
    ScrollBar_PWM2->Position = DeviceStatus.PWM2;
 
    ListBox_LogInputs->Clear();
    for (char i = 0; i < 7; i++)
        ListBox_LogInputs->Items->Add(" Лог. вход "+IntToStr(i+1)+" = "+BoolToStr(CheckBit(DeviceStatus.logical_inputs, i)));
 
    Label_ADC->Caption = DeviceStatus.ADC_DATA;

Думаю, тут все понятно и объяснений не требует.

Кликните дважды по CheckListBox, в обработчике напишите

1
2
3
4
5
6
for (char i = 0; i < 7; i++) {
if (CheckListBox_LogOuts->Checked[i]) sbi(DeviceStatus.logical_outputs, i);
else cbi(DeviceStatus.logical_outputs, i);
}
 
if ( connect() ) hid.SendData(&DeviceStatus);

Тут копируется состояние чекбоксов в элемент структуры, после чего структура отправляется в МК.

Осталось сделать управление ШИМ выходами. Кликните один раз по ScrollBar_PWM1, зажмите Shift и выбирите ScrollBar_PWM2, короче нужна выделить 2 скрулбара, слева откройте события (Events) и в OnChange укажите тот же обработчик, что и в CheckListBox, а в обработчике пред последней строкой добавьте:

1
2
DeviceStatus.PWM1 = ScrollBar_PWM1->Position;
DeviceStatus.PWM2 = ScrollBar_PWM2->Position;

Все, можно компилировать!

Тест-драйв.

Итак, все готово: устройство собрано, микроконтроллер прошит, программа для компа создана, можно протестировать.

Подключите устройство к ПК, запустите программу. Слева в листбоксе отображается состояние всех логических входов, если, к примеру, Логический вход 1 не замкнут на GND, тогда будет написано «Лог. вход 1 = -1», если подключен, то «Лог. вход 1 = 0». Вот скрин:

Под этим листбоксом отображается результат преобразования АЦП. Замкните вход АЦП на минус, тогда результат будет равен 0, замкните на + питания, результат будет 255. Можно подключить сюда потенциономер, или еще что. Напряжение на ножке АЦП можно вычислить по формуле: Напряжение_ИОН/255*результат_АЦП.

Теперь подключите какую то маленькую нагрузку к Логическом выходу 1 (светодиод или просто вольтметр). Поставьте галочку возле «Лог. выход 1» — светодиод загорится.

Подключите вольтметр к первому ШИМ каналу, покрутите ползунок — напряжение будет меняться.

Завершение.

Теперь можете сделать на основе этого модуля управление освещением или ще какими о электроприборами. К логическим входам можно подключить кнопку дверного звонка или какой то другой ключ. К входу АЦП можете подключить аналоговый датчик влажности, термодатчик или фоторезистор (будете занать, ночь на улице или день)))).

Вопросы задавайте в коментах.

Приобрести устройство можно в нашем интернет-магазине
Скачать файлы статьи.

Вливайтесь в общение

410 комментариев

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

  2. Это потому, что вы неправильно фьюзы установили. Какие именно фьюзы меняли?

  3. С устройством разобрался! Все работает. Но вот не получается сделать передачу от АЦП в 10 разрядов. Подскажите пожалуйста!=) Заранее благодарен!

    1. Я меня тоже не определяется, как решил этот вопрос?

  4. мне нужно организовать 10 битную передачу от АУП. Это что нельзя сделать?

    1. Можно, но точность будет на уровне 8-бит

  5. а как можно узнать параметры элементов схемы или их марку — диоды и конденсатор возле USB-разъема не расписаны

    1. то не диоды а стибилитроны. Кондер где то на 10-100 мкф

  6. Замечательное устройство, собрал = работает!
    Расскажите пожалуйста, как работать с Вашим устройством в Linux?

  7. Заменить Atmega8 на Atmega8515 представляется возможным?

    1. лучше на 8535, там просто в настройках проекта выбрать нужный микроконтроллер

      1. Atmega8515 лежит пылится хочется задействовать.
        Немного другие порты и их больше.
        С какими проблемами столкнусь?

        1. да проблем не будет. Я просто с 8515 никогда не работал)))))

  8. 1) Подойдет ли Atmega8А и надо ли менять что-то в проекте или можно заливать main.hex из архива как есть?
    1) В STK500 галочка во фъюзе означает, что пишем в него 1 или 0 как в PonyProg и AVRDUDE?
    Заранее спасибо, очень интересный проект!

  9. 1. Подойдет, менять ниего не надо.
    2. Да просто через аврстудию установите фьюзы как на скрине

  10. Здраствуйте! Хорошая информация очень нужная большое спасибо! Подскажите пожалуйста как выставить фьюзы в СODVISION там для Mega8 такие:CKSELO0,CKSELO1,CKSELO2,CKSEL3, SUT0,SUT1,BODEN,BODEN, BODLEVEL,BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,CKOPT,WDTON,RSTDISBL. Я полный профан только учусь! И еще мое устройство обнаружил диспечер задач все нормально (виндовс реагирует на нажатие ресет адекватно)но boot.bat не запускается. Я сначала загрузил файл main.hex устройство не определялось но когда загрузил далее USB_Control.hex тогда определилось. Подскажите пожалуйста что дальше сделать что бы запустился boot.bat (фьюз-битов HIGH и LOW где они я не нашол))))) в код висион.в диспечере устройств окончание идентефекатора другие числа наверное это нормально. Большое спасибо за ответ.

    1. вообще то, в статье написано, что для того, чтобы запустился бутлоадер (который в main.hex), нужно прижать лог.вход 1 к земле

  11. Условие логически вход1 =0 (третья ножка микросхемы на землю ) я выполняю а «в папке MCU\USB_Control\default\ запускаем файл boot.bat» окошко появляэтся кратковременно если это фюзы подскажите их инициализацию в окне СodеVisionAVR если можно, или что это может быть за неполадка. Спасибо.

    1. попробуйте просо прошить другой програмой, где можно задавать HIGH и LOW, я просто кодевиденом никогда не пльзовался, а программировал всегда через avr studio

  12. Да я думал об этом но у меня старый програматор STK200 (на LPT порт) Вчера скачал аврстудио там STK500,может в начальных версиях есть возможность STK200. Я понял что это всетаки фьюзи попробую с другой програмой. Спасибо!

    1. в ICC по-мойму можно задавать HIGH и LOW

  13. Здраствуйте. Скажите окошко с цыферками бегающими (запускаем файл boot.bat)если закривается через несколько секунд но цыферки бегают, это означает что все нормально или надо что бы оно вообще не закрывалось?

    1. это значит, что прошилось нормально. А вообще, чтобы было видней, откройте bat файл блокнотом и добавьте в конце «pause» (с новой строки)

  14. Спасибо! Движемся дальше) Может кому надо для CodeVision поставить фюзы то ставятся метки только возле: BOOTRST =0, BOOTSZ0=0, BOOTSZ1=0,а возле остальных полей ничего не ставится. Ещераз спасибо!

  15. Здраствуйте. Подскажите пожалуйста по возможности как устранить ошибки в програме при компиляции(редактор Microsoft Visual C++)
    пишет что ошибка в hidlibrary.h(20)как такое может быть, может дело в редакторе?

    Compiling…
    портUSB.cpp
    c:\портusb\hidlibrary.h(20) : error C2258: illegal pure syntax, must be ‘= 0’
    c:\портusb\hidlibrary.h(51) : see reference to class template instantiation ‘HIDLibrary’ being compiled
    c:\портusb\hidlibrary.h(20) : error C2252: ‘datasize’ : pure specifier can only be specified for functions
    c:\портusb\hidlibrary.h(51) : see reference to class template instantiation ‘HIDLibrary’ being compiled
    C:\портUSB\портUSB.cpp(39) : error C2065: ‘USB_CFG_VENDOR_NAME’ : undeclared identifier
    C:\портUSB\портUSB.cpp(40) : error C2065: ‘USB_CFG_DEVICE_NAME’ : undeclared identifier
    c:\портusb\hidlibrary.h(20) : error C2258: illegal pure syntax, must be ‘= 0’
    C:\портUSB\портUSB.cpp(42) : see reference to class template instantiation ‘HIDLibrary’ being compiled
    c:\портusb\hidlibrary.h(20) : error C2252: ‘datasize’ : pure specifier can only be specified for functions
    C:\портUSB\портUSB.cpp(42) : see reference to class template instantiation ‘HIDLibrary’ being compiled
    Error executing cl.exe.

    И еще вопросик, можно ли изменить прогу контролера чтобы выходов было 10, а входов 4 соответственно, насколько велики масштабы изменения кода?
    Спасибо.

    1. этот код под с++ builder, а не Microsoft Visual с++.
      эти изменения внести можно, просто вместо 2 входов сделайте еще 2 выхода

  16. Здравствуйте, сделал это устройство с той лишь разницей, что atmega8 в tqfp корпусе и кварц на 12 МГц (на 16 в продаже не было). Соответственно, соединил лишние ножки 4,6 (vcc) и 3,5,21 (gnd), 19 и 22 остались невостребованными, остальные паял в соответствии с даташитом. Шьется внешним программатором «на ура», фьюзы поменял, как написано в инструкции (шил с помощью avrdude через ft232rl). Но после прошивки (либо bootloader’а с последующим замыканием входа 1 на gnd, либо напрямую usb_control.hex) в системе определяется как неизвестное usb устройство. Что мог сделать не так? (Все ноги и дорожки прозвонил)

    1. прошивка (бутлоадер и основная), расчитаны на частоту именно 16 мгц, на других работать не будут

      1. Ясно, не знал, тогда буду переделывать. Спасибо за ответ.

  17. Здравствуйте!
    Скажите пожалуйста, насколько адекватно работает это устройство, если их подключить большое количество (8-9 штук) через usb hub? И нету ли аналогов с бОльшим количеством входов/выходов/линий ШИМ и АЦП?

    1. дело в том, что для кождого устройства есть отдельный идентификатор, можно подкючить до 127 устройств, только для каждого должен быть свой идентификатор

  18. Спасибо за простое и доступное описание устройства!
    Я мало разбираюсь, поэтому не пинайте если спрашиваю глупость 🙂

    1) Reset кнопка не соединена с землей на плате, ее вроде развернуть надо?
    2) Я прошил МК и программатор (USBasp) больше его не видит. Это нормально?

    1. 1) Вообщето, она соединена с землей, на рисунках это хорошо видно.
      2) Конечно не нормально))) программатор должен его видеть.

      1. 1) Изучил как работает кнопка))) Действительно все ок ))
        2) Я имел ввиду после установки фьюзов. Полагаю изза установленного SPIEN, как на скрине.

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

    1. не обязательно. Он нужен, чтобы при перепрошивке не нужно было пользоваться внешним программатором

  20. Спасибо. Скажите, мне нужно немного переделать программу МК. Прием данных с компьютера осушествляется через прерывание «int» но я не смог найти каким образом происходит передача в ПК. В основном цыкле идет запись значений портов и АЦП в структуру но никакого намека на передачу данных, никакие функции передачи там не вызываются. Как именно и где происходит передача данных с структуры в USB?

    1. в коде прошивки естьтакая штука:
      if(rq->bRequest == USBRQ_HID_GET_REPORT){ // если комп запрашивает данные
      usbMsgPtr = (unsigned char*)&DeviceStatus; return USB_MESSAGE_LENGTH; // указываем на структуру

  21. Подскажите пожалуйста, реально ли переделать код прошивки под другую архитектуру МК (ARM)?

    1. ну, это придется основную часть переделывать.

      1. Я так понимаю придётся переделывать все дефайны? или только main.c?

  22. И ещё какие основные файлы необходимы для создания прошивки (только для работы с USB)?

      1. Т.е. все файлы которые лежат в папке usbdrv привязки к конкретному микроконтроллеру не имеют? и нужно переделывать только main.c?

        1. на других мк юсб совсем по другом сделан

          1. Я ипользую STM32F100RB на котором нет аппаратного USB. Вот я и хочу сфорганить чтобы он работал как HID устройство, а не как виртуальный сом-порт.
            По этому я и спрашиваю есть ли привязка тех инклудников, что в папке usbdrv, к конкретному МК. Я так… мельком просмотрел их, вроде никакой привязанности к Atmega8 я не увидел, хотя может я ошибаюсь

          2. там куча ассемблерских вставок, которые будут работать только на avr

  23. Каую версию AVRstudio использовали и нужны ли к ней специальные библиотеки?

    1. AVRstudio + тулчейн, больше ничего не нужно

  24. Здравствуйте. Если делать 10 выходов и только 4 входа,какие файлы надо будет изменять?

      1. main.c, который в папке USB control и main.ccp в папке PC?

  25. так я не понял, чтобы залить сначала main.hex, нужен другой программатор или это делается собранным по схеме?

    1. чтобы залить любой *.hex файл в микроконтроллер, нужен любой ISP программатор. Обычно программируется уже на собранном устройстве

  26. а какую программу для этого использовать?

    1. это в зависимости от того, какой программатор вы используете. Вообще, заливка прошивки в AVR очень хорошо описана в инете

      1. у меня плата, что приведена на здесь схеме
        я так понял, ее можно использовать и для прошивки тоже, или нет?

        1. да, можно программировать микроконтроллер прямо на этой плате. Вам нужно подключить к ней сигналы MOSI, MISO, SCK, RESET и GND от программатора, первые три выведены справа на штыри

          1. так все-таки программатор иметь нужно?
            из статьи я понял, что плата заменяет внешний программатор

          2. в статье написано, что внешний программатор нужен только один раз, для прошивки бутлоадера.

  27. Здравствуйте! Тут http://chip.at.ua/index/upravlenie_vneshnimi_nagruzkami_cherez_usb_s_pomoshhju_ke_usb24a/0-18 описана схема подключения 24-х светодиодов.
    1) Скажите пожалуйста, есть ли подобный микроконтроллер, который бы управлял 80-ю светодиодами, причем каждым отдельно?
    2) Можноли как нибудь соединить в параллель два микроконтроллера и тем самым увеличить количество выходов для управления?

    1. если нужно больше выходов, то можно использовать микроконтроллер с большим количеством ножек (мега8535, мега128 и т.д.), или же, использовать блок сдвиговых регистров 595. Как по мне, предпочтительней второй вариант

      1. Далековат я пока от всего этого, только пытаюсь вникнуть. 1)А сколько выходов у ATMega8535?
        2)Изменится ли схема по сравнению с той что приведена выше? 3)Появилась идейка сделать светомузыку из 80-ти светодиодов, нужно чтобы на каждый LED можно было подать питание отдельно от остальных. Чтобы программно можно было описать время горения и интервалы между зажиганием светодиода. Возможно ли выполнить такое с помощью ATMega8535?

        1. у ATMega8535 по-мойму 40 ног, схема, конечно, поменяется.
          3) лучше мега8 + 74HC595

          1. Тогда нужно два микроконтроллера по 40 ног, их можно в одну схему запаять, чтобы через один порт подавать на них управление? У мега8 + 74НС595 сколько ног? Ну и вобщемто похоже все равно не решит это проблему, т.к. нет схем у меня на эти микроконтроллеры. Но все равно, хотелосб бы услышать ответы, может быть это меня приблизит к цели хоть на немного )

          2. почитайте в инете, как подключить 595 к атмеге. У 595 есть 8 выхдов и эти микры можно соединять параллельно, можно хоть и 1000 выходов сделать.

  28. Здравствуйте, есть желание собрать сей девайс, но при по пытке открытия файла печатки в DipTrace выдаёт ошибку , изменение графического режима не помогает. Как исправить эту проблему?

    1. 90% что у вас старая версия, скачайте последнюю

  29. Здравствуйте, для тех кому мало 1го АЦП или 8ми входов выходов, есть возможность подключить 2 и более таких устройств и управлять ими из одной программы (ХОСТа), что и было реализовано мною на практике. Делается это очень просто, если интересно, то спрашивайте, по мере возможности подскажу.
    А теперь вопрос к автору: Какая максимальная частота опроса данного USB устройства, т.е. с какой максимальной частотой мы можем получать и передавать актуальные данные по USB на устройство?

    1. Точно не скажу, но 3 раза в секунду точно можно. Максимальная частота опроса сильно зависит от загруженности МК

  30. Здравствуйте, пара вопросов:
    1. Можно ли купить готовый девайс или хотя бы плату к нему в Киеве?
    2. Реально ли без «глубокого погружения» в программирование самому написать программу для управления устройством с помощью обычного usb-геймпада, или это слишком сложно?

    1. 1. Сорри, но последний девайс месяц назад продал, если сильно надо, то могу в течении двух недель собрать.
      2. Лучше какой нить обычный геймпад (от денди/сони) подключить к мк, у него интерфейс spi

      1. Нужно собрать систему дистанционного управления. Предполагается, что с одного ноута (идеально — с помощью чего-то вроде геймпада, для удобства, но можно и с клавиатуры) через вайфай и другой ноут управляем юсб-устройством:

        (геймпад) — ноут ->>>>>- ноут — юсби_девайс

        Команды управления подавать надо достаточно часто, посему нажимать мышкой на кнопки/чекбоксы на экране не вариант.

        Посему хотелось бы купить само устройство или даже два, т.к. нужно передавать более 10 команд. Срочности особой нет, вопрос — какова цена?
        Плюс не помешала бы помощь в программировании вышеуказанной связки — ессно, небесплатная.

        1. ну, пример управления входами/выходами есть в статье, как на С++ работать с геймпадом написано в инете(насколько помню, это не сложно).
          На счет устройств, напишите мне на имейл admin@kibermaster.net

  31. Где можно поменять надпись Лог.выход? Никак не могу найти.

    1. там прямо в свойствах компонента

      1. Поменял текст Лог.вход, а где Лог.выход не найти ( в свойствах не найти. Может не там ищу.

  32. Хочу сделать 4 входа и 10 выходов. Можете подсказать что надо поменять в прошивки микропроцессора и какую лучше использовать программу? Спасибо заранее.

    1. советую немного подучить программирование, а там и вопрос отпадет))

      1. Хорошо, но не понимаю почему avr studio выкидывает usbdrv/usbdrv.h: No such file or directory если этот файл есть.

        1. я так понял, вы в проекте что то переделали? Тогда не забудьте добавить в линкер папку usbdrv (через Configuration)

          1. Я поменял пины для линий входа/выхода. добавил в древо проекта файлы (AVR STUDIO 5.0 справа окно), но всё равно ошибка

          2. в студии 5 либа usb не кмпилируется

          3. Разобрался, но не меняя ничего в коде выкидывает ошибку ‘for’ loop initial declaration used outside C99 mode

          4. ничего не меняя, оно бы работало, но вы как то отключили поддержку C99. В конфиге должна быть опция -std=c99

          5. Последний вопрос ) добавил 3 выхода вместо 3 входов, и в проге для компа, на некоторых выходах галочка проподает сразу после нажатия. Менял PORT и DDR

          6. я так понимаю где то ещё надо дефинировать выходы

          7. Я просто хз что именно вы там переделали)))

  33. unsigned char* logical_inputs_PORT[4] = {(u8*)&PIND, (u8*)&PINC, (u8*)&PINC, (u8*)&PINC};
    unsigned char logical_inputs_PIN[4] = {1, 3, 2, 1};

    unsigned char* logical_outputs_PORT[10] = {(u8*)&PIND, (u8*)&PINC, (u8*)&PINC,(u8*)&PORTB, (u8*)&PORTB, (u8*)&PORTB, (u8*)&PORTB, (u8*)&PORTD, (u8*)&PORTD, (u8*)&PORTD};
    unsigned char logical_outputs_PIN[10] = {0, 5, 4, 5, 4, 3, 0, 7, 6, 5};

    и потом

    DDRB = 0b00111111; PORTB = 0b00000000;
    DDRC = 0b00110000; PORTC = 0b00001110;
    DDRD = 0b11100001; PORTD = 0b00000010;

    в проге для компа for (char i = 0; i < 7; i++) вместо 7, 4 и 10 соответственно. и всё

    1. еще нужно сделать, чтобы на комп передавалось не 7, а 10

        1. в прошивке мк и коде программы пк

          1. struct status_t{
            unsigned char logical_outputs; // логические выходы, состояние 7 выходов записано побитно
            unsigned char logical_inputs; // логические входы, состояние 7 входов записано побитно
            unsigned char ADC_DATA;
            unsigned int PWM1;
            unsigned int PWM2;
            } ;

  34. Здраствуте!
    Подскажите пожалуйста!
    У меня программатор ponyprog схема на LPT(5-проводков)
    можно ли на нем прошить?
    На ponyprog какие фюзы надо ставит?
    У меня кварц 16,368мгц а по схеме 16мгц подойдет ли?
    Кто нибудь собрал прогу на дельфи? если есть поделитесь опытом !
    Спасибо!

    1. Сорри, но я понипрогом не пользуюсь, советую спросить на форуме по електронике.
      Кварц нужен именно 16, другие работать не будут

  35. Здравствуйте! Собрал сей ваш девайс, пока что только на макетной плате. В системе определяется, всё прошивается-с этим проблем нет. Но есть другая-при попытке установить первый раз на логическом выходе единичку, операция проходит успешно. Когда снимаешь галочку из чекбокса того же бита-светодиод гаснет, тут вроде бы как всё нормально, но если попытаться установить бит снова-то уже ничего не работает… Контроллер как бы «зависает» что ли, и уже не хочет ничего принимать и передавать на хост. Такая же ситуация и с логическими входами. При замыкании его на землю так же ничего не происходит, будто «повис», а нолик в программе на компе появляется только тогда, когда на плате контроллера нажимаешь RESET, не размыкая при этом лог. вход. Если же его разомкнуть, то в проге тоже ничего не изменится(не появляется единичка) до тех пор, пока снова не будет сброс контроллера. Подскажите, в чём тут может быть дело,пожалуйста, второй день голову ломаю. Вместо ATmega8 я применил ATmega8A. В инете нашёл инфу, что они практически идентичны за исключением того, что последняя меньше кушает и обладает улучшенными частотными хар-ками.

    1. Да, можно и это мк. Покажите фотки платы с обеих сторон

      1. а как мне это сделать? я не вижу тут на сайте каких либо кнопок, чтобы прикрепить файл

        1. Загрузите на радикал и вставьте сюда.
          Я спать, завтра отвечу

          1. Промойте плату, тут же все контакты флюсом забиты, я вообще хз, как оно компом определилось так как на ножках кварца и линиях USB большая частота

          2. Не понял…Вы имеете в виду, что я D+ и D- к кварцу припаял что ли?

          3. Распайка в точности по Вашей схеме, которую вы выкладывали, в DipTrace

          4. я имею ввиду, что плату промыть надо

  36. Ну как то так) Последний растворитель истратил остатки, поэтому местами канифоль осталась, прошу извинить))

    1. поковыряйте чем то между контактов, ато там флюс остался. Потом промойте плату щеткой с мылом под горячей водой

    1. Нужно еще чтобы стабилитроны стояли прямо на дорожке между резистором и usb разъемом. Если поставить слишком далеко, то иногда не работает.
      Пишите через Reply, иначе буду удалять комменты

      1. а какова их роль? почему именно на 3,6 вольта?

        1. напряжение на ножках мк 5В, а юсб надо 3,3, вот стабилитроны и понижают. Учитывая то время, которое у вас ушло на попытки запуска на макетке, я бы посоветовал собрать на нормальной плате

          1. Здравствуйте ещё раз) Проблема была в стабилитронах) Поставил другие-всё заработало без зависонов) Убрал ШИМ выходы, на место свободных пинов добавил ещё 1 вход и 1 выход, дабы получить полноценную шину приема-передачи данных по 1 байту каждая) Написал свою программу для компа на Делфи, а то Ваша как-то с тормозами работает, да и в Делфи привычней) Спасибо за идею, задумка очень хорошая, респект))))

          2. здравствуйте. не могли бы Вы поделиться исходниками программы на Дельфи?
            Какой компонент можно использовавать для работы с устройством?

          3. Были бы, я бы поделился)))) Сам я на дельфи не пишу

  37. P.S…У вас в статье ШИМ-выходы обозначены неверно…. 15 и 14 пин микросхемы на самом деле они, а не 17-18.

    1. извиняюсь, опечатка вышла с 17-18))) ….а не 16-17(вот так)

  38. Здравствуйте, сделал Ваш девайс, добавил только «штырьки» земли, для удобства подключения нагрузок. Подскажите пожалуйста про АЦП, Подставляю значение 60,перемычка 12-13, в фомулу «Напряжение_ИОН/255*результат_АЦП». 5/255*60=0.00033. Замерял пальчиковую батарейку 1.32В. Составил пропорцию 255=5/60=х х=1.27В. Можно ли мерить 12В, не изменяя схему?

    1. Можно. Поставьте на входе резисторный делитель. К примеру, если будет стоять делитель на 3, тогда результат измерения нужно умножить на 3

  39. Доброго времени суток.
    Приятно, когда создатель устройства поддерживает советами начинающих инженеров:)
    Я как раз из таких)
    я хочу сделать данный девайс.
    Вопрос в следующем:
    1) У Вас использованы SMD элементы в схеме. Что посоветуете: обычные резаки и кондеры или же лучше SMD?(есть паяльная станция, думаю с припайкой проблем не будет)
    2) Для создания печатной платы каким методом пользуетесь обычно(фоторезист или просто утюг и лист с распечатанной схемкой?)
    3) Для разводки схемы пользовались PCADом? Почему на схеме есть отличия в креплениях ножек ввода/вывода к МК. На печатке они с одной стороны, а в схематике по разные стороны? А! или в схематике просто ножки не по порядку! Тогда вопрос: при трассировке они станут как на реальном МК по порядку или что?
    4)Конденсатор тот что мужду «землей» и питанием он электролитический?Сколько он емкостью поконкретне?
    Вопрос уже был, я знаю, но вы ответили на него расплывчато(«Кондер где то на 10-100 мкф»).
    5)У меня 2006 пикад. Если вас не затруднит можете ли вы скинуть библиотеку для атмеги8? В нэте ищу, не могу найти.

    Благодарю за потраченное время! Чувствую, придется спрашивать много.
    Извиняюсь за неграмотность, но все когда-то учатся;)

    1. 1. SMD лучше, так как занимают меньше места и не нужно сверлить дырки. Да и паяются легко обычным паяльником.
      2. Я пользуюсь пленочным фоторезистом, в домашних условиях никаким другим методом лучше не получится. Да и первую плату сделал фоторезистом со второго раза (первая была для теста).
      3. Схема и разводка в DipTrace. На схеме в разброс, так как на самом мк пины стоят не по порядку, а чем написано в статье.
      4. Любой электролит на 10мкф и выше.
      5. DipTrace все есть.

      1. здравствуйте.
        набор следующих моментов с которыми я столкнулся.
        сейчас сходил в электронику и купил элементы.
        1)Резисторы у вас на схеме 200 Ом(11 штук, кажется). в магазине были только на 220 Ом. Пойдут ли, или нужен номинал обязательно в 200 Ом?
        2)Купил я эти элементы. Как теперь ориентироваться в библиотеках DipTrace для выбора конкретного элемента? Пример: есть резистор «222»=2,2 кОм. Как найти нужный элемент в библиотеке?
        И еще резонатор «16,0RG9-2G».
        3)Есть микроконтроллер ATMega 8-16PU. Подойдет? и вопрос касательно его. В статье на сайте у Вас написано «В качестве микроконтроллера возьмем широко распространенный ATmega8 (без индекса L в конце). «. в схеме у Вас как я понял взят элемент «ATmega8L-8PC». Так вот, если корпус один и тот же и номера/названия ножек совпадают, то есть ли разница в выбранном элементе? если есть, то какой элемент нужен для «ATMega 8-16PU».
        4)Какой элемент из библиотеки USB розетка?(в библиотеке USB я такого не нашел. Если это самодельный, то не скажите корпус для него?)
        ТО же самое касательно «Кнопки reset» и штук, в которые группируются вводы/выводы для внешних устройств(те что по 4, 5, 3 и 2 вывода.)

        Очень благодарен за помощь.

        1. 1. Можно 220, разницы нет.
          2. В DipbTrace PCB Layout справа есть список компонентов, выбираете нужный вам и кликаете по нему, после чего он отобразится на плате.
          3. ATMega8-16PU подойдет.
          4. USB есть в библиотеке, я оттуда брал, скачайте последнюю версию диптрейка. Еще можно правым кликом по компоненту на схеме сохранить его в библиотеку

          1. здравствуйте.
            1) на какой частоте программировать?16 МГц?
            2) как я понял надо при программировании иметь .hex файл и его указать при программировании через стк500.
            3) программируем повышенным напряжением, получается?
            4) на схеме стабилитроны на 3,6В. Имеются в наличии стабилитроны «КС 133 А»(3,3В). Я думаю, это не так трагично? Просто 3,6 ваще нигде нет.
            5) На всякий случай, даже при условии что 3,3 подойдут напишите марку стабилитронов на 3,6, пожалуйста.

            спасибо)

          2. 1) Без разницы, какая будет в программе установлена, той и програмирйте.
            2) Да.
            3) Повышенным не надо. Программируйте обычным по SPI.
            4) Ножка МК может не выдержать такого тока.
            5) Просто в магазине спросите стабилитроны на 3,6В.

  40. расскажите процесс создания bootloadera, т.е. как переделать его для другого контроллера, например мега88 (я увидел в библитеках USB при компиляции проекта определяется частота контроллера и максимально возможная 20 Мгц, вот и возникла идея заменить мегу8 на мегу88 и поставить кварц на 20 МГц)? Можно просто открыть проект bootload и изменить в настройках контроллер с меги8 на мегу88 и поставить частоту 20 МГц?

    1. в архиве есть проект бутлоадера и основной проект. Вам нужно установить в настройках проектов частоту и микроконтроллер, а в основном проекте еще и поменять названия регистров (смотрите AVR094)

      1. спасибо, все понятно, буду пробовать.

  41. Доброго дня!
    Есть ряд вопросов по вашей разработке:
    1. Программа USB Control каким-нибудь образом отображает установившуюся связь с микроконтроллером?
    2. Можно ли написать аналог USB Control на Visual Basic?
    3. Собрал устройство, прошил, компьютер нашел новое HID устройство, запустил USB Control — управление отсутствует, окно для вывода состояния входных данных чистое, поле вывода ADC так и осталось с меткой Label. Куда копать?

    Спасибо.

    1. 1. Неа, но можете сделать на таймере.
      2. Я на бейсике не пишу.
      3. Походу, вы только бутлоадер прошили

      1. 3. Никак нет — прошил бутлоадер, с его помощью прошил USB_Control, все прошло как по маслу, циферки в окне бегали, комп устройство определил, все как на скринах.
        Однако программа не реагирует на контроллер.

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

        Эх, придется залазить в прошивку и программу…

        1. Дома тестировал устройство на Win-7-64 — не работает.
          Пришел на работу — Win-XP-32 — работает.
          Ваша программа ОС-зависима?

          1. насколько знаю, то у некоторых юзеров работает и на 64. Я специально использовал HID, чтобы не было зависимости от платформы

          2. Спасибо, буду копать дальше.
            Установлю С++ Builder, попробую модернизировать вашу программу (изменить внешний вид и сделать 10 выходов).
            В планах — сделать какие-нибудь алармы, оповещения на срабатывание логических входов и, возможно, реакцию на них логических выходов.

          3. Ладно, фиг с ним, с форумом. На вашей (данной) страничке весьма обстоятельное обсуждение, я уже почерпнул массу полезного.
            Вы вообще отличаетесь обстоятельностью — исключительно подробно описываете свои проекты! И практически всегда отвечаете на вопросы чайников.

            Вот еще один вопрос от чайника в C++ Builder: компилятор я скачал и установил, что нужно сделать с вашим проектом, чтобы получить полноценное приложение? спасибо.

            С Праздником Победы!

  42. Kibermaster
    Подскажите, плиз, в какой версии С++ Builder вы компилировали ваш проект?
    Дело в том, что С++ Builder ver.6 при выполнении команды Build Project (USB Control.cbproj) создает совершенно пустой ехе файл,
    если предварительно выполнить команду Add to Project добавив в проект main.cpp и USB Control.cpp, выполнение команды заканчивается с ошибками:
    [C++ Error] main.h(10): E2209 Unable to open include file ‘ButtonGroup.hpp’
    [C++ Error] main.cpp(9): E2209 Unable to open include file ‘../MCU/USB_Control/usbdrv/usbconfig.h’
    [C++ Error] main.cpp(30): E2451 Undefined symbol ‘USB_CFG_VENDOR_NAME’
    [C++ Error] main.cpp(30): E2040 Declaration terminated incorrectly
    [C++ Error] main.cpp(30): E2190 Unexpected }
    [C++ Error] main.cpp(30): E2190 Unexpected }
    [C++ Error] main.cpp(31): E2451 Undefined symbol ‘USB_CFG_DEVICE_NAME’
    [C++ Error] main.cpp(31): E2040 Declaration terminated incorrectly
    [C++ Error] main.cpp(31): E2190 Unexpected }
    [C++ Error] main.cpp(31): E2190 Unexpected }

    Если будет время, дайте подсказку, что нужно поправить.

    Спасибо.

        1. Установил билдер 2010 по вашей ссылке, все заработало. Спасибо.
          Буду разбираться, почему Win7/64 не желает работать с устройством.
          Обратил внимание, WinXP при установке устройства распознает его как «USB Control», Win7/64 как неизвестное USB HID устройство, но с правильными ID.

  43. Спасибо за статью! Очень помогла, всё работает..
    Только не смог скомпилить код контроллера, нужно же и в своей проект (атмега16) всунуть эту штуку..

    Эдитор: AVR Studio 6.
    Сначала были ошибки (как выяснилось связанные со старой версией эдитора на котором оно создавалось..) типа таких:


    usbdrv/usbdrv.h:455:6: error: variable 'usbDescriptorDevice' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
    usbdrv/usbdrv.h:461:6: error: variable 'usbDescriptorConfiguration' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

    и т. д. Исправилось добавлением const перед всеми: char usbDescriptorHidReport[]; char usbDescriptorString0[]; и так далее где выдавало ошибку..

    Но теперь выдает ошибку которую при всем моем умении программировать не удалось устранить..
    Error 1 undefined reference to `usbPoll’
    Error 2 undefined reference to `usbInit’
    Error 3 ld returned 1 exit status

    Функции вызываются в коде так:

    1) if (CheckBit(tasks,0)) usbPoll();
    2) usbInit();

    Функции описаны в USB_Control\MCU\USB_Control\usbdrv\usbdrv.h (который я прикрепил к проекту) и выглядят так:

    USB_PUBLIC void usbInit(void);
    USB_PUBLIC void usbPoll(void);

    Почему это пустые функции ничего не делающие? Теоретически тогда можно закомментировать где они вызываются..

    Если изменить функции на:

    USB_PUBLIC void usbInit(void)
    {
    }

    то код компилируется, но устройство определяется компьютеру с ошибкой. (И почему то hex весит 2-3 кб а не 6 как Ваш.) (может AVR Studio адекватнее компилит)

    Прошу Вашей помощи.

    Еще нужно добавлять было строку #define F_CPU
    Я установил

    #define F_CPU 1600000UL

    , не знаю правильно ли..

    1. для начала, добавьте в опции линкера:
      -D__PROG_TYPES_COMPAT__
      -Wno-deprecated-declarations

      1. Kibermaster, не знаю зачем оно, не помогло, но всё равно спасибо..

        PS. Всё. Скомпилилось. РАБОТАИТЬ! Оставлю пост как я исправлял, может кому тоже пригодится..

        ====================================================================================
        А насчет своей ошибки я нашел проблему. Я не добавил в проект файл usbdrv.c. А он за собой еще кучу файлов тянет.
        С этой ошибкой разобрался. Но появилась еще одна более сложная (или я чего не понимаю).

        В файле usbdrv.c используется функция usbCrc16Append(&usbTxBuf[1], len);
        ошибка:
        Error 1 undefined reference to `usbCrc16Append’
        линкер не находит тело функции.
        UPD.
        Пока писал нашел ошибку.
        Я офигел и не до конца понимаю, но кажется к проекту еще ассемблерные коды подключаются..
        Как только подключил главный- все пошло..

        Только появилась ошибка
        Error 1 #error «USB_CFG_CLOCK_KHZ is «USB_CFG_CLOCK_KHZ» not one of the supported non-crc-rates!»

        Код:
        #ifndef USB_CFG_CLOCK_KHZ
        # ifdef F_CPU
        # define USB_CFG_CLOCK_KHZ (F_CPU/1000)
        # else
        # error «USB_CFG_CLOCK_KHZ not defined in usbconfig.h and no F_CPU set!»
        # endif
        #endif

        #if USB_CFG_CHECK_CRC
        # if USB_CFG_CLOCK_KHZ == 18000
        # include «usbdrvasm18-crc.inc»
        # else
        # error «USB_CFG_CLOCK_KHZ is not one of the supported crc-rates!»
        # endif
        #else
        # if USB_CFG_CLOCK_KHZ == 12000
        # include «usbdrvasm12.inc»
        # elif USB_CFG_CLOCK_KHZ == 12800
        # include «usbdrvasm128.inc»
        # elif USB_CFG_CLOCK_KHZ == 15000
        # include «usbdrvasm15.inc»
        # elif USB_CFG_CLOCK_KHZ == 16000
        # include «usbdrvasm16.inc»
        # elif USB_CFG_CLOCK_KHZ == 16500
        # include «usbdrvasm165.inc»
        # elif USB_CFG_CLOCK_KHZ == 20000
        # include «usbdrvasm20.inc»
        # else
        # error «USB_CFG_CLOCK_KHZ is not one of the supported non-crc-rates!»
        # endif
        #endif

        Значение USB_CFG_CLOCK_KHZ как я выяснил- 0. Хотя в проекте установлено #define F_CPU 1600000

        Я просто вручную выполнил код, поставив вместо него
        # include «usbdrvasm16.inc»

        И подключил все ассемблерные файлы который требовало.

        Видимо #define F_CPU мало, и такое чувство что оно прописывается еще и в компиляторе (ходят слухи что в makefile).

        1. Может кому нужно будет, выложу готовый проект для AVR Studio 6.
          https://www.dropbox.com/s/9krk2gc64h92gzo/AtMega8_USB_Control.rar?v=0mcn
          Если частота кварца не 16мГц- в конце файла usbdrvasm.S изменить #include «usbdrvasm16.inc» на другую описанную ниже..

          Если кто подскажет как автоматически настроить чтоб определяло (описано постом выше)- пишите)

        2. Эти директивы стали нужны в одной с последних версий тулчейна при работе с программной областью.
          На счет F_CPU, хз как в студии 6, но в патой в насттройках нигде даже поля не было, где его прописывать, приходилось указывать в каком нить файле.

  44. Пробовал перенести программу с C++ Builder XE3 (2010) на C++ builder 6 (в котором удобнее работать) — не работает. В XE3 работает.

    Я получаю пустую hid.GetConnectedDeviceName()

    Может «hidlibrary.h» и «usbconfig.h» не хотят работать со старой версией билдера?

    1. чем выше версия билдера, тем он глючнее, я в 2010 пишу, пробовал ХЕ2 и понял, что разработчики скоро станут банкротами. Сам помаленьку на Qt пересаживаюсь.
      В «hidlibrary.h» и «usbconfig.h» нет никаких специфических функций, нужно искать где то в другом месте.

      1. Не может в другом месте (я думаю).
        В XE3 в Edit1 получаю значение hid.GetConnectedDeviceName(). В Builder6 нет.
        В hidlibrary.h она описана как:
        string GetConnectedDeviceName()
        {
        return m_HIDDeviceIdents[m_ConnectedDevice];
        }
        Как она там обрабатывается разобраться не могу, ибо векторы, нумспейсы, map’ы я не знаю.. Как вывести допустим значиение в String с этого .h файла я не знаю\не умею.
        Ладно, если идей больше нету то на XE3 буду работать..

        1. лучше на 2010, все, что после него сильно глючное

  45. 2010 упоротый конечно.. Куча лишних и не удобных приблуд.. После 2006-го куча нервов на этот уходит..
    Тем не мение доработал программку с временными диаграммами http://s48.radikal.ru/i119/1306/eb/9c25ff0d3d7b.png

    1. А можно выложить ваш проект с диаграммами или на почту tsp54 собака мейл.ру — буду весьма признателен!

  46. Kibermaster, помогите!

    Собрал на монтажке вроде правильно. Единственное — при неподключенном USB к компу с конденсатором который на USB источник питания коротило. Пришлось снять с платы кондер. Без него норм все.
    1) Для чего нужен кондер и возможна ли работа без него?
    Собрал, подключил, нажал ресет и комп определил устройство…
    Попробовал бутлодер — нифига, вырубается сразу.
    И после этого когда подключаю устройство в USB — комп вырубается. И теперь даже без кондера (на USB который) источник питания коротит(напряжение падает в 0).
    2) Что-то случилось с мк?:( потому как в схеме я ничего не делал.
    3) Можно ли это проверить? И можно ли перепрошить мк теперь таким же образом через STK500 ?
    4) Питание платы должно быть на протяжении всего времени работы устройства или же после прошивки бутлодером оно питается от USB и источник питания не нужен более?

    Нуждаюсь в помощи:(

    1. 1. Для сглаживания напряжения, без него будет коряво работать. Если комп вырубается, то что то вы припаяли не так))) Есть подозрения, что кондер подключен не правильно.
      Покажите фотку спаяной платы с обеих сторон

      1. Разобрался с отключением — USB коротило. Вопрос решен.
        Теперь проблема в следующем: (прикладываю картинки)
        http://s48.radikal.ru/i121/1306/17/47d6fad22fea.jpg
        http://s45.radikal.ru/i107/1306/da/d54473abbced.jpg
        http://s006.radikal.ru/i215/1306/39/01e514b1b81f.jpg
        http://s60.radikal.ru/i170/1306/e5/69c70c4d1653.jpg

        в чем может быть проблема? на XP вообще не обнаружился.
        может ли быть что на компе чего-то не хватает установленного?
        бутлоадер по-прежнему не шьет прогу, его сразу вышибает.

      2. фото платы чуть позже скину.
        качество исполнения ужасное, если там что-то понятно будет…
        первая плата, что поделать(

        1. тогда что то опять не так. Покажи фотки платы и фьюзов.
          Какой файл прошивал?

          1. MCU\usb_bootloader\ файл «main.hex» заливал через STK500 в мк.
            Фьюзы устанавливал как у вас на принтскрине. Или я не про то говорю?(Вы спросили про фотки фьюзов)
            Фото платы минут через 10

          2. мда, я удивляюсь даже тому, что программатор его вообще видит после установки фьюзов. Кварц ооооочень далеко. Длина ножек от кварца к мк не более 1см. Да и стабилитроны коряво подключены. Советую вытравить нормальную плату

          3. 1)что вы имеете ввиду под фразой «программатор его вообще видит после установки фьюзов»?
            какой программатор?или имели ввиду что комп обнаруживает?
            так, резонатор подвину ближе.
            2)Думаете в нем может быть проблема?
            4)а стабилитроны коряво в смысле неправильно или «некрасиво»?
            проблема платы в том, что ее не делал ни разу, а времени маловато осталось на выполнение этой вещи:(

          4. У меня такие же симптомы были на ноуте (unknown device), а на компе работало, и то не на всех портах.
            Просто переставь в другой порт.

          5. спасибо, но не помогло. пробовал во всех портах — не заработало. По-прежнему пишет что неизвестное:(

          6. 2) Нельзя ставить кварц так далеко.
            4) У меня первая плата получилась со второй попытки (фоторезист)

          7. перепаял — не помогло.
            подумал сделать на новой монтажке.
            1) если устройство «плохо» но обнаруживается, значит ли это, что с прошивкой мк все нормально?(т.е. проблема схемотехническая)
            2)все резисторы ввода/вывода не влияют ведь на работу самого устройства?(хочу спаять только необходимые элементы для прошивки через USB, если обнаружится «нормально»)

          8. …просто при прошивке мк через STK500 я прошивал на частоте 1 МГЦ.
            3) Это ведь не принципиально(с учетом того что резонатор 16 Мгц)?

          9. 1мгц — это частота spi, а не мк. Я всегда прошиваю на стандартной.
            1) 90% что на плате какие то баги.
            2) Для проверки можно припаять только кварц с кондерами и usb с обвязкой(3 резика и 2 стабилитрона)

  47. превышен лимит ответов, видимо)

    в общем — магия!
    устройство определилось как «устройство ввода».
    далее бутлодером прошил(циферки показались в командной строке)
    далее отсоединяю ножку 1 от земли и нажимаю резет и … ничего. нового хид устройства не обнаруживается:(
    в чем может быть дело?(

    1. наверно, не установлен фьюз BOOTSTR не установлен.
      PS: после подключения той ножки к земле нужно перезагрузить МК(или передернуть питание)

      1. фьюз при прошивке я точно устанавливал(прошивал не в одиночку, да и при этом много раз перепроверял…)

        погодите, алгоритм какой тогда?
        1)бутлодаером прошил
        2)отсоединить лог. выход 1 от земли и нажать ресет
        3)?снова подключить ножку к земле?
        …запутался:(help:(
        и когда нужно передернуть питание?а главное — КАК?тупо выдернуть из USB?

  48. Сначала пох на перемычку. Выставить фьюзы, прошить бутлоадер, отсоединить питание (можно просто отключить usb), подключить перемычку, включить питание, комп найдет новый HID, запустить bat, по окончанию прошивки убрать перемычку и передернуть питание.

    1. Напишу как делал я.
      Взял мк, вставил его в STK500, выставил фьюзы, прошил их. потом выбрал main.hex файл (MCU\usb_bootloader\) и прошил его.
      Потом спаял плату. Вставил туда мк. Замкнул ножку 1 лог вывода на землю. Подключил к компу. Нажал ресет. Определилось как «устройство ввода».
      В диспетчере до подключения:
      (***)<—ссылка внизу.
      http://s019.radikal.ru/i610/1306/6c/bb565acf5ae7.jpg
      ID до:
      http://s017.radikal.ru/i424/1306/47/c7243e33e3c2.jpg
      Диспетчер после подключения:
      http://s56.radikal.ru/i152/1306/99/3c7f90f840f8.jpg
      ID после подключения:
      http://s020.radikal.ru/i708/1306/74/ab8f62fceccf.jpg

      После этого запустил файл в папке MCU\USB_Control\default\ "boot.bat".
      Написал:
      http://s001.radikal.ru/i195/1306/fa/0d5bdf930baf.jpg

      если до этого все правильно, то тогда что дальше?
      После этого я убираю ножку лог выхода 1 с земли и нажимаю ресет.
      И изменений нет. В диспетчере такая же картина как и в (***).

      Понимаю, что я ничего не понимаю в этом, но не сердитесь(

      1. попробуйте Логический вход 1 подтянуть к питанию

        1. подтянуть к питанию — это значит подключить на плате в место, ближе к месту крепления провода 5V?

          так, значит если у меня «boot.bat» файл прошился, то дальше что должно произойти?PID и VID должны встать как на картинке (vid_0010, pid_0001)?
          1)стало быть, если они не меняются, а какие-то другие, то что это значит?
          2)по адресу USB_Control\MCU\usb_bootloader тут находятся какие-то файлы «bootloadHID» и программка «upload». Зачем они?
          3)по адресу USB_Control\PC\Debug экзешный файл для управления платкой?типа подключил устройство, запустил прогу и управляй ей? или же надо написать и откомпилить прогу самому на компе?
          попробовал на своем устройстве готовый .exe — тщетно:(

          1. подтянуть — значит соеденить с 5v резистором 2-10к
            1. Значит, по какой то причине мк постоянно висит в режиме бутлоадера (он может это делать только если лог 1 равен 0).
            2. не помню
            3. exe готовый уже.

          2. это нормальный процесс прошивки мк.

  49. уважаемый Kibermaster, мне интереснно — 1,5К резистор именно подключен к 6 ножке или к питанию как обычно это делается

    1. к 6, чтобы была возможность управлять дисконектом

  50. Пожалуй пару вопросов автору.
    1) Зачем используется бутлоадер? Я так понимаю вшить какую-то информацию или настройку в МК. Так и не понял.
    2) Почему когда я компилю свой код и вшиваю в МК то всё начинает СРАЗУ работать без бутлоадера и каких либо настроек, и к стати бутлоадер не работает (не видит устройство).
    3) У меня подключен USBasp программатор (питание которого подключается с юсб к МК) и подключено это устройство. Получается контакты питания двух разных юсб между собой соединены. Это ничего страшного?

    PS. Я безумно! удивлен как ПРОСТО можно добавить свою информацию в передаваемую (кроме АЦП, ШИМ, Входы, Выходы). Просто добавить в структуру (в которых я не очень шарю) свой элемент структуры (в программе в и прошивке МК) и всё! Всё работает!
    PS. Большое спасибо за тутор. Будет чем заняться..))

    1. 1. Чтобы заливать основную прошивку без внешнего программатора (если будете модернезировать основную прошивку).
      2. Можно прошить основную прошивку без бутлоадера. Не работает потому что что то не так сделали.
      3. Контакты питания не соединены, только маса.

  51. уважаемый Kibermaster, большая просьба если нетрудно то покажите пожайлуста какой вид будут иметь фьюзы в CodeBlaster или PonyProg

    С уважением arnold01

  52. уважаемыый Kibermaster, извините за столь многочисленные вопросы но мне интересно — есть возможность повторения вашего устройства на Atmega48PA-Pu и если да то какие будут Ваши рекомендации

    С уважением arnol01

  53. по габаритам точно влезет, однако по техданным не знаю потому и спросил

  54. да-да, я так и понял !
    благодарности !!!

  55. Здравствуйте, один вопрос — где происходит побитное формирование параллельных данных при выводе данных на МК — в программе на ПК или МК ? Я так понял что в программе ПК, прошивка МК тут непричем. Прав ли Я ?
    И последний вопрос — как можно ( какие команды по Вашему мнению ) организоать ввод/вывод ассемблером.
    Заранее благодарю ( поверьте, окажете большую помощь мне ! )

    1. Формируется на ПК, затем отправляется в МК, без прошивки МК работать не будет, так как за работу устройства отвечают обе стороны.
      На асм я хз, так как на нем последний раз писал лет 5 назад и только ради интереса.

  56. нет, ясно что без прошивки не будет работать но я имел ввиду что с компа прямо поступает не битовая информация а слова (к примеру Байт)

    Спасибо

    1. Там передается пакет в несколько байт, посмотрите структуру пакета.

  57. а насчет ассемблера просто хотел знать- как в LPT есть какойто адрес куда надо отправить данные

  58. приветствую Вас дорогой Kibermaster,

    решил собрать Вашу схему и собрал, получилось отлично, за что БОЛЬШОЕ СПАСИБО !
    Теперь просьба — можете если не трудно чуточку детальнее обьяснить метод модификации прошивки (бутлодер работает отлично), какие файлы участвуют в подготовке новой прошивки через ( ЮСБ ) Мне очень помог Ваш
    диалог с dudawkin-ом но вот после этих изменений не знаю последовательность моих действий -после модификации этих файлов что чем запускать.
    Очень прошу помочь мне в этом вопросе — буду ПРЕБЛАГОДАРЕН !

    1. в папке с исходниками есть файл avr studio 4, запустите его и нажмите F7 для компиляции

      1. а точнее который файл и в какой папке ?

  59. я думаю что правильно все сделал, т.к. моя схема выдает правильно — 12 портов ВЫВОДА и 2 ВХОДА, модифицировал все как Вы писали, однако на выходе не получается более 8 бит, может быть причина скрывается в «main.c» а конкретнее в :

    #define USB_MESSAGE_LENGTH sizeof(DeviceStatus)

    PROGMEM char usbHidReportDescriptor[22] = { // USB report descriptor // Дескриптор описывает структуру пакета данных для обмена
    0x06, 0x00, 0xff, // USAGE_PAGE (Generic Desktop)
    0x09, 0x01, // USAGE (Vendor Usage 1)
    0xa1, 0x01, // COLLECTION (Application)
    0x15, 0x00, // LOGICAL_MINIMUM (0) // min. значение для данных
    0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255) // max. значение для данных, 255 тут не случайно, а чтобы уложиться в 1 байт
    0x75, 0x08, // REPORT_SIZE (8) // информация передается пачками, это размер одного «репорта» 8 бит
    0x95, USB_MESSAGE_LENGTH, // REPORT_COUNT // количество пачек
    0x09, 0x00, // USAGE (Undefined)
    0xb2, 0x02, 0x01, // FEATURE (Data,Var,Abs,Buf)
    0xc0 // END_COLLECTION
    };

    1. а куда записываешь значения выходов?

  60. Вот фрагменты

    unsigned char* logical_inputs_PORT[2] = {(u8*)&PINC, (u8*)&PINC};
    unsigned char logical_inputs_PIN[2] = {2, 1};

    unsigned char* logical_outputs_PORT[12] = {(u8*)&PORTB, (u8*)&PORTB, (u8*)&PORTB, (u8*)&PORTB, (u8*)&PORTD, (u8*)&PORTD, (u8*)&PORTD, (u8*)&PORTD, (u8*)&PORTD, (u8*)&PORTC, (u8*)&PORTC, (u8*)&PORTC};
    unsigned char logical_outputs_PIN[12] = {5, 4, 3, 0, 7, 6, 5, 1, 0, 5, 4, 3};

    struct status_t{
    unsigned char logical_outputs; // логические выходы, состояние 12 выходов записано побитно
    unsigned char logical_inputs; // логические входы, состояние 2 входа записано побитно
    unsigned char ADC_DATA;
    unsigned int PWM1;
    unsigned int PWM2;

    int main (void)
    {
    DDRB = 0b00111111; PORTB = 0b00000000;
    DDRC = 0b00000000; PORTC = 0b00111110;
    DDRD = 0b11100000; PORTD = 0b00000011;

    TCCR0 = (1<<CS01) | (1<<CS00); // prescaler = 64
    TCNT0 = 0;

    TCCR1A =(1<<COM1A1)|(1<<COM1B1)| // Clear OC1A/OC1B on Compare Match, set OC1A/OC1B at TOP
    (1<<WGM11)|(1<<WGM10); // Fast PWM
    TCCR1B =(1<<CS10) | // No prescaling
    (1<<WGM12); // Fast PWM (10 bit)

    MCUCR = 0b01010000;

    ADMUX = 0b00100000;
    ADCSRA = 0b10000111;

    1. unsigned char logical_outputs; // логические выходы, состояние 12 выходов записано побитно
      unsigned char — это 8-битная

  61. извините не то- вот то:

    int main (void)
    {
    DDRB = 0b00111111; PORTB = 0b00000000;
    DDRC = 0b00111000; PORTC = 0b00111110;
    DDRD = 0b11100011; PORTD = 0b00000001;

    TCCR0 = (1<<CS01) | (1<<CS00); // prescaler = 64
    TCNT0 = 0;

    TCCR1A =(1<<COM1A1)|(1<<COM1B1)| // Clear OC1A/OC1B on Compare Match, set OC1A/OC1B at TOP
    (1<<WGM11)|(1<<WGM10); // Fast PWM
    TCCR1B =(1<<CS10) | // No prescaling
    (1<<WGM12); // Fast PWM (10 bit)

    MCUCR = 0b01010000;

    ADMUX = 0b00100000;
    ADCSRA = 0b10000111;

  62. а тогда как получить 12 Выходов и 2 входа ?

  63. Здравствуйте! Помогите понять в чем фокус! Хочу, что-бы при запуске программы на PC, состояние портов МК не изменялось, но если один из скролов ШИМ не на нуле, то один сбрасывается на нулевой уровень. Где собака зарыта?

    1. Не програмист, но догадался. После того как один скрол меняет состояние, загрузившись из МК, запускается отправка состояния обоих прокруток в контроллер и портит его состояние. Есть задумка сохранять состояние во внутреней памяти между перезапусками контроллера… Попробую реализовать.

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

        1. Спасибо за ответ. Подпер костылем…
          int buffer = DeviceStatus.PWM2;
          ScrollBar_PWM1->Position = DeviceStatus.PWM1;
          ScrollBar_PWM2->Position = buffer;

  64. Здравствуйте,я хотел узнать с какой частотой можно менять значения на ножках?
    С помощью вашей схемы я хочу управлять деловыми двигателями,с приемлемой частотой.

    1. примерно 10 раз в секунду можно отправлять запрос

    1. в исходниках бутлоадера в мейкфайле замените 16 на 12, в освновной прошивке через avrstudio укажите 12.

      1. Проблемка. Прошил прошивкой на 16 Мгц (на плате 12Мгц), после чего програматор не видит мк. Где моя ошибка и как исправить ошибку?

          1. а можно скрин или значение LOW и HIGH ?

          2. Если точно прошили эти фьюзы, тогда смотрите, что спаяли не так, больше всего, что проблема с кварцем. МК с этими фьюзами должен работать с кварцами 8-16 мгц.

          3. При повторной прошивке на мк должен стоять кварц?

          4. да, иначе не запуститься. Мк теперь тактируется от кварца. Если есть источник тактирования около 1Мгц, то можно подключить его к ноге XTAL1, тогда мк будет тактироваться от него. Только кварц при этом нужно убрать.

  65. Хотел бы спросить. Я хочу собрать такое устройство. ATMEGA8 — это ATMEGA8A-PU или ATMEGA8-16PU, или где купить в Украине такую микросхему?
    И ещё, я так понимаю нужен внешний программатор. Такой подойдёт? http://nosul.prom.ua/p15324190-usb-programmator-usbasp.html

    1. подойдет любой с этих, купить можно на e-voron или kosmodrom. Программатор подойдет, но лучше купить какой-то STK500 совместимый (на ebay около 20 баксов)

  66. Понимаю что лучше, но на ebay нет возможности покупать, так как нет расщётной карты. К тому же мне буквально на 1-2 раза нужен.

  67. Тоесть програматор не видит мк если на мк нет кварца?

    1. да. Потому что МК тактируется теперь от кварца

      1. Понял проблему. У uniprof фьюзы 0 активен 1 не активен.

  68. Есть проблема. Переделал прошику под 12 Мгц, утройство обнаружено, но програма не видит устройствов чем проблема?

    1. Проблему исправил. Но появилась новая проблема: устройство прекрасно подключается, программа также добавляет новые строки в listbox, но GetConnectedDeviceName () равно имени устройству лишь одну секунду, далее устройство показывается как «unknown device». В эту же секунду можно включить например Логический Выход 1 и он включится, но дальше уже устройство отвечает, помогает только ресет.
      Как исправить?
      Буду очень благодарен за помощь!

      1. я могу посоветовать разве что поставить кварц 16 мгц, так как данная проблема мне не известна. Может еще из-за не промытой или не правильно спаяной платы

        1. Каким РАДом пользуетесь? «Embarcadero (CodeGear) RAD Studio 2010 Architect» возвращает «GetConnectedDeviceName()» 0, а XE2+Update 4.1 нужное значение. Может в ПО проблема?

          1. Спасибо за помощь!
            Причина была в ПО.
            Установил 14.0.3615.26342 версию и все заработало!

          2. скажите, пожалуйста, что поменяли в прошивке под кварц 12МГц?

  69. Доброго времени суток. Знал бы что все так будет сложно, наверное и не брался. Автор очень все хорошо описал и показал, на я в программировании и прошивке МК новичок. Паять умею, и С++ (С) немного знаю, МК не программировал (только прошивал чип в принтере WC 3119). Но уже начал эту очень интересную и полезную штуку, то хочется и закончить, а потом спаяю что то простое, что бы разобраться со всем этим (мигалку с диодом например:)
    Подскажите пожалуйста, может кто то программировал микроконтроллер для этой схемы, в PonyProg через программатор stk200/300 (у меня такой http://cxem.net/beginner/beginner74.php), как там эти загадочные фьюзы выставлять? Заранее спасибо!
    p.s. Это мой первый вопрос здесь, но точно не последний…

    1. http://www.engbedded.com/fusecalc здесь выберите атмегу8 и укажите low и high фьюзы, после чего нужные вам значения отобразятся в таблице Manual fuse bits configuration. В понипрог их нужно установить в инвертном порядке, тоесть, если в таблице стоит галочка, то в понипрог ее ставить не нужно, и наоборот.

      1. Указал в калькуляторе low=3F, high=D8. Получилась таблица http://radikale.ru/data/upload/4efc3/fb1a9/a702396076.jpg . Но там бит SPIEN активен(checked) как и в понипрог, при чтении с нового МК! Это, как я понял значит что там биты не надо инвертировать, тем более что в понипрог этот бит изменить не можно (недоступен). И вот еще на сайте калькулятор для понипрога паказал так: http://radikale.ru/data/upload/49112/69fda/b202e6246e.jpg . В общем я уже запутался окончательно(

        1. если при чтении SPIEN установлен, тогда да, инвертировать не нужно

          1. Спасибо!!! Все работает. Промучился полдня через то что не внимательно прочел статью «чтобы запустить бутлоадер, нужно замкнуть Логический вход 1 на GND и нажать на устройстве кнопку RESET, в диспетчере устройство должно появиться новое HID устройство, так же не требующее драйверов:». А я просто подключал к УСБ и у меня не чего не появлялось, думал что то не так спаял или прошил:)
            Но возник такой вопрос, не совсем наверное уже к этой статьи: прошиваю контроллеры программатором STK 200 + PonyProg207 (делал по этой схеме http://cxem.net/beginner/beginner74.php). Всегда после прошивке микроконтроллера, не могу больше не чего прочесть и тем более записать. И так с этим… В чем может бить дело? Фьюзы выставляю правильно, как на сайте (http://www.engbedded.com/fusecalc), в PonyProg SPIN отмечен и недоступен, RSTDISBL — не доступен. Для этой схеме ставил так http://s019.radikal.ru/i625/1311/a4/d9fecea58303.jpg . Спасибо еще раз за советы! Очень хороший сайт!

          2. если фьюзы установлены как на скрине, тогда читаться должен. Могу предположить, что есть проблемы с программатором.

          3. еще интересует такой теоретический вопрос: как так заливается прошивка в этот девайс без программатора, а прямо через УСБ порт (с предварительно уже залитым бутлоадером в МК). Если вот для плат Arduino нужна микросхема например FT232RL для связи, даже с уже залитым бутлоадером. Или я так понял Arduino не оптимально используют ресурсы,или я что то совсем не понял. Спасибо

          4. FT232 используется как переходник usb-com. Тоесть, в arduino установлен UART бутлоадер

          5. а почему так? Это через то что Их среда разработки работает только через UART? Почему не сделают как на вашей схеме через USB, что бы не нужно было покупать дорогую FT232.
            Извиняюсь за вопросы не по теме, этот последний.

          6. Я на этот вопрос ответить не могу, так как это не я ардуино разрабатывал. Одно, что приходит в голову — usb значительно сложней юарта, а ардуино ориентированы на начинающих

  70. Не могли бы вы дать полный список деталей(с номиналами) которые были использованы в вашей схеме?
    Большое спасибо.

    1. посмотрите на схеме, там их не много.
      PS: дней через 20 будут в продаже готовые устройства и наборы для сборки с прошитым микроконтроллером (на фабричных платах.)

      1. а по чем примерно будет это чудо стоить?

  71. Какой паяльник посоветуете новичку? Такой чтобы дешовый, и достаточный для пайки допустим этой схемы.

  72. Я думаю такой брать: Светозар SV-55305-80

  73. Или один из этих:
    Pro’sKit 8PK-S120NB-30
    Pro’sKit 8PK-S120NB-40

  74. А почему чем меньше мощность, тем больше цена?

  75. Здравствуйте, очень заинтересовала ваша работа) и у меня после прочтения появилась идея сделать освещение компьютерного стола. В связи с чем несколько вопросов:
    1) можно ли вместо диода использовать светодиодный модуль, к примеру такой: http://alled.ru/oma-d100h86-50fb-cluster.html
    если да, то какие изменения нужно внести в схему.
    2) сколько можно использовать таких модулей на разных каналах, чтоб можно было светом играть.
    3) ну и совсем глупый вопрос. какие вы элементы использовали кроме микроконтроллера.
    Прошу прощения если мои вопросы показались вам детскими или неправильными. Я просто совсем еще новичок.
    Заранее благодарен)

    1. 1) Можно, советую подключить через реле.
      2) В зависимости от ваших условий.
      3) Это можно увидеть на схеме))))))

    1. нужно, как минимум, хорошо смыть флюс

  76. флюс смыл хорошо зубной щеткой и ацетоном

  77. Сейчас на соотв странице Магазина сообщается что готовых модулей прошитых нет в наличии, подскажите pls когда будут?

  78. Какой емкости нужен большой электролитический конденсатор?

  79. Подскажите пожалуйста, как сей девайс подключить к планшету?

  80. Добрый день. Устройство работает хорошо, программа компилируется в XE5. Хочу переделать интерфейс и функциональность программы но не могу разобраться с кодом. Подскажите как сделать управление выходами с помощью простых ChecBox-ов или кнопки.

    1. управление выходами и так через ChecBox-ы

      1. CheckBox-ы, только это в CheckListBox-е, а как сделать только отделение CheckBox-ы? Например чтобы проверять и включать: if (CheckBox1->Checked=…)
        Когда пишу на событие OnClick компонента CheckBox, действие не происходит:
        if (CheckBox1->Checked)
        sbi(DeviceStatus.logical_outputs, ‘5’);
        else
        cbi(DeviceStatus.logical_outputs, ‘5’);
        у меня не работает

        1. а почему 5 в лапках? Еще в конце добавьте DeviceSet(0)

  81. Сильно обязательно ATmega8? Можно ли ATmega8L-8PU? Принципиальная разница?

    1. L рассчитанный на частоту до 8МГц.

  82. На счет исходников делфи. XE4 не компилит проект пишет что класс JvHidControllerClass не найден. Куда копать?

    1. человек, который писал прогу на дельфи, чуть выше в коментах оставил свои контакты))

  83. Программа Xcontrol работает с этим устройством? Можно ли поменять скин программы? Сколько стоит устройство в гривнах на данный момент, есть ли счет Приват Банка?

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

  84. Модуль получил, пока пробовал в делфях ковыряться в приложении, модуль отключился. и теперь не виден в HID устройствах! что может быть? у меня мысль что полетела прошивка.

      1. Неа, комп вообще устройство не видит. Ни простым подключением, ни замкнутым 1-м лог.входом.

          1. Вроде перепрошивка помогла. Спасибо.
            А есть допустим шанс подключить ИК приёмник вместо АЦП ножки? чтоб она принимала данные от пульта ДУ через ИК. Если есть шанс — что в прошивке менять надо?

          2. а что примерно нужно переписывать? в каких файлах?

  85. Доброго времени суток! использую кварц на 12 Мгц, в настройках проекта поменял 16000000 на 12000000….система определяет устройство как «Unknowen device»… что нужно изменить в коде прошивки?
    вот моя схема: https://www.dropbox.com/s/gpa1s0ml0ikyi9e/circuit.sch.png

    1. в бутлоадере и основной прошивке установить 12мгц, затем перекомпилировать.

      1. В том-то и дело, что я перекомпилировал с частотой 12МГц. Только заливал основную прошивку без бутлоадера. А еще, если смотрели схему, то я поставил перемычку между 2й и 5й ногой процессора в колодке, а саму 2ю ногу кристала отогнул, чтобы было как у вас. Но все равно: Unknowen device.

        1. у вас схема подключения юсб сильно отличается. Вы при этом прошивку изменяли?

  86. нет, только перемычку вышеуказанную на плате сделал. где в прошивке можно изменить? или лучше новую собрать, с обвязкой как у вас?

  87. Изменила выходы для удобства разводки. В файле MCU\USB_Control\main.c сделала так:
    unsigned char* logical_outputs_PORT[7] = {(u8*)&PORTC, (u8*)&PORTC, (u8*)&PORTC, (u8*)&PORTC, (u8*)&PORTC, (u8*)&PORTC, (u8*)&PORTD};
    unsigned char logical_outputs_PIN[7] = {0, 1, 2, 3, 4, 5, 6};

    Удалила входы и работу с ними в основном теле.
    Как теперь скомпилировать новый hex для заливки через УСБ?
    Использую WinAVR

    1. скачайте атмел студию 6 и в нем компилируйте.

  88. Возможность подключения к Android устройствам, имеет место или нет???

    1. в данный момент нет. Смотрите XControl

  89. Доброго времени суток! Устройство определяется и работает только при постоянно подключенной 3й ножке (Логический вход 1) МК на массу. В чем может быть дело?

    1. Здравствуйте! Устройство определяется и работает только при постоянно подключенной 3й ножке (Логический вход 1) МК на массу. С выложенной прошивкой устройство должно именно так работать или нет?

      1. Если вопрос еще актуален, то с зажатой ножкой устройство работает только в режиме загрузчика. Чтобы определялось как нужное устройство нужно с зажатой ножкой залить функциональную прошивку. Тогда без зажатия ножки будет грузится пользовательская прошивка, а с зажатой — загрузчик прошивок по USB.

  90. Уважаемый автор. Приобрел atmega8a. Прошил прошивкой бутлоадера main.hex из вашего архива через lpt порт программой UniProf (схема 5 проводов через резисторы 200 ом). Чистая avr определяется как «[8k, 512] mega8». После прошивки все нормально, но вот после установки фьюзов отваливается. Комп ее не видит. К слову фьюз SPIEN устанавливаю, записываю, после записи читаю, а он читается как сброшенный. Почему он не записывается и как теперь оживить контроллер? Очень буду благодарен за разъяснения. А еще устройство не хочет определятся вообще, комп его не видит через usb.

    1. Если не трудно укажите на рисунке ошибки. atmega8a в TQFP корпусе, первая нога сверху слева.
      [url=http://rghost.ru/55001778.view][img]http://rghost.ru/55001778/image.png[/img][/url]

      1. схема вроде правильная, правда кондеры от кварца далековато.
        Оживить в данном случае можно параллельным программатором, но лучше заменить мк

        1. Дважды прошивал, и два мк получил не рабочими. Почему не устанавливается бит SPIEN? Замерял напряжение на D+ и D-, там 0. Когда там должно быть 3.3v? Что я делаю не так? Помогите разобраться, очень прошу

          1. дайте фотку платы с обеих сторон

          2. SPIEN изменить можно только параллельным программатором? Таким образом, как я прошивал наверное нельзя его изменить. По умолчанию он должен быть установлен, а у меня почему-то по умолчанию сброшен. Может программно как-нибудь его можно установить?

        2. с передней стороны: http://rghost.ru/55024727;
          с другой стороны только три перемычки и кварц: http://rghost.ru/55024748;
          Перемычки нужны только для прошивки и контакты внизу для соединения с lpt. Кварц в момент прошивки не впаян и не впаяны d+ и d-, снята перемычка 4-4. Шьется, читается без проблем. Фьюзы ставятся без проблем кроме SPIEN. После прошивки фьюзов через usb не определяется вообще и lpt порт его не видит.
          Устанавливал фьюзы BODLEVEL, BODEN в LOW части и SPIEN, BOOTSZ1, BOOTSZ0 и BOOTRST в HIGH части. Все фьюзы читаются как установил кроме SPIEN (он сброшен почему-то).

          1. SPIEN отключает SPI, если его отключить, то последовательным программатором запрограммировать уже нельзя.
            Кварц в момент прошивки должен быть припаян.
            Промойте плату.

          2. Буду значит делать тактовый генератор и мучить

          3. Собирал тактовый генератор на NE555N, но от него толку нет;
            Пытался сделать вот так: http://code4geeks.blogspot.com/2013/02/lpt-avreal.html, но ничего не вышло:
            avreal~1.exe +mega8 -p1 -o1mhz -ap -w -v -% -c main.hex

            avreal/WIN32 v1.29r0 (Dec 11 2013 22:23:26)
            Warning: use -id info level instead of obsolete -% switch
            Warning: Start address record in HEX file ignored
            LPT port number 1
            LPT base address 0x378
            Direct I/O interface activated
            LPT write cycle 1.74us
            FBPRG adapter mode
            MCU oscillator frequency = 1.00MHz
            setup 2.10us, hold 2.10us
            actual SCK frequency 115kHz
            Power ON
            Reset
            ERROR: Can’t resync
            Reset pin released
            Power OFF

            Может есть у вас какие соображения, может чего не так делаю?

          4. Даже еслли есть тактовый генератор, с отключенным SPIEN вы ен сможете прошить через SPI

          5. я так понимаю SPIEN изменить последовательным программатором (пять проводков) изменить нельзя. Он был изначально установлен в ноль и в единицу не устанавливается, как в инструкции. Так как 0 — включено, а 1 — отключено, то при сброшенном SPIEN он работает, правильно?

          6. если я правильно рассуждаю, то SPI у меня работает, у меня просто фьюзы частот не верно выставлены?

          7. могли бы вы воспроизвести мою плату и прошить также как я мк?
            1. припаять все как есть, кроме d+ и d-
            uniprof + «5 проводков» через 150 ом:
            1. подключить lpt разъем
            2. подключить питание от usb
            3. запустить uniprof и сконфигурировать pins
            4. прошить
            5. установить фьюзы
            6. подпаять d+ d-
            7. проверить работоспособность
            Что не правильно в моей последовательности? Если вас не затруднит воспроизвести, то ключевые моменты хотелось бы увидеть детально, может что выяснится. Наверное у меня мозга маловато…
            P.S.: какое сопротивление должно быть между +5 и GND у мк? у меня 2.2 МОм — это нормально?

          8. В Uniprof установленный флажок это 0, а 0 — это включено. Значит, когда прочитался SPIEN как сброшенный флажок на чистой мк, то выходит что я выставил фьюзы наоборот и проблема в том, что RSTDISBL сброшен, а значит опция активная, и значит RESET не работает. Итог — поможет только параллельный программатор или еще одна мк и 12 вольт. Если достал вас, извиняюсь)))

          9. поправлюсь, В Uniprof установленный флажок это не 0, а 1

          10. Все получилось, дело было во фьюзах. Как добавить еще один вход АЦП? PC0 и PC1 сделать входами АЦП?

  91. Может я и слепой но я что то не наблюдаю где можно найти печатную плату для скачки и список деталей
    если кому не впадлу напишите мне на имеил prostoroman94@gmail.com а то у меня по у меня дипломка на похожую тему я бы взял как образец эту плату.

      1. нет, для этого максимальная частота 8мгц

  92. Как добавить еще один вход АЦП? PC0 и PC1 сделать входами АЦП?

  93. Спасибо. А как именно называется функциональная прошивка, хочу сразу ее зашить шью программатором, а не через загрузчик)

  94. Дайте пожалуйста полный список нужных деталей и печатную плату.

  95. Прошиваю сразу USB_Control.hex на чистый МК программатором, устройство по прежнему определяется только с зажатой ножкой, программкой (с компа) управляется отлично! В программке зажатая ножка определяется как лог. «0» т.е. фактически вход (зажатую ножку) использовать для снятия состояния (данных) нельзя! Подскажите пожалуйста в чем ошибка, или устройство именно так и должно работать?

    1. 1. залить main.hex
      2. прошить фьюзы, как в инструкции
      3. зажать и держать все время ножку
      4. при удержанной ножке залить при помощи bootloaderHID.exe USB_Control.hex
      5. вытащить из usb девайс и отпустить ношку
      6. вставить в usb без зажатой ножки и пользоваться

  96. Люди пожалуйста дайте мне полный список деталей и печптную плату

  97. Уважаемый alexkhomith все сделал по инструкции эффект тот же 🙁

  98. Уважаемый alexkhomith если не сложно сбросте пожалуйста на имеил M__A__U__S@mail.ru свою версию прошивки USB_Control.hex (которую вы заливали в свой МК), заранее спасибо!

    1. Ее нужно заливать по USB, проверьте почту.
      ЗЫ: как заставить АЦП работать?

    2. А какой прогой фьюзы пишешь? Лучше возьми PonyProg2000. Калькулятором фьюзов получишь куда поставить птички по LOW 3f и HIGH D8, как у автора и поставишь их в понике. Попробуй все еще раз с начала. Я прошивку main.hex заливал UnyProf. Все чики, пробуй

  99. Помогите с АЦП. Пишет 255 и все тут) Нужно два порта ACD0 и ADC1. Заранее спасибо

    1. Все ок) Поставил перемычку ИОН. Всем спасибо. Автор молодец)

  100. Для alexkhomith: спасибо за прошивку, дело не в ней. Прошиваю SinaProg.

  101. Все собрал по схеме, потом отдельно запрограммировал atmega8 прошивкой main.hex. Ставлю эту мегу в плату втыкаю в usb и никакой реакции
    как-будто устройства в usb вообще нет. Причем замыкал 1 вход на gnd. В чем может быть проблема?

  102. забыл сказать фьюзы выставлял в kazarma. Сначала ввел общие значения старших и младших фьюзов в онлайн калькуляторе, потом поставил так как здесь http://payalo.at.ua/c_fuse/calc.html?part=ATmega8 D8 старший 3F младший

    1. А режим бутлоадера активировали?

  103. Добрый день. Возможно ли изменить данную платы под мои запросы? или разработать плату? если да напишите ok@poisk.net

  104. Во общем получилось заставить работать
    Но в следующий раз когда подключал забыл отключить вход от минуса. Дальше потом перестало работать. Проблема была в фьюзах. Я программировал usbasp-ом но когда все фьюзы сразу программирую то usb device не обнаруживается. Вопрос: программатор , которым я пользуюсь подходит для этой схемы?

    1. В данном случае подходит любой программатор для AVR

  105. Можете подсказать что нужно сделать чтобы это устройство работало в labview? Просто при попытке чтения в тестовой панели выходит такая ошибка Read Operation
    Error

    VISA: (Hex 0xBFFF003A) Unable to start operation because setup is invalid (due to attributes being set to an inconsistent state).

  106. Здравствуйте Бражников Михаил! Я хочу сделать заказ на устройство «Управление электрическими цепями через USB» с индивидуальным изменением. Изменение заключается в том, чтобы вместо mega8 была установлена mega88. Точнее, мне необходимы: измененный bootloader под mega88, программа МК и измененный исходник Хост программы. Готов заплатить наперед сколько скажите. Жду вашего ответа.

  107. прошло два года…
    Расскажите пожалуйста, как работать с Вашим устройством в Linux?

      1. Основа программ из этой статьи проект vusb (https://www.obdev.at/products/vusb/index.html) там есть пример проги и для МК и для ПК на базе LINUX. В архиве vusb-20121206.tar.gz в папке /vusb-20121206/examples/hid-data/commandline/ пример проги, нужно лишь подложить свой usbconfig.h, выполнить комманду make, и если были все нужные пакеты в системе, то «./hidtool read(write)». Можно компилить как под Окна так и под Пингвина. Лично проверил

  108. Добрый день!
    Я совсем новичёк в этой отрасли но хочу собрать такой девайс.
    Подскажите пожалуйста будет ли это же работать на микроконтролёре ATmega328?

    1. Если под него перекомпилируешь, то будет.

  109. а из-за смены микрокотролёра, нужно менять параметры отсальных деталей? резонатора например или конденсаторов?

  110. Добрый день.
    Подскажите как прикрутить hidlibrary.h к C#???
    Или может для C# есть что-то другое???

    на базе USBHIDDRIVER.dll удалось только законектится и то с трудом, данные не передаются и не принимаются(((

    Структуру данных переделал на C#:
    [StructLayout(LayoutKind.Explicit, Size = 7)]
    public struct status_t
    {
    [FieldOffset(0)]
    public byte logical_outputs;
    [FieldOffset(1)]
    public byte logical_inputs;
    [FieldOffset(2)]
    public byte ADC_DATA;
    [FieldOffset(3)]
    public ushort PWM1;
    [FieldOffset(5)]
    public ushort PWM2;
    }

    status_t DeviceStatus = new status_t();

    USBHIDDRIVER.dll на нее матерится, хочет только массив байт отправлять, пробовал отправить массив из 7 байт, вернуло False

    устройство находит только если в свойствах проекта выбран .net 4.5

    1. Сорри, не подскажу, так как на C# не писал.

      1. Если не сложно поясните:
        1. Что за константа и чему равна??
        static const int datasize = sizeof(T);

        2. Что означает буква Т???

        3. Что происходит здесь, если можно по детальней

        template int HIDLibrary::SendData(T* data)
        {
        char vpath[datasize+16];
        vpath[0]=0;
        int len=datasize+1;
        HANDLE h = CreateFile(m_ConnectedDevice.c_str(),GENERIC_READ,0,0,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);
        if(h != INVALID_HANDLE_VALUE)
        {
        memcpy(vpath+1,data,datasize);
        int err = HidD_SetFeature(h, vpath , len);
        CloseHandle(h);
        return err;
        }
        else
        return 0;
        }

        Я нашел исходники USBHIDDRIVER.dll на C#
        USBHIDDRIVER.dll — передает данные кратно 64 байтам, в остальных случаях похоже глючит.
        Попробую её модернизировать и внедрить в свой проект, должна получится ваша прога только на C#.

        1. T, в данном случае, — тип данных, он устанавливается при инициализации HID.
          Попробуйте отправлять 64 байта, MCU лишнее воспринимать не будет.

  111. Здравствуйте!
    Есть ли в данный момент возможность приобрести данное устройство в сборе? В магазине написано «нет в наличии».

      1. Такой вопрос возник: я правильно понимаю, что из 8кБ памяти микроконтроллера , бутлоадер занимает 6кБ (размер файла usb_bootloader\main.hex) и 2кБ остаётся на основную прошивку ?

  112. Добрый день! Есть пара вопросов:
    1: Какую, приблизительно, скорость передачи данных с одного логического входа в комп можно выжать на данном девайсе? Например мне требуется передать мегабит данных.
    2: Есть ли возможность в данном микроконтроллере добавить еще один логический вход, в замен чего либо? В случае, если придется раскидать битовую последовательность по 8и логическим входам с помощью 8-битного регистра сдвига.

    1. Здравствуйте!
      1. В данном случае нет смысла говорить о скорости, так как здесь достаточно минимальной. Максимальный размер пакета — 64 байт, обмениваться данными можно каждые 100мс (чтобы галюнов не было), получается, 640 б/с.
      2. Можно. К примеру, вместо аналогового входа.

      1. Поможет ли мне тогда использование виртуального COM порта? Меня бы устроила скорость передачи в комп 100Kbit/s ну или.. эх 10Kbit/s

        1. 99%, что не поможет. Напишите хотя бы для каких целей это нужно.

          1. Прозвонка платы 1000 контактов, каждый с каждым. Схему уже с эмулировал, она работает. Но: ей надо управлять и анализировать полученные данные уже в компе

          2. Для этого мегабитная скорость обмена не нужна. Тщательней изучите свою задачу.

  113. Перед мной стоит задача: нужно подключить 30 вибромоторчиков к ПК и управлять ими через USB. Я в этом деле полный ноль( Скажите, пожалуйста, как мене увеличить количество выходов и сколько моторчиков я смогу подключить к данному?

    1. Если опыта 0, то нужно, как минимум, его получить, а когда получите, то сами ответите на эти вопросы. Скажу так: можно подключить бесконечное количество моторчиков.

      1. Опыт пайки присутствует. С микроконтроллерами не дружу. Вашу схему я собрать в состоянии. Извините, что беспокою. А, если я соберу вашу схему, то в дальнейшем я смогу смогу увеличить количество моторчиков? Сколько штук моторчиков я смогу подключить, и хватит ли напряжения на вашей схеме, что бы подключить управлять моторчиками? (или её нужно дорабатывать?)

        1. Нужно ключи добавить, увеличить количество моторчиков тоже можно.

          1. А можно получить исходники, программу и схему для первого варианта, а то в статье есть только для заводской платы.

          2. Последний вопрос. Что за конденсатор C4 CAP100RP? Какая ёмкость?

  114. Собрали Ваше устройство все работает. Но хотелось бы форме видеть подключено устройство или нет.
    Делаю таким образом
    void __fastcall TForm_Main::Timer2Timer(TObject *Sender)
    {
    if ( !connect() ) {
    Label22->Caption = «0»;
    }
    else Label22->Caption = «1»;

    }

    Бывает срабатывает, но в основном показывает 1.
    Что можете посоветовать?

    1. Код верный. Смотрите где ещё накосячили.

      1. Пробовал и в Вашем проекте, но все ровно не работает понормальному

  115. Здравствуйте! Как переделать проект под mega32?

    1. Под STM проще usb часть вообще переделать, так как там обычно аппаратный usb

  116. Доброе время суток делаю диплом по этому проэкту прошу помочь кто собрал данный модуль за помощь готов вознаградить прошу не останьтесь в стороне связаться со мной можно в контакте Даниил Бахов Великий Новгород 1996 года рождения.

    1. Проще и дешевле было бы здесь задавать вопросы.

  117. Просто нужна разведеная плата и наименования и наминалы всех элементов.
    Я пробовал разводить плату но все время выходит на две стороны а на картинке на одну мне бы фаил с разведенной схемой если есть такая возможность

  118. Такой вопрос есть ли фаил с разведенной платой как на картинки? просто затруднения с разводкой!

  119. в файле статьи только схема с заводской !

  120. Всем доброго времени суток.

    Столкнулся с проблеммой повторяя Ваш проэект, исключения имею Windows 10-64, Rad Studio 10.2.
    Вижу количество устройств HID, но не могу увидеть свое.
    Проверил функцию GetConnectedDeviceName и Connect. Не возвращает ничего. Вместо пути на утсройства и значений Product и Vendor.

    Если кто имеет уже опыт поделитесь плиз.
    Как решить эту проблему.
    Реально уже неделю потратил впустую и не могу понять причину.

Оставьте комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *