реклама на сайте
подробности

 
 
8 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> FT245R работает со сбоями
galjoen
сообщение Feb 8 2009, 11:20
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Попробуйте проверить, а не переходит-ли FT в суспенд? Там есть специальная нога, которая сообщает об этом. На ней уровень появляется, какой не помню. Если так, то програмными способами вы ничего не добьётесь. Дело в железе+кабель. Сингфазная помеха прёт.
Go to the top of the page
 
+Quote Post
koluna
сообщение Feb 8 2009, 15:14
Сообщение #17


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата(Седой @ Feb 8 2009, 13:40) *
На первый взгляд все нормально.
Давайте попробуем отловить ошибку, для этого переделайте немного
вызов генераторов исключений
Вместо XXX_ComPort_Error.Create("Сообщение об ошибке")

Вызывать
XXX_ComPort_Error.CreateFmt("Сообщение об ошибке %x",[GetLastError])

И сообщите значение GetLastError.


Хорошо, переделаю smile.gif

Цитата(galjoen @ Feb 8 2009, 14:20) *
Попробуйте проверить, а не переходит-ли FT в суспенд? Там есть специальная нога, которая сообщает об этом. На ней уровень появляется, какой не помню. Если так, то програмными способами вы ничего не добьётесь. Дело в железе+кабель. Сингфазная помеха прёт.


Уже говорили, что FT именно засыпает (у кого-то). Что у меня - проверим и сообщим! smile.gif
Нога - PWREN#.
А что конкретно может быть в железе и кабеле?
Кабель недлинный, экранированный. Только вот не знаю - витой или нет внутри...
А почему эта синфазная помеха переводит FT в сон?


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
Седой
сообщение Feb 9 2009, 08:43
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата(n_bogoyavlensky @ Feb 8 2009, 20:14) *
Хорошо, переделаю smile.gif


Забыл вам сказать, что функцию GetLastError нужно вызывать в контексте того потока, значение ошибки которого
вы хотите получить.
Go to the top of the page
 
+Quote Post
koluna
сообщение Feb 9 2009, 11:15
Сообщение #19


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата(galjoen @ Feb 8 2009, 14:20) *
Попробуйте проверить, а не переходит-ли FT в суспенд? Там есть специальная нога, которая сообщает об этом. На ней уровень появляется, какой не помню. Если так, то програмными способами вы ничего не добьётесь. Дело в железе+кабель. Сингфазная помеха прёт.


Проверил.
Состояние выводов следующее.

RXF#, TXE#, RD# - 1.
WR - 0.

PWREN# - 1, что говорит о том, что мы спим smile.gif

Цитата(Седой @ Feb 9 2009, 11:43) *
Забыл вам сказать, что функцию GetLastError нужно вызывать в контексте того потока, значение ошибки которого
вы хотите получить.


Уже прочитал smile.gif
Вызывается из модуля COMPort. Из потока USBThread - там все операции с портом.

Ферриты купить не смог. Купил только конденсаторы (потом перепаяю).

У меня какая-то странная ситуация сейчас... несмотря на обработку исключений приложение виснет при ошибке до передёргивания устройства...
Хотя если устройство выдернуть, то ошибка отрабатывается нормально (GetLastError возвращает 1F)... а при ошибке дело до GetLastError не доходит. Такое ощущение, что виснет где-то в WfiteFile...


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
Седой
сообщение Feb 10 2009, 06:08
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата(n_bogoyavlensky @ Feb 9 2009, 16:15) *
Проверил.
GetLastError не доходит. Такое ощущение, что виснет где-то в WfiteFile...


Скорее всего не виснет, а ждет завершения передачи, т.е. Port.WriteData(TX_Buf) не возвращается?

Да и установите timeouts для записи.

Сообщение отредактировал Седой - Feb 10 2009, 06:24
Go to the top of the page
 
+Quote Post
koluna
сообщение Feb 10 2009, 06:56
Сообщение #21


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата(Седой @ Feb 10 2009, 09:08) *
Скорее всего не виснет, а ждет завершения передачи, т.е. Port.WriteData(TX_Buf) не возвращается?

Да и установите timeouts для записи.


Я тоже об этом подумал. Но потом локализовал место "зависания" с помощью записи в лог-файл (через каждую интересующую строчку кода).
Понял, что "зависание" происходит в момент попытки закрытия порта (CloseHandle) после возникновения ошибки, появившейся при записи WriteFile.
Приложение крепко "подвисает". Но если отсоединить USB-устройство, то оживает!

Цитата(Alex11 @ Feb 8 2009, 00:26) *
Я очень давно использовал FT245. Действительно, в условиях помех связь отъезжает с примерно указанными выше симптомами. Программа при этом была на MS VC. Из рекомендаций - посадите оплетку кабеля на землю устройства толстым проводом. Будет существенно лучше. В моем случае, т.к. помех было очень много и мощных окончательно помог только watchdog, от которого срабатывал полевик, отключающий подтяжку D+ к 3.3В. Устройство отваливалось, после чего его можно было переоткрыть и восстановить работоспособность не выдергивая кабель руками.


Вчера повесил экран кабеля напрямую на общую цепь устройства.
За весь вечер - одна ошибка и то при коммутации/декоммутации приличной нагрузки! Налицо - улучшение! smile.gif
Сегодня продолжим тестирование.

После WriteFile при ошибке GetLastError возвращает 1F.

Сообщение отредактировал n_bogoyavlensky - Feb 10 2009, 06:58


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
vetal
сообщение Feb 10 2009, 07:36
Сообщение #22


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



Цитата
Налицо - улучшение!

Теперь расскажите нам как вы заземляетесь, делаете развязку цепей управления от исполнительных цепей коммутации и обеспечиваете отсутствие мощных импульсных токов на общем проводе управляющих(информационных) узлов smile.gif
Go to the top of the page
 
+Quote Post
koluna
сообщение Feb 10 2009, 08:18
Сообщение #23


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата
Теперь расскажите нам как вы заземляетесь,


ПК и устройство с USB не заземлены, к сожалению (не знаю как можно заземлить устройство просто в домашних условиях).
На экране потенциал около 100 В, что, конечно, плохо...
Как писал выше - сейчас экран USB-кабеля соединён напрямую с общей цепью устройства.
Ранее экран кабеля был соединён с общей цепью через последовательную RC-цепь (1 МОм и 0.1 мкФ).

Цитата
делаете развязку цепей управления от исполнительных цепей коммутации


Как я понял, в моём случае исполнительные цепи коммутации - мой канал DMX512 (RS-485)?
Стоят 2 оптрона 2630 (2 канала на передачу, 1 канал на приём). С одной стороны питание от USB. С другой стороны - DC-DC TMA0505S, который запитывается тоже от USB.
Не знаю, может на вход/выход DC-DC по электролиту повесить следует...

Цитата
и обеспечиваете отсутствие мощных импульсных токов на общем проводе управляющих(информационных) узлов smile.gif


Вот тут не совсем понимаю о чём идёт речь...
По питанию каждой из микросхем стоят блокировочные конденсаторы 0.1 мкФ.
Устройство у меня маленькое и простое, состоит из FT245R, ATmega88, HCPL2630 (2 шт.) и MAX485.
К RS-485 подключается одна нагрузка с помощью кабеля несколько метров.
Ферритовые бусинки купить, к сожалению, пока не удалось (для цепей питания и линий данных USB).

Кстати, надо проверить, будут ли "подвисания" с отключенным кабелем RS-485...

С большим удовольствием выслушаю подробную лекцию по борьбе с помехами, получу ссылки по теме smile.gif


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
koluna
сообщение Feb 10 2009, 09:34
Сообщение #24


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Вот что придумал. А что, если сделать следующим образом.

Мы знаем, что FT при возникновении сбоя "засыпает".
Следовательно, МК может анализировать состояние вывода PWREN# FT и при переходе его в состояние "1" сбрасывать FT, подавая "0" на вывод RESET# FT.

Это альтернатива программному вотчдогу, который обсуждался ранее (от ПК данных не получено определённое время -> наверняка произошёл сбой и FT "спит" -> надо её сбросить).


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
Седой
сообщение Feb 10 2009, 10:23
Сообщение #25


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата(n_bogoyavlensky @ Feb 10 2009, 11:56) *
После WriteFile при ошибке GetLastError возвращает 1F.


Эта ошибка ERROR_GEN_FAILURE - A device attached to the system is not functioning.

Вот теперь понятно, что чип коряво отрабатывает такую ситуацию.

Но передергивать устройство тоже не дело.
Попробуйте после такой ошибки вызвать CancelIO или CancelIOEx, а потом уже CloseHandle - проверим корявость драйвера.






Цитата(n_bogoyavlensky @ Feb 10 2009, 14:34) *
Мы знаем, что FT при возникновении сбоя "засыпает".


Он должен также вполне законно "заснуть" при получение команды Suspend от хоста.
Go to the top of the page
 
+Quote Post
_3m
сообщение Feb 10 2009, 12:05
Сообщение #26


Знающий
****

Группа: Участник
Сообщений: 745
Регистрация: 28-12-06
Пользователь №: 23 960



Цитата(Седой @ Feb 10 2009, 13:23) *
Эта ошибка ERROR_GEN_FAILURE - A device attached to the system is not functioning.

Вот теперь понятно, что чип коряво отрабатывает такую ситуацию.

А чип не при делах, ведь в usb шиной рулит хост - это в хосте неадекватно реализована отработка сбоев.

Цитата
Но передергивать устройство тоже не дело.

А других вариантов продолжить работу после сбоя просто нет.

Цитата
Попробуйте после такой ошибки вызвать CancelIO или CancelIOEx, а потом уже CloseHandle - проверим корявость драйвера.

В HID устройствах имеется один в один такая же проблема. Cancel IO порт не развешивает.

Вообще я просто угораю от работы усб, даже в настольных условиях.
Переходник на ft232bm идет обмен. На противоположном конце стола примерно в метре стоит паяльная станция 40-50Вт, включена в другую розетку. Двукратное включение-выключение станции штатным выключателем гарантированно завешивает усб. Причем зависшее приложение (modtab.exe) не убивается даже таск-менеджером пока не передернешь усб.
Я не заю можно ли спроектировать более глючное устройство.
Как это будет жить на объекте даже страшно представить.

Сообщение отредактировал _3m - Feb 10 2009, 12:06
Go to the top of the page
 
+Quote Post
Седой
сообщение Feb 10 2009, 12:52
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата(_3m @ Feb 10 2009, 17:05) *
А чип не при делах, ведь в usb шиной рулит хост - это в хосте неадекватно реализована отработка сбоев.


А других вариантов продолжить работу после сбоя просто нет.


Хост кстати ответил правильно - ошибкой транзакции и драйвер FTDI должен адекватно отреагировать на эту ситуацию,
мог бы сделать ResetPort или по крайней мере установить флаг, чтобы при вызове CloseHandle не входить в ступор.

PS.Нужно посмотреть по спецификации USB правила работы хоста и устройства в таких ситуациях.
Go to the top of the page
 
+Quote Post
koluna
сообщение Feb 10 2009, 13:59
Сообщение #28


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата
Эта ошибка ERROR_GEN_FAILURE - A device attached to the system is not functioning.


А откуда это?

Цитата
Он должен также вполне законно "заснуть" при получение команды Suspend от хоста.


А если это у меня не предусмотрено? wink.gif

Цитата
Переходник на ft232bm идет обмен. На противоположном конце стола примерно в метре стоит паяльная станция 40-50Вт, включена в другую розетку. Двукратное включение-выключение станции штатным выключателем гарантированно завешивает усб. Причем зависшее приложение (modtab.exe) не убивается даже таск-менеджером пока не передернешь усб.


Именно, аналогичная ситуация sad.gif

Кстати, вот ещё что.

Как я понял, сбои возникают только при подсоединённом кабеле DMX к устройству!
Несмотря на развязку!

Т. е., объясняю.
Имеем структуру ПК-конвертор (устройство)-управляемый светодиодный прожектор.
ПК и конвертор соединены USB. Конвертор и прожектор - RS-485 (DMX512).
Так вот, когда кабель от прожектора подсоединён к устройству при операциях с включением/выключением сетево

Кстати, вот ещё что.

Как я понял, сбои возникают только при подсоединённом кабеле DMX к устройству! Несмотря на развязку!

Т. е., объясняю.
Имеем структуру ПК <-> конвертор (устройство) <-> управляемый светодиодный прожектор.
ПК и конвертор соединены USB. Конвертор и прожектор - RS-485 (DMX512).
Так вот, когда кабель от прожектора подсоединён к конвертору, то при операциях с включением/выключением сетевой вилки прожектора (дёргаю её туда-сюда) иногда происходят сбои.
При отключенном кабеле такого не наблюдается.
Т. е., помеха идёт по кабелю в конвертор и как-то проходит через развязку или через DC-DC конвертор, попадая на USB.


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
Седой
сообщение Feb 10 2009, 14:08
Сообщение #29


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Цитата(n_bogoyavlensky @ Feb 10 2009, 18:59) *
А откуда это?

Что значит откуда?

Цитата(n_bogoyavlensky @ Feb 10 2009, 18:59) *
Как я понял, сбои возникают только при подсоединённом кабеле DMX к устройству!
Несмотря на развязку!
.....
Т. е., помеха идёт по кабелю в конвертор и как-то проходит через развязку или через DC-DC конвертор, попадая на USB.


А причем тут развязка.
Посмотрите http://caxapa.ru/lib/emc_immunity.html
Go to the top of the page
 
+Quote Post
Седой
сообщение Feb 10 2009, 17:08
Сообщение #30


Местный
***

Группа: Свой
Сообщений: 244
Регистрация: 21-02-05
Из: Урал
Пользователь №: 2 806



Сейчас просмотрел документацию на драйвера FTDI.
Можно же работать не через COM порт, а через D2XX интерфейс и попробовать воспользоваться функцией FT_ResetPort (FT_ResetDevice,FT_CyclePort) для выхода из ошибочного состояния.
Go to the top of the page
 
+Quote Post

8 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 16:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01514 секунд с 7
ELECTRONIX ©2004-2016