Управление электрическими цепями через 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» — светодиод загорится.

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

Завершение.

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

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

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

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

  • 4eshirskiy

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

  • Kibermaster

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

  • 4eshirskiy

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

  • 4eshirskiy

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

  • snoopy_77

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

  • togo

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

  • grinya1404

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

  • podkasetnik

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

  • Kibermaster

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

  • Serg

    Здраствуйте! Хорошая информация очень нужная большое спасибо! Подскажите пожалуйста как выставить фьюзы в С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 где они я не нашол))))) в код висион.в диспечере устройств окончание идентефекатора другие числа наверное это нормально. Большое спасибо за ответ.

  • Serg

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

    • Kibermaster

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

  • Serg

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

  • Serg

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

  • Serg

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

  • Serg

    Здраствуйте. Подскажите пожалуйста по возможности как устранить ошибки в програме при компиляции(редактор 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 соответственно, насколько велики масштабы изменения кода?
    Спасибо.

  • CnapoB

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

  • PetrB09

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

    • Kibermaster

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

  • Xeon.13

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

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

  • ZOOX

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

  • ZOOX

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

    • Kibermaster

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

  • silovi4

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

  • silovi4

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

  • podkasetnik

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

  • dudawkin

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

  • mmax_er

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

  • mmax_er

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

  • Борис Кравченко

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

    • Kibermaster

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

      • Борис Кравченко

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

        • Kibermaster

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

          • Борис Кравченко

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

  • Asafei48

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

  • maximlyashko

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

  • Dan

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

    • Kibermaster

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

      • Dan

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

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

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

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

  • dudawkin

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

  • dudawkin

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

  • dudawkin

    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 соответственно. и всё

  • Skynet

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

  • stalker1424

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

  • stalker1424

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

  • stalker1424

    такая же фигня, что и была

  • stalker1424

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

  • Bac9H

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

  • AlexReveur

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

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

    • Kibermaster

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

      • AlexReveur

        здравствуйте.
        набор следующих моментов с которыми я столкнулся.
        сейчас сходил в электронику и купил элементы.
        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 вывода.)

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

        • Kibermaster

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

          • AlexReveur

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

            спасибо)

            • Kibermaster

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

  • maximlyashko

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

  • tsp54

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

    Спасибо.

    • Kibermaster

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

      • tsp54

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

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

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

        • tsp54

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

          • Kibermaster

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

            • tsp54

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

              • tsp54

                Кстати, где на http://forum.eldigi.ru/ было обсуждение вашего устройства?

                • Kibermaster

                  ээээ, а хз, я не видел)))

                  • tsp54

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

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

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

  • tsp54

    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 }

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

    Спасибо.

  • Strideman

    Спасибо за статью! Очень помогла, всё работает..
    Только не смог скомпилить код контроллера, нужно же и в своей проект (атмега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

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

    • Kibermaster

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

      • Strideman

        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).

        • Strideman

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

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

        • Kibermaster

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

  • Strideman

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

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

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

    • Kibermaster

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

      • Strideman

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

  • Strideman

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

  • AlexReveur

    Kibermaster, помогите!

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

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

  • AlexReveur

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

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

    • Kibermaster

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

      • AlexReveur

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

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

  • Kibermaster

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

  • arnold01

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

  • arnold01

    Спасибо огромное !

  • Strideman

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

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

  • arnold01

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

    С уважением arnold01

  • arnold01

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

    С уважением arnol01

  • arnold01

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

  • arnold01

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

  • arnold01

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

    • Kibermaster

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

  • arnold01

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

    Спасибо

  • arnold01

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

  • artem56

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

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

  • artem56

    я думаю что правильно все сделал, т.к. моя схема выдает правильно — 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
    };

  • artem56

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

    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;

  • artem56

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

    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;

  • artem56

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

  • 7134956

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

    • 7134956

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

  • nedcomm

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

  • nedcomm

    Шоговыми двигатилями

  • violator

    Как переделать прошивку под 12MHZ?

  • sergiy2303

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

  • sergiy2303

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

  • violator

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

  • violator

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

    • violator

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

  • infom11011

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

    • Kibermaster

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

      • infom11011

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

        • Kibermaster

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

          • infom11011

            Спасибо!!! Все работает. Промучился полдня через то что не внимательно прочел статью «чтобы запустить бутлоадер, нужно замкнуть Логический вход 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 . Спасибо еще раз за советы! Очень хороший сайт!

            • Kibermaster

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

              • infom11011

                Наверное что то с CKSEL было. Сбросил фьюзы программатором http://easyelectronics.ru/usb-programmator-avr-usbasp.html#comment-37107 подключив СЕБЯ к ножке 9 (XTAL1- Atmega8). Не когда не думал что сработает такой способ генерации частоты 🙂

              • infom11011

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

                • Kibermaster

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

                  • infom11011

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

                    • Kibermaster

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

  • HEKPUCT

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

  • sergiy2303

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

  • sergiy2303

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

  • sergiy2303

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

  • sergiy2303

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

  • kdv.mgn

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

  • Vlad

    Доброго вечера пожалуйста вот такая проблема винда не определяет устройство пишет что ** Устройство USB не опознано** Что делать как исправить подскажите пожалуйста
    http://rghost.ru/50511243/image.png
    фото устройства
    http://rghost.ru/50511443/image.png
    http://plasmon.rghost.ru/50511483/image.png

  • Vlad

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

  • Mikhail

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

  • bodyasmart

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

  • AlexPro

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

  • infom11011

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

  • Kenni

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

  • kko

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

  • AlexPro1

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

    • Kibermaster

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

  • Kenni

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

  • manro

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

    • Kibermaster

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

      • manro

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

  • manro

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

  • kko

    Изменила выходы для удобства разводки. В файле 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

  • Newron

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

  • M__A__U__S

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

    • M__A__U__S

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

      • alexkhomith

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

  • alexkhomith

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

    • alexkhomith

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

      • Kibermaster

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

        • alexkhomith

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

        • alexkhomith

          с передней стороны: 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 (он сброшен почему-то).

          • Kibermaster

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

            • alexkhomith

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

            • alexkhomith

              Собирал тактовый генератор на 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

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

              • Kibermaster

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

                • alexkhomith

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

                • alexkhomith

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

                • alexkhomith

                  могли бы вы воспроизвести мою плату и прошить также как я мк?
                  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 МОм — это нормально?

                • alexkhomith

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

                • alexkhomith

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

  • prostoroman

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

  • alexkhomith

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

  • M__A__U__S

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

  • prostoroman

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

  • M__A__U__S

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

  • M__A__U__S

    Прошивку main.hex не заливал вообще.

    • alexkhomith

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

  • prostoroman

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

  • M__A__U__S

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

  • M__A__U__S

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

    • alexkhomith

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

    • alexkhomith

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

  • M__A__U__S

    Для prostoroman: посмотри почту!

  • alexkhomith

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

  • M__A__U__S

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

  • tolia1997

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

  • tolia1997

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

  • tolia1997

    светодиод питания горит

  • poisc

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

  • tolia1997

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

  • tolia1997

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

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

  • podkasetnik

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

  • togo

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

  • hike

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

  • hike

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

  • MaxCh

    Добрый день.
    Подскажите как прикрутить 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

    • Kibermaster

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

      • MaxCh

        Если не сложно поясните:
        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#.

  • Antei

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

  • Mihail

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

  • Caktuz32

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

  • Drozd

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

    }

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

  • podkasetnik

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

  • Dmtbah

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

  • Dmtbah

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

  • Dmtbah

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

  • Dmtbah

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

Leave a Reply