Вверх ↑
Этот топик читают: Гость
Ответов: 139
Рейтинг: 4
#61: 2011-02-21 16:49:01 ЛС | профиль | цитата
Да так получится, но мне нужно изменить скорость не закрывая порт, иначе данные, вычисленные датчиком, сбрасываются из-за снятия напряжения с него.
карма: 0

0
Ответов: 1328
Рейтинг: 69
#62: 2011-02-21 19:58:08 ЛС | профиль | цитата
pav, что то не видел прог, которые скорость без закрытия порта меняют
карма: 2

0
Разработчик
Ответов: 26192
Рейтинг: 2135
#63: 2011-02-21 19:59:36 ЛС | профиль | цитата
А не вариант поставить емкость поболее на питание датчика, что бы перекрвывала по времени переинициализацию порта
карма: 22

0
Ответов: 139
Рейтинг: 4
#64: 2011-02-21 21:08:22 ЛС | профиль | цитата
Konst, есть такие программы, например, DS1820.exe.
nesco, это у меня последний вариант, хотелось бы оставить совместимость моей программы с адаптерами выложенными в интернете для DS18S20.
------------ Дoбавленo в 21.08:
Вот, проверил компонент ComAsync, он позволяет менять скорость порта не закрывая его,а почему не получается со штатным компонентом?

Make(delphi)
ver(4.04 build 185)
Add(MainForm,2953706,175,49)
{
Width=389
Height=203
Point(onClose)
link(onCreate,16173502:doOpen,[])
link(onClose,16173502:doClose,[])
}
Add(ComAsync,16173502,420,63)
{
ControlDTR=1
ControlRTS=1
Point(doBaudRate)
Point(CurrBaud)
}
Add(Button,7221323,175,91)
{
Left=25
Top=20
Caption="9600"
link(onClick,6738671:doData,[])
}
Add(Button,11835360,175,154)
{
Left=25
Top=50
Caption="115200"
link(onClick,14399095:doData,[])
}
Add(DoData,6738671,245,91)
{
Data=String(9600)
link(onEventData,13451017:doWork2,[])
}
Add(HubEx,13451017,301,91)
{
link(onEvent,16163867:doEvent1,[])
}
Add(DoData,14399095,245,154)
{
Data=String(115200)
link(onEventData,13451017:doWork3,[(305,160)])
}
Add(Label,7549251,427,133)
{
Left=125
Top=25
Width=135
link(Text,16624470:Var,[])
}
Add(Debug,16624470,427,112)
{
link(Data,16173502:CurrBaud,[])
}
Add(Hub,16163867,336,91)
{
link(onEvent1,16173502:doBaudRate,[])
link(onEvent2,10580539:doWork1,[(385,104)])
}
Add(Button,15101976,175,224)
{
Left=25
Top=90
link(onClick,10580539:doWork3,[(385,230)])
}
Add(HubEx,10580539,381,133)
{
link(onEvent,7549251:doText,[])
}


карма: 0

0
Ответов: 1328
Рейтинг: 69
#65: 2011-02-21 21:13:33 ЛС | профиль | цитата
Для генерации импульса сброса и приема ответа порт настраивается на скорость 9600 бод, длина символа 8 бит, и передается число F0h. Это приводит к формированию импульса сброса низкого уровня (с учетом инверсии адаптера) длительностью примерно 520 мкс (стартовый бит + 4 передаваемых бита). За ним следует импульс высокого уровня такой же длительности (4 передаваемых бита + стоповый бит), в течение которого ожидается ответ термометра. Если термометр не подключен, то порт примет число F0h без искажений. Но если термометр сформировал импульс ответа, то принятое число будет содержать большее количество единиц, чем четыре. Таким образом определяется наличие ответа.

Для генерации интервалов приема и передачи битов, порт настраивается на скорость 115200 бод. Стартовый бит начинает временной интервал, затем идут 8 единичных или нулевых битов, в зависимости от значения бита, который нужно передать. Заканчивается последовательность стоповым битом, который на некоторое время устанавливает на 1-проводной шине высокий уровень. Вид этой последовательности полностью соответствует требуемому виду временного интервала передачи бита, за исключением того, что обмен является более медленным, чем способна обеспечить 1-проводная шина: на один бит затрачивается примерно 87 мкс.

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

Для работы с COM-портом программа пользуется функциями API через специальную «оберточную» динамическую библиотеку comapi32.dll. Однако скорость обмена получается гораздо ниже расчетной из-за того, что переключение скорости COM-порта (вызов функции SetCommState с изменённым значением поля BaudRate структуры DCB) идёт удивительно долго (порядка 200 миллисекунд!). Это весьма неприятное свойство Windows API.


http://digit-el.com/files/open/ds18x20/ds18x20.html
карма: 2

0
Ответов: 139
Рейтинг: 4
#66: 2011-02-21 22:03:55 ЛС | профиль | цитата
Konst, я эту статью читал. И схему в HiAsm сделал - делает сброс, считывает идентифиатор датчика, считывает температуру, но только ту, которая записывается в промежуточное ОЗУ при подаче питания (AA 00). Из-за этого я две недели голову ломал почему не происходит преобразования температуры, только сегодня до меня дошло, что я порт перед сменой скорости закрываю, т.е. данные просто сбрасываются! Попробовал использовать компонент ComAsync и получил наконец-то показания датчика, но схему нужно доработать - глючит.
карма: 0

0
Ответов: 63
Рейтинг: 0
#67: 2011-04-18 15:58:23 ЛС | профиль | цитата
Ребята подскажите как можно отправить через Com порт вот такой код C0 03 01 04 61 C1 чтоб устройство его поняло. Это протокол
C0 Adr LData ID Data CRC C1
Где:
С0 – Начало пакета
Adr – Адрес блока управления.
LData – Длина поля Data вместе с ID
ID – идентификатор команды
CRC – Контрольная сумма
Примечание: Дополнительно о системе расчета CRC см. «Приложение №1»
C1 – Конец пакета

карма: 1

0
Ответов: 316
Рейтинг: 21
#68: 2011-04-24 16:33:53 ЛС | профиль | цитата
Вот так попробуй)))
code_23495.txt
------------ Дoбавленo в 16.33:
Хотя если левое значение отправляется первым может придется перекрутить связи местами
карма: 1

0
Ответов: 316
Рейтинг: 21
#69: 2011-05-05 17:53:17 ЛС | профиль | цитата
Что-то я не могу понять как вы работаете с ком портом? Отправляю (я) в строек своего приложения в терминальной программе вылазит (Ч) а я соответствует значению 255))) И как изволите работать с контроллером? как нормально передать пакет с ПК устройству? Может в какойто особенной кодировке. И как менять кодировку?
карма: 1

0
Разработчик
Ответов: 26192
Рейтинг: 2135
#70: 2011-05-05 18:31:40 ЛС | профиль | цитата
LastLeader писал(а):
Может в какойто особенной кодировке

Передается обычной ASCII строкой с полной кодировкой от 0 до 255 без обрезки служебных символов. Приемная сторона должны быть настроена на 8 бит, без четности, один стоповый бит, без аппаратной поддержки. Естественно, что если используется не виртуальный COM порт, то Baud должен совпадать
карма: 22

0
Ответов: 5446
Рейтинг: 323
#71: 2011-05-06 06:57:54 ЛС | профиль | цитата
LastLeader, пользуемся поиском. Разжёвано 100500 раз.
карма: 1

0
71
Сообщение
...
Прикрепленные файлы
(файлы не залиты)