датчики к com портам

Автор Sal, 17 июня 2008 г., 15:01:13

« назад - далее »

ЛУТ

По поводу смерти СОМ портов - как оказалось они живее всех живых  :D
Я когда писал программку  по передачи данных через СОМ порт  написал модуль сканирования всех СОМ портов в системе , и не мало был удивлён  ??? на материнке СОМ портов нет, в программа нашла аж целых три! Стал разбираться и выяснил что   3G модем подключённый к  USB на самом деле предаёт данные через виртуальные СОМ порты , то-есть получается что даже нынешние инженеры не стали связываться с замороченным протоколом передачи данных через USB а использовали  переходник USB - COM .
Если вы увидели в этом мире красоту значит вы поняли смысл всего.

Sagittarius

Цитата: ЛУТ от 15 июля 2015 г., 15:23:47
...и не мало был удивлён...
Я тоже очень удивлён:
- самим наличием этого некропоста;
- содержимым некропоста - человек, который собирает радоэлектронные устройства, довольно таки сложные.... оказывается(!)  настолько(!) не осведомлён в сфере выбранной им деятельности...

P.S.
Для справки другим "удивлённым" - http://www.nix.ru/autocatalog/controllers_stlab/STLab-I-294-RTL-PCI-Ex1-1xLPT25F-plus-2xCOM9M_113816.html , и заметьте - на довольно "современный" PCI-Ex1 порт на МП. А всё потому, что СОМ порт в чистом виде используется во многих устройствах, в т.ч. и в промышленных, например измерительных приборах, системах автоматики, медицинском оборудовании и пр. и пр.. Так что жить COMу и жить...
И не важно - эмулируется ли он или является "железным".

ЛУТ

3G модем современный девайс размером с флэшку , я никак не ожидал что он передаёт данные через виртуальный СОМ порт.
Sagittarius честно и  без лишних эмоций типа ( Я тоже очень удивлён:- самим наличием этого некропоста;) вы знали что USB 3G модем на самом деле передаёт данные через СОМ порт ? Я не знал и был этому удивлён.

А по поводу ( человек, который собирает радоэлектронные устройства, довольно таки сложные.... оказывается(!)  настолько(!) не осведомлён в сфере выбранной им деятельности..). так вы поспорьте со мной по поводу этих устройств , а то наблюдается проявление какой-то личной неприязни что-ли ... не знаю как ещё это назвать .
Вот закончу программку выложу вместе со схемой собранного мной счётчика на СБМ-20  , тогда и поспорим о технике в техническом разделе . 
И если будет какая-то критика или предложения как сделать лучше - буду только рад.


Если вы увидели в этом мире красоту значит вы поняли смысл всего.

FoxyLab

Там (в триджике) даже не один COM-порт, а три  :)
Если взять переходник USB-COM (точнее,  USB-TTL), то с помощью всего лишь одного резистора из него получается адаптер для шины 1-Wire. А уж для этой шины и термометры, и часы, и ...... вообще много всяких прилад.

Grey

Цитата: FoxyLab от 27 ноября 2015 г., 12:42:20
Если взять переходник USB-COM (точнее,  USB-TTL), то с помощью всего лишь одного резистора из него получается адаптер для шины 1-Wire.
А как это на компе программно реализовано?
Двое смотрят в лужу.
один видит лужу, а второй отражающиеся в ней звёзды.

ЛУТ

Цитата: Grey от 28 ноября 2015 г., 07:38:37
Цитата: FoxyLab от 27 ноября 2015 г., 12:42:20
Если взять переходник USB-COM (точнее,  USB-TTL), то с помощью всего лишь одного резистора из него получается адаптер для шины 1-Wire.
А как это на компе программно реализовано?

Вообще это задача что называется  "не для слабонервных " . 
Во первых -  надо осмыслить протокол передачи данных 1-Wire , а он очень уж мудрёный .

Вторая проблема - windows не является системой реального времени и не  способна точно выдерживать короткие промежутки времени , а это необходимо для программной реализации протокола 1-Wire.  Можно попробовать решить это при помощи сверх-точного  таймера   QueryPerformanceCounter   программы с этим таймером можно заставить работать на своём ПК , на других ПК гарантии нет .

В принципе есть примеры решения всех этих проблем - вот например.   Но зачем все эти танцы с бубном ? Гораздо проще через arduino  :)   там есть готовые библиотеки , и не надо грузить мозг мудрёным протоколом 1-Wire.
Я например только что закончил термометр на arduino с двумя датчиками ds18b20 , один датчик на улице а другой дома , хотя датчиков на одной линии может быть сколько угодно , протокол 1-Wire это позволяет :)
Программку для ПК сам накатал  , одну на C++Builder 6  другую на processinng (для пробы).
Если кого заинтересуют программки - выложу сами программы и исходники .


Если вы увидели в этом мире красоту значит вы поняли смысл всего.

FoxyLab

Цитата: Grey от 28 ноября 2015 г., 07:38:37
Цитата: FoxyLab от 27 ноября 2015 г., 12:42:20
Если взять переходник USB-COM (точнее,  USB-TTL), то с помощью всего лишь одного резистора из него получается адаптер для шины 1-Wire.
А как это на компе программно реализовано?
Вся суть (как уже верно заметили) в правильной выдержке таймингов. Но это можно сделать с помощью передачи байтов через COM-порт с определенной подобранной скоростью (больше информации по уже приведенной выше ссылке).

b612

#37
Если кому интересно, существуют программируемые микроконтроллеры с USB портом.
Их можно запрограммировать на то, чтобы они определялись компьютером как COM порт.
У этих микроконтроллеров есть оч богатый набор встроеной периферии. Начиная от TTL входов-выходов, аналогоцифровых преобразователей (АЦП), ШИМ-ов,
всяческих LLC,UART,SPI,CAN, и даже ethernet и радиомодули
И цены на них вполне демократичные.
Так, что проблем с передачей информации в комп или планшет практически нет.
Если кому интересно, пишите email удален.
В профиле укажите свой email. И разрешите пользователям отправлять вам сообщения.

Grey

Цитата: FoxyLab от 29 ноября 2015 г., 15:22:35
Вся суть (как уже верно заметили) в правильной выдержке таймингов. Но это можно сделать с помощью передачи байтов через COM-порт с определенной подобранной скоростью (больше информации по уже приведенной выше ссылке).
Ясно. Танцы с бубном.
Цитата: ЛУТ от 28 ноября 2015 г., 13:53:15Вообще это задача что называется  "не для слабонервных ".
Как и все протоколы реализуемые программно :)
Цитата: ЛУТ
Вторая проблема - windows не является системой реального времени и не  способна точно выдерживать короткие промежутки времени
А если вставить код на ассемблере? С отключением прерываний. Как то же драйвера работают.
Цитата: ЛУТМожно попробовать решить это при помощи сверх-точного  таймера   QueryPerformanceCounter   программы с этим таймером можно заставить работать на своём ПК , на других ПК гарантии нет.
Не переносится вместе с программой?
Цитата: b612 от 30 ноября 2015 г., 08:50:26
Если кому интересно, существуют программируемые микроконтроллеры с USB портом.
...
И цены на них вполне демократичные.
Цены на контроллеры с интерфейсами USB, CAN и т.д., в 2 и более раз дороже, чем без оных.
По остальным параметрам, там есть и плюсы и минусы.
Двое смотрят в лужу.
один видит лужу, а второй отражающиеся в ней звёзды.

ЛУТ

Цитата: Grey от 02 декабря 2015 г., 00:20:36
А если вставить код на ассемблере? С отключением прерываний. Как то же драйвера работают.
Устройства для которых важен точный тайминг (например СОМ порт или USB) работают на аппаратном уровне , ОС только считывает данные из приёмного буфера  , и загружает данные в буфер передачи , а сам протокол с точным выдерживанием тактовой частоты - осуществляется специализированным чипом .

Цитата: Grey от 02 декабря 2015 г., 00:20:36
Цитата: ЛУТМожно попробовать решить это при помощи сверх-точного  таймера   QueryPerformanceCounter   программы с этим таймером можно заставить работать на своём ПК , на других ПК гарантии нет.
Не переносится вместе с программой?

Там много проблем .
1) Этот таймер привязан к тактовой частоте процессора , на современных ПК эта частота меняется в зависимости от загрузки ЦП , и ответственно меняется тайминг ПО , надо отслеживать частоту ЦП и менять делитель , на это тоже уходит время и процесс выдержки тайминга сбивается . Единственное решение - в настройках биоса запретить менять тактовую частоту , и в результате ЦП будет фигачить всегда на полную.
2) На старых ПК может не быть этого таймера (он аппаратный) . На новых ПК тоже нет гарантии программного доступа к этому таймеру.
3) ОС в любой момент может решить что ваш процесс нужно приостановить для решения более важных проблем (например архивация, создание резервных копий и тд...) и ваш таймиг опять собьётся . Какое-то решение есть - выставить наивысший приоритет для вашего процесса , но ОС всё ровно может плюнуть на ваш приоритет , и задвинуть ваш процесс.
Если вы увидели в этом мире красоту значит вы поняли смысл всего.

b612

#40
Цитата: Grey от 02 декабря 2015 г., 00:20:36
Цитата: b612 от 30 ноября 2015 г., 08:50:26
Если кому интересно, существуют программируемые микроконтроллеры с USB портом.
...
И цены на них вполне демократичные.
Цены на контроллеры с интерфейсами USB, CAN и т.д., в 2 и более раз дороже, чем без оных.
По остальным параметрам, там есть и плюсы и минусы.
360 рублей со всеми наворотами, что с USB - что без. есть и за 170 и за 130р.
Это по любому не те деньги из за которых нужно возвращаться морально устаревшему и умирающему железу.
И как эти COMы подключать к букам или планшетам ? переходник ? так он столько же и стоит и самое главное МЕДЛЕННОЕ ОНО.
Если хочется от USB лампочки позажигать и не париться с MK то есть микрухи типа FT232
И ЛУТ прав. Нельзя реальный процесс с критичными таймингами передавать любимой кривой винде.
Надо буферизовать в памяти устройства.


b612

ой дубль
а где кнопка "удалить" ?

Виртуальный COM хорош только тем, что для него дрова в винде встроеные есть.
и с RS232 он имеет мало общего.
Разработчики USBшных устройств любят его видимо за то, что можно отлаживать своё железа и при этом не ждать пока программеры напишут специальный правильный драйвер.

ЛУТ

Чем вам Arduino не нравиться ? Китай рядом   :)
Куча готовых библиотек для датчиков .
Можно например сделать цифровой трёх осевой магнитометр (компас)  , и ловить НЛО по возмущению магнитного поля .
Связь вашего компаса с ПК или планшетом тоже не проблема - в сети куча примеров
Если вы увидели в этом мире красоту значит вы поняли смысл всего.

Grey

#43
Ладно, с ценами убедили.
Цитата: ЛУТ от 02 декабря 2015 г., 17:05:56
Чем вам Arduino не нравиться ?
Тем, что у них плата универсальная. Она хороша для обучения и отладки программ. А вот для сборки устройств не очень.
Размеры платы не всегда подходящие. Много лишних запчастей. Мощную нагрузку приходится подключать через дополнительные платы. Готовые модули не всегда имеют нужную функциональность, придется делать свои и долбаться с компилятором.
Но я могу на свои Atmega установить загрузчик от Arduino, и использовать их библиотеки :)
Двое смотрят в лужу.
один видит лужу, а второй отражающиеся в ней звёзды.

ЛУТ

#44
В большинстве случаев никакой разницы - виртуальный или аппаратный ...
Я вот через переходник USB -> COM   шью  PIC  без всяких проблем , хотя читал на форумах что так делать нельзя ,нужно только через COM порт на материнке .

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

Вот пример такого использования .
Наиболее интересно - LED матрица для вывода знаков , где-то тут была тема где обсуждалось как можно реализовать подобное . Я так понял что требуется  что-то вроде информационного панно  для НЛО.

Я попробовал реализовать это на C++Builder 6
Вот простейший пример управления выводами СОМ порта.

//--------------------------------------------------------------------------------------------------------------------------
HANDLE h;
OVERLAPPED o;
//-----------------------------------ОткрытьСОМ1----------------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
h  = CreateFile ("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL,OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
}
//------------------------------------------------------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    EscapeCommFunction(h, SETDTR); //установить DTR +12В ,вывод 4
}
//-----------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
EscapeCommFunction(h, CLRDTR); //установить DTR -12В , вывод 4
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)
{
EscapeCommFunction(h, SETRTS); //установить RTS +12В ,вывод 7
}
//-------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)
{
EscapeCommFunction(h, CLRRTS); //установить RTS -12В ,вывод 7
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)
{
SetCommBreak(h); //установить RxD +12В ,вывод 3
}
//----------------------------------------------------------------------------

void __fastcall TForm1::Button7Click(TObject *Sender)
{
ClearCommBreak(h);//установить RxD -12В ,вывод 3
}                       
//--------------------------------------------------------------------------
void __fastcall TForm1::Button8Click(TObject *Sender)
{   
CloseHandle (h) ; // закрытие порта
}
//----------------------------------------------------------------------------

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