Jump to content

    

the_last_dreamer

Участник
  • Content Count

    22
  • Joined

  • Last visited

Community Reputation

0 Обычный

About the_last_dreamer

  • Rank
    Участник

Контакты

  • ICQ
    Array

Информация

  • Город
    Array
  1. Проблема решилась путем замены SetupDiGetClassDevs на SetupDiGetClassDevsA
  2. Пишу программу для обмена данными с hid устройствами. #include <Windows.h> #include <stdio.h> #include <iostream> #include <conio.h> using namespace std; #define DIGCF_PRESENT 0x00000002 //-------Hid.dll functions prototypes------- //HidD_Hello is a pointer that points at the function which accepts two parameters (PCHAR and ULONG) //and returns result of ULONG type typedef ULONG (WINAPI *PHidD_Hello)(PCHAR, ULONG); typedef void (WINAPI *PHidD_GetHidGuid)(LPGUID); PHidD_Hello HidD_Hello; PHidD_GetHidGuid HidD_GetHidGuid; //-------SetupApi.dll functions prototypes-------- typedef PVOID HDEVINFO; typedef HDEVINFO (WINAPI *PSetupDiGetClassDevs)(const GUID*, PCTSTR, HWND, DWORD); PSetupDiGetClassDevs SetupDiGetClassDevs; void main(int argc, char *argv[]) { //Load hid.dll HMODULE HidDllDescriptor=LoadLibrary((LPCTSTR)"hid.dll"); if (HidDllDescriptor==NULL) { cout << "Error #" << GetLastError() << ". Can't load hid.dll." << endl; } else { cout << "hid.dll have been loaded successfully" << endl; char HidDllAdress[50]; if (GetModuleFileName(HidDllDescriptor,(LPSTR)HidDllAdress,50)==0) { cout << "Can't get full path to hid.dll. Error # " << GetLastError() << endl; } else { cout << "hid.dll adress is " << HidDllAdress <<endl; //Get entry points of HID.dll functions HidD_Hello=(PHidD_Hello)GetProcAddress((HMODULE)HidDllDescriptor, "HidD_Hello"); HidD_GetHidGuid=(PHidD_GetHidGuid)GetProcAddress((HMODULE)HidDllDescriptor, "HidD_GetHidGuid"); } } //Load setupapi.dll HMODULE SetupApiDllDescriptor=LoadLibrary((LPCSTR)"setupapi.dll"); if (SetupApiDllDescriptor==NULL) { cout << "Can't load setupapi.dll. Error # " << GetLastError() << endl; } else { cout << "setupapi.dll have been loaded successfully" << endl; char SetupApiDllAdress[50]; if (GetModuleFileName(SetupApiDllDescriptor,(LPSTR)SetupApiDllAdress,50)==0) { cout << "Can't get full path to setupapi.dll. Error # " << GetLastError << endl; } else { cout << "Setupapi.dll adress is " << SetupApiDllAdress << endl; //Get entry points of setupapi.dll functions SetupDiGetClassDevs=(PSetupDiGetClassDevs)GetProcAddress((HMODULE)SetupApiDllDes criptor,"SetupDiGetClassDevs"); } } GUID HidGuid; HidD_GetHidGuid(&HidGuid); typedef struct _HIDD_ATTRIBUTES { ULONG Size; // = sizeof (struct _HIDD_ATTRIBUTES) USHORT VendorID; USHORT ProductID; USHORT VersionNumber; } HIDD_ATTRIBUTES, *PHIDD_ATTRIBUTES; HDEVINFO hHidInfo; hHidInfo=SetupDiGetClassDevs(&HidGuid,NULL,NULL,DIGCF_PRESENT); //Здесь появляется ошибка! if (hHidInfo==INVALID_HANDLE_VALUE) { cout << "Can't build a list of HIDs. Error " << GetLastError << endl; } else { cout << "List of HIDs have been built" << endl; } //Unload hid and setupapi libraries FreeLibrary(HidDllDescriptor); FreeLibrary(SetupApiDllDescriptor); cin.get(); }; Компилируется без ошибок и предупреждений, но при запуске выдает ошибку: Необработанное исключение в "0x00000000" в "hid1.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000000". Погуглив, я узнал, что это связано с разыменованием пустого указателя PVOID, каким по-сути является hHidInfo. Замена куска кода HDEVINFO hHidInfo; hHidInfo=SetupDiGetClassDevs(&HidGuid,NULL,NULL,DIGCF_PRESENT); на DWORD *hHidInfo; hHidInfo=(DWORD *)SetupDiGetClassDevs(&HidGuid,NULL,NULL,DIGCF_PRESENT); не помогла решить проблему. Как и в случае замены HDEVINFO на char *, word *, void *. Помогите, пожалуйста, разобраться с этой ошибкой.
  3. Завалялся электродвигатель без каких-либо опознавательных надписей, кажется, еще советский. Щеток нет. У статора 4 обмотки. Наружу выходят 2 провода. Подскажите, пожалуйста, что это за электродвигатель? И подскажите за одно, как его включать. Мне кажется, что асинхронный... Спасибо. P.S. Еще есть его фотографии. Но они не хотят загружаются :( Если получится, то выложу
  4. Для того чтобы микроконтроллер самостоятельно определял "фазу" и "ноль" решил добавить еще одну схему для определения момента перехода через "0" сетевого напряжения. Предполагается, что сигналы будут поступать на два входа INT0 и INT1 микроконтроллера. На том входе, который подключен к фазе, сигнал будет периодически изменяться с лог. 1 на лог. 0. На другом же входе, подключенном к "нулю", уровень напряжения будет постоянно оставаться равным "0". Такое дополнение позволит избежать поиска фазы. Будет ли такое решение верным, в том смысле будет ли работать схема так как предполагается? Спасибо.
  5. Спаял заново всю схему с использованием предложенной rezident'ом схемы защиты ножки микроконтроллера http://electronix.ru/forum/index.php?act=A...st&id=48569 Переписал код прошивки. Получился он, кстати, раза в 3 меньше, чем первая версия. Да уж все гениальное - просто :) В общем, спаял я все это дело, прошил и включил. И... лампочка загорелась :08: Дабы не спалить стабилизатор напряжения и симистор, т.к. на них радиаторы не цеплял (хотя тепла на них по моим прикидкам должно выделяться не много 2 и 1 Вт соответственно), решил я включить схемку на пару секунд. После второго включения на пару секунд она еще работала, а на третий раз уже нет :crying: На этот раз ничего, на первый взгляд, не сгорело B) Да и вся схема была холодная. Нашел информацию о проверке тестером электронных компонентов. Мультиметром пытаюсь обнаружить неисправность. Все резисторы, кажется, в порядке. Подозрение вызывает стабилитрон в схеме защиты входа МК. Его сопротивление в прямом направлении около 10кОм, в обратном около 16кОм. Как вы думаете, может ли схема не функционаровать должным образом из-за неисправности стабилитрона? Если я правильно понимаю, то, в принцепе, схема должна работать если стабилитрон вообще удалить. Все наладилось - вилку не той стороной в разетку вставил
  6. Сейчас я не вспомню точные технические характеристики. Производительность около 2 м3/ч, мощность около 400Вт, питается переменным током 220В. Симистор который использован в схеме, согласно спецификации, пропускает ток до 8А. Думаю, такого симистора достаточно.
  7. Скорее даже не электродвигатель, а погружной насос.
  8. Теперь понимаю :) Если Вам не трудно подскажите какой мощности должен быть резистор R1 на этой схеме? http://electronix.ru/forum/index.php?act=A...st&id=48569 По моим подсчетам получается что мощность R1 равна 220^2/1000=48,2 Вт. Не многовато ли?
  9. Можно еще уточнить по поводу этой схемы? http://electronix.ru/forum/index.php?act=a...st&id=20626 Если верить протеусу, то напряжение подаваемое на вход МК будет периодически изменяться от -0,5 до 5,5В. С чем это связано? Разве оно не должно изменяться в диапазоне 0-5В? И еще вопрос по поводу резистора R2 сопротивлением 10кОм. Какова его функция? Только ограничение тока, проходящего через микроконтроллер?
  10. А можете немного по-подробнее рассказать? Это пробная схема. В дальнейшем хочу подключить вместо лампочки электродвигатель.
  11. Можно ли использовать оптосиммистор с датчиком перехода через 0 (например, MOC3041), чтобы "не изобретать велосипед"? Если в цепь включить такой оптосимистор, то симистор будет открываться всякий раз, когда сетевое напряжение переходит через 0 и при условии, что на оптосимистор будет подано напряжение с ножки микроконтроллера? И еще один вопрос. Какова должна быть мощность резистора в снабберной цепи?
  12. Всем спасибо за помощь! Буду исправлять схему. Еще вернусь :)
  13. А на выходе диодного моста получется же напряжение величина которого описывается функцией U=|sin(wt)|? Оно же изменяется во времени, следовательно действующее напряжение не будет величиной постоянной. А вольтметр показывает постоянную величину. Или может быть у меня вольтметр особенный... На входе АЦП напряжение периодически возрастает, достигая максимального значения 5В, затем убывает, достигая 0. МК фиксирует тот момент, когда напряжение уменьшалось, а затем начало возрастать. Хотя, может быть, я не понимаю назначение диодного моста... Спасибо, Александр