Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
3 / 3 / 0
Регистрация: 30.06.2010
Сообщений: 43

USB

27.09.2010, 21:43. Показов 3581. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как спаять и управлять самодельным устройством USB ?
Есть опыт и в программировании и в электрике.
Например простой светодиод, и программку к нему. Типо включить-выключить.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.09.2010, 21:43
Ответы с готовыми решениями:

Использование USB
Доброго времени суток!Требуется создать приложение, которое будет управлять серво-приводами, припаянными к USB.Планируется припаять 4...

USB устройство
Здравствуйте! Не знаю в ту ли ветку пишу. Дело такое: нужно сделать что-то типа массива светодиодов (желательно 5х6), подключаемого к USB...

Настройки модема (USB)
Есть модем HUAWEI c200. Я написал самую простую , программку которая бы читала входящие СМС. С модемом я связываюсь по COM порту...

22
Эксперт С++
 Аватар для Maxim Prishchepa
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
29.09.2010, 10:30
Студворк — интернет-сервис помощи студентам
если не разобрались - пишите в аську 3281Восемь2058, могу поискать свои старые наработки.

Добавлено через 40 минут
в общем в вкратце расскажу о своем когдатошнем творении:

Аппаратная часть работает на ATMEGA8 – 16PU (с диким переизбытком вычислительной мощности).
после чего, наша мега сдруживается с Prolific PL– 2303 которая и осуществляет преобразование COM -> USB. В комплекте с данной микросхемой идёт и драйвер, который уже в ОС создаёт виртуальный СОМ порт, с которым потом дружим своим приложением.

вот код моей dll с помощью которой я собственно и слушал нужный мне СОМ порт.
C#
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.ComponentModel;
using System.IO.Ports;
using SerialProtReader;
using System.Data;
using System.Threading;
namespace SerialProtReader{
    public class PortReader{
        private bool end = false;
        private BackgroundWorker bw;
        private int OldValue;
        private double timein;
        private int colports;
        private ArrayList TimesOpen = new ArrayList();
        private ArrayList TimesClose = new ArrayList();
        
        public PortReader(){
            this.OldValue = 0;
            this.timein = 0;
            this.colports = 8;
            for (int i = 0; i < colports; i++){
                TimesOpen.Add(DateTime.Now.TimeOfDay);
                TimesClose.Add(DateTime.Now.TimeOfDay);
            }
        }
 
        public void OnStart(string[] args)
        {
            bw = new BackgroundWorker();
            SerialPort sp = new SerialPort();
            sp.PortName = string.Format("COM{0}", 3);
            sp.BaudRate = 9600;
            sp.DataBits = 8;
            sp.StopBits = StopBits.One;
            foreach (string param in args){
                try{
                    switch (String.Format("{0}{1}{2}", param.ToLower()[0],  
                             param.ToLower()[1], param.ToLower()[2]))
                    {
                        case "/p:":
                            sp.PortName = 
                                    string.Format("COM{0}", param.Remove(0, 3));
                            break;
                        case "/b:":
                            sp.BaudRate = int.Parse(param.Remove(0, 3));
                            break;
                        case "/d:":
                            sp.DataBits = int.Parse(param.Remove(0, 3));
                            break;
                        case "/s:":
                            switch (param.Remove(0, 3))
                            {
                                case "0":
                                    sp.StopBits = StopBits.None;
                                    break;
                                case "1":
                                    sp.StopBits = StopBits.One;
                                    break;
                                case "1.5":
                                    sp.StopBits = StopBits.OnePointFive;
                                    break;
                                case "2":
                                    sp.StopBits = StopBits.Two;
                                    break;
                                default:
                                    break;
                            }
                            break;
                        case "/t:":
                            timein = double.Parse(param.Remove(0, 3));
                            break;
                        case "/c:":
                            colports = int.Parse(param.Remove(0, 3));
                            break;
                        default:
                            break;
                    }
                }
catch (Exception){
string message = string.Empty;
message += "Вы можите использовать следующие ключи:\n";
message += "/p:N где N – номер COM порта, к которому подключино устройство;\n";
message += "/b:N где N – BaudRate, устройства;\n";
message += "/d:N где N – DataBits, устройства;\n";
message += "/s:N где N – StopBits, устройства;\n";
message += "/t:N где N – время срабатывания устройства в секундах;\n";
message += "/c:N где N – количество портов на устройстве;\n";
message += "Параметры могут передаваться через пробел.;\n";
      message += "Пример: /p:4 /b:9600 /d:8 /s:1 /t:60 /c:8;\n";
      message += "После ввода таких параметров, программа будет настроена на:\n";
message += "Чтение из COM4, BaudRate:9600, DataBits:8, StopBits:1,\n";
      message += "время срабатывания = 1 минуте, на устройстве 8 портов.";
      throw new NotImplementedException(message);
  }
}
            
  bw.WorkerReportsProgress = true;
  bw.DoWork += new DoWorkEventHandler(bw_DoWork);
  bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
  try{
bw.RunWorkerAsync(sp);
  }
  catch (Exception ex) {
     throw new NotImplementedException(ex.Message);
  }
}
 
        public void OnStop()
        {
            end = true;
            bw.Dispose();
        }
 
private ArrayList IntToAL(int input_val){
 ArrayList al = new ArrayList();
 Queue q = new Queue();
 do{
   if (input_val % 2 == 0){
     q.Enqueue(0);
    }
    else{
     q.Enqueue(1);
    }
    input_val = Convert.ToInt32(input_val / 2);
  }
  while (input_val >= 1);
  int col = q.Count;
  int add = colports – col;
  for (int i = 0; i < col; i++){
    al.Add(q.Dequeue());
  }
  for (int i = 0; i < add; i++){
    al.Add(0);
  }
  return al;
}
 
private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e){
 int newvalue = e.ProgressPercentage;
 if (OldValue != newvalue){
   ArrayList BitOldValue = IntToAL(OldValue);
   ArrayList BitNewValue = IntToAL(newvalue);
   for (int i = 0; i < BitOldValue.Count; i++){
     if (BitNewValue[i].ToString() != BitOldValue[i].ToString()){
       if ((int)(BitNewValue[i]) == 0){
         TimesClose[i] = DateTime.Now.TimeOfDay;
         TimeSpan rt = (TimeSpan)TimesClose[i](TimeSpan)TimesOpen[i];
           if (rt.TotalSeconds > timein){
            MySQLDataSet.portDataTable ports = new MySQLDataSet.portDataTable();
            MySQLDataSetTableAdapters.portTableAdapter portsTA = new MySQLDataSetTableAdapters.portTableAdapter();
            portsTA.ClearBeforeFill = true;
            portsTA.FilIDByPort(ports, UInt32.Parse(Math.Pow(2, i).ToString()));
            MySQLDataSet.worktableDataTable WorkTable = new MySQLDataSet.worktableDataTable();
            MySQLDataSetTableAdapters.worktableTableAdapter WorkTableTA = new MySQLDataSetTableAdapters.worktableTableAdapter();
            DataRow dr = WorkTable.NewRow();
            DateTime open = DateTime.Today.Add((TimeSpan)TimesOpen[i]);
            DateTime close = DateTime.Today.Add((TimeSpan)TimesClose[i]);
                                dr[WorkTable.IDColumn] = 1;
                                dr[WorkTable.OpenDTColumn] = open.ToString();
                                dr[WorkTable.CloseDTColumn] = close.ToString();
                                dr[WorkTable.Port_IDColumn] = ports[0].ID;
                                WorkTable.Rows.Add(dr);
                                WorkTableTA.Update(WorkTable);
            }
        }
        else{
           TimesOpen[i] = DateTime.Now.TimeOfDay;
        }
    }
  }
  
 
OldValue = newvalue;
 }
}
 
 
 
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
  SerialPort sp = (SerialPort)e.Argument;
  sp.Open();
  e.Result = ReadData(sp);
  sp.Close();
  sp.Dispose();
}
 
 
private bool ReadData(SerialPort sp)
{
 try
  {
    while (!end)
    {
      int data = sp.ReadByte();
      bw.ReportProgress(data);
      sp.DiscardInBuffer();
      Thread.Sleep(1 * 5 * 1000);
    }
 }
 catch
 {
   return false;
 }
 return true;
  } 
 } 
}
ЗЫ: код на абсолютную правильность не претендует, я его писал давно и это было неправда (я ещё студентом был)

внешний вид аппаратной части такой вот приментивненький (это для отладки):
Миниатюры
USB  
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
29.09.2010, 10:56
Цитата Сообщение от XXXaker Посмотреть сообщение
Например простой светодиод, и программку к нему. Типо включить-выключить.
На шину ты его не повесишь. Там надо адресовать конкретное устройство, а значит управлять диодом должен будет собственный камень, а не комп. Контроллер же можно втыкать и в уэсбэ.

Добавлено через 5 минут

Не по теме:

Цитата Сообщение от PB Посмотреть сообщение
Тяжело впаять контроллер в DIP корпусе (растояние между ножками 2.5 мм)?
Ну и ну. Что же он тогда вообще паять умеет? Я не могу представить себе даже аналоговый девайс с минимальным расстоянием между ногами элементов больше одного миллиметра, а там два с половиной и он пишет, что для него это сложно.



Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от PB Посмотреть сообщение
Да и программирование контроллеров не сложнее программирования компа, конечно при условии что руки в порядке и есть моск!
Бред. Языки высокого уровня появились именно потому, что низкий сложнее.



Добавлено через 10 минут
Цитата Сообщение от PB Посмотреть сообщение
Для USB устройств, класса CDC и HID, не нужно самому разрабатывать драйверы, т. к. они есть в системе.
В системе есть готовые драйвера для любого девайса, который я захочу сделать на порт usb? Сам в это веришь?
0
PB
29.09.2010, 15:35

Не по теме:

Бред. Языки высокого уровня появились именно потому, что низкий сложнее
Открою вам маленький секрет - для контроллеров так-же существуют языки высокого уровня (Си, паскаль, бейсик и т. д.)

В системе есть готовые драйвера для любого девайса, который я захочу сделать на порт usb? Сам в это веришь?
Вы знаете какие усторойства относятся к классам HID и CDC?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.09.2010, 15:35

Реконнект USB модема
Стоит задача осуществить реконнект 3G модема по средствам языка С#, с целью изменения ip адреса. Думал сделать по средствам управления СОМ...

Работа с usb портом
Как записать/прочитать данные с USB-порта, как определить к какому из портов подключено устройство? Правильно ли я понимаю, что...

Подключение к реле по USB
Всем привет, подскажите как на C# можно взаимодействовать вот с этим двухканальным реле Для управления реле через компьютер требуется...

Запуск USB устройства
Приветствую! Например, подключено к ПК USB устройство... Оно не активно(com порт не занят). Как вызвать данное устройсво программно?

Обнаружение устройств usb
Нужно сделать так, чтобы при подключении любого устройства по usb выполнялся код. Пытался найти ответ в интернете, не получилось. Если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru