Перейти к содержанию

    

FT232RL и bit-bang при начальной загрузке

Здравствуйте.

Решил использовать bit-bang ножки FT232RL для управления реле и клапаном (на 24-вольта) с компьютера. Для этого подключил ножки CBUS0, CBUS1 FTDI к оптопарам TLP621-2, дальше всё стандартное. Оптопары включаются нулём. FT и оптопары питаются от USB.

Запрограммировал FT232RL:

Hardware Specific - IO Controls - (C0=I/O mode; C1=I/O mode; C2=TXDEN)

Hardware Specific - HighIO (High Current I/O's)=True

Далее через библиотеку попробовал - всё нормально управляется.

 

Но обнаружился неприятный эффект:

1. Если от платы отключить кабель USB и снова подсоединить, то при подключении кабеля реле и клапан срабатывают 3 раза, т.к. на bit-bang ножках проскакивают импульсы с активным низким уровнем (один длинный импульс порядка 80 миллисекунд и два коротких (по 30 мс каждый)).

2. При включении компьютера пока не загрузилась Windows реле и клапан срабатывают 8-10 раз, причём по крайней мере один раз ещё в BIOS, до загрузки драйверов Windows.

 

Может быть, кто-то сталкивался с подобным поведением, подскажите, как этого можно избежать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
... подключил ножки CBUS0, CBUS1 FTDI к оптопарам TLP621-2, дальше всё стандартное...

По умолчанию, выводы CBUS0 и CBUS1 предназначены для индикации приема и передачи. Зря вы их переназначили. Не стоило этого делать. Вообще, по моему, не стоило перепрограммировать FTDI. Для ваших целей вполне можно использовать выводы DTR# и RTS#, управляемые через виртуальный порт. Там таких проблем быть не должно.

Эффект, который вы наблюдаете, можно объяснить как индикацию подключения устройства, когда оно начинает работу, через индикаторы приема/передачи.

Возможно, свои переназначенные функции выводы CBUS0 и CBUS1 принимают не сразу после старта...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2Ark

RTS я уже попробовал помониторить. Там тоже наблюдается малообъяснимая (с моей точки зрения) активность вывода, правда, импульсы имеют другой характер (количество и длительность). DTR не пробовал, но что-то мне подсказывает, что будет как на RTS.

Насчёт "зря вы их назначили" я не понимаю - производители (FTDI) специально встроили в свои чипы возможность конфигурирования выводов, для этого в самом чипе стоит EEPROM, почему микросхема прямо при старте не устанавливает там положенное Z-состояние? Какая разница, каково назначение вывода по умолчанию, если в конфигурации (к которой у самой микросхемы прямой доступ) прописано "I/O mode"?

 

Кстати, проверил работу остальных bit-bang выводов: на CBUS2 то же, что на CBUS0 и CBUS1, а вот на CBUS3 - никакой посторонней активности как при подключении разъёма USB, так и при загрузке компьютера. Но одной линии мне мало...

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
...а вот на CBUS3 - никакой посторонней активности как при подключении разъёма USB, так и при загрузке компьютера. Но одной линии мне мало...

Тогда посмотрите, заодно, что там на TX происходит при старте... Может его можно будет использовать, через Break...

Изменено пользователем @Ark

Поделиться сообщением


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

 

А вы не подумали над тем, что винда видит устройство, как посл. порт со всеми вытекающими последствиями, а именно, детектирование вновь подключенных устройств к порту, попытка их идентификации по методу plug n play, подумайте?

ЗЫ. для подобных задач есть мс ft 2232 и ft245, там есть порты, которые так себя не ведут.

Поделиться сообщением


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

 

Я в шапке не всё описал для простоты: у меня ещё датчики по RS-485 опрашиваются, так что линии Rx/Tx используются по назначению.

Сейчас пробую одну линию перебросить на CBUS3, а у второй поменять полярность, чтобы активный уровень был высокий - есть подозрение, что "1" микросхема на выходах при включении не устанавливает.

 

А вы не подумали над тем, что винда видит устройство, как посл. порт со всеми вытекающими последствиями, а именно, детектирование вновь подключенных устройств к порту, попытка их идентификации по методу plug n play, подумайте?

 

Я писал уже выше, что переключение выводов наблюдается даже при инициализации BIOS, когда Windows ещё не начала грузиться. Ну, и если порассуждать отвлечённо, то даже во время того, как Windows пытается как-то работать с микросхемой, с чего бы ей устанавливать линии общего назначения (не имеющие отношения к последовательному порту), если у неё (микросхемы) внутри прописано, что это именно линии общего назначения.

 

ЗЫ. для подобных задач есть мс ft 2232 и ft245, там есть порты, которые так себя не ведут.

 

Что-то меня теперь относительно этого терзают смутные сомнения... Я бы на всякий случай перепроверил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2Ark

... а вот на CBUS3 - никакой посторонней активности как при подключении разъёма USB, так и при загрузке компьютера. Но одной линии мне мало...

В таком случае, используйте линию CBUS3, непосредственно, для питания ваших оптопар. Или для включения питания оптопар через транзистор.

Кстати, для этого она и предназначена по умолчанию. ;)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Я писал уже выше, что переключение выводов наблюдается даже при инициализации BIOS, когда Windows ещё не начала грузиться. Ну, и если порассуждать отвлечённо, то даже во время того, как Windows пытается как-то работать с микросхемой, с чего бы ей устанавливать линии общего назначения (не имеющие отношения к последовательному порту), если у неё (микросхемы) внутри прописано, что это именно линии общего назначения.

 

Возможно в самой мс есть режим самотеста и он как-раз и дергает этими пинами.

 

 

Что-то меня теперь относительно этого терзают смутные сомнения... Я бы на всякий случай перепроверил.

 

А что мешает сделать так, как положено, поставить в добавок какой-нить дохленький мк, на подобии тини2313 или вообще что-нить 8и-лапое за копейку и работать с байт-ориентированными командами по уарту? Тогда все будет гарантированно надежно...

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А что мешает сделать так, как положено, поставить в добавок какой-нить дохленький мк, на подобии тини2313 или вообще что-нить 8и-лапое за копейку и работать с байт-ориентированными командами по уарту? Тогда все будет гарантированно надежно...

Я в шапке не всё описал для простоты: у меня FT232 занимается опросом датчиков по RS-485, параллельно ещё встала задача управления реле и клапаном - вот я и решил не ставить дополнительный микроконтроллер, а использовал имеющиеся возможности. С микроконтроллером тоже проблемы: его нужно как-то программировать, плюс в маленьких не всегда бывает UART, плюс осциллятор к нему надо, если встроенный в температуре сильно плавает.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
С микроконтроллером тоже проблемы: его нужно как-то программировать, плюс в маленьких не всегда бывает UART

 

В принципе логично, просто прием нескольких байт по уарту и сравнение их с эталонными, при наличии даташита на контроллер делается за несколько часов, даже непрофессионалом. Да, в мелких уарта нет, делал программный, на скорости 9600 прекрасно работает без внешнего кварца на мк ATtiny45, но если реализация программного приемника вызывает сложности, можно поставить с аппаратным - ATtiny2313.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В таком случае, используйте линию CBUS3, непосредственно, для питания ваших оптопар. Или для включения питания оптопар через транзистор.

Кстати, для этого она и предназначена по умолчанию. ;)

Я думал об этом, но, боюсь, линия может не потянуть по току две оптопары (в описании на саму микросхему недостаточно информации по нагрузочной способности, но в документе по её программированию написано, что выводы, которые "high current io", должны "тянуть" до 12 мА). А транзистор ставить буду только в крайнем случае (если другие способы не заработают), т.к. плата уже изготовлена.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Я думал об этом, но, боюсь, линия может не потянуть по току две оптопары...

Что там за оптопары у Вас?

Например, для PC817A достаточно 1-2 мА. Тем более, вопрос о скорости переключения, как я понял, не актуален.

Питаются же от этих выводов индикаторные светодиоды, оптопара не сильно от них отличается.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Что там за оптопары у Вас?

Например, для PC817A достаточно 1-2 мА. Тем более, вопрос о скорости переключения, как я понял, не актуален.

Питаются же от этих выводов индикаторные светодиоды, оптопара не сильно от них отличается.

TLP621-2, 10 мА на каждый вход

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сегодня протестировал изменённую схему: одну линию перенёс на CBUS3, а оставшуюся включил инверсно (то есть теперь оптопара включается "1"). Описанные эффекты ушли. Теперь при подключении USB и при загрузке компьютера никаких лишних срабатываний исполнительных устройств.

Всем спасибо за участие.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация