Вверх ↑
Этот топик читают: Гость
Ответов: 70
Рейтинг: 0
#1: 2016-01-15 23:28:17 ЛС | профиль | цитата
Приветствую. Я не программист но в конструкторе немного разбираюсь. Я электронщик, и мне нужен кусок программы который мог бы передавать по COM порту информацию с нужной мне частотой и в нужное время, как описано здесь http://we.easyelectronics.ru/electro-and-pc/ft232-kak-podruzhit-1-wire-s-kompom.html
Железо у меня есть и оно работает с данной программой что в примере, но у меня задача подключить несколько датчиков и нарисовать человеко-машинный интерфейс.
Короче нужен кусок программы в HIASM на который я бы подавал команды передать принять и.т.д. Естественно за вознаграждение, цену говорите сами.
------------ Дoбавленo в 22.52:
Или здесь http://we.easyelectronics.ru/electro-and-pc/esche-nemnogo-o-1-wire-uart.html
За подробностями задания обращайтесь, если конечно кого то заинтересовало.
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 8887
Рейтинг: 823
#2: 2016-01-16 12:17:13 ЛС | профиль | цитата
Konoplj2010, предложенная (по ссылке) схема подключения (см. рис) подходит для "без железного" варианта на LPT порт или для программного переходника USB--COM. Непосредственно к COM порту на компьютере так подключиться нельзя, там присутствуют напряжения +-15 вольт (<0 -- "0", >0 -- "1").
com_1.jpg
карма: 19

0
файлы: 1com_1.jpg [8.4KB] [1826]
Ответов: 16884
Рейтинг: 1239
#3: 2016-01-16 12:37:40 ЛС | профиль | цитата
Леонид писал(а):
Непосредственно к COM порту на компьютере так подключиться нельзя, там присутствуют напряжения +-15 вольт (<0 -- "0", >0 -- "1").

http://www.aggsoft.ru/rs232-pinout-cable/serial-port-interface.htm
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 9906
Рейтинг: 351
#4: 2016-01-16 13:24:30 ЛС | профиль | цитата
Подключиться "типа непосредственно" можно, пожалуй...

TXD - через резистор (несколько кОм), а параллельно 1W - пятивольтовый стабилитрон (анодом к земле, естественно). И больше ничего не надо, вроде бы.
Сигнал на RXD не очень правильный (гарантии по стандарту только после: >3v -- "0", <3v -- "1"), но практически -- TTL сигнал вполне себе нормально проходит.
карма: 9

0
Ответов: 70
Рейтинг: 0
#5: 2016-01-16 17:25:29 ЛС | профиль | цитата
Леонид писал(а):

Да я это понимаю у меня USB-UART симулятор на компе. То есть с одной стороны USB, а с другой TXD и RXD. На компе просто виртуальный COM порт №3 или другой.
По уровням то что Вы мне рассказали это я знаю и у меня всё предусмотрено и более того та программа которая приведена на ссылке у меня работает без проблем, но для моего случая этого не достаточно. В HIASM я немного разбираюсь но этого не достаточно, вот я и прошу помочь.
------------ Дoбавленo в 16.49:
Galkov писал(а):

Это уже всё сделано и работает нормально с той программой которая приведена в примере, но напоминаю что для меня этого маловато, мне ещё нужна визуализация.
карма: 0

0
Ответов: 8887
Рейтинг: 823
#6: 2016-01-16 17:43:47 ЛС | профиль | цитата
Konoplj2010, ну тогда и проблем нет Посылайте на порт символ "я" (код символа 255) и ловите ответ через время реакции вашей железки.code_36805.txt
карма: 19

0
файлы: 1code_36805.txt [1.6KB] [630]
Ответов: 70
Рейтинг: 0
#7: 2016-01-16 18:05:54 ЛС | профиль | цитата
Леонид писал(а):

Мне этот текст ничего не сказал. Позвольте я поясню всё по порядку. Устройства, датчики, имеют линию 1-Wire, у меня есть "железный" переходник с USB на 1-Wire, но для того что бы он работал мне нужен кусок программы, а именно вложенная схема, в количестве 3 шт.
1. Передаёт на указанный порт со скоростью 9600 кБ/с значение 0xFF и в случае если устройство ответило (оно должно выдать от 0х10 до 0х90) сообщить.
2. Должен передавать данные например 0хСС в линию таким образом что бы это понимал 1-Wire то есть на частоте 115200 последовательность
0хFF;0хFF;0х00;0х00;0хFF;0хFF;0х00;0х00; что соответствует 0b11001100. Если мне нужно отправить 0х55 то последовательность должна быть 0х00;0хFF;0х00;0хFF;0х00;0хFF;0х00;0хFF; что соответствует 0b01010101. и так любой другой код который мне нужен.
3. Должен принимать из линии на частоте 115200 последовательность 0х00 или 0хFF что соответствует 0 или 1. То есть если мне прилетело значение 0хFF;0хFF;0хFF;0хFF;0х00;0х00;0х00;0х00; то этот блок должен вернуть мне значение 0xF0 что соответствует 0b11110000 и я мог это считать.

Справимся?
карма: 0

0
Ответов: 8887
Рейтинг: 823
#8: 2016-01-16 21:38:47 ЛС | профиль | цитата
Konoplj2010 писал(а):
9600 кБ/с значение 0xFF
Другими словами, но тоже самое:
Леонид писал(а):
Посылайте на порт символ "я" (код символа 255)
Konoplj2010 писал(а):
оно должно выдать от 0х10 до 0х90
На какой скорости? И почему скорость то 9600, то 115200?
Konoplj2010 писал(а):
Мне этот текст ничего не сказал
Прямо над полем, где пишите ответ ссылка "Куда залить файл? Как скопировать и вставить схему?"
Konoplj2010 писал(а):
Справимся?

Полагаю что да Нашёл у себя ключик запасной от подъезда для опытов. Подойдёт такой?
ОдинПровод.jpg
карма: 19

0
файлы: 1ОдинПровод.jpg [37.8KB] [1500]
Гость
Ответов: 17029
Рейтинг: 0
#9: 2016-01-17 08:01:26 правка | ЛС | профиль | цитата


Редактировалось 7 раз(а), последний 2021-06-21 07:43:32
карма: 0

0
Ответов: 70
Рейтинг: 0
#10: 2016-01-17 08:05:28 ЛС | профиль | цитата
Леонид писал(а) писал(а):
Прямо над полем, где пишите ответ ссылка "Куда залить файл? Как скопировать и вставить схему?"

Так разобрался как перетянуть в HIASM 4. Но это не то, я и сам такое делал, только вот нужны разные операции в количестве 3 шт для выполнения задач описанных выше.
Леонид писал(а) писал(а):
На какой скорости? И почему скорость то 9600, то 115200?

Дивайс ответит сигналом присуцтвия на скорости 9600. Скорости разные так как сигнал присутствия длится примерно 1042 мсек. с момента отправки 0xFF (того же "я", того же 255), а данные работают длительностью 87 мсек.
Леонид писал(а) писал(а):
Полагаю что да Нашёл у себя ключик запасной от подъезда для опытов. Подойдёт такой?

Мне ключ не нужен, у меня примерно 30 шт. датчиков DS18B20, которые раскиданы по агрегату, работающих по этой же шине.

Так и ещё, давайте сразу договоримся о цене.
карма: 0

0
Ответов: 5227
Рейтинг: 586
#11: 2016-01-17 10:11:50 ЛС | профиль | цитата
Люди Konoplj2010, просто нужно код портировать из рабочей проги на Delphi. Konoplj2010, Пиши на мыло andrestudio72собакаyandex.ru (датчики есть, переходник есть) на неделе помогу.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 8887
Рейтинг: 823
#12: 2016-01-17 15:02:24 ЛС | профиль | цитата
Konoplj2010 писал(а):
и в случае если устройство ответило (оно должно выдать от 0х10 до 0х90) сообщить

А на какой скорости устройство отвечает: на 9600 или на 115200? (Для andrestudio тоже годится )
карма: 19

0
Ответов: 70
Рейтинг: 0
#13: 2016-01-17 18:59:26 ЛС | профиль | цитата
Леонид писал(а):

Отвечает... Когда даёт сигнал присутствия то отвечает кодом от 0х10 до 0х90 со скоростью 9600. А когда данные выдаёт то он отвечает 0xFF если говорит 1 и 0x00 если говорит 0 со скоростью 115200.
------------ Дoбавленo в 18.23:
Может быть вот этот код Вам каким то образом сможет помочь. Это передача сигнала RESET и приём сигнала присутствия:
#pas
function OneWire_reset: boolean;
begin
Result := false;
FT_Current_Baud := 9600;
FT_Current_DataBits := 8;
FT_Current_StopBits := FT_STOP_BITS_1;
FT_Current_Parity := FT_PARITY_NONE;
FT_Current_FlowControl := FT_FLOW_NONE;
Set_USB_Device_BaudRate;
Set_USB_Device_DataCharacteristics;
Set_USB_Device_FlowControl;

FT_Out_Buffer[0] := $F0;
Write_USB_Device_Buffer(1);

repeat
Get_USB_Device_QueueStatus;
until (FT_Q_Bytes > 0);

Read_USB_Device_Buffer(1);

if FT_In_Buffer[0] <> $F0 then Result := true;
end;
Это передача байта команды или данных:
#pas
procedure OneWire_send_byte(DataToTransfer: byte);
var
tmp_b: byte;
i: integer;
begin
FT_Current_Baud := 115200;
Set_USB_Device_BaudRate;

for I := 0 to 7 do
if (DataToTransfer and (1 shl I)) <> 0 then
FT_Out_Buffer[i] := $FF
else
FT_Out_Buffer[i] := $00;

Write_USB_Device_Buffer(8);

//RX у нас замкнут на TX, поэтому данные придут обратно,
//и если их не прочитать - будут валяться в буфере FT232.
repeat
Get_USB_Device_QueueStatus;
until (FT_Q_Bytes >= 8);

Read_USB_Device_Buffer(8);

end;
Это приём данных с датчика на мой FT232:
#pas
function OneWire_read_byte(): byte;
var
tmp_b: byte;
i: integer;
begin
Result := 0;
FT_Current_Baud := 115200;
Set_USB_Device_BaudRate;

for I := 0 to 7 do
FT_Out_Buffer[i] := $FF;

Write_USB_Device_Buffer(8);

repeat
Get_USB_Device_QueueStatus;
until (FT_Q_Bytes >= 8);

Read_USB_Device_Buffer(8);

for I := 0 to 7 do
if FT_In_Buffer[i]<>$FF then
Result := Result or (1 shl I);
Result := not result;
end;
Я понимаю алгоритм только вот в блоках не могу это выполнить.
карма: 0

0
Ответов: 8887
Рейтинг: 823
#14: 2016-01-17 19:31:17 ЛС | профиль | цитата
Konoplj2010, понятно. Дело в том, что HiAsm-овский COM не меняет скорость на ходу.
Ещё интересно ("..Вызывает интерес ваш технический прогресс..." ): после вывода FF (я) все датчики начинают отвечать и получается каша, по идее сначала надо послать на общую шину какой-либо номер датчика, запрос именно к определённому датчику?
карма: 19

0
Ответов: 70
Рейтинг: 0
#15: 2016-01-17 19:56:12 ЛС | профиль | цитата
Леонид писал(а):

Так оно и есть я посылаю сперва RESET, затем код поиска ROM (то есть ищу устройство серийный номер которого соответствует тому что я ему потом говорю) и сам серийный номер из 8-ми байт. Только то устройство у которого совпадает этот серийник ответит мне.
------------ Дoбавленo в 19.20:
А как тогда быть если HIASM на ходу не меняет скорость порта? А какое время нужно выдержать для того что бы скорость могла без болезненно изменится?
карма: 0

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